From: marshmellow42 Date: Tue, 6 Jan 2015 14:20:36 +0000 (-0500) Subject: added data psk* cmds for pskdemod X-Git-Tag: v2.0.0-rc1~57^2~3^2~5 X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/5644791bdb264300ebfac1c2e51cfc7d231c4070 added data psk* cmds for pskdemod fixed a couple small bugs in other lf functions as well including detectaskclock, stopped changes from being made to graphbuffer. --- diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 894adef7..79d59bf9 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -729,7 +729,7 @@ void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol) uint8_t *dest = (uint8_t *)BigBuf; size_t size=0; //, found=0; - uint32_t bitLen=0; + int bitLen=0; int clk=0, invert=0, errCnt=0; uint64_t lo=0; // Configure to go in 125Khz listen mode diff --git a/client/cmddata.c b/client/cmddata.c index d8a0fcf6..4b5cb040 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -21,9 +21,55 @@ #include "cmdmain.h" #include "cmddata.h" #include "lfdemod.h" - +uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; +int DemodBufferLen; static int CmdHelp(const char *Cmd); +//set the demod buffer with given array of binary (one bit per byte) +//by marshmellow +void setDemodBuf(uint8_t *buff,int size) +{ + int i=0; + for (; i < size; ++i){ + DemodBuffer[i]=buff[i]; + } + DemodBufferLen=size; + return; +} + +//by marshmellow +void printDemodBuff() +{ + uint32_t i = 0; + int bitLen = DemodBufferLen; + if (bitLen<16) { + PrintAndLog("no bits found in demod buffer"); + return; + } + if (bitLen>512) bitLen=512; //max output to 512 bits if we have more - should be plenty + for (i = 0; i <= (bitLen-16); i+=16) { + PrintAndLog("%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i", + DemodBuffer[i], + DemodBuffer[i+1], + DemodBuffer[i+2], + DemodBuffer[i+3], + DemodBuffer[i+4], + DemodBuffer[i+5], + DemodBuffer[i+6], + DemodBuffer[i+7], + DemodBuffer[i+8], + DemodBuffer[i+9], + DemodBuffer[i+10], + DemodBuffer[i+11], + DemodBuffer[i+12], + DemodBuffer[i+13], + DemodBuffer[i+14], + DemodBuffer[i+15]); + } + return; +} + + int CmdAmp(const char *Cmd) { int i, rising, falling; @@ -185,10 +231,10 @@ void printEM410x(uint64_t id) int CmdEm410xDecode(const char *Cmd) { uint64_t id=0; - uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; - uint32_t i=0; - i=getFromGraphBuf(BitStream); - id = Em410xDecode(BitStream,i); + // uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; + // uint32_t i=0; + // i=getFromGraphBuf(BitStream); + id = Em410xDecode(DemodBuffer,DemodBufferLen); printEM410x(id); if (id>0) return 1; return 0; @@ -209,15 +255,15 @@ int Cmdaskmandemod(const char *Cmd) PrintAndLog("Invalid argument: %s", Cmd); return 0; } - uint32_t BitLen = getFromGraphBuf(BitStream); + + int BitLen = getFromGraphBuf(BitStream); // PrintAndLog("DEBUG: Bitlen from grphbuff: %d",BitLen); int errCnt=0; errCnt = askmandemod(BitStream, &BitLen,&clk,&invert); - if (errCnt<0){ //if fatal error (or -1) + if (errCnt<0||BitLen<16){ //if fatal error (or -1) // PrintAndLog("no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk); return 0; } - if (BitLen<16) return 0; PrintAndLog("\nUsing Clock: %d - Invert: %d - Bits Found: %d",clk,invert,BitLen); //output @@ -226,12 +272,12 @@ int Cmdaskmandemod(const char *Cmd) } PrintAndLog("ASK/Manchester decoded bitstream:"); // Now output the bitstream to the scrollback by line of 16 bits - printBitStream(BitStream,BitLen); + setDemodBuf(BitStream,BitLen); + printDemodBuff(); uint64_t lo =0; lo = Em410xDecode(BitStream,BitLen); if (lo>0){ //set GraphBuffer for clone or sim command - setGraphBuf(BitStream,BitLen); PrintAndLog("EM410x pattern found: "); printEM410x(lo); return 1; @@ -250,10 +296,10 @@ int Cmdmandecoderaw(const char *Cmd) int bitnum=0; uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; int high=0,low=0; - for (;ihigh) high=GraphBuffer[i]; - else if(GraphBuffer[i]high) high=DemodBuffer[i]; + else if(DemodBuffer[i]1 || low <0 ){ PrintAndLog("Error: please raw demod the wave first then mancheseter raw decode"); @@ -268,15 +314,9 @@ int Cmdmandecoderaw(const char *Cmd) PrintAndLog("Manchester Decoded - # errors:%d - data:",errCnt); printBitStream(BitStream,bitnum); if (errCnt==0){ - //put back in graphbuffer - ClearGraph(0); - for (i=0; i0) setDemodBuf(BitStream,bitnum); printEM410x(id); } return 1; @@ -301,10 +341,10 @@ int CmdBiphaseDecodeRaw(const char *Cmd) sscanf(Cmd, "%i", &offset); uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; //get graphbuffer & high and low - for (;ihigh)high=GraphBuffer[i]; - else if(GraphBuffer[i]high)high=DemodBuffer[i]; + else if(DemodBuffer[i]1 || low <0){ PrintAndLog("Error: please raw demod the wave first then decode"); @@ -329,7 +369,6 @@ int CmdBiphaseDecodeRaw(const char *Cmd) //prints binary found and saves in graphbuffer for further commands int Cmdaskrawdemod(const char *Cmd) { - uint32_t i; int invert=0; int clk=0; uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; @@ -341,21 +380,14 @@ int Cmdaskrawdemod(const char *Cmd) int BitLen = getFromGraphBuf(BitStream); int errCnt=0; errCnt = askrawdemod(BitStream, &BitLen,&clk,&invert); - if (errCnt==-1){ //throw away static - allow 1 and -1 (in case of threshold command first) + if (errCnt==-1||BitLen<16){ //throw away static - allow 1 and -1 (in case of threshold command first) PrintAndLog("no data found"); return 0; } - if (BitLen<16) return 0; PrintAndLog("Using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen); //PrintAndLog("Data start pos:%d, lastBit:%d, stop pos:%d, numBits:%d",iii,lastBit,i,bitnum); - //move BitStream back to GraphBuffer - - ClearGraph(0); - for (i=0; i < BitLen; ++i){ - GraphBuffer[i]=BitStream[i]; - } - GraphTraceLen=BitLen; - RepaintGraphWindow(); + //move BitStream back to DemodBuffer + setDemodBuf(BitStream,BitLen); //output if (errCnt>0){ @@ -538,18 +570,12 @@ int CmdFSKrawdemod(const char *Cmd) } else if(rfLen==0) rfLen=50; } PrintAndLog("Args invert: %d - Clock:%d - fchigh:%d - fclow: %d",invert,rfLen,fchigh, fclow); - uint32_t i=0; uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; uint32_t BitLen = getFromGraphBuf(BitStream); int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow); if (size>0){ PrintAndLog("FSK decoded bitstream:"); - ClearGraph(0); - for (i=0;i (8*32)+2) size = (8*32)+2; //only output a max of 8 blocks of 32 bits most tags will have full bit stream inside that sample size @@ -578,9 +604,9 @@ int CmdFSKdemodHID(const char *Cmd) } if (hi2==0 && hi==0 && lo==0) return 0; if (hi2 != 0){ //extra large HID tags - PrintAndLog("TAG ID: %x%08x%08x (%d)", + PrintAndLog("HID Prox TAG ID: %x%08x%08x (%d)", (unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF); - setGraphBuf(BitStream,BitLen); + setDemodBuf(BitStream,BitLen); return 1; } else { //standard HID tags <38 bits @@ -625,10 +651,10 @@ int CmdFSKdemodHID(const char *Cmd) fc = ((hi&0xF)<<12)|(lo>>20); } } - PrintAndLog("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d", + PrintAndLog("HID Prox TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d", (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF, (unsigned int) fmtLen, (unsigned int) fc, (unsigned int) cardnum); - setGraphBuf(BitStream,BitLen); + setDemodBuf(BitStream,BitLen); return 1; } return 0; @@ -682,9 +708,12 @@ int CmdFSKdemodIO(const char *Cmd) uint8_t version = bytebits_to_byte(BitStream+idx+27,8); //14,4 uint8_t facilitycode = bytebits_to_byte(BitStream+idx+18,8) ; uint16_t number = (bytebits_to_byte(BitStream+idx+36,8)<<8)|(bytebits_to_byte(BitStream+idx+45,8)); //36,9 - - PrintAndLog("XSF(%02d)%02x:%05d (%08x%08x)",version,facilitycode,number,code,code2); - setGraphBuf(BitStream,BitLen); + PrintAndLog("IO Prox XSF(%02d)%02x:%05d (%08x%08x)",version,facilitycode,number,code,code2); + int i; + for (i=0;i<64;++i) + DemodBuffer[i]=BitStream[idx++]; + + DemodBufferLen=64; return 1; } int CmdFSKdemod(const char *Cmd) //old CmdFSKdemod needs updating @@ -806,6 +835,160 @@ int CmdFSKdemod(const char *Cmd) //old CmdFSKdemod needs updating return 0; } +int CmdDetectNRZpskClockRate(const char *Cmd) +{ + GetNRZpskClock("",0,0); + return 0; +} + +int PSKnrzDemod(const char *Cmd){ + int invert=0; + int clk=0; + sscanf(Cmd, "%i %i", &clk, &invert); + if (invert != 0 && invert != 1) { + PrintAndLog("Invalid argument: %s", Cmd); + return -1; + } + uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; + int BitLen = getFromGraphBuf(BitStream); + int errCnt=0; + errCnt = pskNRZrawDemod(BitStream, &BitLen,&clk,&invert); + if (errCnt<0|| BitLen<16){ //throw away static - allow 1 and -1 (in case of threshold command first) + //PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt); + return -1; + } + PrintAndLog("Tried PSK/NRZ Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen); + + //prime demod buffer for output + setDemodBuf(BitStream,BitLen); + return errCnt; +} +// Indala 26 bit decode +// by marshmellow +// optional arguments - same as CmdpskNRZrawDemod (clock & invert) +int CmdIndalaDecode(const char *Cmd) +{ + + int ans=PSKnrzDemod(Cmd); + if (ans < 0){ + PrintAndLog("Error1: %d",ans); + return 0; + } + uint8_t invert=0; + ans = indala26decode(DemodBuffer, &DemodBufferLen, &invert); + if (ans < 1) { + PrintAndLog("Error2: %d",ans); + return -1; + } + char showbits[251]; + if(invert==1) PrintAndLog("Had to invert bits"); + //convert UID to HEX + uint32_t uid1, uid2, uid3, uid4, uid5, uid6, uid7; + int idx; + uid1=0; + uid2=0; + PrintAndLog("BitLen: %d",DemodBufferLen); + if (DemodBufferLen==64){ + for( idx=0; idx<64; idx++) { + uid1=(uid1<<1)|(uid2>>31); + if (DemodBuffer[idx] == 0) { + uid2=(uid2<<1)|0; + showbits[idx]='0'; + } else { + uid2=(uid2<<1)|1; + showbits[idx]='1'; + } + } + showbits[idx]='\0'; + PrintAndLog("Indala UID=%s (%x%08x)", showbits, uid1, uid2); + } + else { + uid3=0; + uid4=0; + uid5=0; + uid6=0; + uid7=0; + for( idx=0; idx>31); + uid2=(uid2<<1)|(uid3>>31); + uid3=(uid3<<1)|(uid4>>31); + uid4=(uid4<<1)|(uid5>>31); + uid5=(uid5<<1)|(uid6>>31); + uid6=(uid6<<1)|(uid7>>31); + if (DemodBuffer[idx] == 0) { + uid7=(uid7<<1)|0; + showbits[idx]='0'; + } + else { + uid7=(uid7<<1)|1; + showbits[idx]='1'; + } + } + showbits[idx]='\0'; + PrintAndLog("Indala UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7); + } + return 1; +} + +/* +//by marshmellow (attempt to get rid of high immediately after a low) +void pskCleanWave2(uint8_t *bitStream, int bitLen) +{ + int i; + int low=128; + int gap = 4; + // int loopMax = 2048; + int newLow=0; + + for (i=0; i0){ + PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt); + } + PrintAndLog("PSK or NRZ demoded bitstream:"); + // Now output the bitstream to the scrollback by line of 16 bits + printDemodBuff(); + + return 1; +} + + + int CmdGrid(const char *Cmd) { sscanf(Cmd, "%i %i", &PlotGridX, &PlotGridY); @@ -1216,8 +1399,9 @@ int CmdNorm(const char *Cmd) if (max != min) { for (i = 0; i < GraphTraceLen; ++i) { - GraphBuffer[i] = (GraphBuffer[i] - ((max + min) / 2)) * 1000 / - (max - min); + GraphBuffer[i] = (GraphBuffer[i] - ((max + min) / 2)) * 256 / + (max - min); + //marshmelow: adjusted *1000 to *256 to make +/- 128 so demod commands still work } } RepaintGraphWindow(); @@ -1348,7 +1532,7 @@ static command_t CommandTable[] = {"bitstream", CmdBitstream, 1, "[clock rate] -- Convert waveform into a bitstream"}, {"buffclear", CmdBuffClear, 1, "Clear sample buffer and graph window"}, {"dec", CmdDec, 1, "Decimate samples"}, - {"detectaskclock",CmdDetectClockRate, 1, "Detect ASK clock rate"}, + {"detectclock", CmdDetectClockRate, 1, "Detect ASK, PSK, or NRZ clock rate"}, {"fskdemod", CmdFSKdemod, 1, "Demodulate graph window as a HID FSK"}, {"fskhiddemod", CmdFSKdemodHID, 1, "Demodulate graph window as a HID FSK using raw"}, {"fskiodemod", CmdFSKdemodIO, 1, "Demodulate graph window as an IO Prox FSK using raw"}, @@ -1363,15 +1547,19 @@ static command_t CommandTable[] = {"mandemod", CmdManchesterDemod, 1, "[i] [clock rate] -- Manchester demodulate binary stream (option 'i' to invert output)"}, {"manrawdecode", Cmdmandecoderaw, 1, "Manchester decode binary stream already in graph buffer"}, {"manmod", CmdManchesterMod, 1, "[clock rate] -- Manchester modulate a binary stream"}, - {"norm", CmdNorm, 1, "Normalize max/min to +/-500"}, + {"norm", CmdNorm, 1, "Normalize max/min to +/-128"}, {"plot", CmdPlot, 1, "Show graph window (hit 'h' in window for keystroke help)"}, + {"pskclean", CmdPskClean, 1, "Attempt to clean psk wave"}, + {"pskdetectclock",CmdDetectNRZpskClockRate, 1, "Detect ASK, PSK, or NRZ clock rate"}, + {"pskindalademod",CmdIndalaDecode, 1, "[clock] [invert<0 or 1>] -- Attempt to demodulate psk indala tags and output ID binary & hex (args optional[clock will try Auto-detect])"}, + {"psknrzrawdemod",CmdpskNRZrawDemod, 1, "[clock] [invert<0 or 1>] -- Attempt to demodulate psk or nrz tags and output binary (args optional[clock will try Auto-detect])"}, {"samples", CmdSamples, 0, "[512 - 40000] -- Get raw samples for graph window"}, - {"tune", CmdTuneSamples, 0, "Get hw tune samples for graph window"}, {"save", CmdSave, 1, " -- Save trace (from graph window)"}, {"scale", CmdScale, 1, " -- Set cursor display scale"}, {"threshold", CmdThreshold, 1, " -- Maximize/minimize every value in the graph window depending on threshold"}, - {"zerocrossings", CmdZerocrossings, 1, "Count time between zero-crossings"}, {"dirthreshold", CmdDirectionalThreshold, 1, " -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."}, + {"tune", CmdTuneSamples, 0, "Get hw tune samples for graph window"}, + {"zerocrossings", CmdZerocrossings, 1, "Count time between zero-crossings"}, {NULL, NULL, 0, NULL} }; diff --git a/client/cmddata.h b/client/cmddata.h index 999e6438..8723b847 100644 --- a/client/cmddata.h +++ b/client/cmddata.h @@ -14,7 +14,7 @@ command_t * CmdDataCommands(); int CmdData(const char *Cmd); - +void printDemodBuff(); int CmdAmp(const char *Cmd); int Cmdaskdemod(const char *Cmd); int Cmdaskrawdemod(const char *Cmd); @@ -30,6 +30,8 @@ int CmdFSKdemod(const char *Cmd); int CmdFSKdemodHID(const char *Cmd); int CmdFSKdemodIO(const char *Cmd); int CmdFSKrawdemod(const char *Cmd); +int CmdDetectNRZpskClockRate(const char *Cmd); +int CmdpskNRZrawDemod(const char *Cmd); int CmdGrid(const char *Cmd); int CmdHexsamples(const char *Cmd); int CmdHide(const char *Cmd); @@ -49,5 +51,10 @@ int CmdScale(const char *Cmd); int CmdThreshold(const char *Cmd); int CmdDirectionalThreshold(const char *Cmd); int CmdZerocrossings(const char *Cmd); +int CmdIndalaDecode(const char *Cmd); + +#define MAX_DEMOD_BUF_LEN (1024*128) +extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; +extern int DemodBufferLen; #endif diff --git a/client/cmdlf.c b/client/cmdlf.c index d9b26e2a..42a29d0d 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -57,7 +57,7 @@ int CmdFlexdemod(const char *Cmd) } } -#define LONG_WAIT 100 + #define LONG_WAIT 100 int start; for (start = 0; start < GraphTraceLen - LONG_WAIT; start++) { int first = GraphBuffer[start]; @@ -558,18 +558,32 @@ int CmdLFfind(const char *Cmd) ans=CmdSamples("20000"); } if (GraphTraceLen<1000) return 0; + PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag"); PrintAndLog("Checking for known tags:"); + ans=Cmdaskmandemod(""); - if (ans>0) return 1; + if (ans>0) { + PrintAndLog("Valid EM410x ID Found!"); + return 1; + } ans=CmdFSKdemodHID(""); - if (ans>0) return 1; + if (ans>0) { + PrintAndLog("Valid HID Prox ID Found!"); + return 1; + } ans=CmdFSKdemodIO(""); - if (ans>0) return 1; + if (ans>0) { + PrintAndLog("Valid IO Prox ID Found!"); + return 1; + } //add psk and indala - ans=CmdIndalaDemod(""); - if (ans>0) return 1; - ans=CmdIndalaDemod("224"); - if (ans>0) return 1; + ans=CmdIndalaDecode(""); + if (ans>0) { + PrintAndLog("Valid Indala ID Found!"); + return 1; + } + // ans=CmdIndalaDemod("224"); + // if (ans>0) return 1; PrintAndLog("No Known Tags Found!\n"); return 0; } diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c index 83f49db7..f29da8e0 100644 --- a/client/cmdlfem4x.c +++ b/client/cmdlfem4x.c @@ -595,7 +595,7 @@ int CmdWriteWordPWD(const char *Cmd) static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, - {"em410xdemod", CmdEMdemodASK, 0, "[clock rate] -- Extract ID from EM410x tag"}, + {"em410xdemod", CmdEMdemodASK, 0, "[findone] -- Extract ID from EM410x tag (option 0 for continuous loop, 1 for only 1 tag)"}, {"em410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag"}, {"em410xsim", CmdEM410xSim, 0, " -- Simulate EM410x tag"}, {"em410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"}, diff --git a/client/graph.c b/client/graph.c index a0e85ffd..d63c4271 100644 --- a/client/graph.c +++ b/client/graph.c @@ -146,7 +146,7 @@ void setGraphBuf(uint8_t *buff,int size) int i=0; ClearGraph(0); for (; i < size; ++i){ - GraphBuffer[i]=buff[i]; + GraphBuffer[i]=buff[i]-128; } GraphTraceLen=size; RepaintGraphWindow(); @@ -187,3 +187,53 @@ int GetClock(const char *str, int peak, int verbose) return clock; } +int GetNRZpskClock(const char *str, int peak, int verbose) +{ + // return GetClock(str,peak,verbose); + int clock; + // int clock2; + sscanf(str, "%i", &clock); + if (!strcmp(str, "")) + clock = 0; + + /* Auto-detect clock */ + if (!clock) + { + uint8_t grph[MAX_GRAPH_TRACE_LEN]={0}; + int size = getFromGraphBuf(grph); + clock = DetectpskNRZClock(grph,size,0); + //clock2 = DetectClock2(peak); + /* Only print this message if we're not looping something */ + if (!verbose){ + PrintAndLog("Auto-detected clock rate: %d", clock); + //PrintAndLog("clock2: %d",clock2); + } + } + return clock; +} +// Get or auto-detect clock rate +/* +int GetNRZpskClock(const char *str, int peak, int verbose) +{ + int clock; +// int clock2; + sscanf(str, "%i", &clock); + if (!strcmp(str, "")) + clock = 0; + + // Auto-detect clock + if (!clock) + { + uint8_t grph[MAX_GRAPH_TRACE_LEN]={0}; + int size = getFromGraphBuf(grph); + clock = DetectASKClock(grph,size,0); + //clock2 = DetectClock2(peak); + // Only print this message if we're not looping something + if (!verbose){ + PrintAndLog("Auto-detected clock rate: %d", clock); + //PrintAndLog("clock2: %d",clock2); + } + } + return clock; +} +*/ \ No newline at end of file diff --git a/client/graph.h b/client/graph.h index 325582a6..c5c13798 100644 --- a/client/graph.h +++ b/client/graph.h @@ -17,6 +17,7 @@ int ClearGraph(int redraw); //int DetectClock(int peak); int getFromGraphBuf(uint8_t *buff); int GetClock(const char *str, int peak, int verbose); +int GetNRZpskClock(const char *str, int peak, int verbose); void setGraphBuf(uint8_t *buff,int size); #define MAX_GRAPH_TRACE_LEN (1024*128) diff --git a/common/lfdemod.c b/common/lfdemod.c index a03e7f02..ad4721f1 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -14,7 +14,7 @@ //by marshmellow //takes 1s and 0s and searches for EM410x format - output EM ID -uint64_t Em410xDecode(uint8_t *BitStream,uint32_t BitLen) +uint64_t Em410xDecode(uint8_t *BitStream, int BitLen) { //no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future // otherwise could be a void with no arguments @@ -82,7 +82,7 @@ uint64_t Em410xDecode(uint8_t *BitStream,uint32_t BitLen) //takes 2 arguments - clock and invert both as integers //attempts to demodulate ask while decoding manchester //prints binary found and saves in graphbuffer for further commands -int askmandemod(uint8_t * BinStream,uint32_t *BitLen,int *clk, int *invert) +int askmandemod(uint8_t * BinStream, int *BitLen,int *clk, int *invert) { int i; int high = 0, low = 128; @@ -655,13 +655,13 @@ int DetectASKClock(uint8_t dest[], size_t size, int clock) low = dest[i]; } } - peak=(int)((peak-128)*.75)+128; - low= (int)((low-128)*.75)+128; + peak=(int)(((peak-128)*.75)+128); + low= (int)(((low-128)*.75)+128); int ii; int clkCnt; int tol = 0; - int bestErr=1000; - int errCnt[]={0,0,0,0,0,0,0,0}; + int bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000}; + int errCnt=0; //test each valid clock from smallest to greatest to see which lines up for(clkCnt=0; clkCnt<6;++clkCnt){ if (clk[clkCnt]==32){ @@ -669,33 +669,487 @@ int DetectASKClock(uint8_t dest[], size_t size, int clock) }else{ tol=0; } - bestErr=1000; + bestErr[clkCnt]=1000; //try lining up the peaks by moving starting point (try first 256) for (ii=0; ii=peak) || (dest[ii]<=low)){ - errCnt[clkCnt]=0; + errCnt=0; // now that we have the first one lined up test rest of wave array for (i=0; i<((int)(size/clk[clkCnt])-1); ++i){ if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){ }else if(dest[ii+(i*clk[clkCnt])-tol]>=peak || dest[ii+(i*clk[clkCnt])-tol]<=low){ }else if(dest[ii+(i*clk[clkCnt])+tol]>=peak || dest[ii+(i*clk[clkCnt])+tol]<=low){ }else{ //error no peak detected - errCnt[clkCnt]++; + errCnt++; + } + } + //if we found no errors this is correct one - return this clock + if(errCnt==0) return clk[clkCnt]; + //if we found errors see if it is lowest so far and save it as best run + if(errCntpeak){ + peak = dest[i]; + } + if(dest[i]=peak) || (dest[ii]<=low)){ + errCnt=0; + peakcnt=0; + // now that we have the first one lined up test rest of wave array + for (i=0; i<((int)(size/clk[clkCnt])-1); ++i){ + if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){ + peakcnt++; + }else if(dest[ii+(i*clk[clkCnt])-tol]>=peak || dest[ii+(i*clk[clkCnt])-tol]<=low){ + peakcnt++; + }else if(dest[ii+(i*clk[clkCnt])+tol]>=peak || dest[ii+(i*clk[clkCnt])+tol]<=low){ + peakcnt++; + }else{ //error no peak detected + errCnt++; + } + } + if(peakcnt>peaksdet[clkCnt]) { + peaksdet[clkCnt]=peakcnt; + bestErr[clkCnt]=errCnt; + } + } + } + } + int iii=0; + int best=0; + //int ratio2; //debug + int ratio; + //int bits; + for (iii=0; iii<7;++iii){ + ratio=1000; + //ratio2=1000; //debug + //bits=size/clk[iii]; //debug + if (peaksdet[iii]>0){ + ratio=bestErr[iii]/peaksdet[iii]; + if (((bestErr[best]/peaksdet[best])>(ratio)+1)){ + best = iii; + } + //ratio2=bits/peaksdet[iii]; //debug + } + //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d, ratio: %d, bits: %d, peakbitr: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best],ratio, bits,ratio2); + } + return clk[best]; +} + +/* +int DetectNRZpskClock(uint8_t dest[], size_t size, int clock) +{ + int i=0; + int peak=0; + int low=128; + int clk[]={16,32,40,50,64,100,128,256}; + int loopCnt = 1500; //don't need to loop through entire array... + if (sizepeak){ + peak = dest[i]; + } + if(dest[i]=peak) || (dest[ii]<=low)){ + lastClk = ii-*clk; + errCnt[clkCnt]=0; + // now that we have the first one lined up test rest of wave array + for (i=ii; i=peak || dest[i]<=low) && (i>=lastClk+*clk-tol && i<=lastClk+*clk+tol)){ + bitHigh=1; + lastClk=lastClk+*clk; + ignorewin=clk[clkCnt]/8; + }else if(dest[i]low) { + if (ignorewin==0){ + bitHigh=0; + }else ignorewin--; + if (i>=lastClk+*clk+tol){ //past possible bar + lowBitCnt[clkCnt]++; + } + }else if ((dest[i]>=peak || dest[i]<=low) && (i=lastClk+*clk+tol) && (bitHigh==0)){ + //error bar found no clock... + errCnt[clkCnt]++; } } //if we found no errors this is correct one - return this clock - if(errCnt[clkCnt]==0) return clk[clkCnt]; + if(errCnt[clkCnt]==0 && lowBitCnt[clkCnt]==0) return clk[clkCnt]; //if we found errors see if it is lowest so far and save it as best run if(errCnt[clkCnt]high) high=bitStream[i]; + } + high = (int)(((high-128)*.80)+128); + low = (int)(((low-128)*.90)+128); + //low = (uint8_t)(((int)(low)-128)*.80)+128; + for (i=0; i=high) newHigh=1; + } + return; +} + +int indala26decode(uint8_t *bitStream, int *bitLen, uint8_t *invert) +{ + //26 bit 40134 format (don't know other formats) + // Finding the start of a UID + int i; + int long_wait; + //uidlen = 64; + long_wait = 29;//29 leading zeros in format + int start; + int first = 0; + int first2 = 0; + int bitCnt = 0; + int ii; + for (start = 0; start <= *bitLen - 250; start++) { + first = bitStream[start]; + for (i = start; i < start + long_wait; i++) { + if (bitStream[i] != first) { + break; + } + } + if (i == (start + long_wait)) { + break; + } + } + if (start == *bitLen - 250 + 1) { + // did not find start sequence + return -1; + } + //found start once now test length by finding next one + // Inverting signal if needed + if (first == 1) { + for (i = start; i < *bitLen; i++) { + bitStream[i] = !bitStream[i]; + } + *invert = 1; + }else *invert=0; + + int iii; + for (ii=start+29; ii <= *bitLen - 250; ii++) { + first2 = bitStream[ii]; + for (iii = ii; iii < ii + long_wait; iii++) { + if (bitStream[iii] != first2) { + break; + } + } + if (iii == (ii + long_wait)) { + break; + } + } + if (ii== *bitLen - 250 + 1){ + // did not find second start sequence + return -2; + } + bitCnt=ii-start; + + // Dumping UID + i = start; + for (ii = 0; ii < bitCnt; ii++) { + bitStream[ii] = bitStream[i++]; + //showbits[bit] = '0' + bits[bit]; + } + *bitLen=bitCnt; + return 1; +} + +int pskNRZrawDemod(uint8_t *dest, int *bitLen, int *clk, int *invert) +{ + pskCleanWave(dest,*bitLen); + int clk2 = DetectpskNRZClock(dest, *bitLen, *clk); + *clk=clk2; + uint32_t i; + uint8_t high=0, low=128; + uint32_t gLen = *bitLen; + if (gLen > 1280) gLen=1280; + // get high + for (i=0; ihigh) high = dest[i]; + if (dest[i]=high)||(dest[iii]<=low)){ + lastBit=iii-*clk; + //loop through to see if this start location works + for (i = iii; i < *bitLen; ++i) { + //if we found a high bar and we are at a clock bit + if ((dest[i]>=high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){ + bitHigh=1; + lastBit+=*clk; + //curBit=1-*invert; + //dest[bitnum]=curBit; + ignorewin=*clk/8; + bitnum++; + //else if low bar found and we are at a clock point + }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){ + bitHigh=1; + lastBit+=*clk; + ignorewin=*clk/8; + //curBit=*invert; + //dest[bitnum]=curBit; + bitnum++; + //else if no bars found + }else if(dest[i]low) { + if (ignorewin==0){ + bitHigh=0; + }else ignorewin--; + //if we are past a clock point + if (i>=lastBit+*clk+tol){ //clock val + //dest[bitnum]=curBit; + lastBit+=*clk; + bitnum++; + } + //else if bar found but we are not at a clock bit and we did not just have a clock bit + }else if ((dest[i]>=high || dest[i]<=low) && (ilastBit+*clk+tol) && (bitHigh==0)){ + //error bar found no clock... + errCnt++; + } + if (bitnum>=1000) break; + } + //we got more than 64 good bits and not all errors + if ((bitnum > (64+errCnt)) && (errCnt<(maxErr))) { + //possible good read + if (errCnt==0){ + bestStart = iii; + bestErrCnt=errCnt; + break; //great read - finish + } + if (bestStart == iii) break; //if current run == bestErrCnt run (after exhausted testing) then finish + if (errCnt=high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){ + bitHigh=1; + lastBit+=*clk; + curBit=1-*invert; + dest[bitnum]=curBit; + ignorewin=*clk/8; + bitnum++; + //else if low bar found and we are at a clock point + }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){ + bitHigh=1; + lastBit+=*clk; + curBit=*invert; + dest[bitnum]=curBit; + ignorewin=*clk/8; + bitnum++; + //else if no bars found + }else if(dest[i]low) { + if (ignorewin==0){ + bitHigh=0; + }else ignorewin--; + //if we are past a clock point + if (i>=lastBit+*clk+tol){ //clock val + lastBit+=*clk; + dest[bitnum]=curBit; + bitnum++; + } + //else if bar found but we are not at a clock bit and we did not just have a clock bit + }else if ((dest[i]>=high || dest[i]<=low) && ((ilastBit+*clk+tol)) && (bitHigh==0)){ + //error bar found no clock... + bitHigh=1; + dest[bitnum]=77; + bitnum++; + errCnt++; + } + if (bitnum >=1000) break; + } + *bitLen=bitnum; + } else{ + *bitLen=bitnum; + *clk=bestStart; + return -1; + } + + if (bitnum>16){ + *bitLen=bitnum; + } else return -1; + return errCnt; +} + + + /*not needed? + uint32_t i; + uint8_t high=0, low=128; + uint32_t loopMax = 1280; //20 raw bits + + // get high + if (sizehigh) high = dest[i]; + if (dest[i]=high) dest[i]=high; + else if(dest[i]<=low) dest[i]=low; + else dest[i]=0; + } + */ diff --git a/common/lfdemod.h b/common/lfdemod.h index ad95fda5..2e0acf75 100644 --- a/common/lfdemod.h +++ b/common/lfdemod.h @@ -12,8 +12,8 @@ #include int DetectASKClock(uint8_t dest[], size_t size, int clock); -int askmandemod(uint8_t *BinStream,uint32_t *BitLen,int *clk, int *invert); -uint64_t Em410xDecode(uint8_t *BitStream,uint32_t BitLen); +int askmandemod(uint8_t *BinStream,int *BitLen,int *clk, int *invert); +uint64_t Em410xDecode(uint8_t *BitStream,int BitLen); int manrawdecode(uint8_t *BitStream, int *bitLen); int BiphaseRawDecode(uint8_t * BitStream, int *bitLen, int offset); int askrawdemod(uint8_t *BinStream, int *bitLen,int *clk, int *invert); @@ -21,5 +21,9 @@ int HIDdemodFSK(uint8_t *dest, size_t size, uint32_t *hi2, uint32_t *hi, uint32_ int IOdemodFSK(uint8_t *dest, size_t size); int fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow); uint32_t bytebits_to_byte(uint8_t* src, int numbits); +int pskNRZrawDemod(uint8_t *dest, int *bitLen, int *clk, int *invert); +int DetectpskNRZClock(uint8_t dest[], size_t size, int clock); +int indala26decode(uint8_t *bitStream, int *bitLen, uint8_t *invert); +void pskCleanWave(uint8_t *bitStream, int bitLen); #endif diff --git a/traces/ATA5577-HIDemu-FC1-C9.pm3 b/traces/ATA5577-HIDemu-FC1-C9.pm3 new file mode 100644 index 00000000..7c0a878e --- /dev/null +++ b/traces/ATA5577-HIDemu-FC1-C9.pm3 @@ -0,0 +1,16000 @@ +69 +73 +35 +-4 +-36 +-64 +-86 +-106 +-46 +60 +74 +38 +3 +-31 +-58 +-82 +-101 +-102 +-41 +68 +86 +50 +14 +-22 +-50 +-75 +-96 +-113 +-34 +75 +92 +55 +19 +-17 +-46 +-72 +-92 +-111 +-31 +79 +96 +60 +23 +-14 +-43 +-70 +-91 +-109 +-28 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-108 +-25 +84 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-25 +85 +102 +65 +28 +-10 +-40 +-67 +-88 +-107 +-24 +85 +103 +66 +29 +-9 +-40 +-66 +-88 +-107 +-24 +85 +102 +66 +29 +-9 +-40 +-66 +-88 +-106 +-25 +85 +102 +65 +28 +-10 +-40 +-67 +-88 +-16 +92 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +77 +40 +-1 +-33 +-61 +-83 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-2 +-34 +-62 +-85 +-104 +-104 +-45 +66 +81 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-28 +83 +97 +63 +25 +-11 +-42 +-68 +-90 +-107 +-26 +85 +100 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +55 +12 +-22 +-51 +-75 +-22 +82 +86 +47 +6 +-27 +-56 +-80 +-28 +77 +81 +42 +2 +-31 +-59 +-82 +-31 +74 +77 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-34 +69 +74 +36 +-4 +-35 +-63 +-85 +-35 +68 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-5 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-37 +-64 +-86 +-35 +69 +72 +34 +-5 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +72 +35 +-5 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-35 +69 +73 +35 +-5 +-36 +-64 +-86 +-36 +68 +72 +34 +-4 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-36 +68 +72 +35 +-3 +-35 +-63 +-85 +-105 +-104 +-46 +65 +80 +47 +10 +-24 +-53 +-77 +-98 +-98 +-37 +74 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +96 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +84 +98 +64 +25 +-11 +-42 +-68 +-90 +-107 +-27 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-107 +-26 +86 +99 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +100 +65 +26 +-10 +-42 +-67 +-89 +-106 +-26 +86 +100 +65 +27 +-9 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +100 +65 +26 +-9 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +22 +-13 +-44 +-69 +-13 +91 +94 +55 +12 +-22 +-52 +-76 +-22 +82 +85 +47 +6 +-27 +-56 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +83 +49 +11 +-22 +-52 +-76 +-97 +-97 +-35 +76 +91 +57 +19 +-16 +-47 +-71 +-93 +-110 +-31 +81 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-29 +82 +97 +63 +23 +-12 +-43 +-68 +-90 +-108 +-28 +83 +97 +63 +20 +-15 +-46 +-70 +-15 +89 +92 +54 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +77 +39 +-1 +-33 +-62 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-104 +-43 +63 +78 +41 +6 +-28 +-56 +-80 +-100 +-101 +-38 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-90 +-18 +89 +97 +58 +15 +-19 +-49 +-73 +-20 +83 +86 +48 +7 +-27 +-56 +-79 +-26 +77 +81 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-33 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +75 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +51 +15 +-20 +-49 +-75 +-95 +-113 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-30 +80 +96 +61 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +90 +96 +58 +15 +-19 +-49 +-73 +-20 +84 +88 +48 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +75 +37 +-1 +-33 +-61 +-84 +-104 +-104 +-44 +67 +82 +48 +11 +-23 +-52 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +12 +-22 +-52 +-76 +-24 +81 +85 +46 +5 +-28 +-57 +-80 +-29 +75 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +82 +49 +11 +-22 +-52 +-76 +-97 +-98 +-35 +75 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +21 +-15 +-45 +-70 +-14 +90 +94 +54 +12 +-22 +-52 +-76 +-22 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +2 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-2 +-35 +-63 +-85 +-105 +-44 +62 +77 +41 +6 +-29 +-56 +-81 +-100 +-101 +-38 +71 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +96 +58 +15 +-19 +-49 +-74 +-20 +83 +87 +48 +7 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +75 +37 +-3 +-34 +-62 +-85 +-33 +71 +74 +36 +-3 +-35 +-63 +-85 +-105 +-44 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +51 +15 +-20 +-49 +-75 +-95 +-112 +-33 +76 +93 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +81 +99 +62 +25 +-12 +-42 +-68 +-90 +-108 +-27 +82 +100 +63 +26 +-11 +-41 +-68 +-89 +-108 +-26 +83 +101 +63 +26 +-11 +-41 +-68 +-89 +-107 +-26 +83 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +83 +100 +64 +27 +-10 +-40 +-67 +-88 +-16 +92 +99 +59 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +83 +44 +3 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +77 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +35 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +72 +35 +-2 +-34 +-62 +-85 +-104 +-104 +-45 +66 +81 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +89 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +22 +-14 +-45 +-70 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-27 +84 +98 +64 +20 +-15 +-46 +-70 +-14 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +41 +1 +-32 +-60 +-83 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +38 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +77 +41 +6 +-28 +-56 +-80 +-100 +-101 +-38 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +59 +22 +-15 +-44 +-70 +-91 +-109 +-29 +81 +98 +62 +25 +-13 +-42 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +89 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +51 +15 +-20 +-49 +-75 +-95 +-113 +-33 +76 +93 +57 +20 +-16 +-46 +-72 +-92 +-110 +-30 +79 +96 +60 +23 +-14 +-44 +-70 +-91 +-109 +-28 +81 +98 +61 +24 +-13 +-43 +-69 +-90 +-19 +89 +97 +58 +15 +-19 +-49 +-74 +-21 +83 +87 +48 +7 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-35 +69 +75 +37 +-1 +-33 +-61 +-84 +-104 +-104 +-44 +67 +82 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +61 +22 +-13 +-44 +-69 +-91 +-108 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +11 +-23 +-52 +-76 +-23 +80 +84 +46 +5 +-28 +-57 +-80 +-29 +75 +80 +42 +1 +-31 +-60 +-82 +-31 +72 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +75 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-45 +-69 +-91 +-109 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-45 +-70 +-14 +89 +93 +54 +12 +-22 +-52 +-76 +-22 +81 +86 +47 +6 +-27 +-56 +-80 +-27 +77 +81 +42 +2 +-31 +-59 +-82 +-30 +74 +77 +39 +-1 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-56 +-81 +-100 +-101 +-38 +70 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-16 +-45 +-71 +-91 +-110 +-29 +80 +96 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +89 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +48 +7 +-26 +-56 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-82 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-104 +-44 +62 +77 +40 +6 +-29 +-56 +-81 +-100 +-101 +-38 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +98 +61 +25 +-13 +-43 +-69 +-90 +-108 +-27 +81 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +90 +97 +58 +15 +-19 +-49 +-74 +-20 +83 +86 +47 +6 +-27 +-56 +-79 +-27 +77 +81 +42 +2 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-37 +67 +72 +34 +-3 +-35 +-63 +-85 +-105 +-104 +-46 +65 +79 +47 +9 +-24 +-54 +-77 +-98 +-98 +-37 +74 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-32 +80 +95 +61 +22 +-14 +-45 +-69 +-91 +-109 +-28 +83 +97 +64 +25 +-11 +-42 +-68 +-90 +-107 +-26 +86 +100 +66 +22 +-13 +-44 +-69 +-13 +91 +94 +55 +13 +-21 +-51 +-75 +-22 +83 +86 +47 +6 +-27 +-56 +-80 +-27 +77 +81 +43 +2 +-30 +-59 +-82 +-30 +74 +77 +40 +-1 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-30 +81 +96 +62 +23 +-12 +-43 +-69 +-91 +-108 +-28 +83 +97 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +47 +5 +-28 +-57 +-80 +-27 +77 +80 +42 +1 +-31 +-60 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +73 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-104 +-44 +62 +77 +41 +6 +-28 +-56 +-80 +-99 +-101 +-38 +71 +88 +52 +16 +-19 +-49 +-74 +-94 +-112 +-32 +77 +95 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-90 +-108 +-26 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-108 +-26 +83 +101 +64 +27 +-11 +-41 +-68 +-89 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-89 +-107 +-25 +84 +101 +65 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-89 +-17 +91 +98 +59 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-58 +-81 +-30 +75 +78 +40 +0 +-32 +-60 +-83 +-32 +72 +75 +38 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +51 +16 +-20 +-49 +-74 +-95 +-112 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +96 +60 +24 +-14 +-43 +-69 +-90 +-109 +-28 +81 +99 +62 +25 +-12 +-42 +-69 +-90 +-18 +89 +97 +59 +15 +-19 +-49 +-73 +-20 +83 +87 +48 +7 +-27 +-56 +-79 +-26 +78 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-33 +71 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-63 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +72 +34 +-5 +-36 +-64 +-86 +-36 +69 +73 +35 +-2 +-34 +-62 +-85 +-105 +-104 +-45 +66 +81 +48 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-27 +83 +98 +64 +20 +-15 +-46 +-70 +-14 +89 +93 +54 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-83 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-56 +-81 +-100 +-101 +-38 +70 +88 +51 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +88 +49 +8 +-26 +-55 +-78 +-25 +79 +82 +44 +3 +-29 +-58 +-81 +-29 +76 +80 +42 +1 +-32 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-104 +-43 +63 +77 +40 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +96 +58 +15 +-19 +-49 +-73 +-20 +83 +87 +48 +7 +-26 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-2 +-34 +-62 +-84 +-104 +-104 +-44 +66 +80 +47 +10 +-23 +-53 +-77 +-97 +-98 +-36 +75 +89 +56 +18 +-17 +-48 +-72 +-94 +-111 +-32 +80 +95 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +92 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +47 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +69 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +82 +49 +11 +-22 +-52 +-76 +-97 +-97 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-94 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +83 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +12 +-22 +-52 +-76 +-23 +80 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +88 +50 +8 +-26 +-55 +-78 +-26 +78 +83 +44 +3 +-30 +-58 +-81 +-29 +75 +79 +40 +0 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-62 +-85 +-105 +-44 +63 +77 +40 +6 +-28 +-56 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-19 +-49 +-74 +-94 +-112 +-33 +77 +94 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +98 +62 +25 +-12 +-42 +-69 +-89 +-108 +-27 +82 +100 +63 +26 +-12 +-42 +-68 +-89 +-108 +-26 +82 +100 +64 +27 +-11 +-41 +-67 +-89 +-107 +-25 +83 +100 +63 +27 +-11 +-41 +-67 +-89 +-107 +-26 +83 +101 +65 +27 +-10 +-41 +-67 +-88 +-107 +-26 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-16 +91 +98 +59 +16 +-18 +-49 +-73 +-19 +85 +88 +48 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-33 +72 +75 +37 +-3 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-63 +-86 +-35 +68 +73 +35 +-2 +-34 +-62 +-85 +-104 +-104 +-44 +66 +81 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-94 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-108 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-46 +-70 +-14 +89 +93 +54 +11 +-23 +-52 +-76 +-23 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +41 +1 +-31 +-60 +-82 +-31 +74 +77 +40 +-1 +-33 +-61 +-84 +-33 +72 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-56 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +25 +-12 +-42 +-68 +-89 +-17 +89 +97 +58 +15 +-19 +-49 +-73 +-19 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +44 +3 +-30 +-58 +-81 +-30 +75 +78 +41 +0 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-104 +-44 +63 +78 +41 +6 +-28 +-56 +-80 +-100 +-101 +-38 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-58 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-2 +-34 +-62 +-84 +-104 +-104 +-45 +66 +81 +47 +10 +-24 +-53 +-77 +-98 +-98 +-37 +74 +89 +55 +17 +-18 +-48 +-73 +-94 +-111 +-32 +79 +93 +59 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +96 +62 +23 +-13 +-44 +-69 +-91 +-108 +-28 +83 +97 +63 +20 +-15 +-46 +-71 +-15 +89 +93 +53 +11 +-23 +-52 +-76 +-24 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-43 +68 +82 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +76 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +84 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +51 +15 +-20 +-49 +-75 +-95 +-113 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-41 +-68 +-89 +-17 +91 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-105 +-44 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +52 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +98 +59 +16 +-19 +-49 +-73 +-19 +85 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +83 +44 +3 +-30 +-59 +-81 +-29 +75 +79 +41 +1 +-32 +-60 +-83 +-32 +73 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-43 +67 +82 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +76 +90 +56 +18 +-17 +-48 +-72 +-94 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-70 +-91 +-109 +-29 +82 +96 +62 +23 +-12 +-43 +-69 +-91 +-108 +-28 +83 +97 +63 +20 +-15 +-46 +-71 +-16 +88 +91 +52 +10 +-24 +-53 +-77 +-25 +79 +83 +44 +4 +-29 +-58 +-81 +-30 +74 +77 +39 +-1 +-33 +-61 +-83 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-2 +-34 +-62 +-85 +-104 +-104 +-44 +67 +81 +48 +11 +-23 +-52 +-76 +-97 +-98 +-35 +76 +91 +57 +19 +-16 +-47 +-71 +-93 +-110 +-30 +81 +96 +62 +24 +-12 +-43 +-69 +-91 +-108 +-27 +84 +99 +64 +26 +-10 +-42 +-67 +-89 +-107 +-27 +84 +99 +65 +22 +-14 +-44 +-69 +-14 +90 +94 +55 +12 +-22 +-51 +-75 +-23 +81 +85 +47 +6 +-27 +-56 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-46 +61 +75 +40 +5 +-29 +-57 +-81 +-100 +-102 +-40 +70 +87 +51 +15 +-21 +-49 +-75 +-95 +-113 +-33 +76 +93 +57 +21 +-16 +-46 +-72 +-92 +-110 +-29 +79 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +100 +63 +26 +-11 +-41 +-68 +-89 +-17 +91 +97 +59 +16 +-18 +-49 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-25 +79 +82 +44 +3 +-29 +-58 +-81 +-29 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +75 +37 +-2 +-35 +-62 +-85 +-105 +-44 +62 +77 +40 +6 +-29 +-56 +-81 +-100 +-101 +-38 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-27 +78 +82 +43 +3 +-30 +-59 +-82 +-30 +74 +78 +40 +-1 +-33 +-61 +-84 +-33 +72 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +37 +-1 +-33 +-62 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +84 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +84 +98 +64 +25 +-11 +-42 +-67 +-89 +-107 +-27 +84 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-27 +84 +98 +64 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +21 +-14 +-45 +-70 +-13 +90 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +47 +5 +-28 +-57 +-80 +-28 +76 +81 +43 +2 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-63 +-86 +-35 +68 +72 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-106 +-46 +61 +75 +39 +4 +-30 +-57 +-81 +-101 +-102 +-39 +70 +87 +51 +15 +-20 +-49 +-75 +-95 +-113 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-1 +-33 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +51 +15 +-20 +-49 +-74 +-95 +-112 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +83 +99 +63 +26 +-11 +-41 +-68 +-89 +-108 +-25 +84 +101 +65 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-25 +85 +101 +65 +28 +-10 +-40 +-66 +-88 +-107 +-24 +85 +102 +65 +27 +-10 +-40 +-67 +-88 +-107 +-25 +85 +101 +64 +27 +-10 +-41 +-67 +-88 +-16 +91 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +7 +-26 +-55 +-78 +-26 +77 +81 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +70 +74 +35 +-2 +-34 +-62 +-84 +-104 +-104 +-45 +67 +81 +48 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +89 +56 +18 +-17 +-48 +-72 +-94 +-111 +-32 +80 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +97 +62 +23 +-12 +-43 +-69 +-91 +-108 +-28 +83 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +80 +84 +46 +5 +-28 +-57 +-80 +-29 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +74 +35 +-4 +-36 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-5 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-5 +-36 +-64 +-86 +-35 +69 +73 +35 +-5 +-36 +-64 +-86 +-35 +69 +72 +34 +-5 +-36 +-64 +-86 +-36 +68 +72 +35 +-4 +-36 +-64 +-86 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +72 +35 +-4 +-36 +-64 +-86 +-36 +69 +72 +35 +-2 +-34 +-63 +-85 +-105 +-104 +-45 +67 +81 +48 +10 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +81 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-28 +83 +97 +63 +24 +-11 +-43 +-68 +-90 +-107 +-27 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +27 +-9 +-41 +-66 +-89 +-106 +-26 +86 +100 +66 +27 +-9 +-41 +-66 +-89 +-106 +-26 +86 +100 +66 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +27 +-9 +-41 +-66 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +54 +12 +-22 +-52 +-76 +-22 +82 +85 +47 +6 +-27 +-56 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +72 +77 +39 +-1 +-33 +-61 +-84 +-33 +70 +74 +37 +-3 +-35 +-63 +-85 +-34 +69 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +67 +81 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +74 +89 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +21 +-14 +-45 +-70 +-14 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +81 +43 +2 +-31 +-59 +-82 +-30 +75 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +79 +82 +43 +3 +-30 +-59 +-81 +-29 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +49 +11 +-22 +-52 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-27 +85 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-29 +75 +79 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-2 +-34 +-62 +-84 +-104 +-104 +-45 +66 +81 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +89 +56 +17 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +96 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +75 +37 +-3 +-35 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-30 +-57 +-81 +-100 +-102 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +58 +15 +-19 +-49 +-73 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-58 +-81 +-30 +75 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-28 +81 +98 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +100 +63 +26 +-11 +-41 +-68 +-89 +-108 +-26 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +83 +100 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-40 +-67 +-88 +-107 +-25 +84 +102 +65 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-16 +91 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +7 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-63 +-86 +-35 +68 +73 +35 +-2 +-34 +-62 +-84 +-104 +-104 +-45 +67 +81 +47 +10 +-24 +-53 +-77 +-98 +-98 +-36 +74 +89 +56 +17 +-17 +-48 +-72 +-94 +-111 +-32 +79 +93 +60 +21 +-14 +-45 +-70 +-92 +-109 +-30 +81 +96 +62 +23 +-13 +-44 +-69 +-91 +-108 +-29 +82 +96 +62 +19 +-16 +-47 +-71 +-16 +87 +91 +52 +10 +-24 +-53 +-77 +-25 +79 +83 +44 +3 +-29 +-58 +-81 +-30 +75 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-44 +63 +77 +41 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +89 +53 +17 +-19 +-48 +-73 +-94 +-112 +-31 +78 +96 +60 +23 +-14 +-44 +-70 +-91 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-108 +-27 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-17 +91 +98 +59 +16 +-19 +-49 +-73 +-19 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +81 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +-1 +-33 +-61 +-83 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +69 +74 +36 +-4 +-35 +-63 +-85 +-105 +-46 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-102 +-39 +70 +87 +51 +15 +-21 +-49 +-75 +-95 +-113 +-33 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +98 +62 +25 +-12 +-42 +-69 +-90 +-108 +-26 +83 +100 +63 +27 +-11 +-41 +-68 +-89 +-17 +91 +98 +60 +16 +-18 +-48 +-73 +-19 +84 +88 +49 +8 +-25 +-55 +-78 +-26 +78 +82 +44 +3 +-29 +-58 +-81 +-29 +75 +80 +41 +1 +-32 +-60 +-83 +-32 +72 +77 +38 +-2 +-34 +-62 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +89 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-14 +-45 +-70 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +99 +64 +20 +-15 +-45 +-70 +-15 +88 +93 +54 +11 +-23 +-52 +-76 +-24 +80 +84 +46 +5 +-28 +-57 +-80 +-29 +75 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-52 +-76 +-97 +-98 +-35 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +97 +62 +23 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +63 +20 +-15 +-46 +-71 +-16 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +80 +84 +46 +5 +-28 +-57 +-80 +-28 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-27 +77 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-56 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +15 +-19 +-49 +-73 +-20 +84 +88 +49 +8 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-2 +-34 +-62 +-84 +-104 +-104 +-45 +67 +82 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +81 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-28 +83 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-26 +86 +100 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +55 +12 +-22 +-52 +-75 +-22 +82 +86 +47 +6 +-27 +-56 +-80 +-28 +76 +81 +42 +2 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-62 +-85 +-34 +69 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-45 +67 +82 +48 +11 +-23 +-52 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-111 +-32 +79 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +96 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +92 +54 +11 +-23 +-52 +-76 +-24 +80 +84 +46 +4 +-28 +-57 +-80 +-28 +76 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-62 +-85 +-35 +69 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +75 +40 +5 +-29 +-57 +-81 +-100 +-102 +-39 +71 +87 +51 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +95 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +25 +-12 +-42 +-68 +-89 +-108 +-26 +83 +100 +63 +27 +-11 +-41 +-68 +-89 +-107 +-26 +83 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-26 +83 +101 +64 +27 +-10 +-41 +-67 +-88 +-17 +91 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +74 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +77 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +83 +44 +3 +-30 +-58 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-3 +-35 +-63 +-85 +-105 +-104 +-45 +66 +81 +47 +10 +-24 +-53 +-77 +-98 +-98 +-36 +75 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-31 +79 +94 +60 +21 +-14 +-45 +-70 +-91 +-109 +-29 +82 +97 +62 +23 +-12 +-44 +-69 +-91 +-108 +-28 +83 +97 +63 +20 +-15 +-46 +-70 +-14 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +38 +-1 +-33 +-62 +-84 +-33 +71 +74 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +39 +5 +-30 +-57 +-81 +-100 +-102 +-39 +70 +87 +51 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +96 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +100 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +81 +43 +3 +-30 +-59 +-82 +-30 +75 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +75 +37 +-2 +-34 +-62 +-85 +-33 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +77 +40 +5 +-29 +-56 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +59 +15 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-33 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-61 +-84 +-104 +-104 +-44 +67 +81 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-14 +-45 +-70 +-91 +-109 +-29 +83 +97 +64 +24 +-11 +-43 +-68 +-90 +-107 +-27 +85 +99 +65 +21 +-14 +-45 +-70 +-14 +90 +93 +55 +12 +-22 +-52 +-75 +-22 +82 +85 +47 +5 +-27 +-56 +-80 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +70 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +82 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +76 +91 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-28 +84 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +11 +-23 +-52 +-76 +-24 +81 +84 +46 +5 +-28 +-57 +-80 +-29 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-1 +-34 +-62 +-84 +-33 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +69 +73 +35 +-4 +-35 +-63 +-85 +-105 +-45 +61 +75 +39 +5 +-30 +-57 +-81 +-101 +-102 +-40 +70 +88 +52 +15 +-20 +-49 +-75 +-95 +-113 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +26 +-12 +-42 +-68 +-89 +-108 +-26 +83 +100 +64 +27 +-11 +-41 +-68 +-89 +-107 +-25 +84 +101 +63 +27 +-11 +-41 +-68 +-89 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-16 +91 +98 +60 +17 +-18 +-48 +-73 +-19 +85 +89 +50 +8 +-25 +-55 +-78 +-25 +79 +82 +44 +3 +-29 +-58 +-81 +-29 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +74 +36 +-4 +-35 +-63 +-85 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-2 +-34 +-62 +-85 +-105 +-104 +-45 +66 +81 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +89 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-14 +-45 +-69 +-91 +-109 +-28 +82 +97 +63 +24 +-11 +-43 +-68 +-90 +-107 +-27 +84 +98 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +54 +12 +-22 +-52 +-76 +-22 +82 +86 +47 +6 +-27 +-56 +-80 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +77 +40 +-1 +-33 +-61 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +75 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +39 +4 +-30 +-57 +-81 +-101 +-102 +-39 +70 +87 +51 +15 +-21 +-49 +-75 +-95 +-113 +-34 +76 +93 +56 +20 +-17 +-46 +-72 +-92 +-110 +-31 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-30 +80 +97 +60 +23 +-14 +-43 +-70 +-91 +-20 +88 +95 +56 +14 +-20 +-50 +-74 +-21 +83 +86 +47 +6 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +77 +39 +-1 +-33 +-62 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-104 +-43 +63 +78 +42 +7 +-28 +-55 +-80 +-99 +-100 +-37 +72 +90 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +59 +22 +-14 +-44 +-70 +-91 +-109 +-29 +80 +97 +61 +25 +-13 +-42 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +58 +15 +-19 +-49 +-73 +-20 +83 +86 +47 +6 +-27 +-56 +-79 +-27 +77 +81 +42 +2 +-31 +-59 +-82 +-31 +74 +78 +40 +0 +-33 +-61 +-83 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +67 +82 +49 +11 +-22 +-52 +-76 +-97 +-98 +-35 +76 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-30 +81 +95 +62 +23 +-13 +-44 +-69 +-91 +-108 +-28 +83 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-26 +85 +100 +65 +22 +-14 +-45 +-69 +-14 +90 +94 +54 +12 +-22 +-51 +-75 +-23 +81 +85 +47 +6 +-27 +-56 +-80 +-28 +77 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +68 +82 +49 +11 +-22 +-52 +-76 +-97 +-98 +-35 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +63 +20 +-15 +-46 +-70 +-15 +89 +92 +54 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +76 +93 +57 +20 +-16 +-45 +-71 +-92 +-110 +-30 +80 +97 +60 +23 +-14 +-44 +-70 +-91 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-90 +-18 +89 +97 +58 +15 +-19 +-49 +-74 +-20 +84 +87 +48 +7 +-27 +-56 +-79 +-26 +77 +82 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +6 +-29 +-56 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +89 +97 +59 +15 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-32 +-60 +-83 +-33 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-45 +67 +82 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-28 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +99 +65 +21 +-14 +-45 +-70 +-14 +89 +94 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +75 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +76 +38 +-1 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-1 +-33 +-61 +-84 +-104 +-103 +-43 +68 +83 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +76 +91 +57 +19 +-16 +-47 +-71 +-93 +-110 +-30 +82 +96 +62 +23 +-12 +-44 +-69 +-91 +-108 +-27 +83 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +85 +99 +65 +21 +-14 +-45 +-70 +-14 +90 +93 +54 +12 +-22 +-52 +-76 +-22 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +15 +-20 +-49 +-75 +-95 +-97 +-32 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +81 +98 +62 +25 +-12 +-42 +-68 +-90 +-18 +89 +97 +58 +15 +-19 +-49 +-73 +-21 +83 +87 +48 +7 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +77 +40 +0 +-33 +-61 +-83 +-33 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +62 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +15 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-79 +-27 +78 +82 +43 +3 +-30 +-59 +-82 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-33 +70 +74 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +81 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-92 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +99 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +84 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-27 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +100 +66 +27 +-9 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +22 +-14 +-45 +-69 +-13 +90 +94 +55 +12 +-22 +-51 +-75 +-22 +82 +86 +47 +6 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-30 +-59 +-82 +-30 +74 +77 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-34 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-5 +-36 +-64 +-86 +-35 +69 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-106 +-46 +60 +75 +39 +4 +-30 +-58 +-82 +-101 +-102 +-40 +70 +87 +51 +15 +-21 +-49 +-75 +-95 +-97 +-33 +77 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +81 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +58 +15 +-19 +-49 +-74 +-20 +83 +87 +48 +7 +-26 +-55 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-31 +74 +77 +40 +-1 +-33 +-61 +-84 +-33 +72 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-108 +-26 +83 +100 +63 +27 +-11 +-41 +-68 +-89 +-107 +-26 +83 +100 +64 +27 +-11 +-41 +-68 +-88 +-107 +-26 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +100 +64 +27 +-10 +-41 +-67 +-88 +-107 +-26 +83 +101 +65 +27 +-10 +-40 +-67 +-88 +-16 +91 +98 +60 +17 +-18 +-48 +-73 +-19 +85 +88 +49 +7 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +77 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-52 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-32 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +97 +62 +24 +-12 +-43 +-68 +-90 +-108 +-27 +85 +99 +65 +21 +-14 +-45 +-70 +-14 +89 +93 +53 +11 +-23 +-52 +-76 +-22 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +38 +-2 +-34 +-62 +-85 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +74 +35 +-4 +-36 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-37 +-64 +-86 +-36 +68 +71 +33 +-6 +-37 +-65 +-87 +-37 +67 +72 +33 +-6 +-37 +-65 +-87 +-37 +68 +72 +34 +-5 +-37 +-64 +-86 +-37 +68 +72 +33 +-5 +-37 +-65 +-87 +-37 +68 +72 +34 +-5 +-37 +-64 +-86 +-36 +68 +73 +35 +-3 +-35 +-62 +-85 +-105 +-104 +-45 +65 +80 +47 +10 +-24 +-53 +-77 +-98 +-98 +-37 +74 +89 +56 +17 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-92 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-27 +85 +99 +64 +25 +-10 +-42 +-67 +-89 +-107 +-27 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-27 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-106 +-26 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +66 +22 +-13 +-44 +-69 +-14 +90 +94 +55 +12 +-22 +-52 +-75 +-22 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +77 +81 +42 +2 +-31 +-59 +-82 +-30 +74 +77 +39 +-1 +-33 +-61 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +0 +-33 +-61 +-84 +-104 +-103 +-43 +68 +83 +49 +12 +-22 +-52 +-76 +-97 +-97 +-35 +76 +90 +57 +19 +-16 +-47 +-71 +-93 +-110 +-30 +81 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-28 +83 +97 +63 +24 +-11 +-43 +-68 +-90 +-107 +-27 +84 +98 +64 +20 +-15 +-46 +-70 +-14 +90 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-57 +-81 +-100 +-101 +-38 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +95 +58 +22 +-15 +-45 +-71 +-91 +-110 +-28 +81 +98 +62 +25 +-13 +-42 +-69 +-90 +-108 +-27 +82 +100 +63 +26 +-11 +-42 +-68 +-89 +-17 +91 +98 +59 +16 +-18 +-49 +-73 +-19 +85 +88 +50 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +78 +39 +-1 +-33 +-61 +-84 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-105 +-45 +61 +75 +38 +4 +-30 +-57 +-81 +-101 +-102 +-40 +69 +86 +50 +14 +-22 +-50 +-76 +-96 +-113 +-35 +74 +91 +55 +19 +-17 +-47 +-72 +-93 +-111 +-31 +78 +95 +58 +22 +-15 +-45 +-71 +-91 +-109 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-19 +89 +96 +58 +15 +-19 +-49 +-74 +-20 +84 +87 +48 +7 +-27 +-55 +-79 +-26 +79 +83 +44 +3 +-30 +-58 +-81 +-29 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-1 +-34 +-62 +-84 +-33 +71 +76 +37 +0 +-32 +-61 +-83 +-103 +-103 +-44 +67 +82 +49 +11 +-22 +-52 +-76 +-97 +-98 +-36 +75 +91 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-70 +-91 +-109 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-46 +-70 +-15 +88 +92 +53 +11 +-23 +-53 +-76 +-24 +80 +83 +45 +4 +-29 +-57 +-81 +-29 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +70 +75 +37 +0 +-33 +-61 +-83 +-104 +-103 +-43 +69 +83 +50 +12 +-22 +-52 +-76 +-97 +-97 +-35 +77 +91 +57 +19 +-16 +-47 +-71 +-93 +-110 +-30 +81 +95 +62 +23 +-13 +-44 +-69 +-91 +-108 +-28 +83 +97 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +84 +99 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +69 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +48 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +74 +77 +40 +0 +-33 +-61 +-83 +-32 +71 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +75 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +51 +15 +-20 +-49 +-75 +-95 +-97 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-30 +80 +97 +60 +23 +-14 +-43 +-70 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-90 +-108 +-27 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-108 +-26 +83 +101 +63 +27 +-11 +-41 +-67 +-89 +-107 +-26 +83 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +65 +27 +-10 +-40 +-67 +-88 +-107 +-25 +84 +101 +65 +27 +-10 +-41 +-67 +-88 +-16 +91 +98 +59 +16 +-18 +-48 +-73 +-19 +84 +88 +50 +8 +-25 +-55 +-78 +-26 +79 +82 +44 +3 +-30 +-58 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +74 +37 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +73 +35 +-2 +-34 +-62 +-85 +-105 +-104 +-44 +67 +81 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-45 +-70 +-14 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +84 +46 +5 +-29 +-57 +-80 +-28 +75 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-34 +-62 +-85 +-104 +-44 +62 +77 +41 +6 +-28 +-56 +-80 +-100 +-101 +-37 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-31 +78 +95 +59 +22 +-15 +-44 +-70 +-91 +-109 +-28 +81 +97 +61 +25 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +90 +97 +58 +15 +-19 +-49 +-74 +-20 +84 +87 +48 +7 +-26 +-56 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +75 +37 +-2 +-34 +-62 +-85 +-33 +70 +74 +36 +-4 +-35 +-63 +-85 +-105 +-45 +61 +75 +39 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +51 +15 +-20 +-49 +-74 +-95 +-113 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-30 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +81 +98 +62 +25 +-12 +-42 +-68 +-90 +-18 +89 +96 +58 +15 +-19 +-49 +-74 +-20 +83 +87 +49 +7 +-26 +-55 +-79 +-27 +77 +81 +43 +2 +-30 +-59 +-82 +-30 +75 +79 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +70 +74 +36 +-3 +-35 +-63 +-85 +-34 +70 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-52 +-76 +-97 +-98 +-36 +75 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +38 +-1 +-34 +-62 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-35 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +49 +11 +-23 +-52 +-76 +-97 +-98 +-36 +75 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-108 +-28 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +84 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +2 +-31 +-59 +-82 +-31 +73 +77 +40 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +77 +41 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +58 +22 +-15 +-45 +-71 +-91 +-110 +-28 +81 +97 +62 +24 +-13 +-43 +-69 +-90 +-108 +-27 +83 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +48 +7 +-26 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-31 +74 +77 +40 +0 +-33 +-61 +-83 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +75 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-90 +-18 +89 +96 +57 +15 +-20 +-50 +-74 +-20 +83 +86 +48 +7 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +79 +40 +0 +-33 +-61 +-83 +-32 +71 +75 +37 +-3 +-35 +-62 +-85 +-33 +71 +74 +36 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +67 +82 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-94 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-107 +-27 +84 +98 +64 +21 +-14 +-45 +-70 +-14 +89 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +48 +11 +-23 +-53 +-76 +-97 +-98 +-35 +75 +90 +57 +18 +-16 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +21 +-15 +-45 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +6 +-29 +-56 +-81 +-100 +-101 +-39 +71 +89 +52 +16 +-19 +-49 +-74 +-94 +-112 +-32 +77 +95 +59 +22 +-15 +-44 +-71 +-91 +-109 +-28 +81 +99 +62 +25 +-13 +-42 +-69 +-90 +-108 +-27 +83 +100 +63 +27 +-11 +-41 +-68 +-89 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-10 +-41 +-67 +-88 +-107 +-25 +84 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-25 +84 +101 +65 +27 +-10 +-41 +-67 +-88 +-16 +91 +98 +60 +17 +-18 +-48 +-73 +-19 +84 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +43 +3 +-30 +-59 +-82 +-30 +74 +77 +40 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-62 +-85 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-105 +-45 +61 +75 +39 +4 +-30 +-57 +-81 +-101 +-102 +-40 +70 +87 +51 +15 +-21 +-49 +-75 +-95 +-113 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-30 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +58 +15 +-19 +-49 +-74 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +74 +36 +-3 +-35 +-63 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +35 +-4 +-36 +-64 +-86 +-36 +68 +73 +35 +-2 +-34 +-63 +-85 +-104 +-104 +-45 +66 +81 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +2 +-31 +-59 +-82 +-30 +74 +77 +40 +-1 +-33 +-61 +-84 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +77 +40 +6 +-29 +-56 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +81 +98 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +48 +7 +-26 +-55 +-79 +-26 +78 +81 +43 +2 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +89 +52 +16 +-19 +-49 +-74 +-94 +-112 +-32 +77 +95 +59 +22 +-14 +-44 +-70 +-91 +-109 +-28 +81 +98 +62 +25 +-12 +-42 +-69 +-90 +-108 +-26 +83 +99 +63 +26 +-11 +-41 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +81 +42 +2 +-31 +-59 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +68 +72 +34 +-3 +-35 +-63 +-85 +-105 +-104 +-46 +65 +79 +46 +9 +-25 +-54 +-78 +-98 +-99 +-38 +73 +88 +54 +16 +-18 +-49 +-73 +-94 +-111 +-33 +78 +93 +59 +21 +-14 +-45 +-70 +-92 +-109 +-30 +82 +97 +62 +23 +-12 +-44 +-69 +-91 +-108 +-27 +85 +99 +65 +21 +-14 +-45 +-70 +-14 +90 +94 +54 +12 +-22 +-52 +-76 +-22 +82 +86 +47 +6 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-29 +75 +78 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +83 +49 +11 +-22 +-52 +-76 +-97 +-98 +-36 +76 +90 +57 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-30 +82 +96 +62 +23 +-12 +-43 +-69 +-91 +-108 +-28 +83 +97 +63 +19 +-16 +-46 +-71 +-15 +89 +92 +53 +11 +-23 +-53 +-76 +-23 +80 +84 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-30 +74 +78 +40 +0 +-32 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +77 +41 +6 +-28 +-56 +-80 +-100 +-101 +-38 +72 +89 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +58 +22 +-15 +-45 +-70 +-91 +-110 +-28 +81 +98 +62 +24 +-13 +-42 +-69 +-90 +-108 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-18 +-49 +-73 +-20 +83 +88 +49 +7 +-26 +-55 +-79 +-26 +77 +82 +43 +3 +-30 +-59 +-82 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +51 +15 +-20 +-49 +-75 +-95 +-97 +-33 +76 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-108 +-26 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-108 +-26 +83 +100 +64 +27 +-11 +-41 +-67 +-89 +-107 +-26 +83 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +84 +101 +63 +27 +-11 +-41 +-67 +-89 +-107 +-26 +83 +100 +64 +27 +-11 +-41 +-67 +-88 +-17 +91 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +87 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +75 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +37 +-2 +-34 +-62 +-85 +-33 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +73 +35 +-4 +-36 +-63 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-2 +-34 +-62 +-85 +-104 +-104 +-45 +67 +81 +48 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +90 +56 +17 +-17 +-48 +-72 +-94 +-111 +-31 +80 +94 +60 +22 +-14 +-45 +-69 +-91 +-109 +-29 +82 +96 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +84 +98 +64 +20 +-15 +-45 +-70 +-14 +89 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +98 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +96 +58 +15 +-19 +-49 +-74 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +44 +3 +-30 +-58 +-81 +-29 +75 +79 +41 +1 +-32 +-60 +-83 +-31 +72 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +38 +-2 +-34 +-62 +-84 +-104 +-44 +63 +78 +42 +6 +-28 +-56 +-80 +-99 +-101 +-37 +71 +88 +52 +16 +-19 +-48 +-74 +-94 +-112 +-33 +77 +95 +58 +21 +-16 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +48 +6 +-27 +-56 +-79 +-26 +78 +81 +43 +2 +-31 +-59 +-82 +-31 +74 +79 +40 +0 +-32 +-60 +-83 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-2 +-34 +-62 +-84 +-104 +-104 +-44 +67 +80 +47 +10 +-23 +-53 +-77 +-98 +-98 +-36 +75 +89 +56 +18 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +97 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +77 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +49 +11 +-23 +-52 +-76 +-97 +-98 +-36 +76 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +94 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-28 +83 +98 +64 +20 +-15 +-45 +-70 +-15 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +80 +84 +46 +5 +-28 +-57 +-80 +-28 +75 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-33 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +77 +40 +5 +-29 +-56 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-70 +-90 +-109 +-27 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +85 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-58 +-81 +-29 +75 +78 +40 +0 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-105 +-43 +63 +77 +41 +6 +-28 +-56 +-80 +-100 +-101 +-38 +71 +88 +53 +17 +-19 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +22 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +58 +15 +-19 +-49 +-74 +-20 +83 +87 +48 +7 +-27 +-56 +-79 +-27 +77 +81 +43 +2 +-31 +-59 +-82 +-30 +74 +78 +40 +-1 +-33 +-61 +-84 +-32 +71 +75 +37 +-3 +-35 +-62 +-85 +-33 +70 +74 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +67 +81 +47 +10 +-23 +-53 +-77 +-97 +-98 +-36 +75 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-31 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +96 +62 +24 +-12 +-43 +-68 +-90 +-108 +-28 +84 +98 +63 +20 +-15 +-46 +-70 +-15 +89 +93 +53 +11 +-23 +-52 +-76 +-23 +81 +84 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +67 +82 +49 +11 +-22 +-52 +-76 +-97 +-97 +-36 +76 +91 +57 +18 +-17 +-47 +-71 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-45 +-69 +-91 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +83 +98 +64 +20 +-15 +-45 +-70 +-14 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +75 +80 +42 +1 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +71 +76 +37 +-2 +-34 +-62 +-85 +-34 +70 +74 +37 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-28 +82 +99 +63 +26 +-12 +-42 +-68 +-89 +-18 +90 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +48 +7 +-26 +-56 +-79 +-26 +78 +82 +43 +2 +-30 +-59 +-82 +-30 +75 +79 +40 +0 +-32 +-60 +-83 +-32 +73 +77 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-2 +-34 +-62 +-85 +-104 +-44 +62 +77 +41 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +88 +53 +17 +-19 +-48 +-74 +-94 +-112 +-32 +77 +95 +59 +22 +-15 +-44 +-70 +-91 +-110 +-28 +81 +98 +62 +25 +-12 +-42 +-69 +-90 +-108 +-27 +83 +99 +63 +26 +-11 +-42 +-68 +-89 +-17 +91 +97 +59 +16 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-78 +-26 +78 +82 +43 +2 +-30 +-59 +-81 +-30 +75 +79 +41 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-45 +66 +81 +48 +10 +-24 +-53 +-77 +-97 +-98 +-37 +75 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +59 +21 +-14 +-45 +-70 +-92 +-109 +-30 +81 +96 +61 +23 +-13 +-44 +-69 +-91 +-108 +-28 +83 +98 +63 +24 +-11 +-43 +-68 +-90 +-107 +-27 +84 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +84 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +100 +65 +26 +-10 +-41 +-67 +-89 +-107 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +22 +-14 +-44 +-69 +-14 +90 +94 +55 +12 +-21 +-51 +-75 +-22 +82 +86 +47 +6 +-27 +-56 +-80 +-28 +77 +80 +42 +1 +-31 +-59 +-82 +-31 +74 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-3 +-34 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +73 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +73 +35 +-4 +-36 +-64 +-86 +-35 +68 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-106 +-46 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +77 +93 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +60 +23 +-14 +-43 +-70 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +85 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +82 +44 +3 +-30 +-58 +-81 +-29 +75 +79 +41 +1 +-32 +-60 +-83 +-32 +73 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-104 +-44 +63 +77 +40 +5 +-29 +-56 +-81 +-100 +-101 +-38 +71 +88 +52 +16 +-19 +-49 +-74 +-94 +-112 +-33 +77 +94 +57 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-108 +-26 +83 +100 +63 +26 +-11 +-41 +-68 +-89 +-107 +-26 +84 +100 +63 +27 +-11 +-41 +-68 +-89 +-107 +-26 +83 +101 +64 +27 +-11 +-41 +-67 +-88 +-107 +-25 +85 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-24 +85 +101 +65 +28 +-10 +-40 +-67 +-88 +-16 +91 +98 +60 +17 +-17 +-48 +-72 +-19 +86 +89 +50 +8 +-25 +-54 +-78 +-25 +79 +83 +45 +4 +-29 +-58 +-81 +-29 +76 +80 +41 +1 +-32 +-60 +-83 +-31 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-45 +66 +81 +47 +10 +-24 +-53 +-77 +-98 +-98 +-37 +75 +89 +55 +17 +-18 +-48 +-73 +-94 +-111 +-33 +78 +92 +58 +20 +-15 +-46 +-71 +-92 +-109 +-31 +80 +94 +60 +21 +-14 +-45 +-70 +-91 +-109 +-30 +82 +96 +62 +19 +-16 +-47 +-71 +-16 +87 +92 +52 +10 +-23 +-53 +-77 +-24 +80 +84 +45 +4 +-29 +-58 +-81 +-29 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +40 +-1 +-33 +-61 +-83 +-32 +72 +76 +38 +-1 +-33 +-62 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-2 +-34 +-62 +-85 +-33 +70 +75 +37 +-3 +-35 +-63 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-5 +-36 +-64 +-86 +-36 +69 +72 +34 +-5 +-36 +-64 +-86 +-36 +68 +72 +34 +-5 +-37 +-65 +-86 +-36 +68 +72 +34 +-5 +-37 +-65 +-86 +-36 +68 +72 +34 +-5 +-37 +-64 +-86 +-36 +68 +72 +34 +-5 +-37 +-64 +-86 +-36 +68 +72 +35 +-5 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-35 +69 +74 +35 +-4 +-36 +-63 +-86 +-35 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +74 +36 +-4 +-35 +-63 +-86 +-35 +69 +74 +36 +-4 +-35 +-63 +-85 +-35 +70 +74 +36 +-1 +-33 +-62 +-84 +-104 +-104 +-44 +67 +82 +48 +11 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-110 +-31 +80 +95 +61 +22 +-13 +-44 +-69 +-91 +-109 +-29 +82 +96 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +25 +-11 +-42 +-67 +-90 +-107 +-27 +85 +98 +64 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +26 +-10 +-42 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +86 +100 +65 +26 +-10 +-42 +-67 +-89 +-107 +-26 +85 +99 +65 +26 +-10 +-41 +-67 +-89 +-107 +-26 +86 +100 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +26 +-9 +-41 +-67 +-89 +-106 +-26 +85 +99 +65 +26 +-10 +-41 +-67 +-89 +-106 +-26 +86 +100 +65 +22 +-14 +-45 +-69 +-14 +90 +94 +54 +12 +-22 +-51 +-76 +-22 +82 +85 +46 +5 +-28 +-57 +-80 +-28 +77 +80 +41 +1 +-32 +-60 +-82 +-31 +73 +77 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +69 +73 +36 +-2 +-34 +-62 +-84 +-104 +-104 +-44 +67 +81 +48 +11 +-23 +-53 +-76 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-94 +-110 +-31 +80 +95 +61 +22 +-14 +-45 +-69 +-92 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +99 +64 +21 +-14 +-45 +-70 +-14 +90 +93 +54 +12 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-59 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +71 +75 +37 +-2 +-35 +-62 +-85 +-34 +70 +74 +36 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +51 +16 +-20 +-49 +-74 +-94 +-112 +-33 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +60 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +15 +-19 +-49 +-73 +-20 +84 +87 +49 +7 +-26 +-55 +-79 +-27 +78 +82 +43 +3 +-30 +-59 +-82 +-29 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +6 +-28 +-56 +-81 +-100 +-101 +-38 +71 +88 +52 +16 +-20 +-49 +-74 +-95 +-112 +-33 +76 +94 +57 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +63 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +59 +16 +-19 +-49 +-73 +-19 +84 +88 +49 +8 +-26 +-55 +-78 +-26 +78 +83 +44 +3 +-30 +-58 +-81 +-29 +75 +80 +42 +1 +-31 +-60 +-83 +-32 +73 +77 +39 +-1 +-33 +-61 +-84 +-32 +71 +75 +37 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-1 +-33 +-61 +-84 +-104 +-103 +-44 +68 +82 +48 +10 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-47 +-72 +-93 +-111 +-31 +80 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +84 +98 +64 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +11 +-23 +-52 +-76 +-23 +80 +84 +45 +4 +-29 +-57 +-81 +-28 +76 +80 +41 +1 +-32 +-60 +-83 +-31 +73 +77 +39 +-1 +-33 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-34 +69 +74 +36 +-2 +-34 +-62 +-84 +-104 +-104 +-44 +67 +81 +47 +10 +-23 +-53 +-77 +-97 +-98 +-36 +75 +90 +56 +18 +-17 +-48 +-72 +-94 +-110 +-31 +79 +95 +61 +22 +-13 +-45 +-69 +-91 +-109 +-29 +83 +97 +63 +24 +-12 +-43 +-68 +-90 +-108 +-27 +83 +97 +63 +20 +-15 +-46 +-70 +-14 +90 +93 +54 +11 +-23 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +70 +87 +51 +16 +-20 +-49 +-74 +-95 +-112 +-32 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-18 +89 +97 +59 +16 +-19 +-49 +-73 +-20 +83 +87 +48 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +78 +40 +0 +-32 +-60 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-33 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-44 +62 +76 +40 +5 +-29 +-57 +-81 +-100 +-102 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-15 +-45 +-71 +-91 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-108 +-27 +83 +100 +63 +26 +-12 +-42 +-68 +-89 +-108 +-26 +84 +101 +63 +27 +-11 +-41 +-68 +-89 +-108 +-25 +84 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-25 +84 +101 +65 +28 +-10 +-40 +-67 +-88 +-107 +-24 +85 +102 +65 +28 +-10 +-40 +-67 +-88 +-107 +-24 +85 +102 +65 +27 +-10 +-40 +-67 +-88 +-16 +92 +98 +60 +16 +-18 +-48 +-73 +-19 +85 +89 +50 +8 +-25 +-55 +-78 +-25 +79 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +72 +76 +38 +-2 +-34 +-62 +-84 +-34 +70 +74 +36 +-4 +-35 +-63 +-85 +-35 +70 +74 +36 +-3 +-35 +-63 +-85 +-35 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +35 +-4 +-36 +-64 +-86 +-36 +69 +73 +34 +-5 +-36 +-64 +-86 +-36 +68 +72 +35 +-3 +-34 +-62 +-85 +-105 +-104 +-45 +66 +81 +47 +10 +-24 +-53 +-77 +-98 +-98 +-37 +75 +89 +55 +17 +-17 +-48 +-72 +-94 +-111 +-32 +79 +94 +60 +21 +-14 +-45 +-70 +-92 +-109 +-29 +82 +96 +62 +23 +-12 +-44 +-69 +-91 +-108 +-28 +83 +98 +63 +20 +-15 +-46 +-70 +-15 +89 +93 +54 +11 +-22 +-52 +-76 +-23 +81 +85 +46 +5 +-28 +-57 +-80 +-28 +76 +80 +42 +1 +-31 +-60 +-82 +-31 +73 +77 +39 +-1 +-33 +-61 +-84 +-33 +72 +76 +37 +-2 +-34 +-62 +-85 +-34 +71 +75 +37 +-3 +-35 +-63 +-85 +-105 +-45 +61 +76 +40 +5 +-29 +-57 +-81 +-100 +-101 +-39 +71 +88 +52 +16 +-20 +-49 +-74 +-94 +-112 +-32 +77 +94 +58 +21 +-16 +-45 +-71 +-92 +-110 +-29 +80 +97 +61 +24 +-13 +-43 +-69 +-90 +-109 +-27 +82 +99 +62 +25 +-12 +-42 +-68 +-89 +-17 +90 +97 +58 +15 +-19 +-49 +-74 +-20 +84 +88 +49 +7 +-26 +-55 +-79 +-26 +78 +82 +43 +3 +-30 +-59 +-81 +-30 +74 +78 +40 +0 +-33 +-61 +-83 +-32 +71 +76 +38 +-2 +-34 +-62 +-84 +-33 diff --git a/traces/README.txt b/traces/README.txt index 50b14aae..424092dc 100644 --- a/traces/README.txt +++ b/traces/README.txt @@ -15,3 +15,10 @@ Transit999-best.pm3: Transit 999 format (UID 99531670) 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'. + +ata5577-HIDemu-FC1-C9.pm3: ata5577 in hid prox 26 bit emulation facility code:1 card#:9 +casi-12ed825c29.pm3: casi rusco 40 bit (EM410x ID: 12ed825c29) +EM4102-Fob.pm3: (ID: 0400193cbe) +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 +indala-504278295.pm3: PSK 26 bit indala \ No newline at end of file