diff --git a/GenNet.py b/GenNet.py index 9ffa57b..7de1671 100644 --- a/GenNet.py +++ b/GenNet.py @@ -1,13 +1,16 @@ import sys import os import warnings + warnings.filterwarnings('ignore') import argparse + sys.path.insert(1, os.path.dirname(os.getcwd()) + "/utils/") from utils.Create_plots import plot from utils.Train_network import train_classification, train_regression from utils.Convert import convert + def main(args): if args.mode == 'train': if args.problem_type == "classification": @@ -23,19 +26,20 @@ def main(args): if __name__ == '__main__': - parser = argparse.ArgumentParser(description = "GenNet: Interpretable neural networks for phenotype prediction.", + parser = argparse.ArgumentParser(description="GenNet: Interpretable neural networks for phenotype prediction.", epilog="Check the wiki on github.com/arnovanhilten/gennet/ for more info") - subparsers = parser.add_subparsers(help = "GenNet main options", dest="mode") + subparsers = parser.add_subparsers(help="GenNet main options", dest="mode") - parser_convert = subparsers.add_parser("convert", help = "Convert genotype data to hdf5") + parser_convert = subparsers.add_parser("convert", help="Convert genotype data to hdf5") parser_convert.add_argument("-g", "--genotype", nargs='+', type=str, help="path/paths to genotype data folder") parser_convert.add_argument('-study_name', type=str, required=True, nargs='+', help=' Name for saved genotype data, without ext') - parser_convert.add_argument('-variants', type=str, help="Path to file with row numbers of variants to include, if none is " - "given all variants will be used", default=None) + parser_convert.add_argument('-variants', type=str, + help="Path to file with row numbers of variants to include, if none is " + "given all variants will be used", default=None) parser_convert.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") parser_convert.add_argument('-ID', action='store_true', default=False, - help='Flag to convert minimac data to genotype per subject files first (default False)') + help='Flag to convert minimac data to genotype per subject files first (default False)') parser_convert.add_argument('-vcf', action='store_true', default=False, help='Flag for VCF data to convert') parser_convert.add_argument('-tcm', type=int, default=500000000, help='Modifier for chunk size during TRANSPOSING' @@ -55,7 +59,7 @@ def main(args): parser_train.add_argument( "-problem_type", default='classification', type=str, - choices=['classification','regression'], + choices=['classification', 'regression'], help="Type of problem, choices are: classification or regression" ) parser_train.add_argument( @@ -110,11 +114,9 @@ def main(args): type=int, help="Only for layer weight: Number of the to be plotted layer", metavar="Layer_number:", - default = 0 + default=0 ) args = parser.parse_args() main(args) - - diff --git a/README.md b/README.md index 066e5df..04e5898 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ cd ~ python3 -m venv env_GenNet ``` -This automatically instals the latest Tensorflow version for which GenNet has been tested. If you have an older version of CUDA install the appriopriate tensorflow-gpu by +This automatically installs the latest Tensorflow version for which GenNet has been tested. If you have an older version of CUDA install the appriopriate tensorflow-gpu by `pip install tensorflow-gpu==1.13.1` (change 1.13.1 to your version). **Activate the environment** diff --git a/examples/example_regression/subjects.csv b/examples/example_regression/subjects.csv index f0112e0..d903bca 100644 --- a/examples/example_regression/subjects.csv +++ b/examples/example_regression/subjects.csv @@ -1,10001 +1,10001 @@ -,patient_id,labels,genotype_row,set -0,24794568,0.5319656428766518,0,1 -1,74186845,-0.729601699251835,1,1 -2,49969361,-0.5544813863244965,2,1 -3,84426429,0.5337409699490759,3,1 -4,78996046,0.29214550264723715,4,1 -5,81561851,-0.18701560717934185,5,1 -6,58088311,0.7172459389056197,6,1 -7,74541879,-0.3637505120412572,7,1 -8,83200009,-0.2176487723063433,8,1 -9,37370595,-0.6239154366402603,9,1 -10,71104697,-0.046555856805323384,10,1 -11,32145538,-0.9154086322859459,11,1 -12,30772371,-0.8766028047212864,12,1 -13,40952840,-0.885828392333322,13,1 -14,62131869,0.8253511793335039,14,1 -15,67504554,0.2365253507754626,15,1 -16,59664169,2.2763998470586637,16,1 -17,13158748,-1.609988009902023,17,1 -18,63236434,0.2026501391858132,18,1 -19,72827573,0.5717559184886608,19,1 -20,45172121,-0.5346354504708046,20,1 -21,26239782,0.8423246050523431,21,1 -22,78017193,-1.1198777869198855,22,1 -23,38211961,-0.13851603767765738,23,1 -24,52147302,1.5255178884036389,24,1 -25,32624303,-0.4180205706195031,25,1 -26,47652429,-0.10826552099717056,26,1 -27,43156133,0.679040132502939,27,1 -28,42697527,-0.7030760950608096,28,1 -29,14266053,-1.289683792098746,29,1 -30,29347890,0.10020399309679595,30,1 -31,54634606,0.8842077720221596,31,1 -32,41333654,2.1122138161657533,32,1 -33,70789302,0.5374708666702733,33,1 -34,75251333,-0.5819454122450638,34,1 -35,44732883,-1.6332974835396055,35,1 -36,63593634,-0.5923303699243794,36,1 -37,19393572,-1.2096917050184723,37,1 -38,76481689,-0.8456191546660822,38,1 -39,45263519,0.0478678520696311,39,1 -40,84580880,0.6018476772480383,40,1 -41,13931607,0.7168961533914746,41,1 -42,11242488,0.004038553025575875,42,1 -43,89681292,1.1296288193498252,43,1 -44,44046010,1.0309263125240462,44,1 -45,10629893,0.747170773859936,45,1 -46,64853113,0.46275402185527514,46,1 -47,25786387,-0.46669203385501434,47,1 -48,35592099,-0.5107681370371664,48,1 -49,18679380,2.3300801823481114,49,1 -50,33184838,-0.8096579552108014,50,1 -51,42968513,-0.6552414704021498,51,1 -52,36393584,0.6879762025238639,52,1 -53,40409630,0.06293427779498008,53,1 -54,44601042,-0.5046220262539671,54,1 -55,47725838,-0.967458192634192,55,1 -56,17832771,-0.23402053115435614,56,1 -57,41254121,-1.0021744672395871,57,1 -58,83587058,0.29883950023429917,58,1 -59,59102011,0.5601173880217891,59,1 -60,31342903,0.018165669187817347,60,1 -61,41590809,0.6462679245747638,61,1 -62,26451096,-0.24098168320472663,62,1 -63,24264313,-1.7354154173922645,63,1 -64,23049705,0.7570238199112646,64,1 -65,70408810,-0.13778498268444922,65,1 -66,57017055,-1.4419136598887556,66,1 -67,76331695,1.0410682674055372,67,1 -68,35535410,0.8724162429730041,68,1 -69,29621193,0.6837300246023247,69,1 -70,89517123,-0.09086202041426442,70,1 -71,86877861,-1.7907027894461032,71,1 -72,84596763,-1.1600481683050512,72,1 -73,32681689,0.6554665042862845,73,1 -74,78131769,-1.2598131086364432,74,1 -75,63692280,0.3151643180079777,75,1 -76,25116624,-0.39513482209019785,76,1 -77,53476611,0.3992446817528613,77,1 -78,51691648,-0.02548187072093612,78,1 -79,49821255,0.9733161609280564,79,1 -80,67965139,-0.6523184808167405,80,1 -81,15179387,-2.629990128991761,81,1 -82,48009117,1.549916465534141,82,1 -83,57978047,-0.10444679368148246,83,1 -84,43588856,-0.642989739043607,84,1 -85,79954171,-0.18572477195821296,85,1 -86,28806750,-0.10132459941214601,86,1 -87,64400761,-0.6568846581830845,87,1 -88,29680782,0.7722357523464082,88,1 -89,12809543,-0.06892608246569318,89,1 -90,82277584,-0.13895250282773627,90,1 -91,85784647,0.5737833368253401,91,1 -92,20506771,0.4432311877935155,92,1 -93,51535635,0.16193084573773153,93,1 -94,31884319,1.316176672789514,94,1 -95,23230268,0.3421060755577586,95,1 -96,69353898,1.7806031914858833,96,1 -97,44296259,0.5068987520298589,97,1 -98,53151610,0.5442729039184836,98,1 -99,20685727,-0.4569501487933433,99,1 -100,36041441,0.4544959343637594,100,1 -101,42408207,-0.39748075727296034,101,1 -102,15679381,0.8671239161167196,102,1 -103,12276156,-0.1888654030289689,103,1 -104,42568125,-1.5869385247898524,104,1 -105,43385757,-0.3718240960528919,105,1 -106,15357468,0.18316943548098794,106,1 -107,64492304,-1.8378414356828212,107,1 -108,53564846,0.8196697399697229,108,1 -109,37859586,-0.15518210614860609,109,1 -110,34996380,-0.19391601726979457,110,1 -111,86638443,-0.8439338504427057,111,1 -112,70360053,1.4451184345550427,112,1 -113,79477381,-0.7897023585949553,113,1 -114,81051874,0.46943496451478894,114,1 -115,45525837,0.17206493584345692,115,1 -116,30603736,-0.27159231682164964,116,1 -117,60449259,0.3335554058833118,117,1 -118,41751044,-0.46480060190361744,118,1 -119,48950706,-1.232461674380842,119,1 -120,14189089,2.4218505617854515,120,1 -121,34064710,-2.3043901047895647,121,1 -122,71575641,0.16311935853337053,122,1 -123,58162279,0.03286213566813906,123,1 -124,78198194,0.08631040124266039,124,1 -125,31952316,-1.0924087229063455,125,1 -126,13316889,0.36317164743401636,126,1 -127,66805541,-1.048154767783555,127,1 -128,75412893,-1.7693596534441969,128,1 -129,29632847,0.20864869568452457,129,1 -130,32456402,-0.26659617168830635,130,1 -131,81653364,1.2695214918417261,131,1 -132,75005866,0.4710638740898487,132,1 -133,42373021,-0.8063982625464449,133,1 -134,78715337,0.5953834211220154,134,1 -135,17967300,-1.2136435376408226,135,1 -136,16790822,1.354567437411251,136,1 -137,21525670,1.9133316083637082,137,1 -138,83704168,0.3840347586163706,138,1 -139,71398386,0.8781396619209209,139,1 -140,23993582,-0.32920825257273256,140,1 -141,45806461,1.5048348733103352,141,1 -142,19915428,-0.3205419873197252,142,1 -143,14852845,0.45864437867542096,143,1 -144,53061634,-0.5658890956238682,144,1 -145,42164013,-0.2918945468040887,145,1 -146,54708232,-0.9980127983828583,146,1 -147,31162965,-0.6029145205852297,147,1 -148,12846166,-1.5147191189652462,148,1 -149,76814085,-1.0233365516537904,149,1 -150,74397280,1.02973911531465,150,1 -151,25009993,0.5855966604563473,151,1 -152,14443948,-1.5466153978778006,152,1 -153,89387136,0.2877016417056578,153,1 -154,40085294,-1.9766307534098246,154,1 -155,19184793,0.35422067689828596,155,1 -156,43622395,0.25716785271720105,156,1 -157,35362100,-0.5391139762238036,157,1 -158,22099232,-1.2668747284871607,158,1 -159,50866640,-1.2391162528627142,159,1 -160,59910336,-1.1575531433220345,160,1 -161,37936065,0.46210658947864736,161,1 -162,35206714,0.22261739553065696,162,1 -163,51161475,0.06829243567851556,163,1 -164,15459892,0.6654019617296643,164,1 -165,35602038,0.8626621753174232,165,1 -166,83292027,0.34410701189559884,166,1 -167,60072913,0.09736317759458077,167,1 -168,72976216,0.8331005997963639,168,1 -169,19270065,-0.2876395921124364,169,1 -170,68814090,0.43803068639922005,170,1 -171,85831650,-1.7257144313937454,171,1 -172,84480388,1.3336365036410733,172,1 -173,20954363,-0.5859096269489589,173,1 -174,75628985,-1.132900107670141,174,1 -175,89798673,0.4718554262652074,175,1 -176,32261990,0.02784452396373848,176,1 -177,49145907,-0.5623001380620597,177,1 -178,14786829,-1.98423070932259,178,1 -179,67197313,1.9094062052799552,179,1 -180,22022576,0.6154214508652469,180,1 -181,11283987,-0.6505981474676129,181,1 -182,15315215,1.3206432542440671,182,1 -183,67813944,0.15217984607613352,183,1 -184,47013574,0.1325480052307718,184,1 -185,53412546,1.004098983629258,185,1 -186,53979800,-1.0272982361614251,186,1 -187,31186444,-0.6584369456051942,187,1 -188,26184682,0.3564146788795088,188,1 -189,66962174,-0.6810581013344036,189,1 -190,89468363,0.9834780412684616,190,1 -191,66286000,-0.3144203760064692,191,1 -192,82083864,0.3998452437849888,192,1 -193,44328872,-0.62175716957306,193,1 -194,42897664,-1.0884751361056766,194,1 -195,45201919,0.7466480526354231,195,1 -196,12844117,0.10192017554337408,196,1 -197,38393344,0.5868243385756602,197,1 -198,35976214,-0.504637609781961,198,1 -199,51040075,-0.4918916278051339,199,1 -200,43050614,-0.9586535254278498,200,1 -201,14256563,1.3784917620862591,201,1 -202,78120753,0.5711224885114243,202,1 -203,40762192,-0.24175769905214495,203,1 -204,50178355,-0.23659016992769424,204,1 -205,41783929,-0.2838591115341926,205,1 -206,71661117,-0.9896545953769619,206,1 -207,43394026,0.5726422659496683,207,1 -208,78617708,-0.2297866042476367,208,1 -209,88097866,2.822876604460213,209,1 -210,43927340,0.7410991527227299,210,1 -211,11295929,0.9878009284857916,211,1 -212,18677132,-0.6038257990909829,212,1 -213,29523231,-0.1264345643419917,213,1 -214,10734634,0.13935566119249884,214,1 -215,49104124,1.8218952131936896,215,1 -216,10251388,-0.7275255550506836,216,1 -217,54612796,0.19155009927887626,217,1 -218,57727941,-1.47044984983213,218,1 -219,42650861,0.17036213652754667,219,1 -220,23336737,1.0430458720756584,220,1 -221,55111952,0.3656492310226854,221,1 -222,30209930,1.1666027979851157,222,1 -223,48098086,0.22790343496654028,223,1 -224,83951904,0.6729784881676146,224,1 -225,84963964,0.030389093378757868,225,1 -226,61358831,-1.1549477897042821,226,1 -227,48270672,1.5613379319265566,227,1 -228,83555084,-0.6311706165848088,228,1 -229,17167619,-0.013364032198264927,229,1 -230,25355807,0.7678475936738833,230,1 -231,67337583,1.0238391119751862,231,1 -232,32748077,0.5197239927535335,232,1 -233,21791689,-0.18472975754935267,233,1 -234,85495436,0.050566882939505606,234,1 -235,74673373,0.05973177882964007,235,1 -236,50479072,-1.2693142734163612,236,1 -237,19138590,1.0452296010713742,237,1 -238,30948846,1.501720326977399,238,1 -239,22530538,-1.2136510192986572,239,1 -240,33775783,1.9859969844240146,240,1 -241,78213892,0.2853349806933915,241,1 -242,81038495,-0.2538665464196779,242,1 -243,73903443,-0.6745858569124491,243,1 -244,88989806,0.22845711716803777,244,1 -245,21568920,-0.04696990417081928,245,1 -246,33903488,0.2733744055622791,246,1 -247,32378010,1.3651150589366594,247,1 -248,76465894,-0.6517745446303926,248,1 -249,33898312,0.12329778524702566,249,1 -250,56984853,-0.9913478428391972,250,1 -251,45876169,0.07717140662697025,251,1 -252,81390256,0.41286620893161124,252,1 -253,76705880,1.0472957558829328,253,1 -254,18491901,2.6790586644454333,254,1 -255,31621041,-0.03251498242671627,255,1 -256,69547514,-1.255131524217774,256,1 -257,71571988,-0.6389152231208924,257,1 -258,30684291,-0.5616072264510804,258,1 -259,53031661,1.1657388696950899,259,1 -260,56642310,2.418525267821949,260,1 -261,51761829,0.3863522238210501,261,1 -262,79443048,0.35833628043346505,262,1 -263,14167638,-1.0797760871955304,263,1 -264,79670673,-1.3340616789015916,264,1 -265,11015462,-1.406765060769307,265,1 -266,34168989,-2.1125812448966808,266,1 -267,40969956,0.1974525224605706,267,1 -268,38598650,-0.2077129278456422,268,1 -269,42163342,-0.6937456171464745,269,1 -270,17475189,-0.3726062056912678,270,1 -271,73172520,-0.04724882166852857,271,1 -272,73358063,-1.6830357302581604,272,1 -273,79766458,0.07506959943142102,273,1 -274,76141590,-0.9555686348694562,274,1 -275,32986066,0.826701927444988,275,1 -276,88264116,-1.973167649855011,276,1 -277,75769232,-0.11586052380466494,277,1 -278,89682482,-1.3166039223463737,278,1 -279,28673384,-0.40089142267811,279,1 -280,36078973,-0.5295199451658575,280,1 -281,60983062,-0.16212241879866793,281,1 -282,75668655,0.47084167334349436,282,1 -283,76764836,0.5061047077885549,283,1 -284,52469376,0.12470924275853575,284,1 -285,32676237,1.319989547185669,285,1 -286,23444791,-0.19708032077664459,286,1 -287,59495827,0.4199485323475186,287,1 -288,52505198,-0.5657405239158496,288,1 -289,13324527,-1.7347810784745528,289,1 -290,72967906,2.880598774504615,290,1 -291,46500558,-0.7744963637382704,291,1 -292,54351249,-1.4330634350037543,292,1 -293,87654686,0.35149004121076843,293,1 -294,11206386,-0.4006810937033868,294,1 -295,38176113,-0.5523261756952144,295,1 -296,30691329,0.9276471952531189,296,1 -297,18813863,0.1460938362644864,297,1 -298,47703304,-0.041890173019265904,298,1 -299,78647509,0.2591716760465806,299,1 -300,87004898,-0.13733212764622219,300,1 -301,48678727,0.14439844631319357,301,1 -302,67731172,-0.7434920852461748,302,1 -303,52456482,-0.8651385506649854,303,1 -304,34283594,0.44027577818129343,304,1 -305,16500433,0.23345535549856394,305,1 -306,65898415,0.23173810325642794,306,1 -307,48476124,-0.5056856122311207,307,1 -308,68728278,0.5159327625553347,308,1 -309,71310620,-0.42101762228692863,309,1 -310,75386435,0.7356013177451709,310,1 -311,77128996,1.5574600079211462,311,1 -312,27818258,-0.5763445468341648,312,1 -313,68377865,0.06523873820839259,313,1 -314,41793177,0.7868309502119616,314,1 -315,72377441,0.2862537091007011,315,1 -316,56407844,1.5599694648804847,316,1 -317,70154889,0.8861616414745475,317,1 -318,40091076,-0.5401727815357905,318,1 -319,46741246,0.03537951115865719,319,1 -320,35640470,-0.21541661006299065,320,1 -321,73821182,0.039465027041310885,321,1 -322,68773902,0.639729259797776,322,1 -323,70319758,0.24947662016396202,323,1 -324,56771721,-1.3475413321205525,324,1 -325,41177408,-1.0341404110495318,325,1 -326,34530198,-0.10130249519344402,326,1 -327,88652308,1.173234212191884,327,1 -328,67991975,-1.4949098653984871,328,1 -329,81855085,1.9340381644560136,329,1 -330,48379672,-0.8913387412851291,330,1 -331,34124931,-0.09296110631345889,331,1 -332,38506565,-1.6841341628543094,332,1 -333,52575093,-0.3287153118625172,333,1 -334,60380183,0.8633613982767179,334,1 -335,69989379,-1.5431246561743575,335,1 -336,31518783,0.7710732241321444,336,1 -337,69055654,0.7457165708305425,337,1 -338,39285683,0.40631350229764174,338,1 -339,18770488,0.019930680670841684,339,1 -340,32004104,0.015141398237390627,340,1 -341,45101041,0.38371050755166203,341,1 -342,63573483,1.2949107204655996,342,1 -343,22175745,0.8987437879647552,343,1 -344,89097761,1.3055742742636454,344,1 -345,64502246,-0.010572561438074703,345,1 -346,32481066,-0.8388733123086474,346,1 -347,60453069,-0.6095468964228182,347,1 -348,74704337,0.9385624838380552,348,1 -349,69734147,0.2912721872691887,349,1 -350,55419271,0.8499157283003741,350,1 -351,20729153,-0.37733233284523404,351,1 -352,60676869,-1.6257533929071473,352,1 -353,17700651,2.6849778334433396,353,1 -354,11599466,1.5449962595638322,354,1 -355,47564223,-1.2243217558611954,355,1 -356,10501425,1.9539481187837011,356,1 -357,58143067,2.0084002876320786,357,1 -358,65193904,-0.7530489468299612,358,1 -359,73311952,0.9128436313839372,359,1 -360,85283311,-0.28801082085863255,360,1 -361,17145328,-0.3166202380258422,361,1 -362,77636933,0.302393743495144,362,1 -363,40756100,0.4366709997512225,363,1 -364,39913156,0.35101241599173744,364,1 -365,65321173,1.4264275476961807,365,1 -366,62970450,-0.4683646785517421,366,1 -367,81514325,-0.46428234798331847,367,1 -368,57137610,-0.03190626143594503,368,1 -369,43980447,-0.5310093043836444,369,1 -370,38560818,1.4439327701110722,370,1 -371,37509001,-1.5192058264410888,371,1 -372,88314271,-0.496379385280763,372,1 -373,28972600,-0.8414787488031946,373,1 -374,33585179,0.31724548419040693,374,1 -375,15385767,-1.8516507638340198,375,1 -376,37937391,-2.655985142867193,376,1 -377,89501766,-0.37189280637880606,377,1 -378,24983357,0.7163358981840576,378,1 -379,64525529,-0.546323897613258,379,1 -380,30568525,0.861132088031206,380,1 -381,76489781,0.35741874012676295,381,1 -382,72104132,-0.7249402217348666,382,1 -383,18207917,-1.4241807934586403,383,1 -384,65257326,-0.7345395534158748,384,1 -385,79087978,-0.19295769571753793,385,1 -386,34088333,-1.3181231631359625,386,1 -387,20105202,-0.5023985566524914,387,1 -388,14443517,-0.4601789470723961,388,1 -389,78309371,-1.9216411443273533,389,1 -390,12965355,1.1217086738673279,390,1 -391,22284769,-1.3539626068844628,391,1 -392,49931651,-0.34320126176827287,392,1 -393,60500729,1.7665351376940244,393,1 -394,25097032,0.7071421395600758,394,1 -395,27882796,-2.021279092506793,395,1 -396,33585357,-0.24719657819922322,396,1 -397,12608338,-1.4352117852522548,397,1 -398,16018089,-1.1331206607170057,398,1 -399,25303560,-0.7810926437441232,399,1 -400,48362249,0.9812401275146301,400,1 -401,69868667,-0.24225345858295771,401,1 -402,22986995,-0.5768829693515677,402,1 -403,50213712,0.00110097606035378,403,1 -404,75135964,0.45267156690790183,404,1 -405,55611279,0.370974374738652,405,1 -406,72216832,-0.3121963041108646,406,1 -407,59289888,1.539498666676728,407,1 -408,89164533,-0.4067868876997269,408,1 -409,80591014,-0.3458926601583037,409,1 -410,28087361,0.09291341536190177,410,1 -411,35442800,-0.01673243160475882,411,1 -412,54279926,-0.7833879219331621,412,1 -413,66697382,0.6769731126960304,413,1 -414,83884686,-0.6422153703725365,414,1 -415,79614317,0.6455326690367031,415,1 -416,74489449,0.31417059509603873,416,1 -417,53661765,1.7755559312458218,417,1 -418,69887164,-0.8831334971819198,418,1 -419,65854092,-1.5103060543781264,419,1 -420,50765511,-0.982333338167177,420,1 -421,53281786,-0.22369420404875842,421,1 -422,30102225,0.03495306917029903,422,1 -423,50015862,1.3557647269988002,423,1 -424,10168298,0.1278832261418448,424,1 -425,19363643,0.001201810438322648,425,1 -426,48718829,-0.8580350856131821,426,1 -427,63869562,0.2374614046587537,427,1 -428,43220773,1.2152166026209381,428,1 -429,43445429,0.4104162693727108,429,1 -430,34948382,0.7930609075493662,430,1 -431,65356672,-1.3930244650573962,431,1 -432,56774268,0.6702364472285668,432,1 -433,58631107,-1.7650604093940638,433,1 -434,75002509,-0.6884044447645904,434,1 -435,59705310,0.13724870418798188,435,1 -436,66568351,1.2272969388116728,436,1 -437,10376409,1.3486494984411634,437,1 -438,56146573,-0.26936485777501223,438,1 -439,12221292,-0.23590311851898607,439,1 -440,54703417,-0.819485528179474,440,1 -441,20686360,-0.37583782079773037,441,1 -442,53972574,-0.5513820899259871,442,1 -443,47444174,0.5306458109337513,443,1 -444,66745696,-0.7452699165326719,444,1 -445,15159354,-1.3341230327136238,445,1 -446,56358240,2.324495990654425,446,1 -447,85631297,-0.8681388412183352,447,1 -448,36393013,-0.7883558333955799,448,1 -449,12573902,-0.6255344661693596,449,1 -450,59619693,0.3994498927964185,450,1 -451,15164856,0.38199958366463993,451,1 -452,57652483,-1.6167441263026316,452,1 -453,67295361,-0.5311062287451841,453,1 -454,37656756,-0.034448926305497424,454,1 -455,26449046,1.2477297622161299,455,1 -456,41443351,-0.39183721257929455,456,1 -457,60058135,2.172107272311516,457,1 -458,21856933,-0.8613057034407524,458,1 -459,32264326,1.0273360879644087,459,1 -460,41818349,-0.28883705939301685,460,1 -461,77184366,0.08392304820287627,461,1 -462,30982635,-1.1004257691219685,462,1 -463,61063350,0.2734163115748904,463,1 -464,88672495,0.7104472080842251,464,1 -465,83490452,0.18449781088563627,465,1 -466,12560057,-0.35806994240651724,466,1 -467,16748739,0.014072408492992112,467,1 -468,16489655,-0.9623451921488517,468,1 -469,87567917,-0.7321598230649098,469,1 -470,21087074,-0.528551101754955,470,1 -471,84296369,-0.19462944409841737,471,1 -472,82590903,1.6629345795479429,472,1 -473,89095381,-0.36240541294608103,473,1 -474,85141871,-0.9118182849145686,474,1 -475,86998830,-0.2907946356647304,475,1 -476,75649711,-0.10056793335284711,476,1 -477,61071231,-0.8420914301151344,477,1 -478,25073437,-0.4557822805799907,478,1 -479,70243130,0.7942836875988172,479,1 -480,79474284,-0.39894765432660495,480,1 -481,13089709,0.14512488615713057,481,1 -482,33905506,0.3625664145494958,482,1 -483,86373312,2.0375392265923304,483,1 -484,70447032,-1.8855019641940736,484,1 -485,63833084,0.8733551861443728,485,1 -486,52837420,-0.9390018441215869,486,1 -487,42939298,1.6650039722376355,487,1 -488,28067218,-1.4937596647030746,488,1 -489,84965781,-0.17862628754304183,489,1 -490,36888616,-0.474463721188608,490,1 -491,81534233,-0.6248649852209482,491,1 -492,48855299,-1.2423946767251066,492,1 -493,68484286,-1.5741288174855028,493,1 -494,85389462,0.8236329603913684,494,1 -495,11056750,1.5746069975096406,495,1 -496,76510338,2.1836252622947137,496,1 -497,58551086,0.8417898074003922,497,1 -498,69104103,0.6337895722624265,498,1 -499,16018000,0.6508067898420405,499,1 -500,83008783,1.3903016415907936,500,1 -501,83147085,0.7417408828771983,501,1 -502,57838612,0.32065021955652717,502,1 -503,55351249,0.9574456427590062,503,1 -504,18257185,0.3285495072196871,504,1 -505,42396073,-0.24102225504038777,505,1 -506,63585046,-1.3215210518607254,506,1 -507,17208650,-0.22464021691012245,507,1 -508,86132701,-0.7070717842296029,508,1 -509,72437112,0.7776141484940182,509,1 -510,82424210,0.5646829255064283,510,1 -511,71221665,-0.08697244406561044,511,1 -512,70735364,-0.3425872969264839,512,1 -513,20526362,0.5373375456155692,513,1 -514,67594384,0.400975481443002,514,1 -515,79394026,-0.7552816179445062,515,1 -516,79504186,-0.02883580053956988,516,1 -517,47876740,-0.7339318795247322,517,1 -518,79756842,0.8987871999060388,518,1 -519,62193539,-1.0452288954665105,519,1 -520,83522395,0.6931955533830855,520,1 -521,39167178,-0.8499731525179706,521,1 -522,71566282,-0.07368664696158188,522,1 -523,86985384,0.5634939003688664,523,1 -524,88076412,-1.406786649971634,524,1 -525,56916156,1.5013923404901257,525,1 -526,73530811,0.48216812129251413,526,1 -527,53729181,-0.4693180611015954,527,1 -528,45654299,-0.4783989751556311,528,1 -529,49835759,0.10607894466281845,529,1 -530,56423983,0.5187719358870856,530,1 -531,31887476,-1.672099669078432,531,1 -532,10384345,0.7970085505691503,532,1 -533,40993121,0.7202938186764423,533,1 -534,86008480,0.1179227192695393,534,1 -535,31632366,1.043409577239665,535,1 -536,36171864,-2.282612258367806,536,1 -537,19845880,0.7162602280797198,537,1 -538,22090581,-0.9701797200166187,538,1 -539,63927618,0.5190769310029849,539,1 -540,10008749,-1.6451122921027521,540,1 -541,48270901,0.2601006738174077,541,1 -542,63376415,1.7560856075846512,542,1 -543,60719104,0.19737815397986055,543,1 -544,28831768,-1.9228860668309897,544,1 -545,75489649,-0.3810318533445531,545,1 -546,12952571,0.2347699472033514,546,1 -547,41314261,1.2611700768954783,547,1 -548,39172844,-0.31575125333681214,548,1 -549,15210789,-0.5472934124932777,549,1 -550,19521055,-0.48023456640552625,550,1 -551,17414785,-0.9806729207264409,551,1 -552,25214321,0.9733299462105978,552,1 -553,64562753,0.9169764258801514,553,1 -554,89910838,-1.3888670767997178,554,1 -555,66688757,0.07141135460696611,555,1 -556,43779845,0.032294639204380506,556,1 -557,47269629,0.0056608464146842155,557,1 -558,53477773,-0.12188195725459806,558,1 -559,67403814,-0.6561027489657583,559,1 -560,76947223,1.0576726181968805,560,1 -561,54368379,-1.023809394821234,561,1 -562,46726520,-1.191757603806634,562,1 -563,21828683,1.19177048477588,563,1 -564,63051029,-0.9486219412748244,564,1 -565,83585687,0.34876352439308683,565,1 -566,56526244,-1.1229053870498071,566,1 -567,44516871,-0.04615146367303646,567,1 -568,21653171,-1.0180626418973564,568,1 -569,72374748,-0.39234823125413376,569,1 -570,43301635,-0.48898241712460483,570,1 -571,25842007,-0.32307430344795524,571,1 -572,85850858,-1.0353390673168983,572,1 -573,62005071,1.7147925940817375,573,1 -574,52770759,0.2785682252227038,574,1 -575,26839642,-0.2977001816054909,575,1 -576,54149358,0.6762339060438874,576,1 -577,85285605,0.5142814808370034,577,1 -578,41861387,-1.0476651740707328,578,1 -579,33243027,0.4873498906223197,579,1 -580,76979909,1.0314864450892829,580,1 -581,85416243,-0.22293679156820315,581,1 -582,29141852,0.15668138060943895,582,1 -583,32184293,-1.9221625373546287,583,1 -584,34048724,0.9133155886840079,584,1 -585,28428196,1.645934770329765,585,1 -586,86999492,-0.22877140133708096,586,1 -587,85690472,-0.12130093897991033,587,1 -588,55388177,0.6926698134066345,588,1 -589,45642369,-1.3659369591383752,589,1 -590,78629542,-0.14610107470977854,590,1 -591,41890572,1.3096721250127317,591,1 -592,67207893,0.8014753975284631,592,1 -593,23821744,-0.18984735709095044,593,1 -594,79057339,0.4484644037842601,594,1 -595,35630729,0.3858186326088277,595,1 -596,59191620,1.6178274394582477,596,1 -597,24859213,1.0281526813920958,597,1 -598,74611885,-0.1579197334065411,598,1 -599,69082543,0.5554331862218159,599,1 -600,35683136,0.5265133803810257,600,1 -601,41583844,-1.1778234090735178,601,1 -602,28619533,0.994682278474656,602,1 -603,70147165,-0.2734957061402964,603,1 -604,47340590,-0.5913641849583969,604,1 -605,25686459,-0.5510718236891707,605,1 -606,70864962,-2.680879589371387,606,1 -607,32043262,0.8273471235129196,607,1 -608,89714325,0.10007796504405432,608,1 -609,63806156,0.06256159425687277,609,1 -610,13415072,-0.3437056622730533,610,1 -611,52207947,0.17483264346198732,611,1 -612,49353250,1.313389412931454,612,1 -613,14643757,-1.1990485610766723,613,1 -614,32297387,-0.41385404730327885,614,1 -615,44783134,-0.6879630269259183,615,1 -616,12900117,1.7894019606435136,616,1 -617,15718762,-1.5735961131655076,617,1 -618,18400820,-1.1502569202245678,618,1 -619,13416938,-0.08771118607194867,619,1 -620,89363414,0.603723995199596,620,1 -621,40554130,0.17677702231362816,621,1 -622,79477759,-2.0524710926378398,622,1 -623,84756979,0.9386427664622815,623,1 -624,32564068,0.4937209802118456,624,1 -625,89358898,-0.16066349394008833,625,1 -626,45858710,2.5715789843987724,626,1 -627,43745703,-0.588986905577091,627,1 -628,64546987,0.35270503814290055,628,1 -629,81672002,-1.231345485534459,629,1 -630,37738865,0.8115409977127294,630,1 -631,22300621,0.8864845201425531,631,1 -632,19345123,1.6963339250351182,632,1 -633,17866624,-0.46812096681951676,633,1 -634,76121080,-0.6661128281349264,634,1 -635,22200200,-0.11239891940334178,635,1 -636,71006342,-0.8848224519084564,636,1 -637,64158515,0.2185725224076154,637,1 -638,60536016,1.0511993554039378,638,1 -639,44176870,-0.639231037388804,639,1 -640,81550236,-0.08950275294993965,640,1 -641,21536934,0.3591506826638005,641,1 -642,45210676,-0.8387852967445274,642,1 -643,64740846,-0.18487386641548811,643,1 -644,71011950,0.6189545026769675,644,1 -645,55686401,-2.472065418119775,645,1 -646,31925506,-1.0234290514270759,646,1 -647,59571272,0.9555560906722786,647,1 -648,36513803,-0.5309928381903625,648,1 -649,35235400,1.1248644102693597,649,1 -650,89140977,-0.22175088240452756,650,1 -651,63576311,0.6528862957540831,651,1 -652,25018279,-0.4334863170927044,652,1 -653,67235947,-0.5437271418296957,653,1 -654,49552729,-1.2152377927656888,654,1 -655,78750649,-0.7629837990318199,655,1 -656,87667861,-1.4662362323004177,656,1 -657,59045258,0.0725986966152942,657,1 -658,88303249,-1.0785755761215237,658,1 -659,54911322,1.5568397072916775,659,1 -660,50646228,-0.1228695985104863,660,1 -661,22321976,-0.3096756249591749,661,1 -662,64579699,1.5572804253085404,662,1 -663,45731584,-0.0896335784532943,663,1 -664,41287261,-0.5520050998677558,664,1 -665,63767466,-0.46520727089406666,665,1 -666,40756499,0.4514743858892665,666,1 -667,79861990,-1.128074461671576,667,1 -668,53943512,0.24837465633959643,668,1 -669,71831607,-0.16808200611409813,669,1 -670,37149143,-0.9512653086782183,670,1 -671,71337529,-1.4931045102627998,671,1 -672,43131801,0.8745908149947164,672,1 -673,70923809,0.46962450118206,673,1 -674,13417117,0.06917007668289069,674,1 -675,38477046,0.6825303883362185,675,1 -676,17718310,-0.9670162954173036,676,1 -677,37907886,-0.1199292514833107,677,1 -678,24713834,-0.3301547746616826,678,1 -679,72554001,0.04977752802107027,679,1 -680,47513996,-0.34215652295173354,680,1 -681,46484992,-1.328892407387115,681,1 -682,32254721,-0.2681763665707289,682,1 -683,40455993,0.8021312037230942,683,1 -684,25592801,0.15723481691535046,684,1 -685,24843273,-0.29506238383981986,685,1 -686,43251418,1.6111353339466934,686,1 -687,38218960,-0.21093921799471818,687,1 -688,77372919,-0.9152401949766439,688,1 -689,84238871,-0.7999404540504175,689,1 -690,53715985,0.018374676764851126,690,1 -691,71135507,-0.2933208895153202,691,1 -692,23525062,0.12708676100339256,692,1 -693,39354295,0.6108045695353242,693,1 -694,50200640,0.519198963109292,694,1 -695,40311421,-0.20276165077313257,695,1 -696,66209288,-0.5738934182510993,696,1 -697,24537923,-0.10155770920812372,697,1 -698,34306473,1.5598979016940473,698,1 -699,10233631,-0.7260610768337759,699,1 -700,68343183,0.937421627883756,700,1 -701,46433194,-0.33833969308878226,701,1 -702,66407858,-0.723105785056433,702,1 -703,73856001,0.5819784480864841,703,1 -704,11054513,0.16501079691129908,704,1 -705,80522036,0.00016964301584909458,705,1 -706,89171159,0.41269190005687223,706,1 -707,67973764,0.21359529233102975,707,1 -708,67807594,1.132267899201392,708,1 -709,86385778,1.0674547081277248,709,1 -710,62033911,0.09031624796555554,710,1 -711,20787170,1.6721280493921427,711,1 -712,85834112,1.6346015989316254,712,1 -713,88609398,-0.6751690899112228,713,1 -714,20399148,0.9211607777425453,714,1 -715,76028155,2.6743330259842772,715,1 -716,40151462,0.002323369620863513,716,1 -717,35764760,-0.9864036975391162,717,1 -718,73565716,0.08402396844726859,718,1 -719,80388382,1.9184585032740842,719,1 -720,61207520,-0.2793292929431106,720,1 -721,19683344,-1.013233147891322,721,1 -722,84372869,0.6304831090881874,722,1 -723,81870991,-0.14105436449128553,723,1 -724,82912221,-1.2282701494966726,724,1 -725,77611071,0.5919556678417787,725,1 -726,21210901,0.01173128610210706,726,1 -727,25383127,0.06842586396178633,727,1 -728,14048800,-0.8255214006409294,728,1 -729,33910984,-1.8415582285426093,729,1 -730,32648317,-0.7249447246409932,730,1 -731,12757903,0.5846073418069869,731,1 -732,77018827,-0.5268140275599459,732,1 -733,10198328,0.7802534692225676,733,1 -734,24325256,1.182607558601117,734,1 -735,86376261,-0.679791484231865,735,1 -736,79201454,1.2984209702867202,736,1 -737,69133198,1.461037660744136,737,1 -738,52008263,0.784241833794332,738,1 -739,86535226,0.08550424736911848,739,1 -740,83854122,0.5209338711085204,740,1 -741,55168251,-0.1531595764228051,741,1 -742,39678829,0.4824190250890245,742,1 -743,26866098,0.015986437912334454,743,1 -744,66117637,-0.062003317709489,744,1 -745,17397610,0.5304113593775208,745,1 -746,21256259,0.048796621172558986,746,1 -747,79099071,-1.4747562852253417,747,1 -748,16883709,0.3258433362421568,748,1 -749,64890697,-0.15026597951107698,749,1 -750,28784884,0.3661097243551599,750,1 -751,68869286,0.3034864299186828,751,1 -752,57494900,-0.419024102645037,752,1 -753,19969080,1.5608616110923939,753,1 -754,18123823,0.668296540194137,754,1 -755,64617468,0.3127313520556373,755,1 -756,59759952,-1.4943007243011444,756,1 -757,21635650,-0.040972466531847315,757,1 -758,12509488,-0.504202775057493,758,1 -759,10023399,-0.2964906336143504,759,1 -760,29910806,-0.19745238563460157,760,1 -761,70220353,-1.5289462889131538,761,1 -762,27571195,-0.3706954307198534,762,1 -763,15313585,-0.5434540194959856,763,1 -764,13298869,2.847707044794738,764,1 -765,64377639,-0.35815088792914956,765,1 -766,74481060,-0.21272972862874975,766,1 -767,50607561,-0.31509934560393676,767,1 -768,46512400,0.09728286738744918,768,1 -769,76396414,1.3998583537111298,769,1 -770,51339040,0.16443510900489414,770,1 -771,64651182,0.8254553927075348,771,1 -772,51337179,1.5826247468319712,772,1 -773,58037750,-0.2380825493459796,773,1 -774,32819141,-0.8465173241485257,774,1 -775,33312380,-0.50463239197142,775,1 -776,31296309,-1.1541247113575213,776,1 -777,89236817,1.5718021967860678,777,1 -778,85595942,-0.2557656884720755,778,1 -779,51980023,-1.6814993302439927,779,1 -780,42652768,-0.6957423812332287,780,1 -781,20205526,-0.32725354850349286,781,1 -782,57614003,-0.535896000855437,782,1 -783,47925532,-0.13622585927596462,783,1 -784,53489815,0.7149929654678975,784,1 -785,73482594,1.9183319987102705,785,1 -786,17542167,1.554290713677411,786,1 -787,70893822,0.5498804425325318,787,1 -788,40224528,0.012453346381875561,788,1 -789,31707784,1.4662006239997332,789,1 -790,13848485,0.7834682729202498,790,1 -791,31656729,-1.6947406233198838,791,1 -792,85285626,0.1639850146732898,792,1 -793,64031657,-0.3296112618515535,793,1 -794,54443115,-1.1749471754611698,794,1 -795,26208362,0.7077481959417928,795,1 -796,75860480,-0.07678389035125313,796,1 -797,21314810,-0.09256658792792644,797,1 -798,15636875,0.862954341576177,798,1 -799,54556167,-1.5439963136616057,799,1 -800,11241262,-0.2641822999134635,800,1 -801,38911613,0.3206336860374626,801,1 -802,40089338,0.45450791340509245,802,1 -803,40539673,0.3450591295139542,803,1 -804,27201551,-0.39238413421357726,804,1 -805,47672761,0.5612687161479214,805,1 -806,68402455,-0.1082704141790145,806,1 -807,24953565,0.12897113171158234,807,1 -808,43880058,-1.1605931948089685,808,1 -809,64131714,-0.7472728423629821,809,1 -810,54615840,-1.7198910543313481,810,1 -811,89393864,0.062101727458507325,811,1 -812,53357420,0.9624710244551605,812,1 -813,39871599,0.17995901029503675,813,1 -814,59794659,-0.27740488809990227,814,1 -815,44924631,3.731185661336451,815,1 -816,64277149,-0.6665925545142118,816,1 -817,30535994,0.4011746312233301,817,1 -818,25230840,0.06900482552404576,818,1 -819,81313816,-0.6861536293787421,819,1 -820,18525990,1.7061698467936963,820,1 -821,64259424,1.5913052700559214,821,1 -822,64861186,-0.731980294574,822,1 -823,66322490,-1.2790824691858955,823,1 -824,70045518,-0.560441294051378,824,1 -825,17949365,-1.557877180858214,825,1 -826,76060868,1.9142254735187623,826,1 -827,70064101,-0.9273798520719467,827,1 -828,77539856,1.0222309043130309,828,1 -829,20197574,-0.6792545468222857,829,1 -830,37917150,-0.20984519721580844,830,1 -831,62745318,-0.6369983013801614,831,1 -832,87783770,-0.15062628725855845,832,1 -833,28920773,0.29098112820571054,833,1 -834,58855862,-2.3287991535312615,834,1 -835,84348137,-0.2920290733349693,835,1 -836,41403642,-0.8908527941795961,836,1 -837,26009378,-1.2457555394879465,837,1 -838,14959511,0.24850676563242327,838,1 -839,83393972,-0.18384603583242756,839,1 -840,41115703,0.6365698263067342,840,1 -841,53951539,0.5989039679382236,841,1 -842,63836526,-0.7221367844635999,842,1 -843,19157157,1.0071918633921957,843,1 -844,17043274,-0.6174039446776313,844,1 -845,31356265,0.7010456973167964,845,1 -846,68149992,1.0661755479188555,846,1 -847,78221177,-1.62643962001837,847,1 -848,62539580,-0.2802898165070192,848,1 -849,64093160,-2.083430715576534,849,1 -850,49797400,-1.1481579532904602,850,1 -851,20817296,0.5064978991075856,851,1 -852,51044745,0.194899330499047,852,1 -853,45390418,0.7566100568452525,853,1 -854,20172263,0.9935784970842853,854,1 -855,36119365,-3.722455776574231,855,1 -856,61680086,-1.5763286896431694,856,1 -857,57894668,-0.3856741873242129,857,1 -858,63357232,0.9671621555158111,858,1 -859,71705042,1.0885308549859598,859,1 -860,58535502,-1.3374296268814587,860,1 -861,60250986,0.6518872605437671,861,1 -862,16114298,-0.10581437496897451,862,1 -863,81406016,-0.9564996097635117,863,1 -864,38438072,-0.28770057312783714,864,1 -865,87508770,1.642469871349161,865,1 -866,31962998,-0.4532156859411838,866,1 -867,14693641,-0.23772989036983497,867,1 -868,37640838,-0.7694851235317992,868,1 -869,54227267,0.6038026007793161,869,1 -870,18331384,0.2208675378916883,870,1 -871,88951252,-0.16614705234696966,871,1 -872,10922932,-0.5135007196148453,872,1 -873,39310232,-1.6127723487958876,873,1 -874,14747378,-0.32435610306677987,874,1 -875,25172007,0.34698155694689664,875,1 -876,75182167,0.35344362073314894,876,1 -877,21256707,-0.10704537626248137,877,1 -878,18815174,0.011502231678791046,878,1 -879,67718469,0.06276279597512653,879,1 -880,85939176,0.12186171423791106,880,1 -881,70261961,0.5264066147263429,881,1 -882,64142902,-0.2919054489611351,882,1 -883,71491744,0.8684689595783209,883,1 -884,15688225,0.14595035344209886,884,1 -885,39631370,0.6723372285063205,885,1 -886,10619578,0.6181981602469814,886,1 -887,43351685,-0.05903401726725187,887,1 -888,33346352,-0.3998524471368204,888,1 -889,29693357,1.2843604469384804,889,1 -890,41728077,2.7464658485226896,890,1 -891,12628360,-0.6253765865463791,891,1 -892,45884490,0.5100397793498425,892,1 -893,88355286,0.4321582530927886,893,1 -894,15180354,-0.285453527410849,894,1 -895,67190568,0.40308122755690456,895,1 -896,52416911,0.16177563222848337,896,1 -897,49421900,0.3649374811353729,897,1 -898,19763129,1.4718227431790485,898,1 -899,48732916,1.1471642658938566,899,1 -900,21426918,0.03460890840719045,900,1 -901,33732344,-1.059872531663104,901,1 -902,65212138,1.0802000967555447,902,1 -903,22412982,0.9820626174269735,903,1 -904,22852668,0.548869542258589,904,1 -905,37272689,2.5823275470922944,905,1 -906,43042333,-0.43823258913705004,906,1 -907,41770840,-1.662482969485624,907,1 -908,68141536,1.8714084233967727,908,1 -909,41344487,1.4699778431388684,909,1 -910,89904722,0.3720014490653045,910,1 -911,38409755,-0.5440594557715754,911,1 -912,10839886,-2.662154711947475,912,1 -913,18882290,-0.33375837261241975,913,1 -914,17990818,-1.3787597129299158,914,1 -915,59467530,-0.5408689683960535,915,1 -916,18570584,-0.8331991725686818,916,1 -917,15091160,0.4128023977830264,917,1 -918,65963630,0.36129187966088855,918,1 -919,16664033,-1.9090906207009162,919,1 -920,20254049,-3.150838971974411,920,1 -921,26219077,-0.9424522186390227,921,1 -922,16480017,-2.568152146692039,922,1 -923,12050810,0.15348253703656228,923,1 -924,22871992,-0.6143313788392982,924,1 -925,55775555,0.6989065669156186,925,1 -926,41759889,0.087242528786549,926,1 -927,56875803,1.0789413641564922,927,1 -928,32551543,-0.8542070482174684,928,1 -929,22546104,1.672935834768312,929,1 -930,17049743,-0.45405736277657294,930,1 -931,23372595,-0.1288165289149642,931,1 -932,59338232,-0.7254394777200093,932,1 -933,54437651,1.146380811679174,933,1 -934,51148121,1.6073680040751939,934,1 -935,89866124,-1.1528357402537948,935,1 -936,36413716,0.45725628456297385,936,1 -937,51064616,-2.815515011964099,937,1 -938,14900091,1.0707599796103988,938,1 -939,30627605,-0.7674997907270258,939,1 -940,23125670,0.060983133362038075,940,1 -941,78759491,-1.2272693216210835,941,1 -942,22338088,0.11240239595717527,942,1 -943,24167161,-0.36466312463981776,943,1 -944,55808386,0.31817982847557436,944,1 -945,55919836,-1.1380403022740573,945,1 -946,50065596,0.02868525319576149,946,1 -947,88755924,0.812867687220369,947,1 -948,29310869,1.482327720180518,948,1 -949,82518567,-2.705428057996872,949,1 -950,44070936,-0.2784145770317386,950,1 -951,70785963,-0.052190834711455976,951,1 -952,25626235,-2.1470187762182733,952,1 -953,87159379,0.7409770509466251,953,1 -954,30770701,-0.6622932724256019,954,1 -955,67397308,-0.2631659164786703,955,1 -956,60661659,-0.8154850337703095,956,1 -957,62213017,0.020033505461261463,957,1 -958,52036728,-0.5308955384107783,958,1 -959,52409058,-0.5977678718157825,959,1 -960,78006507,-1.6498367533641285,960,1 -961,75054374,-0.39096592443010886,961,1 -962,82739131,-1.05999185122901,962,1 -963,20655697,-0.732647338880306,963,1 -964,17516116,-0.33003050216089264,964,1 -965,68636361,0.4055559487874254,965,1 -966,66816080,0.9992104689756145,966,1 -967,83917762,-1.111232733751585,967,1 -968,44437239,0.5995181854818564,968,1 -969,52336083,0.5028879991338864,969,1 -970,85612972,0.4426842198618578,970,1 -971,34567191,0.8395633223058456,971,1 -972,46016180,-0.3764730716901667,972,1 -973,10502999,-0.8337580754501663,973,1 -974,54375743,0.04284194164479781,974,1 -975,30807199,-1.07432729898297,975,1 -976,13429430,0.4408864290514758,976,1 -977,22239021,1.422711327414654,977,1 -978,78562423,-0.9445990703743011,978,1 -979,53004084,-0.12547146735367998,979,1 -980,19778298,-2.0629979357247534,980,1 -981,21485534,-1.213247689140364,981,1 -982,25973139,-0.27926316158682646,982,1 -983,25159704,1.098174580370728,983,1 -984,65490891,-1.9471894579704203,984,1 -985,74408794,-0.03200016764307808,985,1 -986,69169274,-0.5005351093195358,986,1 -987,34217792,-0.10408816133692135,987,1 -988,89372919,-0.3872376445361101,988,1 -989,52689112,-1.3865530161536288,989,1 -990,39688297,-0.8659033652860032,990,1 -991,66989444,-0.6294507942650912,991,1 -992,48684208,1.231568554709932,992,1 -993,84674003,-1.0967590889580459,993,1 -994,46933721,0.9518621227850355,994,1 -995,76987593,1.8998404138689415,995,1 -996,49911729,-0.1749482772041407,996,1 -997,45626097,-1.9811006687562753,997,1 -998,82339675,0.7086909093708534,998,1 -999,64672362,-0.7083803780264178,999,1 -1000,20228095,0.6986373667116453,1000,1 -1001,74344988,0.25010366792084077,1001,1 -1002,37805776,0.9265955188800696,1002,1 -1003,32171664,0.8428941889919966,1003,1 -1004,81844114,-0.48331698679538865,1004,1 -1005,74418218,-0.16380795223759442,1005,1 -1006,75500146,-1.1828849006157092,1006,1 -1007,27352655,1.9047692218619594,1007,1 -1008,86191408,0.9435165355812779,1008,1 -1009,75614970,-0.8757451775392191,1009,1 -1010,76967984,-0.7851608364027822,1010,1 -1011,85670501,0.5772563330539472,1011,1 -1012,44290015,-1.8627349501251547,1012,1 -1013,58711479,0.8596642697946134,1013,1 -1014,60921745,-0.2626004906728328,1014,1 -1015,26301105,0.3102496420031293,1015,1 -1016,60473693,0.164356037829954,1016,1 -1017,34419756,-0.48297676835823256,1017,1 -1018,26203990,0.8364011634820795,1018,1 -1019,86933982,0.927667420659144,1019,1 -1020,44512836,1.362644420629741,1020,1 -1021,80571928,0.18608178319512586,1021,1 -1022,60921120,-0.9131685955406765,1022,1 -1023,38040626,-0.6480470483707715,1023,1 -1024,64813863,0.5526367588230985,1024,1 -1025,50618982,-0.561532721459103,1025,1 -1026,41126974,2.057518208422423,1026,1 -1027,85165418,0.001890261005423931,1027,1 -1028,76307877,1.1430278851528581,1028,1 -1029,71409242,-1.2522862919456335,1029,1 -1030,82098821,-0.2149975700610747,1030,1 -1031,89270474,0.9406026296707709,1031,1 -1032,69947221,-0.8729201493181309,1032,1 -1033,54989229,-1.1895854019540117,1033,1 -1034,50876797,0.5731829664086685,1034,1 -1035,82695921,1.530206873273363,1035,1 -1036,10247574,-0.11633512460450574,1036,1 -1037,87572229,-0.8273029136931307,1037,1 -1038,33102983,1.6237049988916643,1038,1 -1039,13092441,0.11382065944705394,1039,1 -1040,67854004,-0.596854788336933,1040,1 -1041,15708363,-0.2931336614358554,1041,1 -1042,10738324,2.038638639524239,1042,1 -1043,56433729,2.2779463051232294,1043,1 -1044,47976063,0.36190720735715964,1044,1 -1045,65899955,0.294559815014039,1045,1 -1046,89236894,-1.4649604452070655,1046,1 -1047,25223355,0.4873286284021378,1047,1 -1048,31693932,0.3765551639290949,1048,1 -1049,45920582,-0.9583572334191743,1049,1 -1050,58583714,2.2574198036815676,1050,1 -1051,75842708,2.085130521533047,1051,1 -1052,49988020,-0.7611305238729479,1052,1 -1053,45777433,0.3160113638913246,1053,1 -1054,27785093,-1.077877432359982,1054,1 -1055,58534069,0.6378356494562096,1055,1 -1056,61820171,0.4196803381656553,1056,1 -1057,69235835,-1.2971503192645655,1057,1 -1058,34781429,0.249350478183107,1058,1 -1059,40978804,-0.08247248545670777,1059,1 -1060,15622609,-0.7769237178383418,1060,1 -1061,65116695,-0.6289530947406067,1061,1 -1062,63411110,-0.20633418035911008,1062,1 -1063,13249696,-1.2855472108662997,1063,1 -1064,17071991,0.6270317549639816,1064,1 -1065,14407358,0.681388826851982,1065,1 -1066,27270946,-0.04584518432432057,1066,1 -1067,74636867,-1.0632567167070535,1067,1 -1068,74901128,0.1893999634201438,1068,1 -1069,18209426,-0.6066295977027689,1069,1 -1070,74089282,-1.7077898352661547,1070,1 -1071,82287429,-0.14492783197841988,1071,1 -1072,31509241,-1.484302884005678,1072,1 -1073,43530232,-0.4225469109826635,1073,1 -1074,31883500,0.19507470593911236,1074,1 -1075,37534422,0.83737529418645,1075,1 -1076,26153152,0.7300202506347463,1076,1 -1077,82611890,0.17081517630829854,1077,1 -1078,15413467,0.6897130654554124,1078,1 -1079,68058878,0.8741169061885513,1079,1 -1080,44066385,-0.8645871272008095,1080,1 -1081,29912290,-1.9068289589738796,1081,1 -1082,32064156,-0.06873448597163971,1082,1 -1083,12407994,0.04283741041955122,1083,1 -1084,55863361,0.2093625898118402,1084,1 -1085,76767979,-0.8605488995949627,1085,1 -1086,80580468,-0.2292636669670281,1086,1 -1087,74039714,-0.455929288497828,1087,1 -1088,54604323,0.17429695722913463,1088,1 -1089,42468193,1.4682475729535311,1089,1 -1090,82983132,0.8837613114229022,1090,1 -1091,62329056,-1.531963078670117,1091,1 -1092,71104421,-1.2475239751529783,1092,1 -1093,82956249,0.44860927804688633,1093,1 -1094,86566143,1.8748024649126775,1094,1 -1095,48160133,0.6202771229577321,1095,1 -1096,77098362,-1.6704129474821667,1096,1 -1097,22610547,-1.3146699494462641,1097,1 -1098,50105761,-0.23238593113246075,1098,1 -1099,18094374,-0.16306547311927666,1099,1 -1100,40950110,0.4346197748333687,1100,1 -1101,66856697,0.9686878977054979,1101,1 -1102,47843932,-0.8305524049455668,1102,1 -1103,56927593,-1.06232020062866,1103,1 -1104,73203354,0.6030842240433231,1104,1 -1105,51717308,-0.10937874896790535,1105,1 -1106,18764768,-1.6368307660871262,1106,1 -1107,87146988,1.6954429648429985,1107,1 -1108,18994060,0.2812105532102444,1108,1 -1109,78113536,-0.6451341765550143,1109,1 -1110,84033088,0.1422395991087238,1110,1 -1111,41208932,0.16792754540063068,1111,1 -1112,22815984,0.839854504983324,1112,1 -1113,42395175,-0.0457590457903847,1113,1 -1114,63180614,0.011847949934042624,1114,1 -1115,63775550,1.5798437930675215,1115,1 -1116,43115789,0.20279853711511256,1116,1 -1117,78896104,-0.40391027138434565,1117,1 -1118,33149713,-1.3868096961375243,1118,1 -1119,51763634,0.13623141133411368,1119,1 -1120,50248251,1.1620686848327886,1120,1 -1121,33636871,1.3931664168716824,1121,1 -1122,89336347,-0.2552859533902231,1122,1 -1123,85410202,0.06799252122668266,1123,1 -1124,52897271,-0.6066201801994602,1124,1 -1125,49373163,0.3947767149382594,1125,1 -1126,61330474,0.6340399971681107,1126,1 -1127,60065498,-1.038828852844756,1127,1 -1128,57668820,-1.2823691722342014,1128,1 -1129,76783394,-0.7420702008979209,1129,1 -1130,12389759,-1.6700716118324042,1130,1 -1131,31090897,-1.0647378957523677,1131,1 -1132,52222245,-0.4809957284500336,1132,1 -1133,35165904,-1.490319347475757,1133,1 -1134,81718660,0.653547774891162,1134,1 -1135,45062111,0.11338647145212744,1135,1 -1136,19118317,-0.4448705076319267,1136,1 -1137,46377656,0.8633036736264754,1137,1 -1138,39603999,0.13090827625990345,1138,1 -1139,77514365,1.653992944756104,1139,1 -1140,36179596,-1.696346597381456,1140,1 -1141,12208905,0.2525078650758064,1141,1 -1142,36619500,-1.3105779925363177,1142,1 -1143,11293902,2.622179062418908,1143,1 -1144,38356398,-1.0417399064267532,1144,1 -1145,84445212,0.45244834330884665,1145,1 -1146,10619083,0.5194281124230994,1146,1 -1147,60538239,-0.3772032066544139,1147,1 -1148,26930272,-0.7236537288088374,1148,1 -1149,40567900,-0.7819931309095662,1149,1 -1150,70025008,0.7345183860603924,1150,1 -1151,40948014,0.9442269743843095,1151,1 -1152,81203695,0.4129501304766487,1152,1 -1153,56277103,0.8709195007747065,1153,1 -1154,18374476,-0.5695741675588182,1154,1 -1155,86630418,-0.8827133930545302,1155,1 -1156,36974156,-0.3861774305317689,1156,1 -1157,62335563,-0.10323713538188621,1157,1 -1158,51967791,0.5437624771336892,1158,1 -1159,20631999,0.25044996030873995,1159,1 -1160,49134775,-0.059758419585282614,1160,1 -1161,52827380,0.3523436739163932,1161,1 -1162,79810050,-0.5518394058875308,1162,1 -1163,13480583,0.06376581032313249,1163,1 -1164,64556771,0.7738460026943006,1164,1 -1165,25653453,-0.888622619268068,1165,1 -1166,36005538,0.1537516750247343,1166,1 -1167,71411494,0.28930843198840644,1167,1 -1168,41828266,-0.9529141535267931,1168,1 -1169,57129707,0.1904764307056514,1169,1 -1170,43713850,-0.5694780944214066,1170,1 -1171,58036330,1.2030995979040562,1171,1 -1172,33832406,0.38276037405741375,1172,1 -1173,36233616,-1.9841389353087138,1173,1 -1174,55310915,0.7019559793951937,1174,1 -1175,58909517,3.1133570071343915,1175,1 -1176,66966022,0.3961045110610155,1176,1 -1177,25446916,0.07820939643431661,1177,1 -1178,10195770,-1.2757708553011955,1178,1 -1179,60350148,-0.6861471754536033,1179,1 -1180,87371047,-0.47712680496574034,1180,1 -1181,59894557,-0.6765061312586013,1181,1 -1182,34684746,0.6007338806829275,1182,1 -1183,76991253,-0.6964012927746759,1183,1 -1184,18144724,0.5702937476882209,1184,1 -1185,10311682,-0.12642080137514797,1185,1 -1186,58813103,-0.5496471269490412,1186,1 -1187,81269945,-0.6247739259660428,1187,1 -1188,67619720,-0.5870607025967678,1188,1 -1189,79599482,0.88011142041614,1189,1 -1190,56151283,0.5620193712747718,1190,1 -1191,85263590,0.682755309858541,1191,1 -1192,46495840,-0.0803933847616436,1192,1 -1193,79085825,-0.6610294169083938,1193,1 -1194,80385705,0.4667547508523527,1194,1 -1195,14371862,-0.35042983519559057,1195,1 -1196,11959720,0.5553059672956486,1196,1 -1197,16444500,-0.4688441259315697,1197,1 -1198,85591622,1.6879040162203942,1198,1 -1199,42770210,2.087336022547755,1199,1 -1200,61202928,-0.45690983591085105,1200,1 -1201,70468465,0.5908091378871765,1201,1 -1202,88747269,1.228107635044459,1202,1 -1203,76199110,-0.8935482191430508,1203,1 -1204,42850870,2.060142028703739,1204,1 -1205,16544407,-0.813205127384779,1205,1 -1206,56759217,0.14622591768938994,1206,1 -1207,73753659,1.1042429320217515,1207,1 -1208,64662570,0.49194880663350404,1208,1 -1209,52131870,1.8644688850139202,1209,1 -1210,49988077,-0.34480921105701823,1210,1 -1211,72256262,0.4390250113407238,1211,1 -1212,50766019,-0.8044513343704438,1212,1 -1213,58212254,2.4531761786901702,1213,1 -1214,64207278,-0.3880658630071629,1214,1 -1215,18913193,1.5616329708692596,1215,1 -1216,54905483,-1.0326979847715774,1216,1 -1217,57152784,1.0234432239271651,1217,1 -1218,62053745,-0.3326777531899353,1218,1 -1219,18821129,-0.9020863761308653,1219,1 -1220,61299260,1.2519646768124852,1220,1 -1221,23623800,0.7775674800835684,1221,1 -1222,87636706,0.3430569349044609,1222,1 -1223,17101519,-0.4705493306238584,1223,1 -1224,50024569,-0.591897283060621,1224,1 -1225,46465362,2.098777587129976,1225,1 -1226,53417865,-0.7809429996508438,1226,1 -1227,35020398,-0.4941379874800721,1227,1 -1228,55831689,-1.7627407124695504,1228,1 -1229,27888091,1.0871909451351431,1229,1 -1230,58571396,0.3946391478085418,1230,1 -1231,44187397,0.4623989881542143,1231,1 -1232,61803663,1.6682731811270906,1232,1 -1233,50730853,-0.07759562376442207,1233,1 -1234,26213547,-0.34354325530993046,1234,1 -1235,63121400,-0.08715184876121058,1235,1 -1236,28374351,-0.3693423495438139,1236,1 -1237,56740336,-1.1059717697559643,1237,1 -1238,48528565,-0.16918783371551271,1238,1 -1239,42005171,-1.781805171097983,1239,1 -1240,39098942,0.020866213691413706,1240,1 -1241,64701916,0.7386612324505386,1241,1 -1242,78995839,-1.1486889725816718,1242,1 -1243,70401042,-0.3502208424090785,1243,1 -1244,22189593,0.19042783807986455,1244,1 -1245,66228921,1.2138104459244488,1245,1 -1246,61387655,1.3837193334750657,1246,1 -1247,56585510,0.14787457741418591,1247,1 -1248,38780384,0.46312291391657195,1248,1 -1249,37342668,0.6094220452398895,1249,1 -1250,52623155,0.3143038942079695,1250,1 -1251,71999327,-0.6115196575262697,1251,1 -1252,12899849,0.14736896261912635,1252,1 -1253,48549046,-1.3120079991247844,1253,1 -1254,80413343,1.7225179207850358,1254,1 -1255,62393085,-0.8782131012732947,1255,1 -1256,50389361,1.1362018012950283,1256,1 -1257,33426534,0.07876996502274189,1257,1 -1258,60209833,-0.1404247270993638,1258,1 -1259,73493266,-1.2155455875290526,1259,1 -1260,23485260,-1.205085816665946,1260,1 -1261,39692215,-1.1842917463905402,1261,1 -1262,45638871,-1.7519439776680978,1262,1 -1263,76692214,1.6031046998753866,1263,1 -1264,29752469,-0.0934076357441219,1264,1 -1265,48127013,0.2184980148100075,1265,1 -1266,17219822,-1.1525391586013078,1266,1 -1267,55059349,-0.10227713957641638,1267,1 -1268,64529703,0.2336857092445694,1268,1 -1269,82195845,0.5567747426378485,1269,1 -1270,58368449,-0.5137204105204624,1270,1 -1271,21361327,0.8635475566841964,1271,1 -1272,51976681,0.12227555897786269,1272,1 -1273,33580481,-0.43868616862046744,1273,1 -1274,70909239,0.7284717640871111,1274,1 -1275,85056720,1.1542333889761769,1275,1 -1276,30293106,0.6846756748259673,1276,1 -1277,64554120,-0.919141806496376,1277,1 -1278,76607586,0.8835841344919227,1278,1 -1279,49548721,0.974404542226986,1279,1 -1280,52057433,0.5123498134323192,1280,1 -1281,80991501,0.867111819086678,1281,1 -1282,78478058,1.707448933462361,1282,1 -1283,42695402,0.44827531907948037,1283,1 -1284,72468394,0.2700160316352065,1284,1 -1285,36725771,-0.9309398439869568,1285,1 -1286,22231759,-1.3433445852726005,1286,1 -1287,83008683,0.7607848880684781,1287,1 -1288,35363710,-1.6255142675469056,1288,1 -1289,53356153,-0.489258880574406,1289,1 -1290,51776706,1.8324873995200155,1290,1 -1291,28536831,0.12329895204053684,1291,1 -1292,49272562,-0.06017008279219767,1292,1 -1293,76518929,0.7788454796758061,1293,1 -1294,62883800,-0.45795174418432155,1294,1 -1295,81822383,0.5772437624754302,1295,1 -1296,36908277,-0.21806213786450493,1296,1 -1297,47411203,-1.3717082496127082,1297,1 -1298,45543185,-0.9039175460034656,1298,1 -1299,20147048,-0.9022360166713442,1299,1 -1300,62990887,-0.15801656829401334,1300,1 -1301,25606984,0.006250789793628369,1301,1 -1302,27454032,0.539230165563469,1302,1 -1303,13379178,0.715724424904637,1303,1 -1304,67480459,-0.5753010313447103,1304,1 -1305,59983613,-0.9195803405420176,1305,1 -1306,18613167,0.8797505523381474,1306,1 -1307,49362112,0.46401640212568307,1307,1 -1308,36270138,-1.2945400739970774,1308,1 -1309,65977993,-0.21374290861577475,1309,1 -1310,35081102,-2.347257544831415,1310,1 -1311,57109447,-1.2277778386695832,1311,1 -1312,87569318,0.21369225200336933,1312,1 -1313,20853080,-0.7928604567841204,1313,1 -1314,50228628,-0.44193619325421485,1314,1 -1315,45269976,-0.1477720411685804,1315,1 -1316,74098042,-1.549293982185984,1316,1 -1317,13240709,-0.2588408119764523,1317,1 -1318,25540113,-0.8033162693052105,1318,1 -1319,20300369,-0.8874987904012962,1319,1 -1320,13914027,1.0657030125686007,1320,1 -1321,12732148,-0.5337085393480415,1321,1 -1322,67972734,0.999222666499477,1322,1 -1323,59797113,0.32276328943858235,1323,1 -1324,11480383,0.47392128119717236,1324,1 -1325,15513286,1.5511103128636432,1325,1 -1326,50295313,0.04732651793486763,1326,1 -1327,15379240,-0.8436810079113407,1327,1 -1328,76069265,-0.2850529026904282,1328,1 -1329,75764156,-1.0443814494890167,1329,1 -1330,51947810,0.9841790546288607,1330,1 -1331,33544839,-0.48927998305571024,1331,1 -1332,73759394,-0.10061817987082582,1332,1 -1333,23240602,1.1246737589859075,1333,1 -1334,41563228,-1.9630594500245084,1334,1 -1335,66234242,-0.34711409457504405,1335,1 -1336,71709487,-0.28596968639807646,1336,1 -1337,15043960,0.44013697668174295,1337,1 -1338,79314112,1.241473544084598,1338,1 -1339,45788673,-0.6548754602427707,1339,1 -1340,40219878,-0.31463051541208414,1340,1 -1341,27559234,0.07073600955092388,1341,1 -1342,70935365,1.3715108954735338,1342,1 -1343,66869813,-0.3805815896333609,1343,1 -1344,75905182,0.95191254732893,1344,1 -1345,61787430,0.3467277037999069,1345,1 -1346,78406811,-0.22798483284592802,1346,1 -1347,60874641,1.637394409293415,1347,1 -1348,51671008,0.9626603020080993,1348,1 -1349,16362493,1.2716238075595203,1349,1 -1350,71544490,1.9239348018805076,1350,1 -1351,29329690,-1.9358855668489294,1351,1 -1352,66481063,-0.7985574121818679,1352,1 -1353,63037566,0.18409599593521214,1353,1 -1354,61797775,-0.9036344706275048,1354,1 -1355,84888444,-0.19769758168579468,1355,1 -1356,78394099,-0.44149391233809265,1356,1 -1357,58638437,-0.19326635602366568,1357,1 -1358,86306351,-0.11418351430301847,1358,1 -1359,39508811,-1.2991578044172953,1359,1 -1360,81690637,-0.5128486230490433,1360,1 -1361,17631548,-0.7838876744657038,1361,1 -1362,18124097,-0.5426412572674246,1362,1 -1363,80462772,0.8948186796655747,1363,1 -1364,26685180,-0.9510119653383791,1364,1 -1365,11534926,-1.0506374089883177,1365,1 -1366,12627231,-1.28011406743049,1366,1 -1367,45459462,2.3346178926786667,1367,1 -1368,13981402,-0.4864083410130992,1368,1 -1369,69401008,0.7599500744834387,1369,1 -1370,49177017,-0.026736445618323532,1370,1 -1371,73025175,-0.6323125053582839,1371,1 -1372,57161470,-1.9900664420225491,1372,1 -1373,77824940,-0.24249746354641125,1373,1 -1374,87009347,0.3376649243737573,1374,1 -1375,26196713,-0.5995395021646964,1375,1 -1376,84049867,-0.5569248338996611,1376,1 -1377,30404529,3.341342364500256,1377,1 -1378,68028464,1.784234250307101,1378,1 -1379,17871568,-0.6105302009902408,1379,1 -1380,19091354,-0.6744725652612431,1380,1 -1381,61746118,0.3102171162680571,1381,1 -1382,20687863,-0.12483619834540162,1382,1 -1383,42120374,-0.24932423577018156,1383,1 -1384,38681192,0.8128270958986635,1384,1 -1385,24691991,0.5430980606367095,1385,1 -1386,65979315,-0.3064717485782836,1386,1 -1387,64763101,0.4301017394835827,1387,1 -1388,21533408,-0.02524314684238361,1388,1 -1389,13000128,-1.0859812223960699,1389,1 -1390,44407072,-1.347648177975542,1390,1 -1391,32277284,-1.843984836150533,1391,1 -1392,50247087,0.4773056780706978,1392,1 -1393,22781337,1.6730364177005141,1393,1 -1394,50194874,-0.9029804794449595,1394,1 -1395,81256435,2.321739012268128,1395,1 -1396,34424485,-1.3830264648086352,1396,1 -1397,18772373,-0.985400205949577,1397,1 -1398,87552855,-0.2293433071096069,1398,1 -1399,17009632,0.41142375499302336,1399,1 -1400,63222490,0.04075721359997752,1400,1 -1401,11861193,0.3505238948174742,1401,1 -1402,79040168,1.2533280622477372,1402,1 -1403,84224446,0.32242706713324165,1403,1 -1404,74134718,0.050873300499737435,1404,1 -1405,73340893,0.5601130137951192,1405,1 -1406,44601518,-0.8399640910581914,1406,1 -1407,63306612,0.6854069081913308,1407,1 -1408,19231199,0.39444200936866486,1408,1 -1409,84127128,-0.1575767977794824,1409,1 -1410,86865106,-1.6237690314030835,1410,1 -1411,66999890,-1.2992578344471248,1411,1 -1412,65038539,0.996561444503747,1412,1 -1413,13003638,-1.7437210262788603,1413,1 -1414,52853722,0.22608223479617717,1414,1 -1415,55355771,-2.1969269141058865,1415,1 -1416,10150180,-0.8507209916141638,1416,1 -1417,38891678,1.1238128204179951,1417,1 -1418,69730315,0.539576865865216,1418,1 -1419,54777612,-0.3062698867648589,1419,1 -1420,84324872,0.40122771950204084,1420,1 -1421,71135767,1.2315299329057194,1421,1 -1422,34224665,-0.9923235262749392,1422,1 -1423,83063589,0.35043075025445003,1423,1 -1424,55271814,1.7869632622451928,1424,1 -1425,43499167,-0.7329667958400878,1425,1 -1426,83906781,0.007639646018716941,1426,1 -1427,88439014,-1.2401694207526093,1427,1 -1428,86510859,0.6682158273823511,1428,1 -1429,16975759,-1.0094838282684295,1429,1 -1430,16286287,0.05659082593408643,1430,1 -1431,21475519,-1.378512546179773,1431,1 -1432,66651419,-1.6371311828514268,1432,1 -1433,54783188,-0.7491846835077816,1433,1 -1434,28378326,0.08391057352976511,1434,1 -1435,79478376,-1.5167372822561938,1435,1 -1436,21977423,0.6576487316108071,1436,1 -1437,35752636,-0.1701922360936673,1437,1 -1438,79171990,-0.03501277003875539,1438,1 -1439,65661853,-0.10935368169638035,1439,1 -1440,13871751,-1.4750737920929728,1440,1 -1441,39543648,0.6320844437446306,1441,1 -1442,69673579,-0.9993316100101044,1442,1 -1443,85865467,1.1667748489682028,1443,1 -1444,76030001,-0.9391361538768631,1444,1 -1445,28620719,-1.4639119607280335,1445,1 -1446,25103828,0.10712439555418765,1446,1 -1447,19939226,-0.014114211733562351,1447,1 -1448,12065466,-3.1906145593769244,1448,1 -1449,78334253,1.5031655405687971,1449,1 -1450,14929820,-0.2071304999251955,1450,1 -1451,81232628,-0.6705668696071825,1451,1 -1452,65248823,-0.21562821205592597,1452,1 -1453,76637983,-0.38970527899152657,1453,1 -1454,81212268,-1.3637617954801309,1454,1 -1455,15053359,-0.9770395474181052,1455,1 -1456,44807543,-0.13534704389031588,1456,1 -1457,14375354,-0.14574654005622353,1457,1 -1458,54523409,1.2374350596130934,1458,1 -1459,80351756,1.2062554853625376,1459,1 -1460,18270435,0.7705338908197493,1460,1 -1461,26004754,-0.8491562920891504,1461,1 -1462,77196469,-0.24565812276921514,1462,1 -1463,84999083,0.5034086256824462,1463,1 -1464,89609707,0.4350551981948687,1464,1 -1465,34307399,-1.0941563253978404,1465,1 -1466,72543699,1.4997711504728637,1466,1 -1467,73793770,1.4896572493790836,1467,1 -1468,72935105,-0.8595578535174987,1468,1 -1469,41025503,-0.2752050431635533,1469,1 -1470,35754695,1.7589401687007442,1470,1 -1471,89053720,-0.8096570266810051,1471,1 -1472,76959962,-1.0686839039142046,1472,1 -1473,35167414,-0.9150061953396449,1473,1 -1474,80981335,-0.4375810137989042,1474,1 -1475,42934490,0.09700362934621894,1475,1 -1476,87444850,-1.3157546985262676,1476,1 -1477,52841486,-0.8910778269428205,1477,1 -1478,14185896,-0.7746726194061726,1478,1 -1479,65872788,0.6208920398225841,1479,1 -1480,25830279,0.19392614139639697,1480,1 -1481,28121283,-0.07780100476452013,1481,1 -1482,88768111,-0.174205049434167,1482,1 -1483,51120736,-0.6863503153731764,1483,1 -1484,28894233,1.12519451976052,1484,1 -1485,79675291,-0.7530167740454478,1485,1 -1486,82121165,-1.1291454050531151,1486,1 -1487,86104257,0.37191855012217795,1487,1 -1488,34588650,-2.2669117964855707,1488,1 -1489,62208951,0.21089583081853883,1489,1 -1490,13917245,-0.7138598527696858,1490,1 -1491,75431476,2.4416348540374093,1491,1 -1492,80535969,-2.4469017897642598,1492,1 -1493,21116598,1.2498688879323945,1493,1 -1494,34156098,0.6735117395239055,1494,1 -1495,57353156,0.6927249117183653,1495,1 -1496,73935105,-0.6000660903334112,1496,1 -1497,73588227,0.22698543364320184,1497,1 -1498,29950052,-0.4414150324207124,1498,1 -1499,43247575,0.45593019125608997,1499,1 -1500,62749590,-1.3862192886905942,1500,1 -1501,47578266,2.3009012141028804,1501,1 -1502,81066762,-1.1635059378496304,1502,1 -1503,34281432,-0.7952969252680684,1503,1 -1504,62375179,0.9896386561120452,1504,1 -1505,63598931,-1.567990006066555,1505,1 -1506,41813453,-0.08630862039683776,1506,1 -1507,75230555,2.509239958317092,1507,1 -1508,74612929,-1.1015556035183773,1508,1 -1509,44813067,-2.534950067522112,1509,1 -1510,46966751,-1.3351689911772453,1510,1 -1511,55127558,-0.964200754080759,1511,1 -1512,10207101,-1.1210247578753396,1512,1 -1513,22428351,1.547329626964046,1513,1 -1514,10596370,-0.7129827298734313,1514,1 -1515,69043548,-0.5958344937176747,1515,1 -1516,13563298,1.504947521985041,1516,1 -1517,27284515,-1.273491674331134,1517,1 -1518,79568935,1.228379787743649,1518,1 -1519,39020427,0.9001421774714363,1519,1 -1520,14124606,1.1195899521070731,1520,1 -1521,35225339,0.7670564133509882,1521,1 -1522,69024762,-0.15928022817524548,1522,1 -1523,33372998,-1.3476456030750268,1523,1 -1524,67792213,-0.4747577913746923,1524,1 -1525,35296881,1.6668053597266803,1525,1 -1526,68719596,-0.12597852299235948,1526,1 -1527,87307937,-0.9234278063312492,1527,1 -1528,69184535,-0.9008199439122639,1528,1 -1529,14096367,0.6158492039221218,1529,1 -1530,22003538,0.24124427653954983,1530,1 -1531,85839695,-0.3810518614979987,1531,1 -1532,17487438,-0.5032143492712623,1532,1 -1533,71236109,-1.6540711708758857,1533,1 -1534,20371089,-0.23877868687318632,1534,1 -1535,84639883,0.14811151827419763,1535,1 -1536,80676027,0.5037242752175067,1536,1 -1537,48962767,0.1955888205827847,1537,1 -1538,78419528,-2.0822670477842165,1538,1 -1539,53606571,-0.2596405662403348,1539,1 -1540,88683776,-1.970100807014631,1540,1 -1541,61862096,0.6210994212230485,1541,1 -1542,25420007,0.6811105958457796,1542,1 -1543,26826525,-1.027813600297003,1543,1 -1544,10898590,0.3800741527082975,1544,1 -1545,68050699,-0.2573568790864325,1545,1 -1546,69351145,0.4410128719281849,1546,1 -1547,43805392,-0.3669191293299864,1547,1 -1548,83142708,0.778794303554699,1548,1 -1549,35218281,-1.9520678686055284,1549,1 -1550,16707144,1.1941763676348764,1550,1 -1551,42285845,-0.29921718946957565,1551,1 -1552,80066931,1.761956812549664,1552,1 -1553,64586740,-0.22308886643634215,1553,1 -1554,49841067,-0.6473850674435505,1554,1 -1555,73578720,-1.0116812646918578,1555,1 -1556,29225327,-0.011876827475267351,1556,1 -1557,11932233,0.049987479905712215,1557,1 -1558,34820608,-1.5632721440766832,1558,1 -1559,28596593,1.7566387193447996,1559,1 -1560,69812660,-0.03592644817093856,1560,1 -1561,80285263,-1.117952816331556,1561,1 -1562,88692647,0.2973808015921582,1562,1 -1563,49366723,-0.9174128885660644,1563,1 -1564,53140082,-0.9291825056753026,1564,1 -1565,27812290,-0.4282465759131881,1565,1 -1566,23513588,1.2495436922178862,1566,1 -1567,53539785,0.1932894638210419,1567,1 -1568,74882702,-1.302681014252434,1568,1 -1569,44416214,0.465954406296588,1569,1 -1570,46908915,1.3362345441935968,1570,1 -1571,39646303,-1.8017250781063887,1571,1 -1572,81811470,-0.6797853221964835,1572,1 -1573,43078431,0.2857274577114491,1573,1 -1574,79992605,-0.15497330828997685,1574,1 -1575,52838700,-1.1536091764734397,1575,1 -1576,57587232,-1.0031846481154558,1576,1 -1577,81432136,-1.4254267993408043,1577,1 -1578,18648128,0.2358285488488842,1578,1 -1579,57580651,0.24807161140078132,1579,1 -1580,15865704,0.4260643703589999,1580,1 -1581,49620155,0.06387838864832622,1581,1 -1582,84676809,-0.3549298218324098,1582,1 -1583,53840512,1.0741992522339348,1583,1 -1584,75400423,-1.9715244919535244,1584,1 -1585,44752744,-1.471583339841408,1585,1 -1586,55429596,0.2778395601159541,1586,1 -1587,88272374,1.6648847247174832,1587,1 -1588,23008768,-1.5936619205570708,1588,1 -1589,82425716,-0.586928493689443,1589,1 -1590,81679970,-0.6114935645575603,1590,1 -1591,10956602,-0.1414834479692601,1591,1 -1592,51203621,1.6532047826209881,1592,1 -1593,74721146,0.20060526498651812,1593,1 -1594,32185562,-0.25853177568043567,1594,1 -1595,35490884,-0.27797948709605974,1595,1 -1596,31903626,-0.6321125669656595,1596,1 -1597,58293038,0.5919112766669584,1597,1 -1598,78603017,-0.23280898282615145,1598,1 -1599,78797046,-0.6023885230706081,1599,1 -1600,73288793,0.1422858933095435,1600,1 -1601,57272791,0.4079550231150879,1601,1 -1602,73734925,1.1489057807860217,1602,1 -1603,26252200,-0.3848204320836212,1603,1 -1604,69195551,-0.8212431214165805,1604,1 -1605,19778370,0.7110705149707579,1605,1 -1606,76054488,0.8933946304915166,1606,1 -1607,65071849,1.4227061276267126,1607,1 -1608,36521923,-1.6135052690334653,1608,1 -1609,60537485,0.4602726785386505,1609,1 -1610,25210449,0.41892390823810877,1610,1 -1611,39615116,0.4305435722116527,1611,1 -1612,13597836,0.31922359932856026,1612,1 -1613,10689217,0.7420305249198846,1613,1 -1614,36055128,0.7627484172743125,1614,1 -1615,58884124,1.1312342427627693,1615,1 -1616,87362105,1.7671650130816883,1616,1 -1617,53553813,-1.519325169710589,1617,1 -1618,63023843,-0.7068121215119673,1618,1 -1619,29084571,1.0083191573914965,1619,1 -1620,35880598,-1.2394592705638106,1620,1 -1621,30187447,2.3262602953861666,1621,1 -1622,61314069,0.18033399658241553,1622,1 -1623,33419545,-1.1379620808945008,1623,1 -1624,13724411,-0.46801421443486213,1624,1 -1625,10808074,-1.1996403119848456,1625,1 -1626,88775254,-0.3333755393149413,1626,1 -1627,79783395,1.7508244979972367,1627,1 -1628,85454986,-0.5635883519708592,1628,1 -1629,84618094,0.16483208770097596,1629,1 -1630,21661908,2.115313766473408,1630,1 -1631,41283869,-0.2817154787838471,1631,1 -1632,12959594,1.1048978600523323,1632,1 -1633,38007646,-0.6521597460586638,1633,1 -1634,88503939,-0.6480710465877259,1634,1 -1635,63703415,-1.5689631671107447,1635,1 -1636,38848367,0.3772771513849889,1636,1 -1637,81256453,0.40470160270884376,1637,1 -1638,88668310,-1.378113328888988,1638,1 -1639,78948929,0.22048919229580477,1639,1 -1640,24710256,-0.84997335666076,1640,1 -1641,84903145,1.4281144422258851,1641,1 -1642,56593738,-0.9130500317490512,1642,1 -1643,39487663,-0.018642220417548004,1643,1 -1644,61944691,-1.2074169773016847,1644,1 -1645,28843738,1.303230486363829,1645,1 -1646,52510959,0.6291087351338688,1646,1 -1647,80603170,1.3372389449355377,1647,1 -1648,15923300,0.9750450869843804,1648,1 -1649,87358729,-0.30690688361843826,1649,1 -1650,20501974,-1.4064664669018707,1650,1 -1651,81042806,0.07362159111576892,1651,1 -1652,88625380,0.6457320256949165,1652,1 -1653,10533307,0.4358181723840001,1653,1 -1654,81135529,-1.8298274081133603,1654,1 -1655,23977478,-0.539508838415804,1655,1 -1656,68465818,-0.520881692762792,1656,1 -1657,57751802,0.423129950229692,1657,1 -1658,75994753,-2.0343970481737483,1658,1 -1659,49331466,-0.264750487132204,1659,1 -1660,20582674,0.6211667345940535,1660,1 -1661,73453067,-1.0544446267038607,1661,1 -1662,31919403,0.16255081677690447,1662,1 -1663,11431730,0.6589766073754415,1663,1 -1664,72081749,0.9908717047706804,1664,1 -1665,21315923,0.47677488257432776,1665,1 -1666,42562497,-1.1117140305919229,1666,1 -1667,20655676,1.7940892776476371,1667,1 -1668,87860567,-0.558948291622296,1668,1 -1669,33454959,-0.15017311158082072,1669,1 -1670,20920429,0.040066592007936074,1670,1 -1671,37210254,0.011655975585088135,1671,1 -1672,42624680,0.040738132151650334,1672,1 -1673,15080874,1.7203813114803925,1673,1 -1674,35372826,1.0490426264300368,1674,1 -1675,60763060,0.7585802319096142,1675,1 -1676,43692005,0.662091540354039,1676,1 -1677,56193425,0.20692945499166934,1677,1 -1678,87701895,-1.8696791714183862,1678,1 -1679,47459723,-0.32845953528711525,1679,1 -1680,68157187,-0.4069006820435939,1680,1 -1681,42065574,-0.19099482965686654,1681,1 -1682,18936337,-0.08925391688680095,1682,1 -1683,13184101,-0.2278890963756312,1683,1 -1684,35247658,1.0401201031826803,1684,1 -1685,25089743,-1.2853534290776292,1685,1 -1686,21793254,0.20938347042185293,1686,1 -1687,76021132,-0.6816711972941524,1687,1 -1688,57110400,-2.781830005333888,1688,1 -1689,68159125,1.7350421494651325,1689,1 -1690,59865806,-1.1264723984986678,1690,1 -1691,48752680,-0.9411215468148343,1691,1 -1692,55500806,-0.18209541288953532,1692,1 -1693,82529759,-1.2630965263459306,1693,1 -1694,23371877,-0.47571845481864533,1694,1 -1695,26056216,-0.2968119969250454,1695,1 -1696,69287611,-1.69997503998298,1696,1 -1697,72755899,0.5760658453259989,1697,1 -1698,72551836,-1.736538478322558,1698,1 -1699,19723353,0.16415471222563163,1699,1 -1700,12027229,0.871905717864352,1700,1 -1701,44840028,-0.9271226072463257,1701,1 -1702,35551358,0.3828092923002673,1702,1 -1703,58563166,0.35286406721332897,1703,1 -1704,16070858,0.6734686744961235,1704,1 -1705,85961886,-1.2051335959447247,1705,1 -1706,41986273,2.145150792946969,1706,1 -1707,37558401,0.9651011598812672,1707,1 -1708,77172221,-1.145974311574148,1708,1 -1709,63448571,0.3600374702482922,1709,1 -1710,68086020,-0.5950438964689239,1710,1 -1711,86622300,0.2717709434760717,1711,1 -1712,16638262,-0.5443858777092706,1712,1 -1713,29811900,0.24705601865487573,1713,1 -1714,30248453,-0.36098035184846816,1714,1 -1715,17697219,1.9529773336665772,1715,1 -1716,29212692,1.5455262504547196,1716,1 -1717,30243494,1.4583438214778484,1717,1 -1718,56334601,1.1784501972244263,1718,1 -1719,25346597,0.9206981444739507,1719,1 -1720,11692815,0.7933333777589915,1720,1 -1721,83499345,-0.3803655134593291,1721,1 -1722,35983246,0.559604794107405,1722,1 -1723,73776084,-0.07411115546895304,1723,1 -1724,79898544,0.20411700701526048,1724,1 -1725,33896187,0.46155880504035346,1725,1 -1726,23403452,-0.4146514398647848,1726,1 -1727,62804782,0.6351755202795041,1727,1 -1728,10516171,0.7124887735434671,1728,1 -1729,14115373,0.09195590917273758,1729,1 -1730,31368088,1.8867739824940863,1730,1 -1731,18168861,1.35313488584411,1731,1 -1732,88727256,-0.6452475711145691,1732,1 -1733,72866784,-1.009925115326261,1733,1 -1734,76423945,-0.3143728280071016,1734,1 -1735,26871513,-0.2739312830136348,1735,1 -1736,88766125,0.843400846098787,1736,1 -1737,57095244,0.9710068248463376,1737,1 -1738,64258048,-1.6007433418860713,1738,1 -1739,85932623,0.7770254416603698,1739,1 -1740,64485338,-0.3796311718655836,1740,1 -1741,60753522,-0.23239468818531298,1741,1 -1742,30234758,-1.3077063983604054,1742,1 -1743,86379488,-0.5103078381707984,1743,1 -1744,79984499,0.031317768637400815,1744,1 -1745,28153750,0.9352081472101863,1745,1 -1746,20710375,0.25785933132271865,1746,1 -1747,61231624,1.006325821843092,1747,1 -1748,20133254,1.247079851031271,1748,1 -1749,62425740,-0.056562969765108106,1749,1 -1750,10055383,1.0310975177009412,1750,1 -1751,20943162,0.023066300367940176,1751,1 -1752,59070226,-0.13818471345051744,1752,1 -1753,83070171,-1.7484206827717919,1753,1 -1754,47983498,-0.5567508476662274,1754,1 -1755,85043700,0.5728034641203766,1755,1 -1756,22900518,-0.4539858690926672,1756,1 -1757,51320995,-0.5193035228128106,1757,1 -1758,12054937,-0.05553899557694871,1758,1 -1759,77195284,0.4702614012689687,1759,1 -1760,77169477,0.4958929791086926,1760,1 -1761,87475102,-1.7299648747717848,1761,1 -1762,22318532,1.080198004238828,1762,1 -1763,74780594,-0.9369123897601769,1763,1 -1764,18925806,-0.12780211303499073,1764,1 -1765,52387801,-0.1838082201358941,1765,1 -1766,36355087,1.1476565609360514,1766,1 -1767,64585973,0.6343621986810163,1767,1 -1768,39001009,0.9982342001660487,1768,1 -1769,82886204,1.1625742594263517,1769,1 -1770,19434892,1.038393424578991,1770,1 -1771,46295854,-1.5271414092148845,1771,1 -1772,30475757,-0.35218598400604506,1772,1 -1773,50515216,-0.513746137590053,1773,1 -1774,63268319,1.5092333712972148,1774,1 -1775,20240587,-1.1312647557210744,1775,1 -1776,63150600,-0.4816490615725876,1776,1 -1777,12316541,0.9994883460790993,1777,1 -1778,56973391,0.37031813774684863,1778,1 -1779,19100913,-0.8475091103021687,1779,1 -1780,57142009,2.5551241243807006,1780,1 -1781,16060919,-1.453047349312384,1781,1 -1782,65444910,0.38202455608095115,1782,1 -1783,30810484,-2.1664921848582614,1783,1 -1784,29326385,-0.6884756641290879,1784,1 -1785,12656966,-0.18404628683896335,1785,1 -1786,61805726,0.28762870799299456,1786,1 -1787,48686594,2.0463114339146045,1787,1 -1788,52766636,-0.8488518230300602,1788,1 -1789,75189176,-0.048255813967519115,1789,1 -1790,46128733,1.5349362044028994,1790,1 -1791,37932900,-0.8970829039030713,1791,1 -1792,32801669,0.4247785809148895,1792,1 -1793,59337934,0.8226230059642374,1793,1 -1794,61486607,0.3524694489566419,1794,1 -1795,56299304,-1.097661017066141,1795,1 -1796,77731578,-0.04168612646627991,1796,1 -1797,24562208,0.4990129398423184,1797,1 -1798,38123094,0.12730768267855172,1798,1 -1799,76951735,1.1399115434929727,1799,1 -1800,75374851,0.3953186822120771,1800,1 -1801,17581127,0.09207425800173795,1801,1 -1802,55439564,0.1932669350035832,1802,1 -1803,76427699,-0.6710774741335823,1803,1 -1804,55490559,1.3760746335792697,1804,1 -1805,89787515,0.8298758073054758,1805,1 -1806,24457426,-0.3341865453406482,1806,1 -1807,21174479,0.7910516555285956,1807,1 -1808,30399224,0.5232711899906444,1808,1 -1809,82706457,-1.2896883196783946,1809,1 -1810,18506962,0.35657245055551634,1810,1 -1811,61324066,-0.11554881973857588,1811,1 -1812,30624630,-1.9213570532638022,1812,1 -1813,39937472,-2.492718907298351,1813,1 -1814,17029868,0.09220067987069466,1814,1 -1815,78585097,0.1309229628009595,1815,1 -1816,22851776,0.09565962701167607,1816,1 -1817,57254622,0.3147875002489689,1817,1 -1818,61163517,1.8269466915864632,1818,1 -1819,34893467,-0.7001116382274354,1819,1 -1820,89030044,-0.7757752978060951,1820,1 -1821,26948225,0.1443137554174357,1821,1 -1822,82743702,-0.2965971708537713,1822,1 -1823,21369871,-0.6449301561807842,1823,1 -1824,42917518,0.054068115075899134,1824,1 -1825,47001347,-0.18425255424019127,1825,1 -1826,33580308,-1.2748764808936333,1826,1 -1827,23766003,1.341298574920092,1827,1 -1828,66969349,-1.473239347890544,1828,1 -1829,48346111,-2.4398689757418737,1829,1 -1830,17435365,-0.3492449430706265,1830,1 -1831,77160936,0.7828332956582432,1831,1 -1832,49094896,1.2258507480066336,1832,1 -1833,61662290,-1.7907936514492497,1833,1 -1834,42945419,-0.47067525202840155,1834,1 -1835,86723952,0.8656324206057051,1835,1 -1836,12825648,2.441935925174845,1836,1 -1837,65297601,-0.14144571278496448,1837,1 -1838,55163392,-1.2046889904811056,1838,1 -1839,40940100,-0.6789135569415766,1839,1 -1840,29928903,-0.32458684082294387,1840,1 -1841,78754509,-0.10090422066632258,1841,1 -1842,75179716,-2.5917145428828463,1842,1 -1843,15036124,-1.0781288971874239,1843,1 -1844,42957516,1.618508665246499,1844,1 -1845,67286916,-2.021344062166832,1845,1 -1846,34325558,0.09464031126028014,1846,1 -1847,14541653,0.07037616466370494,1847,1 -1848,37273988,0.08633919789041179,1848,1 -1849,38244317,0.3694378685834057,1849,1 -1850,46548427,-0.21769079339900707,1850,1 -1851,42729913,-0.06170116121215922,1851,1 -1852,47179615,1.379681221824917,1852,1 -1853,20764549,-0.7458058180054297,1853,1 -1854,88876673,-0.8453615371983951,1854,1 -1855,72542209,0.5656989143006979,1855,1 -1856,56501535,0.06658917074447668,1856,1 -1857,29327820,1.0095019094347837,1857,1 -1858,22980185,-1.2259463972262363,1858,1 -1859,71403967,1.5090941334601344,1859,1 -1860,86138543,1.2942632956340696,1860,1 -1861,38630776,0.19361578905949983,1861,1 -1862,35120076,0.6685428447501301,1862,1 -1863,18840910,0.8147007171956876,1863,1 -1864,56765472,4.668827346922946,1864,1 -1865,27997776,-1.1772635369725963,1865,1 -1866,67762093,-1.6260539137216492,1866,1 -1867,82512286,-0.5059921997691027,1867,1 -1868,29759337,1.1246931001246272,1868,1 -1869,60809056,1.038530577393318,1869,1 -1870,17838072,0.27959339460515653,1870,1 -1871,42844444,0.5464429967253654,1871,1 -1872,33689931,-1.4979018116134177,1872,1 -1873,77104735,-0.6379497428134526,1873,1 -1874,82860820,1.0000959965793361,1874,1 -1875,57530972,-0.48909036792059396,1875,1 -1876,37265941,-0.3803768695967808,1876,1 -1877,31684266,-0.8227881511558914,1877,1 -1878,48552414,-0.3274339014322308,1878,1 -1879,48426341,-0.9623115866246814,1879,1 -1880,34504575,1.4680864255442887,1880,1 -1881,48624291,-0.5640784452788259,1881,1 -1882,11255183,-0.15753759488894184,1882,1 -1883,82221321,-1.2454001048714982,1883,1 -1884,64631953,0.9640440098077577,1884,1 -1885,12172345,-2.2242951409063396,1885,1 -1886,83329551,-0.8202612680469996,1886,1 -1887,34851144,1.1475221591485734,1887,1 -1888,79299927,2.1036373638436032,1888,1 -1889,62490596,-0.1882694827370786,1889,1 -1890,22199609,-0.26054581363339746,1890,1 -1891,36492222,-0.9108567772073862,1891,1 -1892,80200259,0.44912961171664045,1892,1 -1893,68887674,-1.7376067934959545,1893,1 -1894,78172432,0.013874871992710008,1894,1 -1895,45269997,-1.166675845131352,1895,1 -1896,45440331,0.6238508814162286,1896,1 -1897,43154038,-2.4154242254194003,1897,1 -1898,88336338,-1.2191650424268732,1898,1 -1899,26691392,1.0599424799878843,1899,1 -1900,38755210,1.3618491814850102,1900,1 -1901,62964703,-0.25868403873921797,1901,1 -1902,54265966,-0.5085518502798184,1902,1 -1903,35912901,-0.582667615404168,1903,1 -1904,66788536,-1.8541971183844657,1904,1 -1905,72450940,-0.7700361755973381,1905,1 -1906,73391135,-0.2556355933295425,1906,1 -1907,35812896,-0.5902368754153796,1907,1 -1908,28256932,-0.7424580082441732,1908,1 -1909,74295545,0.3687283617274291,1909,1 -1910,66624894,-0.47327233812623365,1910,1 -1911,36042820,-0.8574484082197422,1911,1 -1912,51112409,-1.504463240592626,1912,1 -1913,61751821,1.5201907481840753,1913,1 -1914,21662390,-0.9939621796360935,1914,1 -1915,30726621,-1.084190338936816,1915,1 -1916,11611390,-0.33774004754305254,1916,1 -1917,56651420,0.2051134905866347,1917,1 -1918,45952801,-0.5017959302499552,1918,1 -1919,34784433,0.2758283104383313,1919,1 -1920,59753245,-0.49024961078506357,1920,1 -1921,32327391,0.44127880091703353,1921,1 -1922,15237432,1.0578538622708722,1922,1 -1923,45647743,-2.362508358897329,1923,1 -1924,18266760,-0.408027999446355,1924,1 -1925,87021081,-0.029824912505130724,1925,1 -1926,37945194,-0.6397037982885455,1926,1 -1927,42041551,-0.8798990312913971,1927,1 -1928,56637459,0.717774812724018,1928,1 -1929,11475443,0.3896002725279231,1929,1 -1930,50797477,-0.22172388834543866,1930,1 -1931,41715026,-0.3387202235356286,1931,1 -1932,35970039,-1.8450888913296635,1932,1 -1933,85392527,0.8945073271480237,1933,1 -1934,70843553,-1.1474793254458744,1934,1 -1935,13015015,1.5403110352984974,1935,1 -1936,41385491,-0.9212872193875412,1936,1 -1937,67178815,-0.6809084006020353,1937,1 -1938,65951318,1.0214309903910461,1938,1 -1939,10640741,1.9945942251641888,1939,1 -1940,20545297,1.4222671972773615,1940,1 -1941,69123614,0.10409135669989346,1941,1 -1942,77806759,0.037534897441388396,1942,1 -1943,69576453,-0.5622057419994395,1943,1 -1944,51579218,-0.022644563834554685,1944,1 -1945,30637294,0.8675896238557872,1945,1 -1946,35373014,0.22825837330010895,1946,1 -1947,14655552,-0.9753438288607438,1947,1 -1948,10011155,-0.46227906680939834,1948,1 -1949,22532303,-0.6415707813697863,1949,1 -1950,10132538,-1.265964025071619,1950,1 -1951,84864524,-0.7240785710385828,1951,1 -1952,22408993,-0.06501959207989516,1952,1 -1953,23484294,-1.7667218298384662,1953,1 -1954,23866792,-1.2064841320690831,1954,1 -1955,38031870,1.460795319953236,1955,1 -1956,68469632,-0.5813475840739042,1956,1 -1957,35116258,0.6166836432387813,1957,1 -1958,27410471,0.31325728041540446,1958,1 -1959,19143507,1.300362578716765,1959,1 -1960,69340366,0.5752529983980952,1960,1 -1961,73615364,-1.3073650156523104,1961,1 -1962,55803071,-0.008525087994817633,1962,1 -1963,11369073,-0.1597083315625926,1963,1 -1964,28511013,0.36147439593729797,1964,1 -1965,50886490,0.4341990040165573,1965,1 -1966,45918886,0.896334434806751,1966,1 -1967,57760357,0.5238831172733383,1967,1 -1968,17196026,0.3253590924953487,1968,1 -1969,75589705,-0.24427158068494748,1969,1 -1970,81472224,2.7213338873947315,1970,1 -1971,44750584,-0.7818175530928265,1971,1 -1972,12346158,-0.23989194045287437,1972,1 -1973,38676063,0.514044743364771,1973,1 -1974,56366707,0.5709626480910408,1974,1 -1975,19469403,0.734123090364724,1975,1 -1976,15810767,-0.8191686036451482,1976,1 -1977,71558072,-1.6670609544092232,1977,1 -1978,59685188,1.0543710964029414,1978,1 -1979,78388701,1.4889715486334185,1979,1 -1980,46951673,1.2045564375334339,1980,1 -1981,53474091,0.3463095571413988,1981,1 -1982,85896371,-0.10459515579278607,1982,1 -1983,69468681,-0.04956814821133388,1983,1 -1984,37287112,0.3972127210990368,1984,1 -1985,82291616,-1.1750048231877177,1985,1 -1986,22354672,0.2600534807869698,1986,1 -1987,26800193,1.1926864689961232,1987,1 -1988,48868278,-1.7465634485443422,1988,1 -1989,38008794,-0.11610493732749644,1989,1 -1990,17398693,0.385151956591956,1990,1 -1991,30967652,0.5198211960055067,1991,1 -1992,44721596,-0.23321865203168976,1992,1 -1993,26722648,0.24526263666707285,1993,1 -1994,44239466,-0.5079645076543258,1994,1 -1995,27601373,1.7071070456617283,1995,1 -1996,47795059,-0.2805824820845897,1996,1 -1997,42580382,-1.0661251334782573,1997,1 -1998,48387843,0.20543366531303467,1998,1 -1999,11686695,0.5858748427991134,1999,1 -2000,16276490,-1.2038153710712958,2000,1 -2001,56195712,-2.3763277319594542,2001,1 -2002,40722954,1.107057395435786,2002,1 -2003,34990849,-0.10484184350488074,2003,1 -2004,87868992,0.3113835529481854,2004,1 -2005,81976040,0.05108019517525506,2005,1 -2006,38622887,0.7356336171003052,2006,1 -2007,33636974,0.015097257923552486,2007,1 -2008,78402896,0.3433451717362284,2008,1 -2009,54129219,-1.393315008290097,2009,1 -2010,60773693,0.2631292532379363,2010,1 -2011,83138621,0.11508666458350005,2011,1 -2012,31890150,1.6084503803359798,2012,1 -2013,25369811,0.22471984271563863,2013,1 -2014,71637339,0.3014364646540629,2014,1 -2015,43932200,1.4449231503094768,2015,1 -2016,70530704,0.7262583913727565,2016,1 -2017,33389005,0.040102306445495,2017,1 -2018,80818147,1.5940732120029588,2018,1 -2019,37279722,0.8405323198683816,2019,1 -2020,12536550,1.4690324013272087,2020,1 -2021,29179020,0.40743903127729764,2021,1 -2022,38901064,-0.407673439578108,2022,1 -2023,42769175,1.3142339895046697,2023,1 -2024,37950506,-1.0307344309631299,2024,1 -2025,11940293,0.1936639170684365,2025,1 -2026,40769540,1.4472469197800362,2026,1 -2027,11945332,0.4387079470701051,2027,1 -2028,74343900,-0.13956112432927895,2028,1 -2029,74509599,-1.8719480059493516,2029,1 -2030,77598524,0.9459202312714527,2030,1 -2031,71390808,0.6898511621851766,2031,1 -2032,68366937,-0.6320911276698404,2032,1 -2033,64948850,-0.6700122379562777,2033,1 -2034,86495409,-0.8853495899395568,2034,1 -2035,76558928,-0.8044624613609608,2035,1 -2036,64160868,0.4987590982903015,2036,1 -2037,81416203,0.642436687739607,2037,1 -2038,87070296,-2.5584820908458825,2038,1 -2039,14077013,-0.7671809612551675,2039,1 -2040,11390417,1.0637516545670285,2040,1 -2041,37649972,-0.27109960507335107,2041,1 -2042,55474813,-0.27100038470105703,2042,1 -2043,26797453,-0.2600149214206396,2043,1 -2044,86724964,-0.18683382206015306,2044,1 -2045,33838414,1.2068107584239198,2045,1 -2046,29643694,0.6070074059085324,2046,1 -2047,44543446,1.1571495527369535,2047,1 -2048,67391736,0.17615156559107403,2048,1 -2049,36496002,-1.0477429706195884,2049,1 -2050,11268593,-0.6044133587652473,2050,1 -2051,36000352,-0.25378511272378396,2051,1 -2052,85469485,1.1157926832865677,2052,1 -2053,27300877,0.07380685172928494,2053,1 -2054,22904259,1.8020079145151295,2054,1 -2055,28334774,0.5298597982139039,2055,1 -2056,30406719,-0.3797709896138275,2056,1 -2057,64379841,1.001831673351126,2057,1 -2058,82995898,-0.3333193070783673,2058,1 -2059,41198257,1.3389782716121597,2059,1 -2060,79345562,0.0296415704031434,2060,1 -2061,34815276,0.2035480201924731,2061,1 -2062,29182493,-0.7338299513236978,2062,1 -2063,30793928,-0.23393593766982265,2063,1 -2064,45094879,-1.8133950298353758,2064,1 -2065,54139431,0.6439139063182555,2065,1 -2066,68702396,0.887141555580202,2066,1 -2067,55620760,0.5134439395889473,2067,1 -2068,66855760,1.5090275699499158,2068,1 -2069,46278052,-1.165865037214951,2069,1 -2070,75648194,0.9369287399211552,2070,1 -2071,16885688,2.488888109875619,2071,1 -2072,79816087,0.8739781275441243,2072,1 -2073,27774311,1.0695187833919162,2073,1 -2074,39460920,-1.2571786762441353,2074,1 -2075,33591271,-1.881671606587793,2075,1 -2076,48677915,0.19677247757095834,2076,1 -2077,49866011,-0.1839888254288859,2077,1 -2078,50432473,1.3402649941395985,2078,1 -2079,17386576,-0.4564863924984099,2079,1 -2080,58698658,0.8969597943806015,2080,1 -2081,36355258,-0.7933111890303103,2081,1 -2082,58665546,-0.8657917414283267,2082,1 -2083,82378694,0.8471950406382716,2083,1 -2084,11273041,0.17344160901449215,2084,1 -2085,51037575,-2.3320395748545604,2085,1 -2086,65968413,0.43274331686718526,2086,1 -2087,34580877,-1.1258199623402503,2087,1 -2088,40230115,-0.057998990850801714,2088,1 -2089,49141035,1.5855594334004923,2089,1 -2090,10169148,-0.29329521562977634,2090,1 -2091,72651878,-1.4410981463062462,2091,1 -2092,20156904,-0.24329487871957647,2092,1 -2093,69590427,-1.2618206448659652,2093,1 -2094,21198177,1.4667828721470675,2094,1 -2095,25973485,0.5242859208741194,2095,1 -2096,47077017,-0.21230804321359537,2096,1 -2097,39282256,-1.8983804651674754,2097,1 -2098,29202864,-0.522904566978448,2098,1 -2099,62113661,-0.6280684683704648,2099,1 -2100,18575248,-1.1922143648395835,2100,1 -2101,60934587,0.6296323100966099,2101,1 -2102,46667718,0.10305189791216361,2102,1 -2103,71635619,-0.10391230807464266,2103,1 -2104,87591155,-0.4980250338129948,2104,1 -2105,27777492,0.636176531602004,2105,1 -2106,38579025,-1.6708481583296697,2106,1 -2107,66017621,-0.2674113047160557,2107,1 -2108,73144160,1.1601418729388522,2108,1 -2109,84983029,-0.31096522693053774,2109,1 -2110,44699930,-1.2701895017621243,2110,1 -2111,14411212,-0.10316587781419781,2111,1 -2112,51719689,-0.0011907936858154965,2112,1 -2113,64539469,-1.8588787708253898,2113,1 -2114,17336718,1.6109641380253317,2114,1 -2115,83712531,-0.6917186714319045,2115,1 -2116,38950942,-0.06671831387018684,2116,1 -2117,43312969,0.18301329874716726,2117,1 -2118,79405474,0.22211650250059065,2118,1 -2119,20633905,-1.1433853286430955,2119,1 -2120,86182891,-0.16399143640583713,2120,1 -2121,77751545,1.2114738903282842,2121,1 -2122,66906581,1.717715263050074,2122,1 -2123,39291634,-1.1395382178184146,2123,1 -2124,13296016,-0.11806530318322336,2124,1 -2125,77316542,-0.015307122615275568,2125,1 -2126,79323221,1.4033850811490125,2126,1 -2127,66881017,0.05160291716973894,2127,1 -2128,18945017,2.2834056283925475,2128,1 -2129,19560829,0.8745611821903289,2129,1 -2130,53446469,-0.5451814220035079,2130,1 -2131,55966300,-0.39256765580382447,2131,1 -2132,82225389,-1.5897025014603625,2132,1 -2133,22105019,-1.0013938919167387,2133,1 -2134,70101274,-1.9070019170827028,2134,1 -2135,43520577,0.47812599819653057,2135,1 -2136,68830219,-0.23862934187962562,2136,1 -2137,57921614,0.5304593706617555,2137,1 -2138,56740725,0.5555118465650243,2138,1 -2139,75835178,-0.7917397305233095,2139,1 -2140,79895455,-0.35382081586888225,2140,1 -2141,14862717,-0.3881979856940037,2141,1 -2142,19232548,0.08593478202020392,2142,1 -2143,29153089,0.27925702821100273,2143,1 -2144,71480620,2.1259934507540907,2144,1 -2145,79066826,0.3025059258729174,2145,1 -2146,10853783,0.2789895106693982,2146,1 -2147,76234183,-0.5575084359177142,2147,1 -2148,80444220,-0.829656718968367,2148,1 -2149,39746903,0.8878961691720616,2149,1 -2150,77621538,-0.7053483304240457,2150,1 -2151,38772929,-0.7282333280204988,2151,1 -2152,67381800,1.6033659088990855,2152,1 -2153,75127843,-0.05360190542999502,2153,1 -2154,41929592,-0.32211315205726976,2154,1 -2155,65023454,0.4207978853045858,2155,1 -2156,55171128,0.4170931264087403,2156,1 -2157,51349470,0.024292704936424773,2157,1 -2158,77618218,1.2926935002055133,2158,1 -2159,36662404,1.6752655590914838,2159,1 -2160,19095511,-0.5767712507074101,2160,1 -2161,49679323,0.6840843096160598,2161,1 -2162,47728410,0.8039853203440451,2162,1 -2163,45477796,1.6162818278775948,2163,1 -2164,43025147,1.4376721446452314,2164,1 -2165,18166633,0.9515785853633801,2165,1 -2166,29350261,0.33709249282311654,2166,1 -2167,89877434,1.0455417697823737,2167,1 -2168,31252309,-0.12868473187455268,2168,1 -2169,44290647,0.6433875261610055,2169,1 -2170,65196405,1.9186517243370007,2170,1 -2171,23182973,-0.4716196649715609,2171,1 -2172,73981972,1.6899926479417204,2172,1 -2173,22558216,0.5935908512214801,2173,1 -2174,37360594,-0.1802646654665701,2174,1 -2175,32619703,0.8789490049025745,2175,1 -2176,78490136,0.5308038900429638,2176,1 -2177,60863324,0.2446328624940076,2177,1 -2178,45809093,0.5208090288742472,2178,1 -2179,60968368,1.232286368958759,2179,1 -2180,70240335,-0.21656439421635926,2180,1 -2181,86818976,-0.06598381829287818,2181,1 -2182,38226019,-0.28948522362995527,2182,1 -2183,61009626,0.2782916399520269,2183,1 -2184,82317301,-0.5616432764723289,2184,1 -2185,89172849,0.6038294497570788,2185,1 -2186,62965995,-0.16097271663471155,2186,1 -2187,28521338,-0.033636114131490244,2187,1 -2188,46261253,-0.318065099617138,2188,1 -2189,54156870,0.22528639480671808,2189,1 -2190,48745003,-1.5759026128228646,2190,1 -2191,52021748,-0.2453055343772236,2191,1 -2192,85672211,0.9304477128116713,2192,1 -2193,55481713,-0.7657307315131546,2193,1 -2194,13980377,0.5878205910390248,2194,1 -2195,12600477,0.10776904114222757,2195,1 -2196,53185593,-0.7272109008293148,2196,1 -2197,68540716,-0.7287781786278421,2197,1 -2198,32511634,0.2347868675647706,2198,1 -2199,15417839,-0.011824516204991765,2199,1 -2200,86871520,-0.049681775719521946,2200,1 -2201,75494944,-0.7062516777201769,2201,1 -2202,59501244,-0.3088706022187685,2202,1 -2203,81030144,1.247432529882404,2203,1 -2204,70000403,-0.8354879670635952,2204,1 -2205,87470213,-0.4249952633113603,2205,1 -2206,65179572,-0.8859507494937091,2206,1 -2207,83581331,-0.26302244343961884,2207,1 -2208,56964908,-1.1318197388290527,2208,1 -2209,71580894,-0.418774763414826,2209,1 -2210,74974795,1.4096978720974929,2210,1 -2211,87930084,1.0051028866381624,2211,1 -2212,17514299,0.7721798656132212,2212,1 -2213,17903372,-0.34903772360679897,2213,1 -2214,39197319,-0.2954503106335566,2214,1 -2215,39220759,-0.5447918057950926,2215,1 -2216,47286528,-1.593209791034294,2216,1 -2217,61458947,1.143473385907346,2217,1 -2218,75087294,-0.14048940509152938,2218,1 -2219,25401459,3.0042173794919447,2219,1 -2220,52653047,-0.402944432173927,2220,1 -2221,58525366,-0.6314807967011358,2221,1 -2222,37896396,-1.010580743800213,2222,1 -2223,82556768,1.0258156330217463,2223,1 -2224,89591805,1.0929347807908287,2224,1 -2225,45878734,-0.34239181416542874,2225,1 -2226,55916422,0.2129299049910132,2226,1 -2227,13044294,1.5738470697143407,2227,1 -2228,61459433,-0.4038089010851435,2228,1 -2229,70199806,-1.532130746947626,2229,1 -2230,54803958,2.033110467205872,2230,1 -2231,53119435,-1.3997735935417879,2231,1 -2232,56732421,-1.3649493103551602,2232,1 -2233,30114503,-0.33880455386174935,2233,1 -2234,61447333,-0.08320994096546608,2234,1 -2235,61270755,0.22001523208275872,2235,1 -2236,17277696,-0.6087647996652865,2236,1 -2237,76571730,-0.02171745781199619,2237,1 -2238,58858159,1.5695004698471375,2238,1 -2239,57740529,2.0498233601975735,2239,1 -2240,27329221,0.8048125078269075,2240,1 -2241,19566194,0.13384632938989333,2241,1 -2242,23516100,1.161948190914255,2242,1 -2243,21464600,-1.332404682508698,2243,1 -2244,85386189,-1.6390702926925853,2244,1 -2245,14322563,-0.2361174579456291,2245,1 -2246,47579836,-2.596880019165591,2246,1 -2247,59973700,-0.6361185760931706,2247,1 -2248,33724226,0.30779485891532715,2248,1 -2249,21080540,0.027640067872675967,2249,1 -2250,34416876,-0.6995663846252591,2250,1 -2251,27041966,0.5091674117934566,2251,1 -2252,15112897,-1.3859301811921807,2252,1 -2253,64084892,1.1030633442727238,2253,1 -2254,59248875,-1.6811189113878349,2254,1 -2255,73581121,0.9768238567168162,2255,1 -2256,89086959,-0.6936713227295669,2256,1 -2257,12470292,-0.8769222893404813,2257,1 -2258,45006721,0.7043294308962718,2258,1 -2259,45301014,-0.8888669048292679,2259,1 -2260,74815762,0.14243076875717,2260,1 -2261,45200236,-2.0337478479262767,2261,1 -2262,40342800,-0.7284863613997701,2262,1 -2263,74112986,0.12214759242172658,2263,1 -2264,48420368,1.0709903091514852,2264,1 -2265,69520004,-0.4896151523328172,2265,1 -2266,71877756,0.38495948179504247,2266,1 -2267,36238167,0.488812180583974,2267,1 -2268,10114762,1.5949807799918776,2268,1 -2269,63993484,0.08025250727938664,2269,1 -2270,28652820,-0.2850678113666333,2270,1 -2271,71100518,-0.10093387887738625,2271,1 -2272,30105878,-1.7713715524951188,2272,1 -2273,77361602,-0.0834739271662916,2273,1 -2274,47757958,1.061752531445557,2274,1 -2275,25163636,-0.18042688357251607,2275,1 -2276,26818814,0.1720195463896114,2276,1 -2277,89065880,1.1711288555870065,2277,1 -2278,40709962,0.7489143954575282,2278,1 -2279,87611167,-1.9939792766640867,2279,1 -2280,22029472,-0.9621260659670425,2280,1 -2281,35058344,-0.2566134365324643,2281,1 -2282,18842765,0.5898423962044543,2282,1 -2283,40371694,-0.4394613867809473,2283,1 -2284,24348465,0.3019866031477937,2284,1 -2285,71636964,0.35393562314646615,2285,1 -2286,60573315,0.04957714434760633,2286,1 -2287,66504491,0.19698143181948985,2287,1 -2288,67305889,1.4972433997414878,2288,1 -2289,49737296,-2.128647049592323,2289,1 -2290,81737389,0.9220509869701299,2290,1 -2291,70525424,-0.5983058132907535,2291,1 -2292,40261251,-1.1435373280383774,2292,1 -2293,11244944,-1.5739736446377437,2293,1 -2294,36673813,-0.25585117344726355,2294,1 -2295,59566990,1.1966836911584375,2295,1 -2296,23536165,0.39093082621882774,2296,1 -2297,45308705,0.31789131527252823,2297,1 -2298,43328025,2.013070089512072,2298,1 -2299,85239370,0.9081374602527639,2299,1 -2300,42265729,-0.06616218673218507,2300,1 -2301,12886306,-0.19814873693231985,2301,1 -2302,70389885,0.02039259789070815,2302,1 -2303,44724537,0.9010462054616457,2303,1 -2304,86901130,0.3293563976821292,2304,1 -2305,32319558,-0.5893397633536896,2305,1 -2306,13812923,-0.16665245337869058,2306,1 -2307,55858948,0.5388625044049901,2307,1 -2308,35575253,0.17135825074627936,2308,1 -2309,49457983,0.5670670316321565,2309,1 -2310,55483271,-0.005974778819134835,2310,1 -2311,25792082,-0.8332128895286262,2311,1 -2312,23249524,-2.177388741725472,2312,1 -2313,38239956,-0.1148615495878283,2313,1 -2314,43583998,0.642797108555231,2314,1 -2315,48010743,0.22536214853572217,2315,1 -2316,26324295,0.41489802671271525,2316,1 -2317,47800382,-0.3677332523257982,2317,1 -2318,38489905,-0.4017949807014134,2318,1 -2319,84209885,0.4516958595270672,2319,1 -2320,45717488,2.2850263442334158,2320,1 -2321,77672492,0.14600778014908602,2321,1 -2322,29866819,-0.09204579427585027,2322,1 -2323,85222130,1.8701260892563445,2323,1 -2324,20827943,-0.5806581340149842,2324,1 -2325,65979748,-1.2510010535756917,2325,1 -2326,12887629,-2.0466795317803412,2326,1 -2327,79422905,0.3728930360203964,2327,1 -2328,61468538,0.4906573320737219,2328,1 -2329,51832726,0.057393322376008735,2329,1 -2330,48650221,0.038353155773366815,2330,1 -2331,78874949,-0.06700336097886303,2331,1 -2332,68745211,-0.37255413973200485,2332,1 -2333,65653491,-0.10894923045030827,2333,1 -2334,73878137,-0.9456136950107312,2334,1 -2335,30432290,-1.08996099970398,2335,1 -2336,65044920,0.9641659518175509,2336,1 -2337,25752755,-0.7126718376453616,2337,1 -2338,68673303,0.1729011561291059,2338,1 -2339,73072056,0.13723822935996977,2339,1 -2340,11179011,-1.0843109065280938,2340,1 -2341,30022421,1.4198068349836777,2341,1 -2342,84385795,2.3647164647678554,2342,1 -2343,61281556,0.5207784257353345,2343,1 -2344,63231141,-0.9661893370577632,2344,1 -2345,45105064,0.8167377727713624,2345,1 -2346,33108211,1.020914538190412,2346,1 -2347,76666696,0.31422289758018507,2347,1 -2348,81476202,0.6835790030539185,2348,1 -2349,75765905,1.1193529602118182,2349,1 -2350,67403893,-1.0866839585989174,2350,1 -2351,26653761,0.19999367377961103,2351,1 -2352,21399471,-0.4230661884480376,2352,1 -2353,18456518,0.11285866578071892,2353,1 -2354,82545680,2.060317852698447,2354,1 -2355,19656056,-0.8427254591784415,2355,1 -2356,38230976,0.6545337968581986,2356,1 -2357,45239392,0.8505732022387023,2357,1 -2358,34515703,-1.223510707262292,2358,1 -2359,34328037,-0.21065871308459927,2359,1 -2360,77354808,0.10080280317897723,2360,1 -2361,35873632,1.4638441049808448,2361,1 -2362,40225939,1.1108967983556963,2362,1 -2363,83025019,-0.8857802520183972,2363,1 -2364,18613309,-0.6552470514923096,2364,1 -2365,32973992,0.09205701050388522,2365,1 -2366,49270430,0.6817814499252483,2366,1 -2367,76871823,0.9366182293721971,2367,1 -2368,36057341,1.6632294179206506,2368,1 -2369,53134753,-0.2510351158504874,2369,1 -2370,71759367,-0.3194148959878352,2370,1 -2371,64860146,1.4516317630214142,2371,1 -2372,31169745,-2.9884488965350737,2372,1 -2373,29487378,-0.4466443847342381,2373,1 -2374,59418278,-0.2821713866093478,2374,1 -2375,60055752,-0.3288801783420042,2375,1 -2376,56507542,-0.8239906225519376,2376,1 -2377,61273469,0.3499441720940751,2377,1 -2378,78009131,-0.2611749292096179,2378,1 -2379,77886634,0.9731666697551286,2379,1 -2380,25703361,0.9985154192458816,2380,1 -2381,84092785,-0.4982843603801227,2381,1 -2382,28739159,-0.8967490642971202,2382,1 -2383,53103948,1.5607680619616022,2383,1 -2384,15599794,-1.612838164377959,2384,1 -2385,63030278,-3.053669461375978,2385,1 -2386,53903546,-0.5848056052721069,2386,1 -2387,48223602,-0.33358845251197405,2387,1 -2388,69314674,0.5264370062925818,2388,1 -2389,45418661,1.0202377008945394,2389,1 -2390,37307104,0.9278821150547967,2390,1 -2391,55772577,0.4066254222601436,2391,1 -2392,25069119,-0.26517061750460125,2392,1 -2393,21807941,-1.3528671185505021,2393,1 -2394,41161949,2.0743047925893507,2394,1 -2395,15311626,0.6493083232896438,2395,1 -2396,37588539,-2.2666806788519382,2396,1 -2397,79447740,0.39736843228592533,2397,1 -2398,56096152,0.16206527140476717,2398,1 -2399,42855622,-0.5444211316280411,2399,1 -2400,87672466,-0.5363518199973969,2400,1 -2401,46279195,1.7255062613206218,2401,1 -2402,86020078,1.2786093658538351,2402,1 -2403,62199647,1.6468452600510641,2403,1 -2404,31649248,-0.4398105939794976,2404,1 -2405,42772107,0.15543039996219246,2405,1 -2406,21032202,1.51030828701727,2406,1 -2407,43787868,1.2763968157122836,2407,1 -2408,38712799,0.8660712586781668,2408,1 -2409,15112923,2.590895085010979,2409,1 -2410,73686498,0.40137715358308473,2410,1 -2411,87803935,-1.1812534609401193,2411,1 -2412,64721004,-1.718841555523769,2412,1 -2413,18266573,1.2854483276876962,2413,1 -2414,32542956,0.6441164662682619,2414,1 -2415,23564525,0.027318427246096386,2415,1 -2416,22274762,1.0887593821920698,2416,1 -2417,41865778,0.5780340982236738,2417,1 -2418,15637153,1.0411842957049222,2418,1 -2419,76920639,0.5134230950702455,2419,1 -2420,40146366,1.0280396110924228,2420,1 -2421,23608237,1.231448228462144,2421,1 -2422,33828824,0.22143845974166396,2422,1 -2423,43081592,-1.869671997597182,2423,1 -2424,26631756,-1.9914546185105426,2424,1 -2425,16848785,0.06710176652533872,2425,1 -2426,37276275,-0.14796484102935392,2426,1 -2427,22676497,-0.6103767176694866,2427,1 -2428,31747353,1.7632224184037177,2428,1 -2429,47909762,1.11935911092848,2429,1 -2430,73144189,0.0007629333376063623,2430,1 -2431,13434021,0.7571839963284945,2431,1 -2432,24437966,0.07589109024543397,2432,1 -2433,89069421,-0.4969717791943738,2433,1 -2434,33248278,-0.2930832550687536,2434,1 -2435,33738250,0.5028089510262859,2435,1 -2436,71830351,1.331866190195273,2436,1 -2437,50679839,0.5919378995876663,2437,1 -2438,14330558,-0.18276821729800205,2438,1 -2439,23799067,-0.46026966021049626,2439,1 -2440,54828305,-1.3783601009398116,2440,1 -2441,29568569,0.11826802133707705,2441,1 -2442,64842606,0.08014133951012581,2442,1 -2443,33250017,0.7149302822006668,2443,1 -2444,74325146,-0.3177174327681182,2444,1 -2445,30831781,-0.3453136712026954,2445,1 -2446,67077711,1.7923007444817172,2446,1 -2447,58262949,-0.3365920138537203,2447,1 -2448,53672350,-0.42180139030312475,2448,1 -2449,12448522,0.9814186001553913,2449,1 -2450,25088179,0.4354186024620957,2450,1 -2451,74375470,-1.184777255351154,2451,1 -2452,30847129,0.9658150909282868,2452,1 -2453,66783394,0.6142346092129235,2453,1 -2454,56584530,1.3027001071104842,2454,1 -2455,85698271,1.811376347776799,2455,1 -2456,21627033,0.7599043628625988,2456,1 -2457,61552661,-0.23446264900678845,2457,1 -2458,51468338,0.29657572966467055,2458,1 -2459,62134684,-1.3207386318912264,2459,1 -2460,47282619,-0.3480627204299794,2460,1 -2461,51875327,1.8767515082708615,2461,1 -2462,20656786,-0.7285026905200638,2462,1 -2463,43575306,-0.2995996354987302,2463,1 -2464,86609357,1.4891900490931493,2464,1 -2465,59262292,0.6928881931841018,2465,1 -2466,25845931,0.27686658015554966,2466,1 -2467,21082450,0.5690926151317314,2467,1 -2468,15941635,0.39187901821477084,2468,1 -2469,82677510,-0.7699300643650703,2469,1 -2470,66551937,-2.060521984214748,2470,1 -2471,41356111,-0.32090320047049475,2471,1 -2472,11727885,-1.3112762659852004,2472,1 -2473,56104715,1.189269359574659,2473,1 -2474,31261945,0.2909214019189504,2474,1 -2475,53337808,-0.4830971043077926,2475,1 -2476,69849442,0.12081690737142796,2476,1 -2477,57448154,2.563400386078894,2477,1 -2478,66537881,2.1184748240950553,2478,1 -2479,86646181,0.04083609860075275,2479,1 -2480,32396456,0.8125670014747213,2480,1 -2481,17989784,0.6143910470994818,2481,1 -2482,61488783,0.8159478277715806,2482,1 -2483,21147624,0.10772481381801825,2483,1 -2484,77058566,0.7126942657856387,2484,1 -2485,89138127,-2.095869626930933,2485,1 -2486,30372545,1.597685713225018,2486,1 -2487,83437265,0.657952445053887,2487,1 -2488,21079799,-0.36589430682117946,2488,1 -2489,17293690,-1.5733643716231456,2489,1 -2490,25622590,-0.09441476588992383,2490,1 -2491,78829129,0.19230966136325187,2491,1 -2492,85691830,0.40327368655001716,2492,1 -2493,34528351,-0.4235966564026377,2493,1 -2494,22031750,-0.11486681763977723,2494,1 -2495,64224503,-0.511031069128405,2495,1 -2496,44763227,-0.9865474852975136,2496,1 -2497,45660355,0.9263083603552582,2497,1 -2498,56222121,1.7398728089452375,2498,1 -2499,75080304,-0.9130844967586721,2499,1 -2500,15664290,-0.12697309431951245,2500,1 -2501,45400071,-0.4319155686001364,2501,1 -2502,68353464,-0.5757258585522502,2502,1 -2503,20629037,-1.2216541888786843,2503,1 -2504,74647078,0.0030609607281369485,2504,1 -2505,15581179,1.130470365342248,2505,1 -2506,67467850,0.141280872619818,2506,1 -2507,38701642,-0.7575854496665039,2507,1 -2508,59196241,0.4269774160822455,2508,1 -2509,13012836,-0.5074087284198331,2509,1 -2510,75642650,0.663190686744806,2510,1 -2511,37528249,-1.181968898039532,2511,1 -2512,14830944,0.6784927221338056,2512,1 -2513,47976304,-1.2041112516024735,2513,1 -2514,79201289,-0.6059196933795317,2514,1 -2515,55894298,-0.7354136006110628,2515,1 -2516,66233982,-0.7306087408412842,2516,1 -2517,23682062,0.18661841120955508,2517,1 -2518,26609041,-1.2943634566893316,2518,1 -2519,10025990,-0.20096129538824117,2519,1 -2520,33278217,0.8788611906173096,2520,1 -2521,19360443,-0.15911966421099794,2521,1 -2522,84693087,1.1195658582753096,2522,1 -2523,17301360,0.5491128882894029,2523,1 -2524,82700123,1.0191473687468744,2524,1 -2525,74644551,-0.3762309512439177,2525,1 -2526,69935641,-0.1273197921042767,2526,1 -2527,13737752,0.4375875031047929,2527,1 -2528,56117441,0.17725860481807304,2528,1 -2529,27834610,-2.001888465587391,2529,1 -2530,50880867,0.7893927965011053,2530,1 -2531,72272517,-0.6241132325578618,2531,1 -2532,53639875,-0.36756107768131774,2532,1 -2533,56612537,1.0835063984493407,2533,1 -2534,58843403,0.5614176712469879,2534,1 -2535,19006146,0.6622109017345044,2535,1 -2536,87251039,-0.023982855162658846,2536,1 -2537,55461899,1.9273308235543711,2537,1 -2538,46508529,-1.4104004598598583,2538,1 -2539,33776697,0.226875029386714,2539,1 -2540,67034428,0.09143503068528172,2540,1 -2541,75532312,-0.5702841859451159,2541,1 -2542,51304585,-0.7997105361942793,2542,1 -2543,87852371,0.42236241035578115,2543,1 -2544,18109355,-0.528005374725012,2544,1 -2545,49066205,0.5285539267146792,2545,1 -2546,79814208,1.0023714026457196,2546,1 -2547,80277670,-0.6095715636957835,2547,1 -2548,87477523,-0.5129827304684463,2548,1 -2549,57613286,0.3466405422665044,2549,1 -2550,48649009,1.876258383430641,2550,1 -2551,76523112,-0.691143229199053,2551,1 -2552,73713631,0.1405069032334571,2552,1 -2553,57390669,1.9879625686344402,2553,1 -2554,84715335,-0.6200152249543507,2554,1 -2555,50013342,0.3317324810589245,2555,1 -2556,64021608,0.9969307443561948,2556,1 -2557,21977181,1.3817874171195654,2557,1 -2558,15885445,-0.665337927899849,2558,1 -2559,60820145,0.007772937709512245,2559,1 -2560,49564773,-0.4717690987542765,2560,1 -2561,25165222,-1.3417573990453981,2561,1 -2562,28387183,-0.9474789278276593,2562,1 -2563,24252496,-0.7437972891678106,2563,1 -2564,89301212,0.8912172359655981,2564,1 -2565,87079109,-0.7944505377923903,2565,1 -2566,44521484,2.528889716228021,2566,1 -2567,45272078,-0.6838849987515782,2567,1 -2568,34474197,-1.6297012087318914,2568,1 -2569,57222423,-0.3425707714624978,2569,1 -2570,48063475,0.8053290661652094,2570,1 -2571,32270522,-1.716124725412484,2571,1 -2572,53074884,0.7559063962685681,2572,1 -2573,73657888,0.29168092850590766,2573,1 -2574,52406235,-0.8282757355763912,2574,1 -2575,84234067,-0.8319277653622226,2575,1 -2576,83689700,1.4556082481255248,2576,1 -2577,73686639,1.007412954332978,2577,1 -2578,32734206,0.46937048312423313,2578,1 -2579,41735755,0.3985342226752705,2579,1 -2580,72544050,-0.32164488885875253,2580,1 -2581,32634274,1.852060072094574,2581,1 -2582,40702009,-1.9864895314180893,2582,1 -2583,79448071,0.9579944188273176,2583,1 -2584,13678420,-0.5643391860794578,2584,1 -2585,65951319,-0.9878728521427915,2585,1 -2586,64501253,0.2669623243992495,2586,1 -2587,34754237,-0.3073654468176854,2587,1 -2588,65588665,-0.49884840141870185,2588,1 -2589,88280449,-0.034927628362145594,2589,1 -2590,31176365,1.0931340893185868,2590,1 -2591,63886593,-0.8022363681179329,2591,1 -2592,54356345,0.02363411131559847,2592,1 -2593,60220424,1.6913068819474657,2593,1 -2594,71778222,-0.42824314163073657,2594,1 -2595,19953887,-1.1058207433428604,2595,1 -2596,47621852,0.13896146341321014,2596,1 -2597,32776021,-0.13726818469782284,2597,1 -2598,22582796,1.197387005785165,2598,1 -2599,54874632,0.4600574869807727,2599,1 -2600,49102702,1.5916568895485321,2600,1 -2601,86847227,0.2738073171291178,2601,1 -2602,17127837,0.6001929566853584,2602,1 -2603,25312552,-1.3305568453303998,2603,1 -2604,45486863,-1.1240872310210328,2604,1 -2605,37748165,-0.011479430061165134,2605,1 -2606,23360280,2.117325034200022,2606,1 -2607,36308045,-0.017942576941354406,2607,1 -2608,23954604,0.395584139030475,2608,1 -2609,54337728,0.04055274561000138,2609,1 -2610,42407719,-0.3919840381502431,2610,1 -2611,24550791,-0.5962275042311458,2611,1 -2612,25204346,0.2614990002999717,2612,1 -2613,83136781,0.6009013396822115,2613,1 -2614,14500159,0.001942268226479184,2614,1 -2615,61039941,-0.27962802515433915,2615,1 -2616,66000706,-1.439178596930777,2616,1 -2617,15372111,1.727782857127408,2617,1 -2618,79387076,-1.7875327459451664,2618,1 -2619,64778519,-0.30752347191524904,2619,1 -2620,42833501,-1.276528484611075,2620,1 -2621,22898768,-1.8018005367160863,2621,1 -2622,62875460,1.3837739876369246,2622,1 -2623,47691659,0.683259885969507,2623,1 -2624,19720770,-0.23612928235320882,2624,1 -2625,28299083,-0.25716381054155374,2625,1 -2626,48549258,-0.47365564325158405,2626,1 -2627,79831227,0.46332609623790016,2627,1 -2628,12969778,-0.9245736482218264,2628,1 -2629,40248532,-0.32074192955961484,2629,1 -2630,34002981,0.2184368463805682,2630,1 -2631,27370862,-0.6030750951928145,2631,1 -2632,20862403,-1.8238256608433046,2632,1 -2633,62241997,-0.788595009402474,2633,1 -2634,82300392,1.0915122849629353,2634,1 -2635,16453488,1.265934538260262,2635,1 -2636,81771937,0.6398421103668349,2636,1 -2637,35015961,-0.47970675114891675,2637,1 -2638,89448888,0.10092763734443741,2638,1 -2639,79083694,-0.8570429568343145,2639,1 -2640,26702278,1.4066329026673936,2640,1 -2641,73248134,-0.3204695096822368,2641,1 -2642,44709762,-0.8035775629409443,2642,1 -2643,41381266,0.4014195953016641,2643,1 -2644,21884893,1.5879737853619253,2644,1 -2645,61600523,0.5225411087713189,2645,1 -2646,58288890,-1.9010182616858722,2646,1 -2647,17271009,-0.4364990364455444,2647,1 -2648,41455300,-2.074326001019345,2648,1 -2649,13832175,0.0893714002244235,2649,1 -2650,12960604,-0.12426690024826108,2650,1 -2651,11887128,0.39481227584930706,2651,1 -2652,36248053,-0.19076941865666228,2652,1 -2653,76098395,-1.4205764238022975,2653,1 -2654,34072130,-1.9372008064573716,2654,1 -2655,47730100,1.5136931349160188,2655,1 -2656,34580946,-0.9892938562416741,2656,1 -2657,66020156,0.06458769056910303,2657,1 -2658,32301258,-0.9164361360870797,2658,1 -2659,34069865,0.7199208790148595,2659,1 -2660,14900883,0.6096835625336997,2660,1 -2661,42908224,1.3070347356013041,2661,1 -2662,43671605,0.06635746943127471,2662,1 -2663,78275785,0.2148436800002296,2663,1 -2664,62490114,1.0238561818025325,2664,1 -2665,32142868,0.8118520926989843,2665,1 -2666,47850832,0.20131295801575919,2666,1 -2667,50084268,0.6697336767410661,2667,1 -2668,22407430,-1.4505255374744255,2668,1 -2669,78065465,-0.5042137061794209,2669,1 -2670,74044945,1.0279995022777004,2670,1 -2671,42056004,-0.6892063198591214,2671,1 -2672,50615017,0.01182600920050758,2672,1 -2673,43184472,-1.2414513726858036,2673,1 -2674,13840498,-1.035849384553662,2674,1 -2675,30386222,0.0031775146360922568,2675,1 -2676,42791802,1.48114941129154,2676,1 -2677,50124240,-3.1360887815830534,2677,1 -2678,34001087,-2.000070084121324,2678,1 -2679,87683648,2.7185747969979293,2679,1 -2680,73504834,0.7474969430754247,2680,1 -2681,38280201,0.292826088884114,2681,1 -2682,43327343,1.6100572172296035,2682,1 -2683,20339009,0.4449416609161289,2683,1 -2684,31711747,0.2701104798583994,2684,1 -2685,74325280,1.3609058762059312,2685,1 -2686,44469835,1.484382953120458,2686,1 -2687,70861177,-2.165691515675763,2687,1 -2688,54051464,-0.2227481500277029,2688,1 -2689,17271368,-0.40522265463253365,2689,1 -2690,42188639,1.6746259382484776,2690,1 -2691,81495107,0.36576310725557026,2691,1 -2692,33704214,-1.1687899777302957,2692,1 -2693,39677901,-0.15726206219262456,2693,1 -2694,21091818,0.445438603169139,2694,1 -2695,22439564,-1.33882908564324,2695,1 -2696,34277935,-0.5143602006688911,2696,1 -2697,27939858,0.0646209523697929,2697,1 -2698,62867663,-0.8558033074959716,2698,1 -2699,31568448,-0.3354713333632583,2699,1 -2700,45184829,0.5509320564604128,2700,1 -2701,73724386,-2.1411970562755753,2701,1 -2702,67411499,0.5749086964839376,2702,1 -2703,81656414,1.0521392784346044,2703,1 -2704,39856004,-0.09884880117585637,2704,1 -2705,31164231,-0.2440517454131732,2705,1 -2706,82678175,-1.3014467279758803,2706,1 -2707,48962417,1.3334119893120229,2707,1 -2708,49349879,0.22804706803703717,2708,1 -2709,88113223,0.6260348666341072,2709,1 -2710,23698358,-1.4147681788032624,2710,1 -2711,50711097,1.3152379658777733,2711,1 -2712,36541166,1.163061653019212,2712,1 -2713,58776659,-0.2781706410688775,2713,1 -2714,58584370,-0.1208631376339479,2714,1 -2715,86874463,0.5446497835639234,2715,1 -2716,72973292,0.7099904682816534,2716,1 -2717,31225612,-1.3716052154789955,2717,1 -2718,20706766,-0.5019325092599382,2718,1 -2719,79944240,-1.5915003920591961,2719,1 -2720,43900544,-1.8397650992189263,2720,1 -2721,62256131,-0.9800736843129995,2721,1 -2722,66858376,-1.0185645438280748,2722,1 -2723,36384102,-0.6198581374160053,2723,1 -2724,27511304,-0.6925512791755909,2724,1 -2725,53086292,-1.127316700104239,2725,1 -2726,70347600,-0.016755954389074054,2726,1 -2727,54437331,-0.9357850714312622,2727,1 -2728,76319421,0.04477967548408174,2728,1 -2729,78350604,0.14671494043266906,2729,1 -2730,81436125,0.4247938826172085,2730,1 -2731,88990790,2.439467232877655,2731,1 -2732,54916278,0.9675383965443537,2732,1 -2733,89505814,-0.2945544973486839,2733,1 -2734,43480490,0.6085099350803803,2734,1 -2735,13843793,-1.7297123428345749,2735,1 -2736,67614824,-0.8668213584861633,2736,1 -2737,75571064,-1.2540748033409157,2737,1 -2738,16386248,0.9610442770004004,2738,1 -2739,26828861,1.5490650698690853,2739,1 -2740,51224843,1.03163590421258,2740,1 -2741,43702947,0.9347327529814197,2741,1 -2742,58204127,2.007476614388926,2742,1 -2743,27520088,0.6514302308251005,2743,1 -2744,19123444,-1.051869646350314,2744,1 -2745,15804223,2.256605080853212,2745,1 -2746,33756384,0.7275722077436738,2746,1 -2747,70496044,-0.3911808619911728,2747,1 -2748,71016508,0.1929419014120228,2748,1 -2749,62306881,-0.2849572895217925,2749,1 -2750,35501760,0.3329656584553379,2750,1 -2751,24589786,-0.2751908252391095,2751,1 -2752,31894314,0.24778076910306182,2752,1 -2753,79805255,-0.32432326710828263,2753,1 -2754,15498340,0.5029333312844585,2754,1 -2755,45467746,-1.1466755501945012,2755,1 -2756,83538723,0.6781639704591023,2756,1 -2757,53109309,-0.8419305445818327,2757,1 -2758,62329022,1.3863386927898032,2758,1 -2759,62316924,0.9508269522145478,2759,1 -2760,33810727,-0.22537092150916843,2760,1 -2761,80981317,0.15855306669310512,2761,1 -2762,40537909,1.470958276385927,2762,1 -2763,74932619,-0.04140038808456116,2763,1 -2764,70410916,-0.5422155727905276,2764,1 -2765,64764086,0.4809550714202553,2765,1 -2766,51585551,0.2716151924428831,2766,1 -2767,87181092,0.31864989139798017,2767,1 -2768,54513010,-1.181273190349785,2768,1 -2769,56807754,-0.022068761806041587,2769,1 -2770,22301958,0.41259604437881897,2770,1 -2771,54340355,-0.5381524887076428,2771,1 -2772,10911474,-0.5013472763191847,2772,1 -2773,22247511,-1.1508471157519076,2773,1 -2774,63328563,-0.8920074224371966,2774,1 -2775,72941626,-0.14546876865370506,2775,1 -2776,48039434,2.104304591678652,2776,1 -2777,73499877,1.123432643828287,2777,1 -2778,45357161,-1.2973656328296337,2778,1 -2779,36845931,2.048325118319912,2779,1 -2780,51391854,-0.2974116680132744,2780,1 -2781,52360978,-1.481293192046943,2781,1 -2782,77228916,0.5833293485897503,2782,1 -2783,10417728,-0.3119021150048715,2783,1 -2784,78766085,-0.2634724973005242,2784,1 -2785,72906877,0.6005987897206554,2785,1 -2786,33831229,-0.2723510681278965,2786,1 -2787,36448864,0.7028945340953002,2787,1 -2788,89316886,-0.6855120281537844,2788,1 -2789,11334825,-0.2783335746120495,2789,1 -2790,79475512,0.9847182103160964,2790,1 -2791,37848796,0.28413113124751227,2791,1 -2792,57852003,0.06532487400699474,2792,1 -2793,17184352,1.0175349392543822,2793,1 -2794,49604274,0.20131504279105847,2794,1 -2795,55079361,2.215711431215221,2795,1 -2796,76881055,-0.47948894170003087,2796,1 -2797,20529030,0.16598880227463503,2797,1 -2798,40794511,1.4044129182182385,2798,1 -2799,59470426,2.39782176226511,2799,1 -2800,12362520,-0.894391052045697,2800,1 -2801,60061832,-0.45109358291782314,2801,1 -2802,79705141,-0.4276931499261793,2802,1 -2803,73467270,1.022502930724299,2803,1 -2804,22818794,-1.1779947064876504,2804,1 -2805,52969346,-1.3407612021430895,2805,1 -2806,71561381,0.17061116432575912,2806,1 -2807,16815703,-1.5433126201402205,2807,1 -2808,69145940,0.8249622444475275,2808,1 -2809,49854712,-1.103729111589471,2809,1 -2810,83747977,-0.4205825126180198,2810,1 -2811,34073089,-1.0922499422343894,2811,1 -2812,59871480,0.42679888594673165,2812,1 -2813,86573232,-0.9327038337205845,2813,1 -2814,58525744,0.21268113775376268,2814,1 -2815,27870787,-0.16757132222503876,2815,1 -2816,38802451,0.3255558873994542,2816,1 -2817,32381788,0.008979075659372966,2817,1 -2818,50828217,1.1744756842076738,2818,1 -2819,29662315,-0.029219403511911192,2819,1 -2820,13367011,0.8691789732238877,2820,1 -2821,35740137,-0.030476019769081743,2821,1 -2822,10577663,0.05795459846983438,2822,1 -2823,42858462,1.0610224009472973,2823,1 -2824,17014140,0.5627150325054756,2824,1 -2825,31053604,1.115153496300223,2825,1 -2826,45111973,-0.23909264080341214,2826,1 -2827,47095869,-0.7823205407182011,2827,1 -2828,53001924,0.2019035765214654,2828,1 -2829,77248360,-1.6134700455127344,2829,1 -2830,10928987,0.08355623504533549,2830,1 -2831,25912910,-0.3326581367665949,2831,1 -2832,55073554,-1.1767024956415029,2832,1 -2833,32935021,0.497810233959533,2833,1 -2834,17032135,1.2950587146935155,2834,1 -2835,12591222,1.0498386353032676,2835,1 -2836,63177469,0.20894438841254873,2836,1 -2837,49240839,-1.4562317897284736,2837,1 -2838,66457928,0.8754509046202856,2838,1 -2839,39821897,-2.5863250828617113,2839,1 -2840,89940728,0.45281484655272425,2840,1 -2841,74795553,2.464583450348776,2841,1 -2842,57653527,0.7699432598177115,2842,1 -2843,22653151,0.1171976828423324,2843,1 -2844,52207721,-0.09841947543959013,2844,1 -2845,20137305,1.1172336077457568,2845,1 -2846,28174729,0.8218600830535383,2846,1 -2847,48963795,-0.10638472075195532,2847,1 -2848,10094798,-0.7866651040835417,2848,1 -2849,21733082,0.5399417063205547,2849,1 -2850,86736168,-0.7376411756002018,2850,1 -2851,88951271,-0.5320153996503091,2851,1 -2852,83535104,-0.16429934673480776,2852,1 -2853,11560163,1.0913160205316346,2853,1 -2854,28438730,-1.6044459810332907,2854,1 -2855,56147531,0.9040449601710622,2855,1 -2856,52719155,-1.245327271729153,2856,1 -2857,82376588,-0.5622542892750828,2857,1 -2858,88139753,-1.0516569208693158,2858,1 -2859,43545019,-1.1643261458058713,2859,1 -2860,42741599,-1.2024440744209604,2860,1 -2861,83900246,-0.15788908552405354,2861,1 -2862,45468507,0.41607220412478263,2862,1 -2863,40779354,-0.4121502403663285,2863,1 -2864,16135809,0.36939167479533497,2864,1 -2865,26885888,-0.3911590283715608,2865,1 -2866,20253725,1.4252994310112908,2866,1 -2867,72711656,0.17866580229892381,2867,1 -2868,89181366,-1.6049995591421655,2868,1 -2869,41890729,-0.6200477605812653,2869,1 -2870,61555481,-0.6072328574674011,2870,1 -2871,21754094,-0.13546479624698324,2871,1 -2872,38843078,1.5775576005862615,2872,1 -2873,28886745,-0.7475476964823745,2873,1 -2874,15889073,-1.1242112337095669,2874,1 -2875,23594241,-0.406997500335811,2875,1 -2876,54591102,-0.9312006972088839,2876,1 -2877,54530120,0.18997836935820678,2877,1 -2878,60252141,-0.08347873026704378,2878,1 -2879,31263789,-0.5222046745356688,2879,1 -2880,74182100,0.4919203392462305,2880,1 -2881,27450699,0.012808813358073344,2881,1 -2882,63716373,0.15821941833417943,2882,1 -2883,68941889,-1.060459121332355,2883,1 -2884,15929104,0.7780789144611043,2884,1 -2885,47431344,1.2726165677247336,2885,1 -2886,29750302,1.0671143961726421,2886,1 -2887,76220996,0.33042284329503624,2887,1 -2888,48090463,-0.5134412072734549,2888,1 -2889,59296054,-0.41557895672253126,2889,1 -2890,22867449,-0.7837984161455918,2890,1 -2891,25989324,-0.9553971527349345,2891,1 -2892,69306492,0.44670509180005846,2892,1 -2893,47390318,1.074388836206707,2893,1 -2894,35188652,-0.8898836555325462,2894,1 -2895,46993101,-0.30590267302022567,2895,1 -2896,27296823,0.03805310086532011,2896,1 -2897,62856678,1.16729430262017,2897,1 -2898,53926017,1.4638601899821744,2898,1 -2899,77463354,-0.34952097642366764,2899,1 -2900,63034911,-0.633431717446552,2900,1 -2901,22326894,-1.1022898843670206,2901,1 -2902,18662055,0.04483508324526511,2902,1 -2903,77203495,-1.1063658637384526,2903,1 -2904,18212154,-1.701380255249433,2904,1 -2905,48370449,-0.3265824594080737,2905,1 -2906,72554729,-0.7262090728325964,2906,1 -2907,23448995,-0.10987797265866209,2907,1 -2908,43700473,-0.11091935398118744,2908,1 -2909,58163038,0.4780518357248203,2909,1 -2910,17433044,1.6779121059848838,2910,1 -2911,59095005,0.863392487449092,2911,1 -2912,29689671,0.897927450924318,2912,1 -2913,32924926,1.0190525797571175,2913,1 -2914,34764002,-0.8227789225982145,2914,1 -2915,89201184,-1.3004501935096446,2915,1 -2916,87442684,2.267821061853987,2916,1 -2917,37155088,0.39382504541810104,2917,1 -2918,46993361,-0.5140318487891118,2918,1 -2919,53338493,-1.5873961327115702,2919,1 -2920,61176994,0.06759820570300679,2920,1 -2921,35474260,-0.7370230201188183,2921,1 -2922,22098505,1.3964668793665762,2922,1 -2923,55099400,-0.2997492503946055,2923,1 -2924,49892997,-0.4715279910499306,2924,1 -2925,85326882,-0.09621584757032588,2925,1 -2926,59617120,-1.6244112426022486,2926,1 -2927,13297468,0.046494436578560186,2927,1 -2928,58425033,2.0442432317192845,2928,1 -2929,18117764,-1.7603553183926914,2929,1 -2930,70814043,1.5555244400604389,2930,1 -2931,55254811,-1.4086321235274473,2931,1 -2932,87824784,-1.3902548450412506,2932,1 -2933,60134017,0.6023438216344831,2933,1 -2934,24447833,-0.41581025148222645,2934,1 -2935,30727305,1.7074422993784428,2935,1 -2936,24157948,-0.49192465401797136,2936,1 -2937,29817769,0.8076343626270701,2937,1 -2938,25667229,0.06388695733566079,2938,1 -2939,22022935,0.3942808905542434,2939,1 -2940,41067965,-0.11163171979247272,2940,1 -2941,12454529,-1.1290297378966356,2941,1 -2942,11098402,0.8876129472160919,2942,1 -2943,36911982,0.5698970193719879,2943,1 -2944,40457239,0.08591737437897994,2944,1 -2945,46439154,1.8923659716110797,2945,1 -2946,74034082,1.3035394700110663,2946,1 -2947,52789162,0.34219472350400437,2947,1 -2948,71035867,-1.7347353774180074,2948,1 -2949,56042757,-0.02999016387856969,2949,1 -2950,20212247,1.9718104500444085,2950,1 -2951,63619475,-1.6212676002961441,2951,1 -2952,23333755,-0.048293142426824545,2952,1 -2953,41080826,-0.21630839134906676,2953,1 -2954,13026414,-0.19747897166666234,2954,1 -2955,72803825,-0.19243598663818043,2955,1 -2956,58098742,1.0339814761098862,2956,1 -2957,67247207,-1.808027055667453,2957,1 -2958,66937023,2.0991283857057486,2958,1 -2959,83451554,-0.7154773801252361,2959,1 -2960,49026740,0.2953346578124228,2960,1 -2961,78026799,0.2906027911128492,2961,1 -2962,40517401,-0.004341173932264474,2962,1 -2963,22684693,1.1238962676824862,2963,1 -2964,14625840,1.429623248550769,2964,1 -2965,49881857,-1.5552061148379708,2965,1 -2966,54305429,0.7473909264318501,2966,1 -2967,34644961,-0.8068901791505309,2967,1 -2968,70179209,2.21677185994332,2968,1 -2969,89019529,0.7282628046278697,2969,1 -2970,62567397,0.7524236726034407,2970,1 -2971,64749627,-0.7454497504848809,2971,1 -2972,49243943,-0.723118749916091,2972,1 -2973,42918112,-0.8680748029032125,2973,1 -2974,50809296,-0.02667427943154432,2974,1 -2975,66960640,0.511378434024107,2975,1 -2976,50105954,1.3115305479893258,2976,1 -2977,68366882,0.9044697770406958,2977,1 -2978,80013674,-1.007831639293525,2978,1 -2979,27929417,2.2855733320338905,2979,1 -2980,49623832,1.0705807254315471,2980,1 -2981,49414132,1.1803259899686056,2981,1 -2982,13012453,-0.5892207578107828,2982,1 -2983,70733562,0.7917182381383219,2983,1 -2984,15165883,-1.4242394315036906,2984,1 -2985,28856512,-0.2572480564273462,2985,1 -2986,41090060,-0.21591951696465222,2986,1 -2987,76497179,0.7901200036127605,2987,1 -2988,71420796,-1.0295522036989755,2988,1 -2989,77635846,0.44919010526514624,2989,1 -2990,78229718,0.7770202745632515,2990,1 -2991,52842112,0.1045097862283979,2991,1 -2992,26007754,0.9744778521907803,2992,1 -2993,70378691,0.6137013903361166,2993,1 -2994,15614053,1.7882143966427344,2994,1 -2995,43743729,0.9923839441946826,2995,1 -2996,76052045,0.2596230278363699,2996,1 -2997,25795545,1.0077246048616715,2997,1 -2998,87080406,-0.009873491623022474,2998,1 -2999,72405013,-1.585715196338159,2999,1 -3000,42776258,1.4542603310095146,3000,1 -3001,38442235,0.08025305583971817,3001,1 -3002,62891548,-2.1113409790863042,3002,1 -3003,50392606,0.08137125236226608,3003,1 -3004,59775797,1.1185141928435296,3004,1 -3005,13344616,-1.0403077319298009,3005,1 -3006,83810714,-0.5264587833467275,3006,1 -3007,67820443,-0.9559909083483155,3007,1 -3008,54542765,-1.456872460126415,3008,1 -3009,66863965,0.3649584245379915,3009,1 -3010,45226584,-1.2568826131638056,3010,1 -3011,70581049,0.43892800796073245,3011,1 -3012,15610475,-1.1778614958839833,3012,1 -3013,35533077,0.541286659770997,3013,1 -3014,49610650,0.5110991191275297,3014,1 -3015,12628088,0.56459395684824,3015,1 -3016,23453199,-0.7446632695277128,3016,1 -3017,24973327,-0.9054414070960862,3017,1 -3018,78620680,-0.35533782021745064,3018,1 -3019,12302802,0.8178713255833426,3019,1 -3020,39840311,0.2596634024891558,3020,1 -3021,78082267,0.7883519113377211,3021,1 -3022,24415749,-2.8246440489933446,3022,1 -3023,59053084,-0.16955996878683835,3023,1 -3024,38038135,0.9706406767937905,3024,1 -3025,79746167,-2.129198342369291,3025,1 -3026,65423213,0.1503327930431113,3026,1 -3027,57925346,-0.04397732859233076,3027,1 -3028,12582502,0.005542137602476927,3028,1 -3029,67704516,-0.9670110260353373,3029,1 -3030,18736480,-0.1199207555832954,3030,1 -3031,75052720,-0.8333750352535555,3031,1 -3032,25803048,0.7299390571501533,3032,1 -3033,62807218,0.8885731797695618,3033,1 -3034,11635284,0.35176297345521584,3034,1 -3035,23439112,0.7501822702157604,3035,1 -3036,72894621,-0.5035964419652923,3036,1 -3037,21966264,0.1395575666969175,3037,1 -3038,71163399,-1.3837600865242936,3038,1 -3039,24671736,0.8296700636520158,3039,1 -3040,86050217,-1.2547660945594183,3040,1 -3041,73393772,0.3150106894733744,3041,1 -3042,67471730,1.4910685316261294,3042,1 -3043,57586852,0.16754793476271088,3043,1 -3044,31365858,0.7212327779508325,3044,1 -3045,54984083,0.9106212680337534,3045,1 -3046,32371551,1.1025599326345596,3046,1 -3047,34758146,-1.0227923350579435,3047,1 -3048,56406785,0.2796466250722412,3048,1 -3049,22287268,-0.39893282075303166,3049,1 -3050,64418150,-0.0005896749059955022,3050,1 -3051,78445599,-0.24813852090519475,3051,1 -3052,18975765,-1.4986533797516821,3052,1 -3053,63283671,-0.39593412634788305,3053,1 -3054,28464336,2.5001563604399597,3054,1 -3055,55624435,-1.7847159584604755,3055,1 -3056,44297531,0.5495410478911974,3056,1 -3057,55989739,-0.8580687678042856,3057,1 -3058,86058289,-1.7095084026272434,3058,1 -3059,65726438,0.41166199248207885,3059,1 -3060,55393140,-0.4824818985648845,3060,1 -3061,34345643,0.8670124962608506,3061,1 -3062,13729228,-0.26921901424954564,3062,1 -3063,57833540,1.255960812915775,3063,1 -3064,71408989,0.6916863058897096,3064,1 -3065,22726356,-0.1973742865307636,3065,1 -3066,51610121,-0.5531878593526764,3066,1 -3067,89538215,0.9403392042070325,3067,1 -3068,47259531,-0.8771651899276305,3068,1 -3069,50695269,-0.27867835983385064,3069,1 -3070,48968295,-0.012906584229943185,3070,1 -3071,86810491,0.41969076058948007,3071,1 -3072,61221997,0.42514168678535913,3072,1 -3073,69475493,0.30002305575519667,3073,1 -3074,76551926,-0.2458937415585279,3074,1 -3075,63499838,-0.6386212719233076,3075,1 -3076,19222757,0.45752459694623815,3076,1 -3077,65751814,0.9706979013402015,3077,1 -3078,58979905,-1.6071486865035391,3078,1 -3079,57505780,0.42699983956372967,3079,1 -3080,78711520,0.7711158345399998,3080,1 -3081,70293713,1.4202599863238734,3081,1 -3082,11934333,1.6911696811468024,3082,1 -3083,14109507,-0.7437451765057831,3083,1 -3084,49420448,1.7201788591598,3084,1 -3085,24409338,1.113974156998529,3085,1 -3086,44207672,0.3845548114187556,3086,1 -3087,73560678,1.0535520182724862,3087,1 -3088,21129365,-0.3180459101904641,3088,1 -3089,37050828,-0.05031170481432529,3089,1 -3090,15227515,-0.26720130969067957,3090,1 -3091,66818377,-2.1006967346464376,3091,1 -3092,77596521,-0.5638578655841024,3092,1 -3093,58519328,-1.0762207330315678,3093,1 -3094,45280288,0.6294005652731808,3094,1 -3095,29375042,0.4173837228512335,3095,1 -3096,56791101,0.5996167970554939,3096,1 -3097,65259894,-0.08512770882659264,3097,1 -3098,62027084,-0.37468297642346754,3098,1 -3099,64640101,0.02391498654055654,3099,1 -3100,20051652,-0.7087478686288315,3100,1 -3101,13833395,0.8113353838782346,3101,1 -3102,62464722,-0.5699118930334812,3102,1 -3103,51296231,0.44914473734675875,3103,1 -3104,84300991,1.5993434584916495,3104,1 -3105,35337014,-0.1680657525329751,3105,1 -3106,70009728,1.8854300031539195,3106,1 -3107,32563431,0.8992643415048258,3107,1 -3108,30169394,1.5274439284828263,3108,1 -3109,16941080,-0.4704952307738451,3109,1 -3110,82940541,1.250556364360079,3110,1 -3111,33056345,-1.0638567161553818,3111,1 -3112,20521438,0.4934607389766546,3112,1 -3113,85972661,1.7825486306587994,3113,1 -3114,21602487,-0.1355182971072001,3114,1 -3115,38329841,1.627416347118037,3115,1 -3116,21780677,-1.146646950370385,3116,1 -3117,46692029,1.028304394541096,3117,1 -3118,71009537,-2.0645517570696024,3118,1 -3119,14789323,0.16347213794480422,3119,1 -3120,62093458,0.7411881858665931,3120,1 -3121,59591385,-0.4842151523579406,3121,1 -3122,62843328,0.8595477696420241,3122,1 -3123,10245184,-0.6786409741544593,3123,1 -3124,83158210,0.0675775416302073,3124,1 -3125,60999714,0.0880727414904411,3125,1 -3126,62487881,-0.06427369153548451,3126,1 -3127,15813348,-1.4208490213329157,3127,1 -3128,79097349,1.6551903576036726,3128,1 -3129,19807456,-0.06506823070228118,3129,1 -3130,78992655,-0.9807464770891379,3130,1 -3131,33412154,0.36141287677401795,3131,1 -3132,45622521,0.20157337143516202,3132,1 -3133,84410934,0.6659580939651321,3133,1 -3134,44925962,-0.3415319957487479,3134,1 -3135,12935480,-0.4452776214751187,3135,1 -3136,83273330,-1.4605398949804649,3136,1 -3137,31459199,0.02994359822563973,3137,1 -3138,47372329,-1.0112509015548374,3138,1 -3139,67803678,0.6839168840964618,3139,1 -3140,48470965,0.7131875938720529,3140,1 -3141,54508775,-0.17980331337860683,3141,1 -3142,15920273,-1.1916755395175826,3142,1 -3143,42621131,-0.24314278762882274,3143,1 -3144,23894342,-1.7763309020811657,3144,1 -3145,36379504,-0.6555423178282727,3145,1 -3146,87053962,-0.6277383573193825,3146,1 -3147,51794487,0.5418973886871243,3147,1 -3148,47887471,-1.3533900610229919,3148,1 -3149,15629026,0.5180012443611288,3149,1 -3150,51995986,2.5175486633220276,3150,1 -3151,22114362,1.1430813104916804,3151,1 -3152,34099166,-0.05156432526189021,3152,1 -3153,79677779,-0.6108352040765528,3153,1 -3154,47750405,0.6149194492058898,3154,1 -3155,82338214,-0.20342988227558592,3155,1 -3156,68586645,-1.0861792748732682,3156,1 -3157,31744134,0.8825307462290926,3157,1 -3158,53296286,-2.986244351730748,3158,1 -3159,48184133,-0.7185777126513666,3159,1 -3160,45902320,1.3974425618643445,3160,1 -3161,38101146,-0.8709671522265878,3161,1 -3162,78733319,-0.18919941900848972,3162,1 -3163,48600025,0.3085166952015237,3163,1 -3164,88132249,-0.0848338379719455,3164,1 -3165,36885037,-2.339619057000862,3165,1 -3166,63616536,1.2105577144776958,3166,1 -3167,77420605,-1.8024725470698912,3167,1 -3168,87209242,0.09923862091265559,3168,1 -3169,60612057,1.2548571363552987,3169,1 -3170,34369301,-0.5750815587755939,3170,1 -3171,63169978,1.7153877964973903,3171,1 -3172,83579131,-1.111404980126606,3172,1 -3173,63962280,0.44838303693586207,3173,1 -3174,21888257,0.2574894392918635,3174,1 -3175,68053392,2.200125059440628,3175,1 -3176,86512592,-0.39517727909282363,3176,1 -3177,81643978,1.3249848013179006,3177,1 -3178,25896531,-1.0738209104746161,3178,1 -3179,24273272,-0.9532640089263661,3179,1 -3180,37780904,-0.08527481807477676,3180,1 -3181,69794460,-1.29125745121533,3181,1 -3182,25530942,0.805256037629756,3182,1 -3183,47431945,0.1739319343776295,3183,1 -3184,62475321,0.2734005801233842,3184,1 -3185,60805307,-1.2612184986540365,3185,1 -3186,54593029,-1.3818215143458257,3186,1 -3187,36276879,-0.30398037071067685,3187,1 -3188,50262300,-0.025649415517180026,3188,1 -3189,81027254,1.416141811002144,3189,1 -3190,42009192,1.2786898754269778,3190,1 -3191,73920088,0.7592306507904244,3191,1 -3192,66809176,0.8884615145372436,3192,1 -3193,55097993,0.3032610385913715,3193,1 -3194,25249526,-2.563344364499222,3194,1 -3195,58863574,0.732904600355864,3195,1 -3196,75666013,0.5212049634390596,3196,1 -3197,21686509,0.818070853686954,3197,1 -3198,55079050,-0.24339888679246183,3198,1 -3199,80041678,0.16547698561779067,3199,1 -3200,25188436,1.8184054391348534,3200,1 -3201,78148483,-0.17919468912534278,3201,1 -3202,47995091,-0.5356951040870744,3202,1 -3203,67338749,0.7608938111806289,3203,1 -3204,89566721,-0.6307745064998882,3204,1 -3205,43673989,-0.22166211196792157,3205,1 -3206,49001151,-2.1110284334531335,3206,1 -3207,11026859,-0.35930780982386185,3207,1 -3208,70907196,-0.9630873560927795,3208,1 -3209,37593099,2.9594737310880648,3209,1 -3210,72628449,-0.0615209683092647,3210,1 -3211,89166301,-0.7415571745715648,3211,1 -3212,51443839,-1.159402411092847,3212,1 -3213,74429842,-0.34745978789674337,3213,1 -3214,57792501,1.5594444377642376,3214,1 -3215,17571398,-1.2395061159501497,3215,1 -3216,28046049,-0.14928721505877054,3216,1 -3217,62453840,0.3222240660995848,3217,1 -3218,69848132,0.11743908278792514,3218,1 -3219,14797217,0.971911031633142,3219,1 -3220,73040395,-0.5909507149255273,3220,1 -3221,45712171,0.5329099790928431,3221,1 -3222,36642762,-2.1708516461946203,3222,1 -3223,40902987,0.33094285223770853,3223,1 -3224,34161873,-0.7736360137435236,3224,1 -3225,51538938,0.1275919295327866,3225,1 -3226,10493315,-1.1123741486869478,3226,1 -3227,16791080,-1.1013084160667774,3227,1 -3228,87138389,0.30144716887879314,3228,1 -3229,51477675,0.4096725810418904,3229,1 -3230,43082340,-0.7871591784827432,3230,1 -3231,45051984,-0.6436198360694054,3231,1 -3232,58294937,-0.5291422400235564,3232,1 -3233,46843861,0.0979994744355583,3233,1 -3234,25164265,1.7895365174000204,3234,1 -3235,14178046,0.0750040519385552,3235,1 -3236,25237031,-0.9784570326263181,3236,1 -3237,76301581,-1.023068148767897,3237,1 -3238,14398766,-1.7243711670070903,3238,1 -3239,23098489,0.26141589304467816,3239,1 -3240,47927403,-1.0397075848786617,3240,1 -3241,16543691,2.4639651446118775,3241,1 -3242,54461818,0.5585576716537181,3242,1 -3243,24657005,-0.2119192471552973,3243,1 -3244,50912162,-0.4119203616950163,3244,1 -3245,14435574,-0.422548717694534,3245,1 -3246,23536890,0.47756445235099776,3246,1 -3247,21198000,-1.0181034003869656,3247,1 -3248,47473098,0.18116517259008202,3248,1 -3249,28246341,-1.4052787342230706,3249,1 -3250,88497883,-0.6731303478428151,3250,1 -3251,26198347,1.1155172814191747,3251,1 -3252,76456251,-1.331983226226829,3252,1 -3253,75108432,-1.0605856757580945,3253,1 -3254,66286133,2.820609762566646,3254,1 -3255,37504502,0.45870636715612073,3255,1 -3256,50245651,0.5348562350426368,3256,1 -3257,76672251,0.4705450384426238,3257,1 -3258,47530782,-0.31112503172723305,3258,1 -3259,44675492,0.8789644034305283,3259,1 -3260,14312573,-0.2100351233727545,3260,1 -3261,26139699,0.11982854194940862,3261,1 -3262,16460346,-0.8672951829595904,3262,1 -3263,66215153,1.2691305271580129,3263,1 -3264,70029970,-1.6904552991146815,3264,1 -3265,52213771,0.43904080267575,3265,1 -3266,68482667,-1.0031786603804773,3266,1 -3267,75209035,0.9319606927495412,3267,1 -3268,30322253,0.11049638202928305,3268,1 -3269,10226021,-1.3337062635381756,3269,1 -3270,71105868,-0.6852090907900463,3270,1 -3271,28829337,1.3375242562146974,3271,1 -3272,26122438,-0.32785744997888283,3272,1 -3273,62842917,-0.7343701596133069,3273,1 -3274,60073768,0.05839008421843795,3274,1 -3275,65718179,1.3619631544520845,3275,1 -3276,19056743,0.6917580857933728,3276,1 -3277,75714625,-1.1536864856687856,3277,1 -3278,30086888,1.7204660521990727,3278,1 -3279,48969403,-1.5256505267770593,3279,1 -3280,16142477,-1.0193329490120446,3280,1 -3281,42849120,-0.4542239181298789,3281,1 -3282,30266681,0.3084268258633893,3282,1 -3283,31066314,0.07616755913493528,3283,1 -3284,12042949,-0.561689506982555,3284,1 -3285,50074785,-0.7501715107788787,3285,1 -3286,51728995,-0.7428019132858219,3286,1 -3287,24955773,2.0200721635089134,3287,1 -3288,54207564,0.9929431733660496,3288,1 -3289,77498947,1.494387921287298,3289,1 -3290,77496228,-0.2698200130453326,3290,1 -3291,87195566,-0.10554361613553502,3291,1 -3292,14245718,1.0542389900866906,3292,1 -3293,62206228,-0.22293260672358367,3293,1 -3294,14400660,1.3735579986314381,3294,1 -3295,74068372,0.19085200450536272,3295,1 -3296,30472651,0.2648103638660252,3296,1 -3297,86552621,0.709432584581957,3297,1 -3298,87136912,-0.28489773825782344,3298,1 -3299,76493149,1.185873571359933,3299,1 -3300,62286296,0.10099014616618825,3300,1 -3301,50934423,-0.23998180516472575,3301,1 -3302,48488580,-0.9887616174897764,3302,1 -3303,10202416,-2.098747752532065,3303,1 -3304,51035056,-0.07187825936307228,3304,1 -3305,68819095,-0.9942998586499349,3305,1 -3306,60555128,0.08739458545201365,3306,1 -3307,45062040,0.059571804019599855,3307,1 -3308,45344606,-0.9227748627953488,3308,1 -3309,84456194,-0.10008156568182819,3309,1 -3310,46670877,0.47799609691371836,3310,1 -3311,51323146,0.9380270008107675,3311,1 -3312,24739678,-0.5366665503055927,3312,1 -3313,77534777,0.41661480827846237,3313,1 -3314,61548339,0.22952739367954955,3314,1 -3315,25687473,-0.5475577611694771,3315,1 -3316,30736956,1.1268705163990083,3316,1 -3317,29435661,0.2555521540024513,3317,1 -3318,41180827,-0.5049554596006806,3318,1 -3319,82129453,-0.3104641532091844,3319,1 -3320,27756011,-0.3894552857449122,3320,1 -3321,10537839,0.2889745407496026,3321,1 -3322,45852799,1.1360579317005075,3322,1 -3323,50576164,3.5196301453589602,3323,1 -3324,15357009,-2.0753113303535797,3324,1 -3325,75013479,0.2659278505076722,3325,1 -3326,28119947,0.2063647111733909,3326,1 -3327,64564792,-0.06810479696746662,3327,1 -3328,51754378,-1.6770401774992023,3328,1 -3329,76231360,-1.0405397445172027,3329,1 -3330,32938991,1.0006846560984772,3330,1 -3331,67870465,-0.03934938444550118,3331,1 -3332,19438970,-0.16789359307468266,3332,1 -3333,14928658,-0.652123103017104,3333,1 -3334,27246880,-0.4466953463199006,3334,1 -3335,75277735,1.145503868846453,3335,1 -3336,71495967,1.082037932901706,3336,1 -3337,52181375,-0.48922701445576405,3337,1 -3338,87284987,-1.011103412456945,3338,1 -3339,16181481,-0.7400231144269099,3339,1 -3340,57774316,0.04196013446121537,3340,1 -3341,85530169,0.6944537151755743,3341,1 -3342,23890277,-0.016916789740006825,3342,1 -3343,14227183,-0.18103649764241184,3343,1 -3344,57305172,1.0650703514815267,3344,1 -3345,82727137,0.8993627567411597,3345,1 -3346,14214863,-0.4156168675615201,3346,1 -3347,21694928,0.029397397147872664,3347,1 -3348,48218613,0.031912442727800965,3348,1 -3349,50150569,-1.2221916300992643,3349,1 -3350,66152377,0.09976713689324739,3350,1 -3351,37791618,1.1358222131626445,3351,1 -3352,41807628,0.16365205929818485,3352,1 -3353,37509324,-0.882354699963071,3353,1 -3354,73976266,0.6904037643253819,3354,1 -3355,71656202,0.8011201575217839,3355,1 -3356,29146643,-1.0700839821846386,3356,1 -3357,64374305,-0.19240981175210173,3357,1 -3358,14729938,1.4166832727450054,3358,1 -3359,70159930,0.30899085960664496,3359,1 -3360,20707695,1.2903502609835935,3360,1 -3361,81870826,-0.3492950743913407,3361,1 -3362,74074984,1.2429695650087327,3362,1 -3363,69516121,1.0390032944965817,3363,1 -3364,60071679,-0.6511298207017172,3364,1 -3365,74463843,0.8040982257644419,3365,1 -3366,53636388,-0.30435379601839185,3366,1 -3367,66955674,0.056877830075595666,3367,1 -3368,59601284,-0.3359444870161037,3368,1 -3369,75600799,-0.03828730366448902,3369,1 -3370,77197537,-0.4975284447843871,3370,1 -3371,70221993,0.9981327883442995,3371,1 -3372,47911122,-0.6403243554454588,3372,1 -3373,84863086,-0.2928925234810979,3373,1 -3374,76574598,1.4923612092511105,3374,1 -3375,81545509,-0.6067513375336828,3375,1 -3376,43598512,0.2963821585018413,3376,1 -3377,86375285,0.4557941810332145,3377,1 -3378,12083575,1.1244911002116385,3378,1 -3379,49774071,-2.2605461785656957,3379,1 -3380,47001288,0.95481913317903,3380,1 -3381,74082150,-0.052259630528732476,3381,1 -3382,63436468,-0.5712940953116095,3382,1 -3383,14624788,-0.2836265141623172,3383,1 -3384,77907987,-0.643825158160365,3384,1 -3385,22281571,0.4881479317369572,3385,1 -3386,71081367,-1.2493111812683841,3386,1 -3387,75488195,0.7591032535397125,3387,1 -3388,48021132,-0.7513608087857845,3388,1 -3389,54795020,-1.5329307598911024,3389,1 -3390,12610061,-0.16392858784262637,3390,1 -3391,61192023,1.755288867483282,3391,1 -3392,30765282,0.3020545894568578,3392,1 -3393,54479021,0.34920228864234437,3393,1 -3394,61719733,-0.3590005603091308,3394,1 -3395,16573704,-0.260095157086723,3395,1 -3396,61845962,-1.057993590957839,3396,1 -3397,13595658,-1.0912854895069313,3397,1 -3398,35217990,1.891991782080751,3398,1 -3399,15070793,-0.4764178783236241,3399,1 -3400,34757032,0.5559938666350823,3400,1 -3401,77808657,0.750570166367452,3401,1 -3402,62003865,0.7193020566104652,3402,1 -3403,35724336,0.4322176449314072,3403,1 -3404,64381127,0.5995257215156037,3404,1 -3405,51952359,0.06591189112229777,3405,1 -3406,20805887,-0.0862677714484404,3406,1 -3407,84671365,0.8545037705368408,3407,1 -3408,87639339,-0.915697966126182,3408,1 -3409,84314675,0.7918371220365097,3409,1 -3410,34289306,-2.016334284144584,3410,1 -3411,17825047,0.4499780480110798,3411,1 -3412,30887288,-1.022624749417975,3412,1 -3413,74510697,-0.39243810075198277,3413,1 -3414,11078020,1.7589550407915662,3414,1 -3415,53592182,-1.947215371723399,3415,1 -3416,68580879,-0.8680321044909517,3416,1 -3417,49585696,-0.725353783497952,3417,1 -3418,65603157,-1.5305592751841042,3418,1 -3419,62628237,-1.0824615045498576,3419,1 -3420,52645392,-1.256014893696699,3420,1 -3421,73157622,-0.8621918176922077,3421,1 -3422,16251809,1.441750706467056,3422,1 -3423,29471986,-0.9423727003440426,3423,1 -3424,70244124,0.143389985128045,3424,1 -3425,65073301,0.47444545202153665,3425,1 -3426,27046793,0.995606610510463,3426,1 -3427,86569074,0.9834559158712015,3427,1 -3428,69132250,-0.43510781196535214,3428,1 -3429,37426526,-1.749964274316344,3429,1 -3430,72760238,-0.8378482151638132,3430,1 -3431,38536210,-2.0152635744350382,3431,1 -3432,60942512,3.258086651393811,3432,1 -3433,37039445,-1.1438971460713419,3433,1 -3434,24127726,0.08590404873355324,3434,1 -3435,82066372,-1.2878031152718612,3435,1 -3436,11871381,0.605194337873805,3436,1 -3437,67364161,-2.1191731205650446,3437,1 -3438,71427473,-0.16909698669813392,3438,1 -3439,50610156,1.36531568596106,3439,1 -3440,82761015,-0.01419199415329291,3440,1 -3441,21389635,1.3530955385701025,3441,1 -3442,76881222,-0.29846157889848685,3442,1 -3443,29626751,-0.460920041989491,3443,1 -3444,65338054,-1.2960248070215616,3444,1 -3445,57253975,-0.7329287719052172,3445,1 -3446,45818296,-1.3068850232264722,3446,1 -3447,22642130,0.15516967701201043,3447,1 -3448,74077038,-0.6814809753479448,3448,1 -3449,67795170,-0.269584062771227,3449,1 -3450,71515211,-3.0816612326247297,3450,1 -3451,63617230,0.5213779085941233,3451,1 -3452,76685151,-1.3372113245708517,3452,1 -3453,42446916,-0.42577205542625235,3453,1 -3454,15794452,-1.1945257812345704,3454,1 -3455,80802993,-0.1746668515980447,3455,1 -3456,36623169,1.1666550673485434,3456,1 -3457,38740295,-0.25477092690628134,3457,1 -3458,47626161,0.48316444535310477,3458,1 -3459,69776554,-0.42771419090357465,3459,1 -3460,65840731,1.636512095843392,3460,1 -3461,39871797,0.8217509647198556,3461,1 -3462,53437109,-0.42201904009993907,3462,1 -3463,48407683,-1.196065536414279,3463,1 -3464,25038554,0.6768911623993114,3464,1 -3465,76656236,1.822273598813122,3465,1 -3466,74395439,-0.21386409245311255,3466,1 -3467,28585110,1.44586504750169,3467,1 -3468,69866238,-0.42630413863857164,3468,1 -3469,64022117,0.7540200707985334,3469,1 -3470,55828410,0.5942353741199545,3470,1 -3471,13807818,0.4828652970254369,3471,1 -3472,45556440,0.8470739689552907,3472,1 -3473,55004031,-0.3242052624519284,3473,1 -3474,56553586,0.8901517052937026,3474,1 -3475,51198349,-1.4179467509839678,3475,1 -3476,35379977,-0.014865305040845137,3476,1 -3477,36314101,-1.2715100342778094,3477,1 -3478,29198313,-0.48920882239700425,3478,1 -3479,46221999,-0.8544700588282099,3479,1 -3480,79309355,-0.8390081217220138,3480,1 -3481,86573314,1.146498468274292,3481,1 -3482,63837897,0.04324021378316822,3482,1 -3483,89099354,1.5019355563215475,3483,1 -3484,84996789,-0.011481991779939775,3484,1 -3485,76101644,-0.03644312260492934,3485,1 -3486,23161364,-0.8071557900130362,3486,1 -3487,33390414,0.17149134153430734,3487,1 -3488,41137317,0.017604803852790004,3488,1 -3489,17724040,0.8896903961768734,3489,1 -3490,43182434,0.9505512131173331,3490,1 -3491,84153342,-0.6295319030908056,3491,1 -3492,61871719,-0.6464333271093972,3492,1 -3493,13967165,0.2375723339454245,3493,1 -3494,15037625,-0.8366010545953814,3494,1 -3495,57865648,1.0270283066806365,3495,1 -3496,58555550,0.8422806650497006,3496,1 -3497,47958807,1.6747899480580268,3497,1 -3498,18344729,0.4098882906052445,3498,1 -3499,87154986,0.8167655326418852,3499,1 -3500,74725787,-0.6757535327058788,3500,1 -3501,61295160,1.1006508333910416,3501,1 -3502,53710363,-0.9867140597227988,3502,1 -3503,28218127,-2.065489709529866,3503,1 -3504,11827798,0.3776509858742369,3504,1 -3505,56823562,1.3989211529252739,3505,1 -3506,75222662,-0.7474803569374332,3506,1 -3507,13251082,-0.651110423244603,3507,1 -3508,80553867,0.4429110530533121,3508,1 -3509,44641274,-1.753466982798408,3509,1 -3510,75944613,0.07714465456810557,3510,1 -3511,48791103,-1.803942508164185,3511,1 -3512,53627793,-0.5046037176914276,3512,1 -3513,84502649,2.2900972420251824,3513,1 -3514,23017662,-0.2534102685332687,3514,1 -3515,35679481,0.34083750013633723,3515,1 -3516,25973580,0.24461073217085114,3516,1 -3517,51300803,0.14976991019701077,3517,1 -3518,29849449,1.5107800807850795,3518,1 -3519,32967146,-0.6697526307035625,3519,1 -3520,21414230,1.5813637095259643,3520,1 -3521,71746648,0.5427271458773746,3521,1 -3522,40835722,0.11619536631464716,3522,1 -3523,10611951,0.45428449768465334,3523,1 -3524,43853736,-0.7198087600424982,3524,1 -3525,21654379,0.9178155363220866,3525,1 -3526,52914095,-1.1437944035833905,3526,1 -3527,64642132,-1.383004548406908,3527,1 -3528,67155493,-0.6905265416662604,3528,1 -3529,74726939,-0.7969207275352604,3529,1 -3530,15129331,0.6232493115855465,3530,1 -3531,53439975,1.6200796492821061,3531,1 -3532,50078450,1.5242394752066857,3532,1 -3533,84573022,-0.8432797853588193,3533,1 -3534,48200370,-1.5897485968351335,3534,1 -3535,45645020,-0.971472018362401,3535,1 -3536,41719026,1.576842433444565,3536,1 -3537,82363945,0.936556597261743,3537,1 -3538,24089275,1.3557431723716857,3538,1 -3539,32047001,0.6949353024356831,3539,1 -3540,34667795,-0.14223479641357115,3540,1 -3541,52338434,3.1402183984464744,3541,1 -3542,43635099,-0.5685033431831567,3542,1 -3543,40771825,-0.30452228613148413,3543,1 -3544,79182416,-0.651124583438442,3544,1 -3545,83219227,-0.11730240049497812,3545,1 -3546,36621590,1.097633073222886,3546,1 -3547,79181737,-1.3488340031980066,3547,1 -3548,38781636,1.4178931235121157,3548,1 -3549,35751546,0.12389524519858068,3549,1 -3550,46044254,-0.22300210319378438,3550,1 -3551,12851570,-0.4607101668994932,3551,1 -3552,82554784,-0.3077902116877207,3552,1 -3553,42917865,0.34099198587996715,3553,1 -3554,30994775,-0.1806194773902934,3554,1 -3555,29330981,-0.8270447133517421,3555,1 -3556,25764246,0.29873880650982404,3556,1 -3557,24580844,-0.4673971120035893,3557,1 -3558,34152340,1.205123173040288,3558,1 -3559,43868894,-0.047054338519780366,3559,1 -3560,60166763,-0.3164793868025242,3560,1 -3561,11757200,0.011542635436020018,3561,1 -3562,68397371,-0.5136600290633629,3562,1 -3563,79785828,-0.04768735292430373,3563,1 -3564,62136959,1.210141584049428,3564,1 -3565,40233517,-1.156881417133866,3565,1 -3566,31450560,-0.2531793309226647,3566,1 -3567,41985053,-0.4563229353936821,3567,1 -3568,79039807,0.920714079614376,3568,1 -3569,13936170,-0.47959009388322715,3569,1 -3570,70464901,0.7129156047670677,3570,1 -3571,10383294,-0.7462367031606885,3571,1 -3572,15955888,-1.1006285517718002,3572,1 -3573,38520855,0.46409917730248984,3573,1 -3574,10922627,0.5922101294286294,3574,1 -3575,48630474,-1.418366180191451,3575,1 -3576,14473106,0.7600207825042234,3576,1 -3577,81792611,0.94013955768127,3577,1 -3578,40835717,-0.6918317426076919,3578,1 -3579,26924173,-0.8517935821470993,3579,1 -3580,34484182,-1.5074324652528313,3580,1 -3581,31305234,-0.7751253332049469,3581,1 -3582,51743859,0.2685106589795592,3582,1 -3583,16767599,1.2287379406950008,3583,1 -3584,86087758,-0.8034091463549622,3584,1 -3585,47742360,-1.7927951456195628,3585,1 -3586,55297120,-1.2716889958345226,3586,1 -3587,22105187,2.7903052422641537,3587,1 -3588,41149212,-0.6356383224839095,3588,1 -3589,41314213,1.2754439894394383,3589,1 -3590,60415231,0.26545999112481844,3590,1 -3591,27160198,-0.4981907671778299,3591,1 -3592,19008344,0.026398230247419864,3592,1 -3593,89400120,-0.6157488605388844,3593,1 -3594,59289358,1.2372312833690247,3594,1 -3595,76039098,0.4021978321826534,3595,1 -3596,59341510,0.9133070538289614,3596,1 -3597,12840322,0.297370207544353,3597,1 -3598,83148327,-0.6805333295681045,3598,1 -3599,32229879,0.673348839204811,3599,1 -3600,66355558,-1.2911552360683862,3600,1 -3601,76024962,1.6501856665827543,3601,1 -3602,69088008,-0.27402006485139224,3602,1 -3603,72108963,-2.5872646286614516,3603,1 -3604,13197466,-0.07396223974124087,3604,1 -3605,10701422,-0.4642099387556583,3605,1 -3606,68954971,-1.4826781471153707,3606,1 -3607,16353774,-1.2545312663843895,3607,1 -3608,54674631,1.3315809640733016,3608,1 -3609,23667334,0.0909270689715778,3609,1 -3610,32727261,-1.1150337604284408,3610,1 -3611,21662565,-1.2944031213860856,3611,1 -3612,61302466,1.80839048170656,3612,1 -3613,75760234,2.2748418952869334,3613,1 -3614,27380354,0.9462370495587489,3614,1 -3615,40728372,-0.38338161511431856,3615,1 -3616,48567658,0.5336616424167377,3616,1 -3617,80761562,0.9680937341283846,3617,1 -3618,19319456,0.8756115020603118,3618,1 -3619,44088860,-0.23838357800503548,3619,1 -3620,87072224,1.9522604111085469,3620,1 -3621,47418367,0.3239045089509862,3621,1 -3622,89136306,-0.31321525734420325,3622,1 -3623,75903082,2.0380633609034455,3623,1 -3624,87596159,-1.0343521052307516,3624,1 -3625,81692408,-0.9483367536597663,3625,1 -3626,67143329,-1.7956421654704027,3626,1 -3627,21361842,-1.1021941901071606,3627,1 -3628,17770460,1.0787768440407541,3628,1 -3629,64049431,0.5482722970769024,3629,1 -3630,84843623,0.04713653588787264,3630,1 -3631,53224779,-0.0066028118403351765,3631,1 -3632,68471846,-0.3854672487142598,3632,1 -3633,23515149,0.7279278429085444,3633,1 -3634,11149715,-0.8158299266229853,3634,1 -3635,43862555,0.1814280056281436,3635,1 -3636,73888562,0.20811234512934754,3636,1 -3637,69600683,0.8156569025543597,3637,1 -3638,64006744,-0.4825561770480539,3638,1 -3639,60210955,-0.29836659978684027,3639,1 -3640,60304964,0.8886759458093512,3640,1 -3641,19955540,-0.8993267936064036,3641,1 -3642,39330729,1.1904256857625701,3642,1 -3643,42549104,1.4943969499960592,3643,1 -3644,62361035,-1.6378197693357681,3644,1 -3645,58565594,-0.2811730682865879,3645,1 -3646,61346847,0.31692555758912666,3646,1 -3647,79950759,-0.9541542373837754,3647,1 -3648,44371274,-1.6504536302663768,3648,1 -3649,27771490,-2.108931145379919,3649,1 -3650,64269167,-0.14868646715431935,3650,1 -3651,70881779,-0.09385562351475914,3651,1 -3652,40826108,0.19338333681956568,3652,1 -3653,19363563,-0.9066375049764435,3653,1 -3654,22552452,0.11118868116821606,3654,1 -3655,35394423,0.9144365214380112,3655,1 -3656,80012477,0.6733418263670464,3656,1 -3657,18277512,1.8379938533405866,3657,1 -3658,88263423,-0.7778871567777197,3658,1 -3659,18419455,-0.21483745692346531,3659,1 -3660,73689530,0.8634560301835595,3660,1 -3661,59134431,-0.19920960885179242,3661,1 -3662,24905364,0.8027088915220344,3662,1 -3663,41596240,0.30579596690074456,3663,1 -3664,58455870,0.7466799286750649,3664,1 -3665,89045235,0.148959560397141,3665,1 -3666,56207216,-1.0902041696166862,3666,1 -3667,51969317,-0.2142339761576899,3667,1 -3668,13164169,0.5523690568652551,3668,1 -3669,22028252,0.40193379481057273,3669,1 -3670,26036898,-0.808838005044434,3670,1 -3671,58926860,0.136620124687574,3671,1 -3672,48525820,1.3192761435831293,3672,1 -3673,65256693,-0.7762921078793059,3673,1 -3674,57135586,-0.25949668183792496,3674,1 -3675,47912901,-0.3966987164199052,3675,1 -3676,67883556,0.63161271514541,3676,1 -3677,57037378,2.110354569455781,3677,1 -3678,66511639,1.1062673871325344,3678,1 -3679,10586371,1.9719978354079113,3679,1 -3680,50022326,1.2879755273749471,3680,1 -3681,45989780,-1.3564844933525995,3681,1 -3682,39633078,-0.4945875699126446,3682,1 -3683,83033265,-0.8779246894797798,3683,1 -3684,11689878,-1.5383903995845565,3684,1 -3685,39076306,2.8111337204715223,3685,1 -3686,63676948,-1.755824050797162,3686,1 -3687,43013997,-1.2761077241479282,3687,1 -3688,36570224,0.41867828044014305,3688,1 -3689,80164024,0.09651664182917047,3689,1 -3690,72809820,-0.4376441501629295,3690,1 -3691,35275695,1.3433708327841551,3691,1 -3692,26952257,-1.5950889460496525,3692,1 -3693,82298984,-0.18358040182645385,3693,1 -3694,63340322,-1.0020890426667348,3694,1 -3695,66380079,0.12359740473344871,3695,1 -3696,67068652,1.4440880654035675,3696,1 -3697,47465833,1.3091530328459988,3697,1 -3698,49751180,-1.6438197794161928,3698,1 -3699,38944453,-0.8465232028560412,3699,1 -3700,14161087,0.6592881477676041,3700,1 -3701,15861846,-1.4035008400512705,3701,1 -3702,51995608,-0.438567097538681,3702,1 -3703,46465287,1.5110144966486045,3703,1 -3704,45430115,-0.7148342507554138,3704,1 -3705,23287328,1.2135111709915738,3705,1 -3706,78061020,-1.4213973098700936,3706,1 -3707,59268478,-1.4518849925049073,3707,1 -3708,31658137,1.8029912239819548,3708,1 -3709,41924442,-0.22014548927816777,3709,1 -3710,77611714,0.3720717856507321,3710,1 -3711,52787606,0.09830185501973797,3711,1 -3712,86252258,-1.0437222882886354,3712,1 -3713,16762939,-1.4493158964440809,3713,1 -3714,62723086,1.647570069257213,3714,1 -3715,22283083,-0.11602359385084829,3715,1 -3716,68444553,-0.6914166342034936,3716,1 -3717,75102847,0.6944755628195849,3717,1 -3718,28559239,-0.8900428772160538,3718,1 -3719,57287928,0.5085666762377179,3719,1 -3720,84794626,-1.3036126220036457,3720,1 -3721,37108805,-0.7220546088773826,3721,1 -3722,62089105,-0.1675113106946485,3722,1 -3723,45752618,0.910762276529545,3723,1 -3724,19371258,0.446512850258211,3724,1 -3725,71225744,1.3135685194856086,3725,1 -3726,83182174,0.32713663575138624,3726,1 -3727,20964498,-0.658620125715015,3727,1 -3728,57995999,-1.610876858188616,3728,1 -3729,24583244,1.2058621869457924,3729,1 -3730,19772193,-0.012698861147160682,3730,1 -3731,34302250,0.2331888792172235,3731,1 -3732,21649670,1.6347019053864809,3732,1 -3733,44381717,1.1331423613038853,3733,1 -3734,50972157,1.3968248596496229,3734,1 -3735,16656069,0.4558341319167546,3735,1 -3736,85774190,-0.12106425932002299,3736,1 -3737,23338578,-0.7098667141706803,3737,1 -3738,61780238,0.500100765547268,3738,1 -3739,88707057,-1.166310874719691,3739,1 -3740,53643927,1.112345471492647,3740,1 -3741,68226334,-0.742990855902795,3741,1 -3742,86868086,-0.17250791864455436,3742,1 -3743,81148047,-0.6392998180860145,3743,1 -3744,66522598,-1.2157168378471017,3744,1 -3745,43899164,-1.0059267359911772,3745,1 -3746,15815812,0.05066921588183812,3746,1 -3747,82749913,-0.044348251169013315,3747,1 -3748,20200395,-0.04049459547144783,3748,1 -3749,37130372,-0.34567752335775,3749,1 -3750,73667387,1.8629047802293843,3750,1 -3751,60054708,-1.1234828473671463,3751,1 -3752,51943517,-1.8489839147862859,3752,1 -3753,80587631,-1.7400193069930283,3753,1 -3754,77131319,-1.2763613744262265,3754,1 -3755,20436944,-1.1230655790212627,3755,1 -3756,24256031,-0.1304930764270344,3756,1 -3757,53270792,0.5807127557823358,3757,1 -3758,18759206,-0.9402935317025161,3758,1 -3759,29633789,0.6762177509453624,3759,1 -3760,85396418,-0.2035327425215534,3760,1 -3761,60122837,1.7449959874508514,3761,1 -3762,36098978,0.01784786497309859,3762,1 -3763,33291721,-1.26103157913676,3763,1 -3764,68039342,-0.1563736798047131,3764,1 -3765,26198530,-0.8087780344906893,3765,1 -3766,52761824,-0.9930442032785133,3766,1 -3767,22776773,-0.7775622876968679,3767,1 -3768,49234672,-1.2230980357066683,3768,1 -3769,51318763,0.4961318272321216,3769,1 -3770,21676186,-0.28522493336372795,3770,1 -3771,68567624,0.29379338388349113,3771,1 -3772,54326969,-0.5878145817159162,3772,1 -3773,71922214,0.3212380208067509,3773,1 -3774,29804925,-0.5861335636660747,3774,1 -3775,25674377,0.5904245662058234,3775,1 -3776,62940807,-1.1293486752067037,3776,1 -3777,64272655,-0.6189879594013514,3777,1 -3778,61081642,0.17646877967682745,3778,1 -3779,43878175,0.05225328827796377,3779,1 -3780,39744868,-0.14882183030848464,3780,1 -3781,14086117,1.0809552678476648,3781,1 -3782,70963214,-1.2818037482775997,3782,1 -3783,26255499,-2.074423005414955,3783,1 -3784,83950240,1.1211802263181174,3784,1 -3785,34197311,0.22888771865652513,3785,1 -3786,68276688,-0.5090595770539156,3786,1 -3787,22840107,-0.8480397261231667,3787,1 -3788,46948651,0.12860275326729104,3788,1 -3789,29681515,0.374048621723024,3789,1 -3790,68101924,-1.5204433471924585,3790,1 -3791,15501885,-2.134794193977874,3791,1 -3792,87787874,0.730096258254397,3792,1 -3793,47918935,0.26916378100104105,3793,1 -3794,38433853,-0.8961709159870839,3794,1 -3795,79538396,1.0249099715043455,3795,1 -3796,61762497,0.8494879993780695,3796,1 -3797,82577216,-0.4744929913543281,3797,1 -3798,40660246,0.21740811015337966,3798,1 -3799,59784353,0.10542436657206011,3799,1 -3800,50519196,0.4159656860697195,3800,1 -3801,41366953,0.0576603042850267,3801,1 -3802,28828730,0.43432921796413926,3802,1 -3803,62922233,-0.6753226959665396,3803,1 -3804,52566612,-0.7553167093859057,3804,1 -3805,86469488,0.061180136962783085,3805,1 -3806,25816640,0.2893238128134195,3806,1 -3807,13680162,0.22878291538220497,3807,1 -3808,12413643,-0.9101029354815467,3808,1 -3809,72204456,1.602834519113615,3809,1 -3810,81420120,-1.0952199223829162,3810,1 -3811,28526114,1.8210700718867525,3811,1 -3812,57546516,0.2467254250136479,3812,1 -3813,49697722,1.2362191742574418,3813,1 -3814,48582214,-0.4704727409106908,3814,1 -3815,52370411,0.6589619116152378,3815,1 -3816,68851450,1.3244007286950938,3816,1 -3817,27130188,-0.249428368922633,3817,1 -3818,22991295,-0.4162060095295062,3818,1 -3819,56748032,0.07269928298457215,3819,1 -3820,24309758,-1.2026430319964279,3820,1 -3821,54088848,0.48170315803173236,3821,1 -3822,34234714,-1.826990546782056,3822,1 -3823,47843765,-0.7903916100708945,3823,1 -3824,60722111,1.856396969951171,3824,1 -3825,35193983,0.18005448136604976,3825,1 -3826,65803170,0.49137696007346593,3826,1 -3827,69824537,-1.3821140546275854,3827,1 -3828,55235203,-0.9178749178861028,3828,1 -3829,75262211,2.1233446305278028,3829,1 -3830,19850955,-0.9132371920921828,3830,1 -3831,63238244,0.37922202020600937,3831,1 -3832,10236830,1.1855176350050385,3832,1 -3833,73214239,-0.6107772511592251,3833,1 -3834,71031099,0.9182765488677568,3834,1 -3835,14373199,-1.980608370652884,3835,1 -3836,38475107,0.781548847127014,3836,1 -3837,76875471,0.17170380285373565,3837,1 -3838,42639804,1.5023655561435771,3838,1 -3839,20873172,-0.06599627992937394,3839,1 -3840,64381072,-0.7161637811838243,3840,1 -3841,53528238,-0.9941668465136605,3841,1 -3842,36240004,-0.9964299235803452,3842,1 -3843,56999253,0.1974365700817473,3843,1 -3844,69250092,-0.9308786270704216,3844,1 -3845,47481687,-0.736021154079344,3845,1 -3846,36604053,-0.692424338578928,3846,1 -3847,62794147,-0.46839817899853226,3847,1 -3848,23737919,-0.07845734468422835,3848,1 -3849,65666637,0.5504321603816138,3849,1 -3850,64228600,1.4027752762356378,3850,1 -3851,39219503,0.5251254644242916,3851,1 -3852,26238343,-0.2623622316847097,3852,1 -3853,83778283,0.07875140615270508,3853,1 -3854,28258131,0.8650890951211043,3854,1 -3855,14721287,-1.8195779431088595,3855,1 -3856,55545378,-0.01978736101440338,3856,1 -3857,21733950,-1.0175210700477,3857,1 -3858,28628894,-0.9732796064292338,3858,1 -3859,60802059,0.8154907779993734,3859,1 -3860,84316419,0.7864651847502062,3860,1 -3861,76965349,-0.4232502959124449,3861,1 -3862,70454875,1.2327126030231086,3862,1 -3863,39725428,0.39056919778601856,3863,1 -3864,46223878,-0.7254832409388741,3864,1 -3865,81584446,0.7367365100212279,3865,1 -3866,38537799,0.4803259954778464,3866,1 -3867,46523955,1.4986625586217128,3867,1 -3868,11683433,0.64459209445131,3868,1 -3869,74665157,-0.346693223293835,3869,1 -3870,61664297,-1.2739840022231173,3870,1 -3871,65772114,-0.6172391316997751,3871,1 -3872,14399479,1.7919055179755616,3872,1 -3873,37009619,0.571036125510484,3873,1 -3874,66827116,0.1895702515228078,3874,1 -3875,80541123,0.15883507007990025,3875,1 -3876,33522821,1.4855183861853678,3876,1 -3877,56123992,2.023504497178109,3877,1 -3878,44284898,-0.14352126820117053,3878,1 -3879,67194411,1.2324770211280267,3879,1 -3880,55214351,0.11467487942653827,3880,1 -3881,50972411,1.2184887063362264,3881,1 -3882,79417489,-0.8580890626059525,3882,1 -3883,71938895,1.868842268583623,3883,1 -3884,73144910,-0.3061338094367482,3884,1 -3885,64951088,0.6218426777351503,3885,1 -3886,66581919,1.9569460391709852,3886,1 -3887,34719293,-1.0806950640023965,3887,1 -3888,35984076,0.8444639861447896,3888,1 -3889,40993664,-0.7472646946137962,3889,1 -3890,15691712,-1.5634728674315248,3890,1 -3891,82978278,0.8466277229774514,3891,1 -3892,35827435,-0.1055594399014333,3892,1 -3893,66389100,-0.3114072287969314,3893,1 -3894,82901070,-0.260141084141661,3894,1 -3895,46030962,-0.7648295365808979,3895,1 -3896,76838020,-0.9786100113779941,3896,1 -3897,69861195,0.28236095494121644,3897,1 -3898,32847512,0.4781423475899949,3898,1 -3899,80050399,0.7129744379673068,3899,1 -3900,12536450,-0.407693762175311,3900,1 -3901,70467027,-1.7433831551061774,3901,1 -3902,20372004,-1.00593039668913,3902,1 -3903,25439855,0.21014671845243324,3903,1 -3904,58362909,-0.8211780330185988,3904,1 -3905,31760260,0.33714652640721327,3905,1 -3906,85818663,-0.5235165256909867,3906,1 -3907,28183479,-0.05361548354870727,3907,1 -3908,78696694,0.41085811611520057,3908,1 -3909,35129706,0.5343940033775141,3909,1 -3910,85927049,-0.9579614145277061,3910,1 -3911,74797084,-0.38492836192420476,3911,1 -3912,36451491,-0.25523887167164155,3912,1 -3913,66783097,0.7306591391038809,3913,1 -3914,11494498,-0.19117183858645795,3914,1 -3915,81704140,0.73540777771012,3915,1 -3916,73621730,1.3866155601250367,3916,1 -3917,61087151,-0.19080901779516515,3917,1 -3918,43688509,1.899268108681543,3918,1 -3919,67914056,-0.3068714221947868,3919,1 -3920,46632960,-0.2800263242894915,3920,1 -3921,39251743,-2.5914190959819616,3921,1 -3922,80406553,1.0196884380993445,3922,1 -3923,57720405,0.4796790308658009,3923,1 -3924,49462187,0.3329873439536566,3924,1 -3925,56701720,0.05011992741582875,3925,1 -3926,77374162,0.6847276288513838,3926,1 -3927,87295598,0.6227640363569591,3927,1 -3928,11705583,-1.1939271240579274,3928,1 -3929,27047866,-1.144632014501181,3929,1 -3930,65960060,0.6584266729731658,3930,1 -3931,69897534,0.63175947575921,3931,1 -3932,89266269,1.094413967488388,3932,1 -3933,19680029,0.08526738200058856,3933,1 -3934,80057002,-1.6444155171902892,3934,1 -3935,36584660,1.5469531401216141,3935,1 -3936,69410776,-0.12978907959432429,3936,1 -3937,24276714,-0.22023085480364582,3937,1 -3938,14261561,0.4572229169409899,3938,1 -3939,39705691,0.10253376091036479,3939,1 -3940,41935389,-0.8327242444134607,3940,1 -3941,76900727,0.1160739373551934,3941,1 -3942,59549205,-0.8476924016884549,3942,1 -3943,85655287,0.5312813816978302,3943,1 -3944,10843756,-0.9166909926305812,3944,1 -3945,79886715,-1.1274427704632064,3945,1 -3946,19662145,-0.7767917135743876,3946,1 -3947,86957790,1.0141385386142368,3947,1 -3948,86947139,0.3674250489881238,3948,1 -3949,56415884,-0.02919140507349258,3949,1 -3950,58099659,-0.5644876807605596,3950,1 -3951,26906936,0.29447157732652235,3951,1 -3952,20911289,1.0317917953825688,3952,1 -3953,48268824,-0.2581877458508841,3953,1 -3954,34109262,-0.21669495219720658,3954,1 -3955,71015604,1.8053006054141771,3955,1 -3956,79643469,0.25181536428201845,3956,1 -3957,74297389,-1.7669879571898377,3957,1 -3958,46439151,1.1947110314266365,3958,1 -3959,59846734,-1.1876416231069078,3959,1 -3960,82749187,0.9556321276015237,3960,1 -3961,26847833,1.0457458013850198,3961,1 -3962,53989637,0.09363285043136092,3962,1 -3963,40124480,-0.3968584753938646,3963,1 -3964,47165475,-0.5253574117173886,3964,1 -3965,64161438,-1.0812875906896708,3965,1 -3966,16547948,0.7226559571798309,3966,1 -3967,14602932,0.18350443574506575,3967,1 -3968,17839722,0.7322060202352012,3968,1 -3969,35979765,-0.5525393945216385,3969,1 -3970,50972108,0.04063465874683677,3970,1 -3971,35944188,0.05217985739756011,3971,1 -3972,24036920,0.5134248570612736,3972,1 -3973,37707421,1.5554551677019846,3973,1 -3974,26591393,-0.05476144002755884,3974,1 -3975,82352633,0.7603965967186652,3975,1 -3976,24235748,-0.9244356403727864,3976,1 -3977,34174950,-0.28226064814068214,3977,1 -3978,43068421,0.4451511781146245,3978,1 -3979,30677289,-0.04851743234987027,3979,1 -3980,12261108,-0.7868553009050242,3980,1 -3981,72670883,0.7557390105081774,3981,1 -3982,24308005,1.3190624086859317,3982,1 -3983,51661313,-0.8342182129199176,3983,1 -3984,57423989,-0.8857661900441544,3984,1 -3985,83059831,0.26778395639203145,3985,1 -3986,30964618,0.5553053786849946,3986,1 -3987,60221341,0.6739144566133491,3987,1 -3988,73321579,1.337482593461941,3988,1 -3989,60825951,2.4384843643441094,3989,1 -3990,40504844,-1.5678114013170514,3990,1 -3991,31546652,0.6307642633048448,3991,1 -3992,46148956,1.035148283695006,3992,1 -3993,35186460,-3.0639174626104873,3993,1 -3994,68955146,1.2200829030783167,3994,1 -3995,19813149,1.8096360760745458,3995,1 -3996,62800705,1.0606426990740039,3996,1 -3997,10681632,-1.8963998548139565,3997,1 -3998,30869040,-0.38807780796862906,3998,1 -3999,37755827,1.2095972353000424,3999,1 -4000,39992989,-1.9926475010337814,4000,2 -4001,68335847,-0.7853526268824442,4001,2 -4002,71953761,0.663719697768256,4002,2 -4003,25550196,0.22908650508185519,4003,2 -4004,44317074,-0.10581487776483664,4004,2 -4005,53479593,0.5075010130589838,4005,2 -4006,85430967,1.3716187688697334,4006,2 -4007,10670773,0.1901825228801448,4007,2 -4008,10024150,-0.8068796233938799,4008,2 -4009,13071432,-1.070146905406147,4009,2 -4010,41922764,0.06309169904773339,4010,2 -4011,84226745,-0.3356521722333431,4011,2 -4012,79862826,-1.185292168385558,4012,2 -4013,69621644,-0.9726013664574151,4013,2 -4014,20458204,0.3319095100521059,4014,2 -4015,71483037,0.050920670092979445,4015,2 -4016,63933352,-0.8711437824090056,4016,2 -4017,54677353,-0.761443330585438,4017,2 -4018,65498883,0.06855683124968169,4018,2 -4019,52591125,-0.37671488524260605,4019,2 -4020,40393814,1.1456196678957888,4020,2 -4021,41832082,0.7832479183044174,4021,2 -4022,69330172,0.897332434481788,4022,2 -4023,32496210,0.9112199659251115,4023,2 -4024,39478894,-0.19834166811190848,4024,2 -4025,38181431,-1.2160375613998242,4025,2 -4026,35706793,1.406956125107403,4026,2 -4027,33782645,-0.11054373191851237,4027,2 -4028,23162871,-0.9244413576677654,4028,2 -4029,52733777,-0.21960264577578478,4029,2 -4030,33867516,-0.7213667158129194,4030,2 -4031,36509594,-0.3901679914916093,4031,2 -4032,50163530,0.5178786698245934,4032,2 -4033,67056953,1.633238965028401,4033,2 -4034,59686309,0.6986000495796639,4034,2 -4035,81214902,-1.0374213652582505,4035,2 -4036,45224008,-0.015571288426215584,4036,2 -4037,14326461,-1.1089109110000714,4037,2 -4038,31942510,-0.5125988774939855,4038,2 -4039,38873519,0.6286921401633812,4039,2 -4040,78857709,-0.6706566600802295,4040,2 -4041,34425145,0.1425574528433916,4041,2 -4042,67119110,1.1403122343178806,4042,2 -4043,89525101,-0.5270322090624295,4043,2 -4044,16972700,0.7449683251273558,4044,2 -4045,39708421,0.04423627506536725,4045,2 -4046,60319276,-0.05638410659541085,4046,2 -4047,73811001,-0.6649012806912457,4047,2 -4048,50419562,-0.27408338789556186,4048,2 -4049,24939415,-1.0513431959424815,4049,2 -4050,12003999,-1.525584527950626,4050,2 -4051,57167574,0.7544658748050708,4051,2 -4052,42602946,0.6630733955107485,4052,2 -4053,58619658,-0.31706394189716475,4053,2 -4054,27073636,0.6322971022603121,4054,2 -4055,65171978,1.791463804422496,4055,2 -4056,61680540,0.5931006734962714,4056,2 -4057,81884431,-0.23896576227613514,4057,2 -4058,22277046,-0.9035505993521765,4058,2 -4059,81098659,1.0055073286761538,4059,2 -4060,25209421,1.3282506020968012,4060,2 -4061,78185401,0.1881107850701271,4061,2 -4062,24811986,1.084318751648833,4062,2 -4063,83835565,-0.3386355220324722,4063,2 -4064,61459393,-0.1339794957711132,4064,2 -4065,10178034,-0.10302855412200035,4065,2 -4066,82026538,0.9726960135050715,4066,2 -4067,51151085,-0.9092614014686267,4067,2 -4068,68986327,0.3994286214143269,4068,2 -4069,44516479,0.7568542806196545,4069,2 -4070,84544597,0.07385231221916896,4070,2 -4071,43283099,0.7884258983060715,4071,2 -4072,53435612,-0.1343737057684999,4072,2 -4073,50733185,2.2383597793516468,4073,2 -4074,66420990,0.4619261689207498,4074,2 -4075,48826611,0.3001619658623185,4075,2 -4076,12266649,-0.2319358308479655,4076,2 -4077,72388558,-0.5566660130982775,4077,2 -4078,66089422,1.1717390756598882,4078,2 -4079,58840527,0.6342500168868277,4079,2 -4080,87628272,-1.6420085645275273,4080,2 -4081,75768958,-0.14696086647704298,4081,2 -4082,79355895,0.14126592612164518,4082,2 -4083,48366552,0.7223044332657435,4083,2 -4084,11140190,-0.7886946338482056,4084,2 -4085,30398833,1.1072981845225425,4085,2 -4086,62781118,-0.6308222231054368,4086,2 -4087,28994134,-0.27632580209487534,4087,2 -4088,67487428,-0.5013148205650813,4088,2 -4089,72034583,-0.24745783046296763,4089,2 -4090,53516889,1.4204567889291444,4090,2 -4091,48361619,-0.23394431239601568,4091,2 -4092,81253173,0.4268681611231481,4092,2 -4093,18964138,0.3144329022310893,4093,2 -4094,84417052,-0.21345489146407112,4094,2 -4095,12213909,1.1595841489491603,4095,2 -4096,84778065,0.6266622092234994,4096,2 -4097,58725244,-0.15182078535780505,4097,2 -4098,37632248,1.1269369477605464,4098,2 -4099,26602412,-1.2322809236400603,4099,2 -4100,11429744,1.0195593251930906,4100,2 -4101,72457632,0.1002324607438681,4101,2 -4102,80853753,0.6970951793795769,4102,2 -4103,76713238,0.8087653999279882,4103,2 -4104,79910520,1.1433334168196305,4104,2 -4105,17511658,0.5731252231867645,4105,2 -4106,63407180,1.2725619278709863,4106,2 -4107,20170391,1.648304615478445,4107,2 -4108,79563828,-0.04164157314298134,4108,2 -4109,85873255,-1.2725271691903643,4109,2 -4110,77880536,0.9013268242255915,4110,2 -4111,68152013,0.0251271539105433,4111,2 -4112,77323375,-0.5927739410832824,4112,2 -4113,19676008,-1.9749625891319125,4113,2 -4114,36731049,1.293475492578534,4114,2 -4115,12862455,0.5629263077336724,4115,2 -4116,73082438,-1.7183987962189549,4116,2 -4117,82519846,2.2888654445916323,4117,2 -4118,40642311,-0.29666983332059105,4118,2 -4119,83975994,-0.19049054854720776,4119,2 -4120,59404765,0.21069821464922267,4120,2 -4121,75812188,0.2365250861481782,4121,2 -4122,69411896,-1.3688577466882477,4122,2 -4123,53880538,1.4087968685597834,4123,2 -4124,31149943,0.24838663932834346,4124,2 -4125,74017119,-0.1492956159320213,4125,2 -4126,41127809,-0.7129805715889931,4126,2 -4127,26658452,2.364458516313328,4127,2 -4128,80568984,0.36153924473523746,4128,2 -4129,44636026,0.11614879942945629,4129,2 -4130,71961327,1.4350120058987792,4130,2 -4131,66202837,1.6010113000203778,4131,2 -4132,68035083,0.5784609108037074,4132,2 -4133,16720026,0.8756292963322765,4133,2 -4134,50547248,-0.6901282849068598,4134,2 -4135,61888149,-0.8467167563910347,4135,2 -4136,36950886,0.8321759895671591,4136,2 -4137,28800375,-2.033236727482948,4137,2 -4138,55331383,0.4032134469009037,4138,2 -4139,14038206,0.0064566959757792275,4139,2 -4140,62897874,-0.48016506103904744,4140,2 -4141,63419226,-1.5033367484422486,4141,2 -4142,73678664,-0.5002602516470785,4142,2 -4143,51992608,1.3971830511622345,4143,2 -4144,34920829,-0.1676826052437811,4144,2 -4145,22525432,1.034704877940184,4145,2 -4146,33984537,0.7682797327757099,4146,2 -4147,71496573,-1.2752571920726434,4147,2 -4148,49842034,0.7364469603263534,4148,2 -4149,33469403,-1.148265770542335,4149,2 -4150,54805098,-0.37346401730957685,4150,2 -4151,32226352,0.9106824698249526,4151,2 -4152,59589404,-1.2669193861236494,4152,2 -4153,36522307,-0.2506070624936182,4153,2 -4154,16298599,-0.6470122971906455,4154,2 -4155,41471444,0.6007607758466469,4155,2 -4156,59953064,-0.38966074229861314,4156,2 -4157,17703184,1.1121649004343386,4157,2 -4158,30784597,-0.5546946666676186,4158,2 -4159,27565850,0.28301780256554765,4159,2 -4160,18189962,-1.5651469119378068,4160,2 -4161,45039682,-0.7496471057637535,4161,2 -4162,49226955,-0.16011242292560807,4162,2 -4163,28314891,-1.536885547327526,4163,2 -4164,74075558,-0.4216983971093204,4164,2 -4165,80432316,-1.1804667072222472,4165,2 -4166,86377409,1.2909512379446695,4166,2 -4167,20328195,1.45842942041469,4167,2 -4168,16549956,0.9151420641984707,4168,2 -4169,88129113,-0.015252490369950283,4169,2 -4170,15460469,0.20431822101525626,4170,2 -4171,16435136,1.0683310795104393,4171,2 -4172,82918190,-0.6779202973694517,4172,2 -4173,52390457,1.41696898994897,4173,2 -4174,34710360,0.5633987194187868,4174,2 -4175,69322852,0.9533708013856863,4175,2 -4176,59885901,-1.1884630367103124,4176,2 -4177,26783872,0.5497071423514064,4177,2 -4178,42505143,-0.023002713879414,4178,2 -4179,48242103,-0.03793530992192749,4179,2 -4180,45793234,-0.5195719574550128,4180,2 -4181,25282890,-1.854394330168827,4181,2 -4182,12238763,0.5717579305245725,4182,2 -4183,56366732,0.5894332220879103,4183,2 -4184,59434074,0.446150152982166,4184,2 -4185,75626738,0.5171246236196163,4185,2 -4186,47017021,1.004772274456049,4186,2 -4187,65035453,-0.04833011044265435,4187,2 -4188,58081422,0.15349972593240388,4188,2 -4189,80217311,-0.8642325956446102,4189,2 -4190,38793344,-1.1152132384843056,4190,2 -4191,41020175,-2.191030338796412,4191,2 -4192,67033409,0.0598300744917879,4192,2 -4193,18420334,1.4115419131170746,4193,2 -4194,87626546,-0.7255476310972838,4194,2 -4195,58766540,-0.7164584191090989,4195,2 -4196,33501985,2.1870388628776944,4196,2 -4197,64168736,0.6789006891419617,4197,2 -4198,19463620,0.15341385488976175,4198,2 -4199,18748778,0.8893505107436479,4199,2 -4200,43578867,0.3444824500295333,4200,2 -4201,64674135,0.8285584991057733,4201,2 -4202,25298395,0.28289995095192416,4202,2 -4203,61196976,-1.6240020534742727,4203,2 -4204,57580174,0.207243937796765,4204,2 -4205,52676646,1.923878457979124,4205,2 -4206,48832823,0.4424469958005778,4206,2 -4207,87558425,1.2868267167872998,4207,2 -4208,11853616,0.3394208983880366,4208,2 -4209,79802411,-1.8821767794933029,4209,2 -4210,22876404,1.2811798017273412,4210,2 -4211,62331406,0.8180753520814629,4211,2 -4212,35544866,-0.6380437475462958,4212,2 -4213,26043617,-2.0061970348974856,4213,2 -4214,71602352,-0.8899568849045073,4214,2 -4215,73433919,-1.2414265983402486,4215,2 -4216,63221400,0.5515097891743908,4216,2 -4217,20823062,-1.5026898307432515,4217,2 -4218,88531414,1.017282461408505,4218,2 -4219,53130145,1.2207185023869587,4219,2 -4220,74242225,-0.285808704405231,4220,2 -4221,81044951,-0.9239908925986241,4221,2 -4222,31683133,-0.7420289091139243,4222,2 -4223,48811214,0.6199533333566422,4223,2 -4224,56393674,-1.1387931823176087,4224,2 -4225,67193689,1.8059458315673975,4225,2 -4226,42547501,0.002353353863436455,4226,2 -4227,31730208,0.8481305100566943,4227,2 -4228,83440423,0.02501458707855881,4228,2 -4229,38299150,-0.14366281948921805,4229,2 -4230,83897422,-0.5273843894622902,4230,2 -4231,57137696,0.2713022826302263,4231,2 -4232,68734089,0.5479466508275787,4232,2 -4233,19838456,-1.4048993910105112,4233,2 -4234,79176179,0.44996166978201824,4234,2 -4235,42227162,1.2042078186197993,4235,2 -4236,73587028,0.46567628229334274,4236,2 -4237,38245009,-0.13112665836892912,4237,2 -4238,52742599,1.4404864606047598,4238,2 -4239,36134198,-0.5130218567798609,4239,2 -4240,10339016,0.07129948642259668,4240,2 -4241,50352999,0.2901210291672951,4241,2 -4242,44675828,0.9557338023564492,4242,2 -4243,45426673,-0.019037847056375946,4243,2 -4244,59521440,0.5084419198036804,4244,2 -4245,13456274,0.36110740605388536,4245,2 -4246,38315321,-0.24464026103536024,4246,2 -4247,21191451,0.24802796643923852,4247,2 -4248,75034020,0.024187672525787653,4248,2 -4249,83156026,-1.448931099097894,4249,2 -4250,89891173,-0.016032443052440493,4250,2 -4251,62073511,-1.1698381554328634,4251,2 -4252,61322858,0.6945054493796878,4252,2 -4253,55171775,2.4856433195783674,4253,2 -4254,55019521,1.8668193454018283,4254,2 -4255,20644073,0.5818354436604334,4255,2 -4256,58476160,-0.5298273412728538,4256,2 -4257,38113142,2.2587142609073294,4257,2 -4258,74916456,1.1625892145901762,4258,2 -4259,19237975,0.7524498830461775,4259,2 -4260,35383416,-0.3093409490225798,4260,2 -4261,51719141,-0.8608080685194808,4261,2 -4262,88095466,-1.2833016715680012,4262,2 -4263,89595080,1.1173357999238946,4263,2 -4264,86501137,-0.2892180194656354,4264,2 -4265,53547210,-0.8413026308819086,4265,2 -4266,58178586,0.30803244736285806,4266,2 -4267,69302293,1.845495162679829,4267,2 -4268,49353620,-0.5459823596976617,4268,2 -4269,31615855,-1.585820536552128,4269,2 -4270,76990865,-0.43423221500642933,4270,2 -4271,89965857,-0.7352597655657732,4271,2 -4272,56693918,0.8853418257117976,4272,2 -4273,41320013,0.7199196327375281,4273,2 -4274,77990267,0.1524378025323676,4274,2 -4275,78229096,-0.0673234617163012,4275,2 -4276,61185311,1.2473243325228758,4276,2 -4277,42073990,-1.2048687091802834,4277,2 -4278,87091260,0.5119018467717474,4278,2 -4279,70942709,-0.009797056994169401,4279,2 -4280,32524377,0.0558501433492478,4280,2 -4281,25245714,-0.5856027875274777,4281,2 -4282,26002842,-1.7102307229995042,4282,2 -4283,38952574,-0.7648481645251788,4283,2 -4284,16273994,0.6030348802971189,4284,2 -4285,70522363,0.45583477137366596,4285,2 -4286,66088919,-0.18277583845205295,4286,2 -4287,57675360,1.2570476622035955,4287,2 -4288,52922349,-1.5744166423225874,4288,2 -4289,68428179,-0.5917862730636387,4289,2 -4290,64245314,0.2127383969583565,4290,2 -4291,71852093,-0.1812725009557477,4291,2 -4292,43349839,0.06976568711897303,4292,2 -4293,55786003,0.812920499098474,4293,2 -4294,70416985,0.3091476551086773,4294,2 -4295,43106914,1.504534139366973,4295,2 -4296,25050639,-1.6029828917924116,4296,2 -4297,43960237,-1.156967560143451,4297,2 -4298,24219049,-0.7598388867883217,4298,2 -4299,89111762,-1.191030844336282,4299,2 -4300,11173848,-2.236676132428172,4300,2 -4301,65921584,-0.6490047956919099,4301,2 -4302,40006632,0.7784857042478591,4302,2 -4303,36685339,-1.1359277074574154,4303,2 -4304,10517444,-1.5527200359082671,4304,2 -4305,11201426,-0.3032341946540903,4305,2 -4306,29745604,-1.1030120162191381,4306,2 -4307,56096065,-0.9619226614735243,4307,2 -4308,50181169,-1.290229612593423,4308,2 -4309,81277866,-0.6048488135940099,4309,2 -4310,58172161,-0.346663583109047,4310,2 -4311,76152413,1.2967002429126635,4311,2 -4312,47428124,-1.028839099470452,4312,2 -4313,45647434,1.2177158418345475,4313,2 -4314,21878291,0.40784635819046583,4314,2 -4315,28224558,-0.3856685153104425,4315,2 -4316,53086784,0.34583604715793914,4316,2 -4317,87328186,1.3113297083508857,4317,2 -4318,89859464,-0.026923389510537025,4318,2 -4319,24355902,-0.8031071431748514,4319,2 -4320,28554821,-1.3555441167485334,4320,2 -4321,51113321,0.3253511519252689,4321,2 -4322,70655587,-2.230825927072562,4322,2 -4323,56372565,1.2633783760300659,4323,2 -4324,85042947,-0.3267084112025526,4324,2 -4325,39665233,0.8015920649092944,4325,2 -4326,20587392,0.09975293186358064,4326,2 -4327,22866030,-0.5598698026404028,4327,2 -4328,68418955,1.6287864296140966,4328,2 -4329,36712871,-1.7771205860962964,4329,2 -4330,51635277,0.29829113764752974,4330,2 -4331,72749437,0.6700838007467957,4331,2 -4332,31669992,0.7871104921289174,4332,2 -4333,36890787,-1.7344902019876458,4333,2 -4334,76474762,0.9155587671326614,4334,2 -4335,88815601,-1.6179640205865364,4335,2 -4336,45630330,2.2474696014212046,4336,2 -4337,22905254,0.4380863858976303,4337,2 -4338,52736414,1.017726230618235,4338,2 -4339,58398501,0.03286000958019374,4339,2 -4340,14020981,0.46761299427901665,4340,2 -4341,19293665,0.11532030255914313,4341,2 -4342,86644885,0.6072507074542778,4342,2 -4343,30126584,-1.085943374838302,4343,2 -4344,73704352,1.1625830401314448,4344,2 -4345,84155590,0.6413346296676561,4345,2 -4346,87701468,-0.32928297437343473,4346,2 -4347,50011503,0.5241536553015455,4347,2 -4348,81227573,0.010658743354023566,4348,2 -4349,80756084,0.8565043487971982,4349,2 -4350,61818804,0.14140220629092284,4350,2 -4351,75324186,1.147725893223666,4351,2 -4352,17151232,-0.6278330011170821,4352,2 -4353,11481258,-0.7449654149867405,4353,2 -4354,46865111,2.3980679554614692,4354,2 -4355,33479450,-0.11650499965425991,4355,2 -4356,52928193,-0.5583562946734943,4356,2 -4357,73709120,-0.5632411065226532,4357,2 -4358,35824474,-0.7031620469585103,4358,2 -4359,58819533,-0.6577779496671389,4359,2 -4360,88908744,0.4671014167166952,4360,2 -4361,66459041,0.16766289765717823,4361,2 -4362,66855969,0.13398871062542192,4362,2 -4363,68367161,0.6651927218937183,4363,2 -4364,74390105,-0.7159172178827344,4364,2 -4365,26652776,-0.44218237559469187,4365,2 -4366,24631511,0.516570074845017,4366,2 -4367,50200821,-0.31393103401509653,4367,2 -4368,78421459,1.254438070907246,4368,2 -4369,82301139,-1.3842359382753444,4369,2 -4370,86344622,0.49531186467219435,4370,2 -4371,28054715,-0.20936598609901724,4371,2 -4372,35583263,-2.200347265812993,4372,2 -4373,26516233,-0.7016323274061937,4373,2 -4374,45179935,-0.6316684093822809,4374,2 -4375,77396650,-1.2230850378780362,4375,2 -4376,36909824,0.7804906562504789,4376,2 -4377,59612081,0.703019369140893,4377,2 -4378,20533922,-0.5601121040884071,4378,2 -4379,38533732,-0.9989972793391553,4379,2 -4380,78849056,0.5997269646274839,4380,2 -4381,18878843,-0.26716011147639024,4381,2 -4382,71630870,-1.799863882254852,4382,2 -4383,59314151,-0.36116454795079683,4383,2 -4384,88836501,0.7046809656819539,4384,2 -4385,69726117,1.2483123702735694,4385,2 -4386,70951653,-0.8464424863160278,4386,2 -4387,28640698,-0.6385427487011057,4387,2 -4388,26888365,-1.4077593411777305,4388,2 -4389,26218749,-0.24870590348515367,4389,2 -4390,53525503,0.0906203563750814,4390,2 -4391,65446877,0.6214925161818674,4391,2 -4392,52389696,-0.49922718163654384,4392,2 -4393,23830338,0.41468608245742694,4393,2 -4394,64568599,-0.0021508397211257913,4394,2 -4395,76722835,-1.2409299488127041,4395,2 -4396,75370884,0.3082199471020582,4396,2 -4397,14299333,-0.6619357167871802,4397,2 -4398,33270364,-1.3998976963363894,4398,2 -4399,34056510,-0.8961204271182306,4399,2 -4400,37571458,1.2149444404056642,4400,2 -4401,59326905,0.16494674272803214,4401,2 -4402,28706928,-0.9744416800647685,4402,2 -4403,17504319,0.3773049249190159,4403,2 -4404,35341539,-1.8023152280202932,4404,2 -4405,13397462,0.21294626570854724,4405,2 -4406,72539632,2.224372862867444,4406,2 -4407,40771560,-0.48259974836046715,4407,2 -4408,84174388,-0.5618379397233435,4408,2 -4409,81807417,-0.11220904048202247,4409,2 -4410,73192220,-2.451253617918175,4410,2 -4411,45214810,-1.8412244776076412,4411,2 -4412,80094668,0.3048646664111179,4412,2 -4413,34643745,2.025228887757988,4413,2 -4414,26012853,-1.4530075836064384,4414,2 -4415,83832667,0.8735975438283179,4415,2 -4416,28903595,0.8595636148726578,4416,2 -4417,82680375,0.5927817294763923,4417,2 -4418,59308030,0.5222583051724159,4418,2 -4419,69093157,-1.0528925750317673,4419,2 -4420,70548779,-0.8863958670909874,4420,2 -4421,69979936,-2.1907264414565235,4421,2 -4422,60393762,1.9091930755131123,4422,2 -4423,25631864,1.4107178615608962,4423,2 -4424,86904942,1.3882302872947831,4424,2 -4425,32459823,-0.5031298193466688,4425,2 -4426,82251388,0.20042539520426583,4426,2 -4427,68363924,0.22965749435413157,4427,2 -4428,80817663,-1.3021613535556742,4428,2 -4429,56376398,-1.6751826141953994,4429,2 -4430,45123059,0.7038480070707068,4430,2 -4431,81495812,-1.8560586096998941,4431,2 -4432,75876784,0.28642282129805147,4432,2 -4433,68643715,2.8862682100979513,4433,2 -4434,51488288,0.3640041387865466,4434,2 -4435,20870451,1.0117776252803699,4435,2 -4436,82492684,-0.6780262627161955,4436,2 -4437,56981258,0.9032171331815786,4437,2 -4438,18357697,0.46771413676752743,4438,2 -4439,77639030,0.9564239959679642,4439,2 -4440,15300855,0.6785585879817095,4440,2 -4441,39292338,1.2905348435562045,4441,2 -4442,22928670,-0.5263695604791594,4442,2 -4443,44288888,2.4733477088135993,4443,2 -4444,14856441,0.9873023536591286,4444,2 -4445,13932731,1.9544410518144137,4445,2 -4446,61552529,0.3490847968050175,4446,2 -4447,45810218,0.01176872276833314,4447,2 -4448,58961374,-0.28358557955411223,4448,2 -4449,55005999,1.8274789576652546,4449,2 -4450,74461512,1.092697760273053,4450,2 -4451,34542760,2.155794003607483,4451,2 -4452,39899366,-0.39479002020332715,4452,2 -4453,33741722,-1.1306842816569265,4453,2 -4454,10747604,-0.14729696632403172,4454,2 -4455,31600536,-1.1767132384499088,4455,2 -4456,15275510,-0.3310756847723811,4456,2 -4457,15007424,-1.0646265850313648,4457,2 -4458,35615263,0.7484786324860092,4458,2 -4459,16923046,0.27824707212990074,4459,2 -4460,50750830,0.3356452530635643,4460,2 -4461,76830505,0.4492921275907135,4461,2 -4462,75381488,1.4779375127050363,4462,2 -4463,37918967,-1.6928078110121805,4463,2 -4464,88705113,0.4366921947808299,4464,2 -4465,32932765,-0.5261930375538991,4465,2 -4466,31515118,-0.31538408194972734,4466,2 -4467,68507498,-0.118035908042005,4467,2 -4468,52982406,-0.7147984717676477,4468,2 -4469,37985822,-1.3333840422327723,4469,2 -4470,18700981,-1.0948638546611098,4470,2 -4471,83148236,-2.00553724020776,4471,2 -4472,74066865,1.678897672207764,4472,2 -4473,70590028,1.5100657035409744,4473,2 -4474,27118524,0.191562859499122,4474,2 -4475,53363356,0.31720040251375503,4475,2 -4476,38529327,0.5069167873787581,4476,2 -4477,62011905,-1.4649387054098422,4477,2 -4478,74373946,0.8610442941583407,4478,2 -4479,14990445,1.4507549548663674,4479,2 -4480,41984757,-0.18657835027386355,4480,2 -4481,85203556,0.4806094247164252,4481,2 -4482,77474440,1.1543337596688976,4482,2 -4483,57399915,-1.9264797554484996,4483,2 -4484,57665501,0.7770508728198676,4484,2 -4485,21710546,0.3637745749663433,4485,2 -4486,25252870,-1.1928592377196834,4486,2 -4487,19330953,0.003749993015934795,4487,2 -4488,12375722,-1.4264342079766505,4488,2 -4489,38765080,1.1329524408809282,4489,2 -4490,21511620,1.305589105289105,4490,2 -4491,49757403,-0.12067508302648722,4491,2 -4492,18008807,0.7482306193899152,4492,2 -4493,30822298,0.1565055497050208,4493,2 -4494,52400586,0.7749639440194348,4494,2 -4495,55402796,-0.7414792780372804,4495,2 -4496,51689856,0.7467630676854423,4496,2 -4497,13674516,-0.351011582022804,4497,2 -4498,30910563,0.5481219153313005,4498,2 -4499,22026232,-0.9215239316209104,4499,2 -4500,20318271,-2.7317761568023995,4500,2 -4501,64136659,-0.635537171777137,4501,2 -4502,83016365,-0.9873742164236936,4502,2 -4503,33275966,1.2530477378706806,4503,2 -4504,53927470,-0.3813348285948622,4504,2 -4505,88482128,-0.2860967418525834,4505,2 -4506,45424309,-1.0486296878070849,4506,2 -4507,27150958,1.3188581153618135,4507,2 -4508,87660048,0.10457885291396049,4508,2 -4509,59731855,-0.10948184004696677,4509,2 -4510,51989368,-0.6586654507456545,4510,2 -4511,69351413,0.23632864337331197,4511,2 -4512,80895552,1.1207280675986555,4512,2 -4513,15130507,1.710638778149495,4513,2 -4514,32225731,-0.7823129143503105,4514,2 -4515,75205087,0.3638337255902745,4515,2 -4516,84443726,-0.9866738200806189,4516,2 -4517,71361260,-1.545710966759964,4517,2 -4518,57506779,-0.24797458826538568,4518,2 -4519,25088342,1.0999624827778505,4519,2 -4520,79321668,-0.2954546443845891,4520,2 -4521,16911895,-1.0399320153958325,4521,2 -4522,71559677,-0.4010070571490478,4522,2 -4523,24537399,0.08569790368960424,4523,2 -4524,59842626,-0.9933445899837308,4524,2 -4525,42548716,1.635804609415406,4525,2 -4526,30930409,-2.0907728338795017,4526,2 -4527,35265715,-0.06806437270078154,4527,2 -4528,62951731,-0.569873415760637,4528,2 -4529,14440058,-0.46214400083751883,4529,2 -4530,18352050,0.021743651128416537,4530,2 -4531,27188689,0.26453933888338343,4531,2 -4532,45351118,0.017516472566190818,4532,2 -4533,44553293,1.0125813414615157,4533,2 -4534,28132355,-1.2639774271530984,4534,2 -4535,45589116,0.4095946106946392,4535,2 -4536,39842691,-0.08153282796066479,4536,2 -4537,40345440,0.869088203520776,4537,2 -4538,52093540,-0.8494918013909397,4538,2 -4539,54893554,-1.4997602690353193,4539,2 -4540,19157411,0.6863712456953966,4540,2 -4541,49055001,0.47182536643901435,4541,2 -4542,45333301,-1.2685459876075242,4542,2 -4543,66676754,-0.3153622022498192,4543,2 -4544,69695800,0.1771958189158228,4544,2 -4545,45193305,-0.550212084376235,4545,2 -4546,18667291,-1.859707106285758,4546,2 -4547,10256262,-0.4504724800955959,4547,2 -4548,79693434,-0.7316068952312573,4548,2 -4549,63835832,0.917068790810007,4549,2 -4550,87127517,-0.4935981976457301,4550,2 -4551,30622881,-0.6915677652220931,4551,2 -4552,50684280,0.8149917024208649,4552,2 -4553,40211538,1.3110579543590015,4553,2 -4554,12980710,1.5111087416972446,4554,2 -4555,73725488,-0.7503906467028391,4555,2 -4556,57778896,0.8962499468266812,4556,2 -4557,62505329,1.3988754594411879,4557,2 -4558,34567078,-0.06342436456750593,4558,2 -4559,84162402,-0.9693542602048849,4559,2 -4560,67904369,0.5232406938481606,4560,2 -4561,17042814,0.15740457405737865,4561,2 -4562,72749062,1.8297149142920484,4562,2 -4563,74243667,1.3145087028626432,4563,2 -4564,39301998,0.9600535015309588,4564,2 -4565,87902334,0.7763719269501635,4565,2 -4566,43133781,1.000001784624584,4566,2 -4567,69567592,2.1037353077804264,4567,2 -4568,53666153,0.014225324705104988,4568,2 -4569,70912432,1.7522537192609895,4569,2 -4570,25479051,-0.31329154271065085,4570,2 -4571,42998479,-0.4390289047110042,4571,2 -4572,10159784,0.5798781645095697,4572,2 -4573,89791524,-1.4057706898463584,4573,2 -4574,79259248,0.3105833275126565,4574,2 -4575,53321154,1.3669232759537937,4575,2 -4576,29138414,0.5399417105644676,4576,2 -4577,70559878,0.29331488524506205,4577,2 -4578,13349837,0.7365367129064424,4578,2 -4579,42577193,0.6839409982669895,4579,2 -4580,56855597,0.23442929295889603,4580,2 -4581,80269798,-0.022331489234660436,4581,2 -4582,45525642,2.7030982273583417,4582,2 -4583,88858279,1.2902487193385122,4583,2 -4584,21562481,0.3526356724710476,4584,2 -4585,12644124,-0.7723143669635503,4585,2 -4586,17262868,-1.3373041770707297,4586,2 -4587,34659250,-0.12792924351850962,4587,2 -4588,18606860,0.4302025321299545,4588,2 -4589,70960554,-0.23735390194107645,4589,2 -4590,46848360,0.26021177997119155,4590,2 -4591,32675038,-0.535809369248781,4591,2 -4592,12765061,1.4942865512092534,4592,2 -4593,37940021,-0.2996583877581343,4593,2 -4594,48204666,-0.1961471035005358,4594,2 -4595,64808637,0.9881628469079851,4595,2 -4596,88019215,-1.2524910146070103,4596,2 -4597,87108259,-0.33964221605933514,4597,2 -4598,72967401,-0.13750127131320322,4598,2 -4599,47869106,3.0837935648524906,4599,2 -4600,82596513,0.07790012860466011,4600,2 -4601,41849606,0.805392144851251,4601,2 -4602,55650057,-0.2016541055581601,4602,2 -4603,51458858,-0.8704062617507087,4603,2 -4604,28066375,0.6324806091279807,4604,2 -4605,70706762,-0.7214988323352274,4605,2 -4606,22968856,-0.7132220619995177,4606,2 -4607,51721834,2.283623380395093,4607,2 -4608,18807430,1.2336376445152113,4608,2 -4609,18238951,0.6953435802356936,4609,2 -4610,47262622,-0.6336807792614605,4610,2 -4611,79738193,-0.5206205890678935,4611,2 -4612,55368279,-0.08649771816771422,4612,2 -4613,75624772,-1.2106241676383735,4613,2 -4614,11029859,0.21371773292248594,4614,2 -4615,75776127,-0.24852069748217553,4615,2 -4616,43821427,0.3599017065435526,4616,2 -4617,55621488,1.4810352413863002,4617,2 -4618,31585753,-1.4525142377971827,4618,2 -4619,65448096,0.4863431475284814,4619,2 -4620,46962821,-0.24937876863580316,4620,2 -4621,42961747,-2.0546447517843154,4621,2 -4622,33789249,-0.2529063570834817,4622,2 -4623,20570811,-0.6039046363333163,4623,2 -4624,89573527,0.0871178140577784,4624,2 -4625,24490448,-1.5531471574155153,4625,2 -4626,72427045,-0.42386667251351756,4626,2 -4627,61310261,0.17025654600659268,4627,2 -4628,34050877,0.6194232227415152,4628,2 -4629,82283344,0.5850899449144129,4629,2 -4630,51347630,0.11699256987964689,4630,2 -4631,82298154,-1.1052172409515366,4631,2 -4632,78851096,0.12089611114689104,4632,2 -4633,34847161,0.3308915748677975,4633,2 -4634,44397817,-0.4584447247660439,4634,2 -4635,36533815,-1.328314573951219,4635,2 -4636,62341460,-1.5464080718151103,4636,2 -4637,66317002,-0.41894998874531775,4637,2 -4638,58810684,0.035586645706739105,4638,2 -4639,33764584,0.1861411959008242,4639,2 -4640,83221192,-1.3354941669260647,4640,2 -4641,50386969,-0.74257507575878,4641,2 -4642,77415953,0.1177474042697862,4642,2 -4643,80427354,0.8287309624908421,4643,2 -4644,80659255,-0.3413986681961649,4644,2 -4645,53164124,-0.4285302562115604,4645,2 -4646,18652213,-0.5729590471581384,4646,2 -4647,66131863,1.555364725734203,4647,2 -4648,20288161,-0.32118841424776023,4648,2 -4649,80722653,-0.45547942696939864,4649,2 -4650,71878366,-0.44962829247743474,4650,2 -4651,65778691,0.246940041714705,4651,2 -4652,87922090,-1.4418403512076814,4652,2 -4653,38345579,-0.5135568222694525,4653,2 -4654,23429377,0.9985805275624141,4654,2 -4655,44351488,-1.1068168258937272,4655,2 -4656,27399503,-1.103257780664009,4656,2 -4657,61265454,-1.63700131540704,4657,2 -4658,64467718,-0.6012341612713658,4658,2 -4659,82816820,1.1226103955418962,4659,2 -4660,36809156,-0.5283561060074218,4660,2 -4661,14321856,-0.09139540910539255,4661,2 -4662,65539663,-1.3601951993969408,4662,2 -4663,50893616,-0.8186336141744931,4663,2 -4664,88399626,-0.5167416482521198,4664,2 -4665,75121717,-0.5301214948448773,4665,2 -4666,56354818,2.297223985234723,4666,2 -4667,58690727,-0.5148281331472063,4667,2 -4668,28015699,-0.16140291629863932,4668,2 -4669,48845254,-1.259277785947163,4669,2 -4670,89525156,-0.5452397671178535,4670,2 -4671,12925349,1.3132277172202698,4671,2 -4672,30607290,1.663968043888261,4672,2 -4673,89393018,1.3840490551135216,4673,2 -4674,16225126,-0.8951822823662055,4674,2 -4675,21679496,-1.4278794244502417,4675,2 -4676,13032180,-1.0872091904409191,4676,2 -4677,63457154,-0.35858132005949883,4677,2 -4678,67276094,-0.708050805329063,4678,2 -4679,38431138,-0.7670313554827896,4679,2 -4680,13421696,-1.5506608318545096,4680,2 -4681,53539342,-0.0754659839969365,4681,2 -4682,30132362,-1.2468321960451523,4682,2 -4683,37666155,1.1406031599962443,4683,2 -4684,48898981,0.2501664370752232,4684,2 -4685,13415932,1.0030346752866253,4685,2 -4686,67197951,0.6669863163811608,4686,2 -4687,24882926,1.5691963536094016,4687,2 -4688,35322130,1.285540924967386,4688,2 -4689,66639767,-0.6641575859641486,4689,2 -4690,84499223,0.9716668101064619,4690,2 -4691,16539695,0.4932171906139691,4691,2 -4692,54285885,-2.404567564631929,4692,2 -4693,22248569,-1.2069439015301613,4693,2 -4694,43981796,-0.43772221915707793,4694,2 -4695,19821183,0.2077365119006881,4695,2 -4696,70083693,-0.503769478425968,4696,2 -4697,83923562,-0.2805837202899422,4697,2 -4698,29049560,-0.8686334083458592,4698,2 -4699,18987421,1.5526077878578421,4699,2 -4700,12901971,-0.47522117749999854,4700,2 -4701,75551435,1.110622747962234,4701,2 -4702,60690157,-0.5975118093466575,4702,2 -4703,53469490,0.09854722755264911,4703,2 -4704,18655850,1.4900760229104015,4704,2 -4705,18449153,-0.33354831965137305,4705,2 -4706,69102806,0.3255636513062632,4706,2 -4707,36300088,0.0364378652024247,4707,2 -4708,50088038,-1.191391191342042,4708,2 -4709,21808978,-0.5657424485865197,4709,2 -4710,80674539,-1.0098952443277602,4710,2 -4711,32569609,-0.20970595513826984,4711,2 -4712,87635066,-0.3078658159710228,4712,2 -4713,12604450,-0.8474022194763408,4713,2 -4714,44668948,-0.07107292534665119,4714,2 -4715,43746327,0.572789470624184,4715,2 -4716,18982482,-0.731333115191319,4716,2 -4717,26752337,-2.442560064558716,4717,2 -4718,30023350,0.11925872816705177,4718,2 -4719,55056089,-0.8861138793026525,4719,2 -4720,58992680,0.9847444864505243,4720,2 -4721,67463891,0.33463649580590393,4721,2 -4722,26369955,0.798852684049747,4722,2 -4723,25049179,-0.47392783659255694,4723,2 -4724,41705562,0.5515611841206814,4724,2 -4725,52668605,1.7305638165254582,4725,2 -4726,78854593,0.1624948198934198,4726,2 -4727,51123264,-0.5782677383480681,4727,2 -4728,44464025,-1.054117890432308,4728,2 -4729,26614148,0.8278028659449213,4729,2 -4730,71714491,-1.5697895470399479,4730,2 -4731,49618898,-0.3214905165909093,4731,2 -4732,65422530,1.421159890407118,4732,2 -4733,22390473,-0.5152585545569829,4733,2 -4734,55324819,2.2433049402030756,4734,2 -4735,64878632,-0.6348473702901931,4735,2 -4736,72982739,-1.884731753198489,4736,2 -4737,74398040,-1.3880023097413274,4737,2 -4738,41978255,-0.6907685897614303,4738,2 -4739,20743672,-1.0861417512225353,4739,2 -4740,69546676,0.8491803665774416,4740,2 -4741,49762409,1.0725641699382051,4741,2 -4742,75329470,0.8530542944012127,4742,2 -4743,44319120,-0.5281111699464162,4743,2 -4744,55917927,-0.25996164405207317,4744,2 -4745,88128748,-0.15516252918608697,4745,2 -4746,82383722,4.009124480938215e-05,4746,2 -4747,59748852,-1.3000324162604633,4747,2 -4748,87100724,0.7559061741662386,4748,2 -4749,12877272,-0.3739660120399176,4749,2 -4750,25554028,0.10650690911310912,4750,2 -4751,55645643,-0.3688425822224346,4751,2 -4752,89637923,-1.2310362075265517,4752,2 -4753,34898861,0.1326276238686552,4753,2 -4754,50033506,1.6829542854284607,4754,2 -4755,79101021,1.710626849271867,4755,2 -4756,12936738,0.24143740383732915,4756,2 -4757,62528666,-0.5687334074472731,4757,2 -4758,60752116,0.2045923869887225,4758,2 -4759,71982201,0.5016698703039527,4759,2 -4760,72342444,-2.8466944264599134,4760,2 -4761,29433268,-0.28441408466885937,4761,2 -4762,82623740,1.3603477572254101,4762,2 -4763,55953347,-0.12643851060059308,4763,2 -4764,61569617,1.276935990146288,4764,2 -4765,68024202,1.7874656134565432,4765,2 -4766,74553178,-1.0719898503307972,4766,2 -4767,63867685,1.02806315292141,4767,2 -4768,52295291,-0.4721399696413131,4768,2 -4769,40517131,-2.0432562022702188,4769,2 -4770,76848598,0.002832287831443874,4770,2 -4771,74640708,0.9838512056935098,4771,2 -4772,17210610,0.15648125343240502,4772,2 -4773,57462557,0.14552184313627972,4773,2 -4774,22826819,-0.932048582214208,4774,2 -4775,32181375,-0.4200287990690365,4775,2 -4776,77671287,-0.07139189070149281,4776,2 -4777,47516732,-1.2794443356088765,4777,2 -4778,35390504,-0.40591611581010806,4778,2 -4779,53677277,0.48131684283594933,4779,2 -4780,82272306,-0.2749808602463077,4780,2 -4781,62532430,0.46182801748121727,4781,2 -4782,40230172,-0.21380619732091102,4782,2 -4783,27159580,1.08398308630587,4783,2 -4784,46159410,-2.0295477149186665,4784,2 -4785,34852402,1.8512678806864507,4785,2 -4786,67788332,-0.958043086451955,4786,2 -4787,55491233,1.9224228872035873,4787,2 -4788,28172648,1.042843399923135,4788,2 -4789,15577960,-0.42296712567897027,4789,2 -4790,18627167,0.4748510547767401,4790,2 -4791,15120190,-0.28772838054279126,4791,2 -4792,20731481,0.3708293364049609,4792,2 -4793,26194267,0.18258727323070234,4793,2 -4794,19954265,-0.042428238747458435,4794,2 -4795,59656589,-0.16454912212082168,4795,2 -4796,44742156,0.3737000195080031,4796,2 -4797,33010147,1.707133991902307,4797,2 -4798,15448803,-0.04739551971111725,4798,2 -4799,28390056,-0.6667917501387506,4799,2 -4800,36800070,1.601259796789479,4800,2 -4801,83046584,0.34235757159929336,4801,2 -4802,58350209,-0.5829592339484402,4802,2 -4803,81606161,1.757872379701068,4803,2 -4804,87930800,0.4143870572668804,4804,2 -4805,22756818,0.3385480249894559,4805,2 -4806,58316661,-0.2516987919689294,4806,2 -4807,66593916,0.8815907269670129,4807,2 -4808,29830302,0.49714875767039424,4808,2 -4809,43080583,1.0517619417483681,4809,2 -4810,18661186,0.4936224611697172,4810,2 -4811,59723320,1.1033212647082224,4811,2 -4812,38848888,-0.6661764041985043,4812,2 -4813,39063096,0.8244632735820343,4813,2 -4814,39502996,-0.2925611815884664,4814,2 -4815,32747012,-0.8183085046647633,4815,2 -4816,20885548,-1.1646122673640642,4816,2 -4817,36784774,0.651442448777037,4817,2 -4818,80235566,-0.6713103149878692,4818,2 -4819,42068743,0.3015650645757413,4819,2 -4820,41420764,-0.009497911974378007,4820,2 -4821,86957453,0.38981662617887447,4821,2 -4822,74401725,-0.09247768567755726,4822,2 -4823,56855339,-0.3057609151300572,4823,2 -4824,89738848,0.1806636051316342,4824,2 -4825,56921100,-1.386057323456006,4825,2 -4826,56738430,-0.12115305242363514,4826,2 -4827,61275169,0.10964779148643163,4827,2 -4828,86091654,0.4835443074639335,4828,2 -4829,81578111,-1.5279709694557895,4829,2 -4830,73299629,0.8511789087337743,4830,2 -4831,15432855,-0.0368381010875996,4831,2 -4832,34061621,-0.42241935627900273,4832,2 -4833,35373088,1.572646355818142,4833,2 -4834,85270679,0.4592348124522709,4834,2 -4835,79592866,0.6157172870882531,4835,2 -4836,34153723,1.0332521623025501,4836,2 -4837,78860079,0.15804201086238742,4837,2 -4838,41851771,1.3793134250136483,4838,2 -4839,19661864,0.017536917163591008,4839,2 -4840,87206779,-0.9382833206399799,4840,2 -4841,32314383,-0.8544859101804044,4841,2 -4842,34015208,1.3102660474241734,4842,2 -4843,52010966,-0.14764109949036874,4843,2 -4844,39681776,-1.2658033966388078,4844,2 -4845,74320495,0.7630228338576559,4845,2 -4846,26492462,-0.46388240877689135,4846,2 -4847,20060932,2.0502478698053155,4847,2 -4848,20238563,-0.054826276122433036,4848,2 -4849,34377210,-1.5959269231685895,4849,2 -4850,35420030,-0.24998565445723825,4850,2 -4851,88265178,1.4037851426737025,4851,2 -4852,89497471,-0.0439308385689168,4852,2 -4853,44127460,1.5315407614205299,4853,2 -4854,30510378,0.06477260646004841,4854,2 -4855,33137548,-0.01838145598093072,4855,2 -4856,32286897,-0.42868184824267774,4856,2 -4857,37520370,0.635781969429741,4857,2 -4858,87178250,0.2877916975753583,4858,2 -4859,30724523,1.572819726323097,4859,2 -4860,45725070,0.49339914358903575,4860,2 -4861,59576986,0.8734843240317531,4861,2 -4862,38984683,1.9570629871975542,4862,2 -4863,48751035,0.9283461537439487,4863,2 -4864,64303042,0.11075364993357249,4864,2 -4865,79115935,-0.6874806548107922,4865,2 -4866,50347531,1.5407486990714965,4866,2 -4867,37914721,-0.8145725269937101,4867,2 -4868,27464428,-0.9216082504120513,4868,2 -4869,10001701,-1.0821026619010765,4869,2 -4870,73276265,0.4984579894590333,4870,2 -4871,50652473,-1.5635354776012724,4871,2 -4872,30668320,0.3942572448190903,4872,2 -4873,81894160,-2.093593504575776,4873,2 -4874,22295637,0.20284973966930867,4874,2 -4875,12852846,1.3826286748100096,4875,2 -4876,59553986,-0.30050498926479363,4876,2 -4877,81852229,2.1062096791309943,4877,2 -4878,80694990,1.3088665705309304,4878,2 -4879,64129256,-1.1924545784726905,4879,2 -4880,20790216,-0.1292881289969127,4880,2 -4881,22239167,0.10647347820709388,4881,2 -4882,25385924,-0.7020886768163402,4882,2 -4883,21239369,0.5244702204237596,4883,2 -4884,41006796,-0.36520501007823447,4884,2 -4885,29052285,-1.194325908688818,4885,2 -4886,36255438,-0.8064084885465884,4886,2 -4887,57386090,-0.3220438089151173,4887,2 -4888,67009036,-0.17812949908464687,4888,2 -4889,78291513,-1.5322568904315563,4889,2 -4890,59801076,-1.0208603623763846,4890,2 -4891,67748275,1.7813902601630878,4891,2 -4892,44865654,-1.513412680280484,4892,2 -4893,78203431,-1.73917188930661,4893,2 -4894,70230522,-0.8883730634748768,4894,2 -4895,75580751,-0.9934855212576801,4895,2 -4896,37877007,2.396067661401047,4896,2 -4897,60058217,-0.45599866891933516,4897,2 -4898,37104653,0.03520370290193651,4898,2 -4899,88138033,-2.042084617359387,4899,2 -4900,88192450,0.3684574821981669,4900,2 -4901,28032750,-0.7786610843584776,4901,2 -4902,56824647,-0.6855793700886418,4902,2 -4903,63155618,0.009951649676894457,4903,2 -4904,64009317,-0.5795106168765365,4904,2 -4905,49206035,-0.16079020481615539,4905,2 -4906,46014859,0.09696051606041774,4906,2 -4907,47150528,0.07601890782600879,4907,2 -4908,20536617,-1.3727717274464768,4908,2 -4909,77000070,-2.585910528106129,4909,2 -4910,13287797,-0.6740831848960543,4910,2 -4911,23755772,0.24158125526175206,4911,2 -4912,89258823,-1.381984947007224,4912,2 -4913,37331813,-1.5674541210293327,4913,2 -4914,67882547,-0.21092550372931865,4914,2 -4915,56082211,-0.8545841165815582,4915,2 -4916,72731025,-0.7569738105908819,4916,2 -4917,84542537,0.36439808587597844,4917,2 -4918,49352391,0.39294760078950736,4918,2 -4919,85888495,-0.7597080618809381,4919,2 -4920,58028770,-0.4807117964940229,4920,2 -4921,44482537,0.8857404960413096,4921,2 -4922,84615748,-0.17633162134831953,4922,2 -4923,41405926,1.3076505523733162,4923,2 -4924,24114488,1.6618470262746572,4924,2 -4925,69804101,-1.384957642223025,4925,2 -4926,82851331,0.4705661764751694,4926,2 -4927,83486201,0.4391229908342685,4927,2 -4928,53589140,0.4003299058611593,4928,2 -4929,43275550,-1.5083613664165882,4929,2 -4930,66356073,-1.1613227935263521,4930,2 -4931,50179533,1.0630150559620388,4931,2 -4932,67921512,-1.4201068936023857,4932,2 -4933,53397359,-0.5220657996722728,4933,2 -4934,67764593,-1.72830754463932,4934,2 -4935,55188395,0.12347213299465207,4935,2 -4936,81273026,0.35310589564392414,4936,2 -4937,81332855,-0.7414976561807826,4937,2 -4938,89910220,-0.6675775241703222,4938,2 -4939,86482027,-0.4911042832513665,4939,2 -4940,87432235,-0.15054724627626187,4940,2 -4941,51394647,0.4519185994731517,4941,2 -4942,87315102,-1.8691841788779184,4942,2 -4943,13434853,1.3513348563138494,4943,2 -4944,73936763,1.1885858604705084,4944,2 -4945,75467156,0.7567019194809609,4945,2 -4946,34790187,1.5120966775085112,4946,2 -4947,73848668,-0.1483027664256483,4947,2 -4948,41911574,-0.10800995537908721,4948,2 -4949,71155266,0.7458200140154196,4949,2 -4950,61602843,0.6569555998490021,4950,2 -4951,30593848,-0.2963597901914415,4951,2 -4952,20320373,0.7748026315653916,4952,2 -4953,56876640,-0.05583804150123613,4953,2 -4954,47898495,-0.6647183165710959,4954,2 -4955,47067471,0.7137597302706579,4955,2 -4956,45955911,-0.14758925019225244,4956,2 -4957,69863671,-0.6810564745454472,4957,2 -4958,11925834,1.0541915085951314,4958,2 -4959,16763454,-1.5647747839281936,4959,2 -4960,11126898,-0.9563001708926141,4960,2 -4961,64398904,0.16201291642296117,4961,2 -4962,47109474,-1.1172201998449276,4962,2 -4963,81369682,0.6848599741452213,4963,2 -4964,85905490,-1.5427845711467976,4964,2 -4965,86921900,-0.2021589159460322,4965,2 -4966,55077567,0.27094625983350495,4966,2 -4967,62043678,-0.5355484028742071,4967,2 -4968,65040068,0.5724128287877215,4968,2 -4969,29730279,0.23251063257877216,4969,2 -4970,67653851,0.5515152309380378,4970,2 -4971,67507455,-1.919164699848781,4971,2 -4972,62105829,-0.47251154315284166,4972,2 -4973,65308178,0.17386991164856483,4973,2 -4974,28478382,0.40065270856637736,4974,2 -4975,62727197,-0.8733316990606688,4975,2 -4976,30385668,-1.0077780556997706,4976,2 -4977,55341227,1.152846185382771,4977,2 -4978,31559866,-0.8727269195624036,4978,2 -4979,51068657,0.4168094261466576,4979,2 -4980,81303949,2.4266452854989216,4980,2 -4981,60118828,0.7026697271409068,4981,2 -4982,59966965,-1.1451649003733368,4982,2 -4983,31964014,-0.3084349144416576,4983,2 -4984,26766484,-0.21971913873060453,4984,2 -4985,44053350,0.8006562075294242,4985,2 -4986,49125068,2.493661752648029,4986,2 -4987,40933194,0.43102835483070456,4987,2 -4988,28597352,-1.0911805660978933,4988,2 -4989,20606926,-0.9333453860527481,4989,2 -4990,27941710,0.3199439353630304,4990,2 -4991,73429229,-0.3979028241474865,4991,2 -4992,65543263,0.42540442471790724,4992,2 -4993,12944922,-0.011088957305380434,4993,2 -4994,15959996,-1.4901418802869602,4994,2 -4995,55041921,-0.20379968593117395,4995,2 -4996,69199606,1.7722490607609038,4996,2 -4997,12997158,-2.0405029746074326,4997,2 -4998,33789326,-0.5910719472657234,4998,2 -4999,78914928,1.1639793912381053,4999,2 -5000,74324954,0.4009184049786188,5000,2 -5001,10192091,-1.4593498347462606,5001,2 -5002,80174930,0.25875064692582067,5002,2 -5003,34917670,0.5977300449418745,5003,2 -5004,83230680,-0.8123983094340904,5004,2 -5005,45956425,-1.2178937635418994,5005,2 -5006,44398446,-0.5855076422260913,5006,2 -5007,17592696,1.1980931900261902,5007,2 -5008,53516570,0.8909935561972997,5008,2 -5009,16840443,-0.8690511885712711,5009,2 -5010,85706596,-0.368799783632945,5010,2 -5011,20421447,-0.29057702608559605,5011,2 -5012,73971037,1.2613284186906644,5012,2 -5013,84390618,-2.5920494270511747,5013,2 -5014,75682863,-0.72232880400158,5014,2 -5015,89671630,0.650679013445294,5015,2 -5016,24774019,-1.6285873340577393,5016,2 -5017,12296998,2.326814757300956,5017,2 -5018,68598944,-1.3252988203502618,5018,2 -5019,45514456,1.1721143931594673,5019,2 -5020,14532592,-0.2583465550045605,5020,2 -5021,13958205,0.37733832329634703,5021,2 -5022,78061977,1.3597140751066683,5022,2 -5023,16582989,-0.029147337761138172,5023,2 -5024,86516801,2.3289823748183367,5024,2 -5025,42277187,-0.1814250741799973,5025,2 -5026,16986649,-1.072159133618284,5026,2 -5027,38637994,-1.0263020062789943,5027,2 -5028,20584898,0.09651905859112207,5028,2 -5029,88506004,-2.497261420551305,5029,2 -5030,46012602,0.504902920134804,5030,2 -5031,31292229,0.5000886490322612,5031,2 -5032,64636865,-0.8196984605030164,5032,2 -5033,84915616,-1.5705091413739112,5033,2 -5034,30747988,-1.327732524220737,5034,2 -5035,58145999,0.2507092213097268,5035,2 -5036,48684522,-0.09952521810550599,5036,2 -5037,15842950,0.1294970865094182,5037,2 -5038,15237229,-0.5477364009111523,5038,2 -5039,87692294,0.10875429391269123,5039,2 -5040,31815094,-0.9716902786724051,5040,2 -5041,38683924,-0.0004216032261755602,5041,2 -5042,79409490,1.5220710440382856,5042,2 -5043,21272408,2.4578463999458373,5043,2 -5044,29271871,0.06909080268808945,5044,2 -5045,11104526,1.1620366010644467,5045,2 -5046,15450035,0.9798046398130962,5046,2 -5047,56431163,0.24184822338112721,5047,2 -5048,57061414,0.20317962496613262,5048,2 -5049,60566807,-1.9681346746098733,5049,2 -5050,30881842,0.9939625057701489,5050,2 -5051,21301323,-0.35585998314809686,5051,2 -5052,68944328,-0.20798357861760083,5052,2 -5053,25680551,1.7797559231889906,5053,2 -5054,11572847,-0.9843772279346186,5054,2 -5055,42688193,0.8819291490183911,5055,2 -5056,20051488,-0.05185262828140757,5056,2 -5057,54186282,-0.4292026218822397,5057,2 -5058,62967970,0.15853705136108762,5058,2 -5059,51275258,-2.1711125970390954,5059,2 -5060,86072405,-0.22922253343360519,5060,2 -5061,44598392,0.2501559555842969,5061,2 -5062,86203926,-0.9292653101173151,5062,2 -5063,65251174,-0.9356124009119399,5063,2 -5064,32241610,0.4403240360891429,5064,2 -5065,82563516,0.4862059780953005,5065,2 -5066,31765537,-1.0527028804389185,5066,2 -5067,41705906,0.8903782051129965,5067,2 -5068,73989373,1.7729455436967192,5068,2 -5069,63669383,-0.6476812945186214,5069,2 -5070,80257109,-0.6330997825636518,5070,2 -5071,87779565,-0.4954351017154463,5071,2 -5072,36419262,-0.04707354524902488,5072,2 -5073,70252893,-1.3986629121676974,5073,2 -5074,68836422,-0.7995703610168411,5074,2 -5075,48563968,-0.09822107470753455,5075,2 -5076,29102204,-0.5674866819828448,5076,2 -5077,37656645,-0.033480822602137084,5077,2 -5078,85000083,0.17728030701166203,5078,2 -5079,13613552,-0.20444648412406466,5079,2 -5080,14945757,-0.356190169904618,5080,2 -5081,23399299,2.0546720555921514,5081,2 -5082,84191137,-1.2948097789375546,5082,2 -5083,17272739,0.10396759116118098,5083,2 -5084,78012602,1.335323496368003,5084,2 -5085,46825447,-0.9751854555634377,5085,2 -5086,78333946,-0.56850837191441,5086,2 -5087,40471877,0.4669849431204792,5087,2 -5088,88957355,0.38844979367367843,5088,2 -5089,13300403,-0.4894825037854643,5089,2 -5090,74905487,-0.44144353315928925,5090,2 -5091,59465122,-1.205758113878282,5091,2 -5092,68971614,1.0891042518546166,5092,2 -5093,18097959,0.4850269173084865,5093,2 -5094,84629041,-0.8830263691853366,5094,2 -5095,56669863,-1.1587393030274231,5095,2 -5096,21551741,-0.21864377403467802,5096,2 -5097,43009694,-0.4629638913839627,5097,2 -5098,70977102,-1.5612837277415827,5098,2 -5099,52309824,-0.03218700880311633,5099,2 -5100,22449506,-0.21480730903483186,5100,2 -5101,29408132,0.05559933842559225,5101,2 -5102,66610850,-1.64237432489764,5102,2 -5103,89000553,0.014787624043556888,5103,2 -5104,86103391,0.06895332905786876,5104,2 -5105,34417382,-0.5788911733565325,5105,2 -5106,78095487,0.7773730476492482,5106,2 -5107,16246960,1.0201587992348884,5107,2 -5108,12667743,0.4769714694262036,5108,2 -5109,60689282,-0.4322436184772026,5109,2 -5110,36615904,1.6488204331705067,5110,2 -5111,31498644,0.9077918421715342,5111,2 -5112,19212027,0.5868875258995488,5112,2 -5113,72782399,-0.651169469250114,5113,2 -5114,15890451,0.11071508097344929,5114,2 -5115,53876564,1.0191630980672235,5115,2 -5116,51642372,-0.34026736690231435,5116,2 -5117,17205689,0.9634084435201407,5117,2 -5118,44192241,0.15530065085111075,5118,2 -5119,85700796,0.8435188545706029,5119,2 -5120,12547116,0.5921069477140749,5120,2 -5121,73154709,-0.6528378357220213,5121,2 -5122,75044266,0.8769338143200862,5122,2 -5123,52641297,-0.5300473642933174,5123,2 -5124,51190788,-0.3302957105202951,5124,2 -5125,82147602,-0.47942876242170146,5125,2 -5126,32601150,0.9280572575460048,5126,2 -5127,50511201,0.12622037552153711,5127,2 -5128,77518285,-0.992052726512506,5128,2 -5129,71434039,-0.3801930303779611,5129,2 -5130,61967226,0.1930541546788334,5130,2 -5131,21295477,-1.7799124668645183,5131,2 -5132,43037030,-2.3267631968881775,5132,2 -5133,83581004,-0.6028020931960129,5133,2 -5134,24472359,0.03675725975532609,5134,2 -5135,59186605,1.370163776036281,5135,2 -5136,46698674,-0.24405323791533481,5136,2 -5137,52125699,-1.078934692174912,5137,2 -5138,84009537,-0.22249543106650835,5138,2 -5139,30778740,0.6645489554338807,5139,2 -5140,19425848,0.7094718143048336,5140,2 -5141,61117944,-0.21517040001002147,5141,2 -5142,47723644,0.29872057562147136,5142,2 -5143,89156402,2.905546950240621,5143,2 -5144,36980292,-1.7955112534944295,5144,2 -5145,11517596,-0.5564970514789974,5145,2 -5146,22823785,0.2022719645295489,5146,2 -5147,31605103,-0.5937618832355447,5147,2 -5148,55421985,-1.041473398256657,5148,2 -5149,89834984,0.4899558717892754,5149,2 -5150,28099457,-1.286563562871719,5150,2 -5151,17365981,1.499350343462868,5151,2 -5152,84707177,-1.0298796580927323,5152,2 -5153,59908302,-1.8136662483021506,5153,2 -5154,18031086,0.6920917131073213,5154,2 -5155,76620203,2.894367659145501,5155,2 -5156,36408075,1.1193465318608837,5156,2 -5157,41376469,-0.7448434410507344,5157,2 -5158,23610741,0.40164415970890033,5158,2 -5159,64079393,-0.751451836728921,5159,2 -5160,34611068,-0.7223517797491726,5160,2 -5161,39045726,1.2042275421868176,5161,2 -5162,27819436,0.8812747066164,5162,2 -5163,21347304,-1.327010930678463,5163,2 -5164,18400715,-1.455294552633047,5164,2 -5165,18396312,0.07342881190150294,5165,2 -5166,72317186,-0.35727966723574367,5166,2 -5167,79770108,0.026195209472266785,5167,2 -5168,31031804,-1.1682599864741317,5168,2 -5169,43181603,0.46392855103588476,5169,2 -5170,20330345,-1.9517136877367485,5170,2 -5171,17675847,-2.130424451602072,5171,2 -5172,64436007,1.3922868827865658,5172,2 -5173,31210186,-0.00725621983722995,5173,2 -5174,78478616,1.5646333822301077,5174,2 -5175,70237224,-0.47103533596096925,5175,2 -5176,54354037,-0.07076772462181648,5176,2 -5177,87065305,-0.7130500009226716,5177,2 -5178,31046479,-0.8453876731990938,5178,2 -5179,69487137,0.5117967053449037,5179,2 -5180,72085224,1.2183140948636613,5180,2 -5181,18437088,-0.1708147291695339,5181,2 -5182,56457294,1.1140266173874631,5182,2 -5183,59460884,-0.8969846293159175,5183,2 -5184,37651743,-1.5383912535814743,5184,2 -5185,66841967,-0.8813692609171191,5185,2 -5186,86225103,0.0375708799295528,5186,2 -5187,66180378,-1.226687270989845,5187,2 -5188,31208691,-0.1659455334001445,5188,2 -5189,73139063,-0.8090770730678071,5189,2 -5190,84643204,-1.1092485684861901,5190,2 -5191,39712498,0.15456584184729602,5191,2 -5192,65750459,-0.31463990355172494,5192,2 -5193,72434066,-1.3320613809493487,5193,2 -5194,43565023,0.8483782561172567,5194,2 -5195,30842394,0.59941248820812,5195,2 -5196,55564015,0.7229945507973601,5196,2 -5197,10206391,-0.26183112178414086,5197,2 -5198,24456123,1.232580168021955,5198,2 -5199,81825096,-0.7472078576691827,5199,2 -5200,37908915,1.100723334114186,5200,2 -5201,80384031,2.8755446294997933,5201,2 -5202,84795612,-1.2756400918431725,5202,2 -5203,31008293,-1.713439660782281,5203,2 -5204,72252175,-0.06365525515797638,5204,2 -5205,54450185,-0.5331871771328157,5205,2 -5206,20822468,-0.9352479263908545,5206,2 -5207,76418869,-0.42556766223509224,5207,2 -5208,53956825,-0.894786741899367,5208,2 -5209,39300742,-0.8227980869044852,5209,2 -5210,35752548,2.1518404867226475,5210,2 -5211,46945599,0.420099216685768,5211,2 -5212,69144218,-0.7810649711334179,5212,2 -5213,48021601,0.430513984711474,5213,2 -5214,41055768,0.1102454873911517,5214,2 -5215,54038964,-0.2533027787361657,5215,2 -5216,62570970,-1.4808432640205715,5216,2 -5217,73927291,-1.034401351350261,5217,2 -5218,77495647,-0.015005431838936344,5218,2 -5219,18396607,1.0102609328964542,5219,2 -5220,30556673,1.1962275025700484,5220,2 -5221,73921005,-1.2070068177345386,5221,2 -5222,21110832,-0.3181489850479554,5222,2 -5223,88481222,-0.048276201091266735,5223,2 -5224,44903753,-0.14670481053598514,5224,2 -5225,48833114,0.8460280330785566,5225,2 -5226,16886845,-1.2991851951339726,5226,2 -5227,59079972,-0.7381966989598951,5227,2 -5228,84993004,0.8308497286107193,5228,2 -5229,68047422,0.8021267485744413,5229,2 -5230,55088763,0.097176013813895,5230,2 -5231,76937803,0.49583827295394256,5231,2 -5232,51866013,-0.9483347445764164,5232,2 -5233,14385157,-1.1430522003300096,5233,2 -5234,78347422,0.1281678328637723,5234,2 -5235,74128001,0.6877727606909846,5235,2 -5236,41181448,0.1957459453481655,5236,2 -5237,75538678,-0.29547745786115387,5237,2 -5238,67785932,-0.7144131680877398,5238,2 -5239,78886436,0.541961988315899,5239,2 -5240,59982335,-1.7743794483853126,5240,2 -5241,18143065,-1.6983374870593755,5241,2 -5242,46201233,0.9023662380399398,5242,2 -5243,70441751,-1.3409307363006095,5243,2 -5244,69868503,1.0781010515295846,5244,2 -5245,38091875,-0.19216965195731606,5245,2 -5246,82142633,-0.5802902853770151,5246,2 -5247,12652715,-1.2504374167966978,5247,2 -5248,29403131,-1.4240501539796382,5248,2 -5249,68771680,-0.7585204490864155,5249,2 -5250,85943910,-0.2068315298599126,5250,2 -5251,65284155,-0.522706022579462,5251,2 -5252,65235183,1.1528637589838011,5252,2 -5253,67301303,1.3302807057115362,5253,2 -5254,55495758,2.014041492740779,5254,2 -5255,17376686,0.6519448996739291,5255,2 -5256,31227421,-0.49973012157859464,5256,2 -5257,66413859,0.0052209385991999315,5257,2 -5258,54799458,1.1308435229398237,5258,2 -5259,48035209,0.8687706098895404,5259,2 -5260,16145062,-0.8888925915538162,5260,2 -5261,27086622,1.2727031659395134,5261,2 -5262,69092569,-0.16548090034222637,5262,2 -5263,36289961,0.7865899225160189,5263,2 -5264,86601164,0.23165292333179738,5264,2 -5265,56556823,0.8763348530839165,5265,2 -5266,50050569,0.8257867727910508,5266,2 -5267,22754045,-1.6563915115240995,5267,2 -5268,76446931,-0.0415150907815456,5268,2 -5269,68756127,-0.17731118808508062,5269,2 -5270,74177755,0.30841990230997984,5270,2 -5271,40902291,-0.14512007613245156,5271,2 -5272,19040495,-0.053536088320259065,5272,2 -5273,41445815,-0.5192978096567541,5273,2 -5274,64379510,-0.7052935279977909,5274,2 -5275,73150117,-1.3523761632047677,5275,2 -5276,15188676,0.6087565501428318,5276,2 -5277,81303011,0.6536064086286777,5277,2 -5278,58226116,-1.385042029104621,5278,2 -5279,56101074,-0.7106844816703253,5279,2 -5280,53562074,-0.6639853598302302,5280,2 -5281,13210667,-1.4800609288839117,5281,2 -5282,56579528,-0.3586877026634454,5282,2 -5283,40719979,0.3859479195199348,5283,2 -5284,64993231,-1.4422323038754208,5284,2 -5285,41665712,-1.0224662841186025,5285,2 -5286,26167897,-2.047378793237792,5286,2 -5287,47725196,0.3279946900324203,5287,2 -5288,80018692,-0.15890764724886647,5288,2 -5289,18580521,0.170190143623617,5289,2 -5290,52554056,1.2141213029216436,5290,2 -5291,73194216,-0.8962652008512678,5291,2 -5292,63822075,-0.271766395667929,5292,2 -5293,71313843,0.49961817689744087,5293,2 -5294,59608782,2.040929387084293,5294,2 -5295,20974077,-0.18545908256818774,5295,2 -5296,71131561,-0.06706733922460073,5296,2 -5297,43348920,2.374542023970564,5297,2 -5298,88046565,0.9746148863010474,5298,2 -5299,79471633,0.0880289947513043,5299,2 -5300,31743273,-1.728946225006489,5300,2 -5301,46037899,1.541669220243501,5301,2 -5302,49809144,-0.15556191479483367,5302,2 -5303,34553034,1.564591443933163,5303,2 -5304,42195810,1.6180872943258853,5304,2 -5305,24300750,-0.502385238811883,5305,2 -5306,87415028,0.02311921109809865,5306,2 -5307,13489203,0.06814497328683321,5307,2 -5308,85147687,-1.3527300191943152,5308,2 -5309,83418826,-1.2236235253121237,5309,2 -5310,59565577,0.6211333262763018,5310,2 -5311,73131254,-2.3263516796483277,5311,2 -5312,51055457,-0.1663959803372732,5312,2 -5313,66234130,0.638965506058466,5313,2 -5314,53306412,-0.1633437773010493,5314,2 -5315,66192850,0.9746604362083637,5315,2 -5316,59499798,-1.3861074638408046,5316,2 -5317,52230142,1.1301098530840463,5317,2 -5318,46510024,-0.49822467600379755,5318,2 -5319,33780025,1.7805221904939792,5319,2 -5320,39412002,0.2895144165930406,5320,2 -5321,54808042,-1.3856826576235062,5321,2 -5322,20388214,1.0378695530510085,5322,2 -5323,62272087,1.4367399532509606,5323,2 -5324,61013019,0.06762969383460503,5324,2 -5325,58387077,-1.4891485641695945,5325,2 -5326,61930557,1.1465453827215928,5326,2 -5327,65620733,0.2575712982558148,5327,2 -5328,48184420,1.9303763860878655,5328,2 -5329,88003756,-0.18697615235128423,5329,2 -5330,48974613,2.12416329066219,5330,2 -5331,49673378,0.8292762712021503,5331,2 -5332,37898379,-0.06991470004149455,5332,2 -5333,51893438,-1.538259107539417,5333,2 -5334,62806897,1.3576117271675818,5334,2 -5335,14213294,1.4264192614037445,5335,2 -5336,51982943,-0.9992610053418849,5336,2 -5337,47733733,-0.4963623098535914,5337,2 -5338,52726354,-0.6888105130845956,5338,2 -5339,29935746,-1.0539715853823763,5339,2 -5340,71471854,1.415389876934051,5340,2 -5341,51088686,-3.0573118515630613,5341,2 -5342,64721561,0.7673124949656337,5342,2 -5343,17361475,-0.7759189153118264,5343,2 -5344,31967995,0.06739702857010942,5344,2 -5345,73162068,-0.1937149256078639,5345,2 -5346,47826905,1.3315452709556943,5346,2 -5347,67975544,-0.6325016368961288,5347,2 -5348,56578937,0.9095648398484765,5348,2 -5349,87935604,-0.3440142562835397,5349,2 -5350,75978710,0.48563886068160567,5350,2 -5351,43464425,-0.7459374948945428,5351,2 -5352,19495069,0.266941676662908,5352,2 -5353,68349788,-0.03346781005851098,5353,2 -5354,46270597,-0.5098631640789172,5354,2 -5355,15518557,1.3441552285979086,5355,2 -5356,59735387,1.5993167120830274,5356,2 -5357,19693395,0.10472012260229484,5357,2 -5358,69183643,1.7422770859172294,5358,2 -5359,65591866,0.23738211630770584,5359,2 -5360,79610900,-0.15684916399948387,5360,2 -5361,67291567,-0.38011052645798116,5361,2 -5362,42445439,-0.33767535965283385,5362,2 -5363,80792893,0.2757063892533603,5363,2 -5364,26817901,1.7292965955853135,5364,2 -5365,67276029,0.5462363955731443,5365,2 -5366,46003067,-1.8259687038371937,5366,2 -5367,26748017,1.8024166859410762,5367,2 -5368,80943199,1.9771653664096112,5368,2 -5369,74238345,0.01197611105477349,5369,2 -5370,32282027,-1.0497438187855253,5370,2 -5371,18512798,-1.2069348286663846,5371,2 -5372,57916934,-0.8553408867938318,5372,2 -5373,52885729,0.9948716357763807,5373,2 -5374,52750001,1.7248533508748656,5374,2 -5375,30984865,0.3595885844602224,5375,2 -5376,58667892,-1.2758028306561744,5376,2 -5377,89437709,0.10654403224746858,5377,2 -5378,25310768,1.485754696737147,5378,2 -5379,49928550,0.8478091616016359,5379,2 -5380,86203262,-0.11008216057537487,5380,2 -5381,62070679,-1.0016574872895319,5381,2 -5382,32050108,-1.54070596450647,5382,2 -5383,66863061,0.8953781678290665,5383,2 -5384,70421195,0.0443570038187385,5384,2 -5385,34692425,0.7642770101585414,5385,2 -5386,39182511,1.5702840467834747,5386,2 -5387,55490116,1.4710139602195695,5387,2 -5388,23966711,0.5629071589664159,5388,2 -5389,75058247,0.13701805060181782,5389,2 -5390,36402605,-1.9639426091853731,5390,2 -5391,83059891,-0.5822026291135767,5391,2 -5392,19820266,-0.4444522323985069,5392,2 -5393,51802288,-1.055752836432806,5393,2 -5394,16384041,0.2923833942006632,5394,2 -5395,54243725,-0.3946142331134345,5395,2 -5396,36790127,-1.1792667563253498,5396,2 -5397,24867198,1.09682069612764,5397,2 -5398,44109371,-1.157738137112437,5398,2 -5399,47948299,-0.017301768864366997,5399,2 -5400,51341785,0.684024879478824,5400,2 -5401,50986330,-0.12407563495520668,5401,2 -5402,13859690,1.1169147752283555,5402,2 -5403,76520122,-0.8424159838186747,5403,2 -5404,10107903,0.7990603572717441,5404,2 -5405,26110540,-0.8668939664015195,5405,2 -5406,79914406,-0.36173773538224746,5406,2 -5407,31864684,0.21596233624250524,5407,2 -5408,54133155,1.290088930788524,5408,2 -5409,40401554,-0.21813839038308672,5409,2 -5410,66122484,0.6202725796531264,5410,2 -5411,79884468,-0.33196604292284876,5411,2 -5412,46147985,1.5899419588380648,5412,2 -5413,24369214,-0.16475096953580667,5413,2 -5414,88549732,-1.5346674149290893,5414,2 -5415,22413362,-1.7472799823194718,5415,2 -5416,73334055,1.5816303025442244,5416,2 -5417,21076402,-0.01735391759801193,5417,2 -5418,85252313,0.3588250234449693,5418,2 -5419,82520116,-1.1932873684163094,5419,2 -5420,81603526,0.6708455941198211,5420,2 -5421,36106869,0.9673657403540495,5421,2 -5422,36964628,0.6449270630679242,5422,2 -5423,46556142,0.6604530655360406,5423,2 -5424,69106689,-0.3541697241257383,5424,2 -5425,23964097,-0.9657096251494184,5425,2 -5426,67764755,-1.2046652639217472,5426,2 -5427,80096174,-0.4393704250123468,5427,2 -5428,67126332,1.485859046611966,5428,2 -5429,77403455,0.8194031315886596,5429,2 -5430,48598944,-0.02985622648353942,5430,2 -5431,19679126,-0.6347300534956031,5431,2 -5432,61545046,-1.669826063473589,5432,2 -5433,11449445,1.472241442405879,5433,2 -5434,21745170,-1.8709028074378842,5434,2 -5435,19011507,1.6822237831752838,5435,2 -5436,77546672,-0.562840067836777,5436,2 -5437,73775934,-1.3814099176224266,5437,2 -5438,36760319,0.42978562180586416,5438,2 -5439,71645038,-1.8974168419118072,5439,2 -5440,63910751,1.0730297249775171,5440,2 -5441,62380312,-0.7944339811072569,5441,2 -5442,52409130,-0.04849059212243663,5442,2 -5443,64313529,0.3943533948360541,5443,2 -5444,33666087,0.9845030953499125,5444,2 -5445,38578811,0.1378629310885485,5445,2 -5446,27784665,-0.4842664840835464,5446,2 -5447,46068168,-0.38210708022280854,5447,2 -5448,72740938,1.6793792682931425,5448,2 -5449,59613219,1.5610133569530253,5449,2 -5450,63727259,0.22897758474244456,5450,2 -5451,78408697,0.44283619135298186,5451,2 -5452,89755211,-0.17087074000118424,5452,2 -5453,61346119,-1.692945927243971,5453,2 -5454,22930215,-1.0893411793315078,5454,2 -5455,15786657,0.5661777824023392,5455,2 -5456,60455893,0.7365205302104465,5456,2 -5457,39431140,-0.20429317179290704,5457,2 -5458,17634900,-0.4870436593607723,5458,2 -5459,51153502,-0.2942705836442038,5459,2 -5460,88140988,-0.8278320251850827,5460,2 -5461,85419844,2.666182294983683,5461,2 -5462,22077582,-1.441284109088683,5462,2 -5463,17592419,-0.0018501202201490273,5463,2 -5464,85206646,2.762027265132271,5464,2 -5465,32704736,-0.004760136981750756,5465,2 -5466,88498137,0.4436692022881899,5466,2 -5467,77154309,-0.30438042105639534,5467,2 -5468,70023921,-0.2062192592977441,5468,2 -5469,62714698,0.4736776521872346,5469,2 -5470,50605821,-0.6852911012903854,5470,2 -5471,62504325,-0.3127708202363107,5471,2 -5472,14972285,1.157754446269985,5472,2 -5473,71498165,-0.7646740194454656,5473,2 -5474,44294122,1.5412780437814162,5474,2 -5475,81167456,0.9989567782005913,5475,2 -5476,32382231,0.4140251667776125,5476,2 -5477,71833663,-0.624149452714667,5477,2 -5478,27688409,0.7022167499968752,5478,2 -5479,10701866,1.981430599474366,5479,2 -5480,48247492,0.8294310997388029,5480,2 -5481,60155943,0.18305054411418925,5481,2 -5482,55852205,-0.6395284255686721,5482,2 -5483,33894280,-0.11209965451127887,5483,2 -5484,57167384,-1.6248237187390735,5484,2 -5485,24058064,1.5344891004576275,5485,2 -5486,65409507,-0.14225897496494616,5486,2 -5487,15444764,0.957205366516248,5487,2 -5488,60751257,0.9691266449720103,5488,2 -5489,48258624,0.27323474930254166,5489,2 -5490,50560357,-0.27984554982802146,5490,2 -5491,78959674,1.8700132078593108,5491,2 -5492,33015672,-0.006306203610601912,5492,2 -5493,73924831,0.05120770620868487,5493,2 -5494,70079235,0.8396604457250497,5494,2 -5495,17001198,1.6888774166408924,5495,2 -5496,20756498,0.720342177098601,5496,2 -5497,81224747,0.44810948716846727,5497,2 -5498,56368867,0.5740428756021599,5498,2 -5499,10599939,-0.34791536103018894,5499,2 -5500,63958969,-0.09990338247541608,5500,2 -5501,14226452,1.6016794477327583,5501,2 -5502,53560764,-0.868842716465817,5502,2 -5503,24433014,0.3447625366003739,5503,2 -5504,42416134,-0.2997838332152004,5504,2 -5505,37170358,2.862584636210685,5505,2 -5506,70908298,-0.6087480893847015,5506,2 -5507,49290559,0.8691866659623282,5507,2 -5508,59947468,1.370199993925159,5508,2 -5509,73251223,-1.0479711876881277,5509,2 -5510,59829626,0.5004055136621122,5510,2 -5511,73801979,-1.204792389132214,5511,2 -5512,17289246,-0.8383423705939007,5512,2 -5513,25403356,-0.8082256842376295,5513,2 -5514,76943490,0.10233663023106426,5514,2 -5515,50269478,-1.5812437908694694,5515,2 -5516,76833037,-0.1068689469829103,5516,2 -5517,66073392,-0.40419196661283946,5517,2 -5518,51420980,-0.40064932851904733,5518,2 -5519,13053780,1.267521651518771,5519,2 -5520,36514443,2.117964965896478,5520,2 -5521,15123990,1.190885816111735,5521,2 -5522,43042475,-0.2720842069771855,5522,2 -5523,64809352,0.49470525128703924,5523,2 -5524,50179810,-1.1181166510339788,5524,2 -5525,17947373,-2.2202578291552117,5525,2 -5526,16324774,-1.405871090176454,5526,2 -5527,47897355,2.678921873036285,5527,2 -5528,55181856,0.13260691282646492,5528,2 -5529,57562795,1.5368881702836301,5529,2 -5530,86714355,0.9975675905394171,5530,2 -5531,66103025,-1.054114319266592,5531,2 -5532,22215819,0.8899685105943009,5532,2 -5533,84950028,-1.041557177454642,5533,2 -5534,42003348,0.20930587933830722,5534,2 -5535,38214547,0.28818703298622855,5535,2 -5536,15407597,-0.31691698191684,5536,2 -5537,27787875,-1.4251189502976191,5537,2 -5538,16701932,0.7710496773912103,5538,2 -5539,76180878,-0.2571149188982523,5539,2 -5540,85192017,-0.7792715400055695,5540,2 -5541,41054294,-0.31319552588288535,5541,2 -5542,25350908,0.61251753023472,5542,2 -5543,17245428,0.6483691458650842,5543,2 -5544,18729540,0.7379484832196284,5544,2 -5545,19744928,0.9201141556196297,5545,2 -5546,59624950,0.6102182000502805,5546,2 -5547,89889466,1.3429887573788848,5547,2 -5548,83164607,-0.058152731707278665,5548,2 -5549,19097999,0.32475144234592135,5549,2 -5550,35276111,-0.5320642823954163,5550,2 -5551,59861082,1.0764258363963686,5551,2 -5552,11601164,-0.44008619434948587,5552,2 -5553,13808929,-0.4727259762337874,5553,2 -5554,40789338,0.9723538888209297,5554,2 -5555,86914101,-0.06464433574668801,5555,2 -5556,43626200,-0.8979415259779215,5556,2 -5557,48414731,0.2222309720330057,5557,2 -5558,51745714,0.650790485797004,5558,2 -5559,24750443,-0.2713025538040923,5559,2 -5560,18738591,-0.3277496561494837,5560,2 -5561,59424620,-0.8017538252025174,5561,2 -5562,35244951,-1.6699508562688492,5562,2 -5563,52951314,0.9699573620569847,5563,2 -5564,50941497,0.6134054758884563,5564,2 -5565,79385299,1.848363199851332,5565,2 -5566,74363735,-0.10752582293998321,5566,2 -5567,35030002,0.38227982133270194,5567,2 -5568,46983813,0.33517864487164795,5568,2 -5569,86022249,-0.1069847721434472,5569,2 -5570,72402322,-2.1547779679583057,5570,2 -5571,55641803,-0.2748816658906863,5571,2 -5572,17612783,-1.278888959263085,5572,2 -5573,19092887,-1.7656198655223356,5573,2 -5574,11865879,3.123904850813867,5574,2 -5575,64937160,-0.26086368730117054,5575,2 -5576,43735212,-0.3354465983413111,5576,2 -5577,48497897,2.310176453499907,5577,2 -5578,60801540,-1.236285504542772,5578,2 -5579,57145734,0.004219386529557115,5579,2 -5580,17971647,-0.9899943454850665,5580,2 -5581,81044264,2.861370902035497,5581,2 -5582,61788529,2.685874929509073,5582,2 -5583,12016638,1.0180059250762994,5583,2 -5584,63860657,-1.2482489614983805,5584,2 -5585,85131492,0.22160864775174963,5585,2 -5586,29778898,0.2058107205233957,5586,2 -5587,53346341,1.4394251928714823,5587,2 -5588,17084805,-1.2105637597395502,5588,2 -5589,36595049,0.2624793290863126,5589,2 -5590,57830807,0.6917552010291697,5590,2 -5591,10607310,-0.23431777007884974,5591,2 -5592,83383508,0.12052965076544153,5592,2 -5593,64011913,-0.49793710755900167,5593,2 -5594,12825889,0.12077211727628177,5594,2 -5595,41543631,0.804967960108237,5595,2 -5596,85920844,-0.4158743025060465,5596,2 -5597,89415025,1.4772482739965316,5597,2 -5598,56137240,0.5385310864505551,5598,2 -5599,68952330,0.5947093875571644,5599,2 -5600,44225674,0.14027163300971754,5600,2 -5601,26210660,-0.5739534812103113,5601,2 -5602,68703125,-0.7705538725183304,5602,2 -5603,15431533,0.8200171197017149,5603,2 -5604,47272733,-1.831215666086719,5604,2 -5605,79714385,1.4057841295852418,5605,2 -5606,68024639,0.9301396709493194,5606,2 -5607,39342655,0.7178215369476092,5607,2 -5608,19064973,0.003074210225929351,5608,2 -5609,86960387,-0.35716339535552705,5609,2 -5610,63402608,0.47432899925717265,5610,2 -5611,35750278,0.6732287263882059,5611,2 -5612,65387403,1.0581879340543356,5612,2 -5613,26660199,0.624895060848466,5613,2 -5614,27169338,-0.5773213156661958,5614,2 -5615,78814307,-1.9354621815748476,5615,2 -5616,32419520,0.8005739162488734,5616,2 -5617,53111329,1.0774268044414195,5617,2 -5618,37092651,-1.1732203547526272,5618,2 -5619,20451557,-0.05234078788273721,5619,2 -5620,48032798,1.01593662341605,5620,2 -5621,40515264,-1.0156848786501862,5621,2 -5622,33235372,-0.8117630425702514,5622,2 -5623,62565737,-0.7926773345128072,5623,2 -5624,23335858,-0.5210029281845202,5624,2 -5625,43372421,-0.6247855739616097,5625,2 -5626,77367684,-1.9815432575475878,5626,2 -5627,63946877,0.1629716115056783,5627,2 -5628,57556354,-1.0817087476293343,5628,2 -5629,50991175,0.3216961210133094,5629,2 -5630,69984031,-0.5854862408851629,5630,2 -5631,26671516,0.6857792616155705,5631,2 -5632,31573425,1.3504643707410824,5632,2 -5633,30560696,1.1793713888354058,5633,2 -5634,44327806,1.059362739071117,5634,2 -5635,33725301,0.3569106160225404,5635,2 -5636,70296142,-0.2387706052892337,5636,2 -5637,84058334,0.19412393332852157,5637,2 -5638,52235749,1.5177864109942156,5638,2 -5639,27069456,0.45186858699456856,5639,2 -5640,12912228,-1.3834199325753471,5640,2 -5641,74031865,-2.3193424269795835,5641,2 -5642,78237644,0.7873451607913685,5642,2 -5643,24856565,1.2141746026498488,5643,2 -5644,38505100,-0.7229700862198067,5644,2 -5645,23821753,0.1751085553378004,5645,2 -5646,21667782,-1.8486157276064403,5646,2 -5647,66706973,-0.12188395663637754,5647,2 -5648,60222136,-0.3032669296883825,5648,2 -5649,45547192,-1.2134465410072643,5649,2 -5650,57901157,-0.5043226702086798,5650,2 -5651,60922163,-0.41219826960383765,5651,2 -5652,64509618,0.4162031837371361,5652,2 -5653,31398113,-1.1548186106444158,5653,2 -5654,78344644,0.7461186712414984,5654,2 -5655,20920411,-1.381839780736783,5655,2 -5656,48062046,0.9484747793768942,5656,2 -5657,44593210,-0.5259889456157654,5657,2 -5658,36954745,-0.3485627538121495,5658,2 -5659,43401916,-1.9515943707590053,5659,2 -5660,21615657,-0.08082427702947564,5660,2 -5661,69507016,-0.8543775233629267,5661,2 -5662,65044911,0.3503616374684424,5662,2 -5663,24285050,-0.486953575380105,5663,2 -5664,83426634,0.8818402273356469,5664,2 -5665,75571603,0.319570916439107,5665,2 -5666,39388538,0.8586972252229086,5666,2 -5667,54119799,-1.2956115764635814,5667,2 -5668,30649949,-0.8012068609678192,5668,2 -5669,68478795,0.6232605606331055,5669,2 -5670,24005059,-1.492069130486346,5670,2 -5671,48718508,-0.7307400629762563,5671,2 -5672,52740187,1.2765934942499872,5672,2 -5673,41497750,0.05081278492763667,5673,2 -5674,15683826,-0.13464241999352433,5674,2 -5675,24811383,0.9519977003097334,5675,2 -5676,38087532,1.750511188067938,5676,2 -5677,69830255,0.6073473373812006,5677,2 -5678,75552011,0.008400537896965866,5678,2 -5679,72456183,0.45753037729729934,5679,2 -5680,52159211,0.6967091496891681,5680,2 -5681,24382341,1.00122630446653,5681,2 -5682,70197288,-0.42881909960067083,5682,2 -5683,88083852,-1.1409656704128182,5683,2 -5684,86247124,-0.9095860521334147,5684,2 -5685,13094513,0.05655531961913756,5685,2 -5686,12752983,-0.25476009183156517,5686,2 -5687,44862504,-1.459535503728107,5687,2 -5688,29319010,-1.0498683743129262,5688,2 -5689,57392012,-1.1933632065426112,5689,2 -5690,83467251,-0.311575882818609,5690,2 -5691,73759807,-0.5518980796359673,5691,2 -5692,29422794,0.6201663053302745,5692,2 -5693,14351823,1.4524694663170237,5693,2 -5694,46561458,-1.2104021375985472,5694,2 -5695,52260419,-0.8731085803347116,5695,2 -5696,28868831,1.51577027205317,5696,2 -5697,24210416,-0.7037505340736652,5697,2 -5698,79488626,0.27943354619222827,5698,2 -5699,10786135,-0.8905437596320022,5699,2 -5700,83099774,0.31446239648660396,5700,2 -5701,22313953,-0.12036114408484043,5701,2 -5702,32273341,-0.5686665725530777,5702,2 -5703,73723957,-0.0010755017403653363,5703,2 -5704,19291883,-0.9245857708720371,5704,2 -5705,11320908,-0.47843996637797004,5705,2 -5706,68545683,-0.9248151618092376,5706,2 -5707,60618816,-0.730750315858584,5707,2 -5708,52627908,-0.34921406745152395,5708,2 -5709,52705657,0.6227476812597056,5709,2 -5710,24659011,0.75131286123182,5710,2 -5711,10807709,1.9120186289708943,5711,2 -5712,48874784,-0.12731463633753035,5712,2 -5713,44417129,-0.3432512547960283,5713,2 -5714,74376117,1.0770769430509792,5714,2 -5715,49279015,1.5246253502799947,5715,2 -5716,41724488,-0.0758856012280084,5716,2 -5717,87680480,-0.9801410135997807,5717,2 -5718,55230461,-0.10803637137663769,5718,2 -5719,12936032,-0.3650033691206411,5719,2 -5720,57320484,0.9545154973698133,5720,2 -5721,61584960,0.10070064576916735,5721,2 -5722,36186581,-0.16822978192791022,5722,2 -5723,21811984,-1.348683398696586,5723,2 -5724,79564623,-0.3278123152552842,5724,2 -5725,65716919,-1.0561787362756367,5725,2 -5726,74409504,-1.826070068319455,5726,2 -5727,24261960,-1.491900228319061,5727,2 -5728,29009747,-0.8582107960108455,5728,2 -5729,36223087,0.6316668786162966,5729,2 -5730,12685824,0.9386333730134804,5730,2 -5731,89735801,1.2517613709849387,5731,2 -5732,49634179,-0.3926785879204602,5732,2 -5733,40930153,0.3313353716171582,5733,2 -5734,25640061,-1.4374655887807082,5734,2 -5735,59647272,1.8365754669322774,5735,2 -5736,34833646,0.4914726876945932,5736,2 -5737,39552225,-0.3431778050975629,5737,2 -5738,27277625,-0.017757149848003934,5738,2 -5739,39626143,-0.9771441685467357,5739,2 -5740,36963522,0.18658785375231288,5740,2 -5741,40841101,-1.2603324975853059,5741,2 -5742,16567753,-0.010818171881184058,5742,2 -5743,87048773,-0.9639570831284525,5743,2 -5744,31681624,-0.15385274517613395,5744,2 -5745,18738652,0.4489542043790739,5745,2 -5746,73224495,0.05235261344602143,5746,2 -5747,58671689,-1.6923714867241397,5747,2 -5748,72320738,-0.6175207567932177,5748,2 -5749,86593681,0.5760156738496846,5749,2 -5750,42188062,0.4760695297390686,5750,2 -5751,76852560,-0.634908708034221,5751,2 -5752,34098157,-0.849741951077085,5752,2 -5753,16712216,-0.8225910073157762,5753,2 -5754,57296718,0.049482911339962125,5754,2 -5755,42290571,-1.3469262602819696,5755,2 -5756,45752290,1.0074802354513248,5756,2 -5757,42609497,0.6197973069086526,5757,2 -5758,13105819,-1.541171667569016,5758,2 -5759,52128365,1.3498704534145387,5759,2 -5760,24199270,0.13166807822646054,5760,2 -5761,21068588,0.8813691593362311,5761,2 -5762,87337892,0.2872037335918211,5762,2 -5763,86970863,-0.1491015797631367,5763,2 -5764,50645927,-1.3354288997002863,5764,2 -5765,69698454,-0.6250223026317812,5765,2 -5766,28149152,-0.3722760330661759,5766,2 -5767,26825258,-0.34125102373113764,5767,2 -5768,28392751,0.21355570553719191,5768,2 -5769,29965401,-0.39882207213813803,5769,2 -5770,66012018,-0.6945031849902004,5770,2 -5771,47652090,-0.09904593039905643,5771,2 -5772,88113602,0.2863583568613032,5772,2 -5773,75326689,-0.25202009830250993,5773,2 -5774,45708081,0.5522934575471187,5774,2 -5775,85620897,0.6329373191583118,5775,2 -5776,49056009,0.9718801714694865,5776,2 -5777,16837716,-0.6927282156755704,5777,2 -5778,33559510,-0.21627262541222683,5778,2 -5779,79434414,-0.2823376025913291,5779,2 -5780,62447065,-0.02655245535397831,5780,2 -5781,85867237,0.05082473934109899,5781,2 -5782,62623464,0.7760056797239968,5782,2 -5783,55499586,-0.3119627757060207,5783,2 -5784,16022853,-1.419489096896205,5784,2 -5785,45146036,0.23287991547179787,5785,2 -5786,73162973,-0.4629427137409982,5786,2 -5787,50353631,-1.3295184242971865,5787,2 -5788,54248935,-0.013012611945433003,5788,2 -5789,11337363,0.26021834178248265,5789,2 -5790,61340220,-0.4677098508763312,5790,2 -5791,60682832,0.6056509133369268,5791,2 -5792,82637740,-0.5279296427236903,5792,2 -5793,85210133,-1.4443141769265009,5793,2 -5794,54073658,-0.4999520617883168,5794,2 -5795,34234886,1.3486492005404296,5795,2 -5796,20397416,-0.6901577523046077,5796,2 -5797,84107538,1.665863989834158,5797,2 -5798,14107586,1.6200578092772109,5798,2 -5799,55566017,-1.5995048142703197,5799,2 -5800,33879561,-0.7848592006649063,5800,2 -5801,31726669,0.909543229956266,5801,2 -5802,56962447,-1.0907009221763597,5802,2 -5803,16464078,-1.1706738617671564,5803,2 -5804,17345540,1.177397136135338,5804,2 -5805,65494419,-0.3991968004207714,5805,2 -5806,24485302,-0.27120558235808917,5806,2 -5807,79822521,-0.5720535457780136,5807,2 -5808,42375009,0.14892896245442383,5808,2 -5809,75744566,-0.40753356286897063,5809,2 -5810,24426263,-0.05067036971584826,5810,2 -5811,57392754,0.2831642849120937,5811,2 -5812,22473650,-0.7612196499389974,5812,2 -5813,67688579,-1.511294847590701,5813,2 -5814,27867558,0.08946782581269982,5814,2 -5815,70111488,0.5896879030228284,5815,2 -5816,60800402,0.6974888611042509,5816,2 -5817,46891972,1.2890402210653058,5817,2 -5818,15622293,-1.496926526634024,5818,2 -5819,27102054,1.7448344618810572,5819,2 -5820,85885085,2.4887473664203044,5820,2 -5821,82375717,-1.192436870783102,5821,2 -5822,56712562,-0.5495446244970088,5822,2 -5823,27442864,0.32180816348727814,5823,2 -5824,52806643,0.8581943623264547,5824,2 -5825,85121276,0.2270738889202598,5825,2 -5826,23246297,1.683637369253858,5826,2 -5827,72072502,0.23715935291732135,5827,2 -5828,56046458,-1.2354812044824242,5828,2 -5829,49561316,-0.3173483001641788,5829,2 -5830,46571002,1.930505827326295,5830,2 -5831,56772838,-0.7726969869908007,5831,2 -5832,33954568,-1.817762769332833,5832,2 -5833,59547589,1.3797987810564356,5833,2 -5834,39696829,1.5771938357743323,5834,2 -5835,89378101,1.0119444946389395,5835,2 -5836,44093974,0.39018895358164696,5836,2 -5837,20137491,0.6867440216253873,5837,2 -5838,44287491,0.583663449871055,5838,2 -5839,18599613,-0.9814318163996415,5839,2 -5840,31256190,-0.876258905913839,5840,2 -5841,26429231,0.0995183627398806,5841,2 -5842,19891939,-0.8364120572937033,5842,2 -5843,56635810,-0.9015405853481608,5843,2 -5844,43498654,0.16833978037882505,5844,2 -5845,31379041,-1.6639600027959183,5845,2 -5846,49642742,1.3110651807949114,5846,2 -5847,82789747,-0.9545494307198513,5847,2 -5848,39489279,1.2353684697395053,5848,2 -5849,33933275,-0.060756809244999,5849,2 -5850,60572313,1.23917166715128,5850,2 -5851,64559994,-0.04844882873429093,5851,2 -5852,80514134,-0.586551739705463,5852,2 -5853,76852290,-0.10829145502282123,5853,2 -5854,56574990,-0.2698248199530853,5854,2 -5855,53256694,-1.3212000791290277,5855,2 -5856,89597681,0.9593107841550467,5856,2 -5857,21594906,-0.46463580410032473,5857,2 -5858,59053366,1.0544134044767781,5858,2 -5859,12033642,-0.7294652706943394,5859,2 -5860,11301776,-0.1584087660397083,5860,2 -5861,21331558,-0.42126533594973936,5861,2 -5862,78825138,0.6276626406336528,5862,2 -5863,10982925,-1.170205019375856,5863,2 -5864,24816407,0.8905972223842873,5864,2 -5865,68601510,-0.20371713512814005,5865,2 -5866,51622696,0.4894219173721014,5866,2 -5867,37599648,-1.0009495260419858,5867,2 -5868,81114097,-0.724665981543933,5868,2 -5869,76352507,0.5947060300980511,5869,2 -5870,26971954,-0.7758248037704165,5870,2 -5871,58300189,0.8768914201453004,5871,2 -5872,75088699,-0.5214303137822711,5872,2 -5873,56483647,0.34452865933682375,5873,2 -5874,51942808,-0.7026507498553857,5874,2 -5875,58496938,-0.7969073652033218,5875,2 -5876,74192608,-0.5607230609802258,5876,2 -5877,19280621,0.7347878094920917,5877,2 -5878,34855292,0.7916729380911284,5878,2 -5879,76042445,-0.3778047542251806,5879,2 -5880,19519792,1.3998715091565506,5880,2 -5881,42412635,0.6727879967061505,5881,2 -5882,69153853,0.7943360014846128,5882,2 -5883,46895543,-0.651747298835234,5883,2 -5884,13001999,-0.4638243876564191,5884,2 -5885,50245018,0.5905591102496215,5885,2 -5886,85590401,0.747214466992371,5886,2 -5887,16733711,0.7731508672866796,5887,2 -5888,33869989,0.6811585445126429,5888,2 -5889,72438200,-0.7159619488834962,5889,2 -5890,31509225,0.4515502550454294,5890,2 -5891,44794628,0.4461047617582249,5891,2 -5892,81507797,-2.203683331273164,5892,2 -5893,82549764,-1.201192500339871,5893,2 -5894,76483285,0.31636320879390234,5894,2 -5895,16837046,0.06594231339332392,5895,2 -5896,86477831,-0.4827152078944423,5896,2 -5897,80916685,-0.07697027280121037,5897,2 -5898,79806095,1.7350057989190077,5898,2 -5899,19340582,-0.6681551638269531,5899,2 -5900,10164859,-1.0237002125875707,5900,2 -5901,89092797,1.5744531070523005,5901,2 -5902,63050067,-0.2907478069173532,5902,2 -5903,25559571,1.7096448693404898,5903,2 -5904,26796453,2.052012166272316,5904,2 -5905,73498437,0.05634776198577645,5905,2 -5906,47936255,1.2491340530092112,5906,2 -5907,75377275,-0.9929612310693848,5907,2 -5908,57620508,0.2758914057374378,5908,2 -5909,16159913,1.1700202516371283,5909,2 -5910,39631947,-0.651210193379631,5910,2 -5911,74601997,-0.42548243392780055,5911,2 -5912,52043199,-0.2329643602130849,5912,2 -5913,18074655,0.406960796896179,5913,2 -5914,43392771,-0.6254859098420126,5914,2 -5915,19665724,1.0850055274683723,5915,2 -5916,68501382,-1.2941665873229529,5916,2 -5917,25097480,0.27091307046726054,5917,2 -5918,61592931,-0.09667912638979423,5918,2 -5919,54096094,1.4666407177940317,5919,2 -5920,68272828,0.5450902581032756,5920,2 -5921,75652112,0.9745676264473562,5921,2 -5922,79487329,-1.1171990054935723,5922,2 -5923,45291369,0.07604341392498735,5923,2 -5924,86585930,-2.076898271244833,5924,2 -5925,71702801,2.0835310324496024,5925,2 -5926,11563761,-0.7874760366925628,5926,2 -5927,60033984,-0.12523677506890465,5927,2 -5928,85466549,0.6229917960981125,5928,2 -5929,25010499,-0.8647848751221461,5929,2 -5930,83249771,-0.3971695645014041,5930,2 -5931,77218012,0.20649984541116984,5931,2 -5932,12504019,0.38248969236316865,5932,2 -5933,15933405,0.785404275569969,5933,2 -5934,47506632,1.0538905123011062,5934,2 -5935,74272668,-1.6018543248291446,5935,2 -5936,45438322,-0.22677206834212355,5936,2 -5937,67965535,0.9166692269449174,5937,2 -5938,57675624,-1.477670440813437,5938,2 -5939,59537554,-0.22983538707931261,5939,2 -5940,36351848,0.19800420119373272,5940,2 -5941,75488845,0.7064785420348465,5941,2 -5942,77860806,-0.5938622089532356,5942,2 -5943,75391993,0.7576892756467787,5943,2 -5944,87289693,0.25177153016787995,5944,2 -5945,30006392,-1.4429426786005453,5945,2 -5946,64132343,-1.1262206192953663,5946,2 -5947,77341622,-1.5478619155738558,5947,2 -5948,34604117,1.7768642422356464,5948,2 -5949,35850696,0.22967226011439526,5949,2 -5950,71166573,-0.7916157065603228,5950,2 -5951,45156036,0.011489975111517744,5951,2 -5952,78975048,-0.4811446978519025,5952,2 -5953,75065093,-1.2616875512358818,5953,2 -5954,75378704,0.22538325560853464,5954,2 -5955,65184843,-0.29172358932891124,5955,2 -5956,54534389,-1.0358417158901758,5956,2 -5957,21567132,0.11945146030438045,5957,2 -5958,80777227,-0.0908967484160929,5958,2 -5959,45344566,1.9888075744374032,5959,2 -5960,88709740,-0.8200050936556103,5960,2 -5961,48096531,0.21950232835493058,5961,2 -5962,32457185,-1.2629597205616419,5962,2 -5963,79701116,-0.7439766449326025,5963,2 -5964,17622546,-1.0187708292759916,5964,2 -5965,15683665,-1.4130636077008503,5965,2 -5966,10159660,-0.31949496692559365,5966,2 -5967,33870236,-0.4808122224437065,5967,2 -5968,55202425,-0.21651390037583226,5968,2 -5969,19632010,-1.0913683422066092,5969,2 -5970,40254411,0.3661934731723123,5970,2 -5971,42836525,1.7378854074340766,5971,2 -5972,37970710,2.1115556305463272,5972,2 -5973,13831034,0.6300754146646119,5973,2 -5974,77846021,-0.8727030183882777,5974,2 -5975,24632089,0.8268014688372818,5975,2 -5976,38599856,-0.8699646486808768,5976,2 -5977,87581501,0.9501354137754939,5977,2 -5978,24469739,0.6676218459521838,5978,2 -5979,44311459,-0.21785676655452527,5979,2 -5980,66891004,-0.5627119853377727,5980,2 -5981,83088604,1.7691858287463644,5981,2 -5982,52799809,-0.8365922110940107,5982,2 -5983,48621000,-0.9658005011000512,5983,2 -5984,29087121,1.5697447829097773,5984,2 -5985,64522710,0.172881399378816,5985,2 -5986,60938349,0.3077930698156495,5986,2 -5987,41314798,0.1643318534558924,5987,2 -5988,20540495,0.22362050405287734,5988,2 -5989,34585969,-0.12312138225944604,5989,2 -5990,59237222,-1.6307791158918334,5990,2 -5991,75371238,2.122730530909493,5991,2 -5992,12815283,-0.035272431260180884,5992,2 -5993,70307971,-0.7049482890758848,5993,2 -5994,23024837,1.230371013934195,5994,2 -5995,37252899,-0.6888124467034665,5995,2 -5996,65766936,-0.06398755218066975,5996,2 -5997,60171981,-1.4080334421518723,5997,2 -5998,13151162,-0.7348157037166335,5998,2 -5999,37414125,0.04516721014955045,5999,2 -6000,80995958,0.9813033061849645,6000,3 -6001,69363974,1.3081947645533532,6001,3 -6002,83613305,0.0758157565283265,6002,3 -6003,19149266,0.32809103386201366,6003,3 -6004,89326292,-0.1587747716600976,6004,3 -6005,30396561,0.24416480730368606,6005,3 -6006,37059892,0.16267667663597704,6006,3 -6007,42165614,-0.8289338347265133,6007,3 -6008,52148896,-0.13093214632599529,6008,3 -6009,63373847,-0.6598413982586885,6009,3 -6010,89398831,0.8246190975645026,6010,3 -6011,72244605,1.499753558776952,6011,3 -6012,84701978,0.6422237297258778,6012,3 -6013,80138564,-1.6549100783973014,6013,3 -6014,77882226,0.1041408265248924,6014,3 -6015,76711948,0.23150294130447852,6015,3 -6016,51094781,1.2768735587825941,6016,3 -6017,13717823,-0.7980742670472338,6017,3 -6018,60099601,-0.9244563090604734,6018,3 -6019,40820218,1.6134712902910482,6019,3 -6020,37421314,0.48183723587028404,6020,3 -6021,53300353,-0.08403603323498654,6021,3 -6022,38414530,-0.65806493459705,6022,3 -6023,85343137,0.05066839070509663,6023,3 -6024,47907091,-0.3719913725645832,6024,3 -6025,76097184,-1.3182847924777135,6025,3 -6026,27636317,0.7500710964266404,6026,3 -6027,49476319,-0.3574584774601606,6027,3 -6028,27672457,0.1582687320841828,6028,3 -6029,88913761,-0.256294774434751,6029,3 -6030,59408914,0.03872521898056839,6030,3 -6031,64806131,-0.9934446647328105,6031,3 -6032,31652601,-1.2604924936311364,6032,3 -6033,10120184,-0.042513112255110605,6033,3 -6034,52638121,0.15488438126212853,6034,3 -6035,75669298,0.7090213593308362,6035,3 -6036,33495578,-0.14622845017252586,6036,3 -6037,81287038,2.3269149477874276,6037,3 -6038,48581021,-1.1285017622140139,6038,3 -6039,63674261,-0.9648430805039695,6039,3 -6040,10809763,2.3458799706865134,6040,3 -6041,38171032,0.2747120202214119,6041,3 -6042,31443520,0.972611660690895,6042,3 -6043,14417776,-0.5739940151287721,6043,3 -6044,83364365,1.568798044461599,6044,3 -6045,65197369,0.45150630836917843,6045,3 -6046,71184569,0.34506236499574733,6046,3 -6047,84553527,0.48709805840392256,6047,3 -6048,61348495,-1.8242640762873417,6048,3 -6049,11137003,0.9681472731614432,6049,3 -6050,77528541,-1.1165390210202755,6050,3 -6051,62212241,0.49410279207007773,6051,3 -6052,54933810,-1.7275055991651338,6052,3 -6053,42845568,0.8380647971893957,6053,3 -6054,64716107,-0.2881422426342784,6054,3 -6055,36578206,-0.6935231896916602,6055,3 -6056,68873637,0.18040682386560924,6056,3 -6057,61216130,-1.6709659110358697,6057,3 -6058,66195755,-0.5566251253901798,6058,3 -6059,61991058,-0.3950674406776451,6059,3 -6060,33106897,0.2572440172405035,6060,3 -6061,37195811,0.5064106956091953,6061,3 -6062,29977724,-0.2795059052961437,6062,3 -6063,61094696,-0.9867858383387729,6063,3 -6064,44720229,2.217492282592285,6064,3 -6065,84934561,0.8399426497432331,6065,3 -6066,74348052,0.22241509857080546,6066,3 -6067,18387780,1.8882955768412153,6067,3 -6068,66874940,-0.1058206604441482,6068,3 -6069,33509205,0.11469905392787604,6069,3 -6070,13641737,0.33418069352855406,6070,3 -6071,82037345,-0.8206905488820222,6071,3 -6072,81175967,-0.14567134848488736,6072,3 -6073,27267615,-1.1034742903377404,6073,3 -6074,82744594,0.5610186616210806,6074,3 -6075,22041299,0.5561465127785894,6075,3 -6076,41946637,-0.9506674639694286,6076,3 -6077,61247599,-0.2452554417985916,6077,3 -6078,77089370,0.08552780050694322,6078,3 -6079,44732336,-0.9505781681167405,6079,3 -6080,12840012,2.4426775013508863,6080,3 -6081,55401932,0.054033360038693384,6081,3 -6082,70764543,-0.05891175905698807,6082,3 -6083,21991275,0.3545989374073685,6083,3 -6084,17684742,1.895664674794465,6084,3 -6085,17972351,-1.854738745215042,6085,3 -6086,44448239,-0.8533669444856733,6086,3 -6087,40737481,0.3806600208528167,6087,3 -6088,88633764,-0.1991357339775208,6088,3 -6089,89357112,-1.2663611028937276,6089,3 -6090,67211323,0.7831831143779193,6090,3 -6091,74826858,0.06069668433792564,6091,3 -6092,12989296,0.10306136931855357,6092,3 -6093,18957942,-1.1334207834460424,6093,3 -6094,81075950,0.6107626175873525,6094,3 -6095,78331533,-0.15944902981166628,6095,3 -6096,67285005,-0.05093402754955183,6096,3 -6097,21722427,-1.746060095362924,6097,3 -6098,26575913,-0.30291546373683226,6098,3 -6099,19151841,-0.5190552912136421,6099,3 -6100,64224750,0.8192204945217133,6100,3 -6101,55815904,-0.8093043378976031,6101,3 -6102,62705892,0.4386121626818006,6102,3 -6103,80220819,-0.9341006679308785,6103,3 -6104,30990340,0.9916149086618118,6104,3 -6105,10399574,0.8178720662716445,6105,3 -6106,62275437,0.46299586005099236,6106,3 -6107,41795919,-0.8540366995062539,6107,3 -6108,72498273,-0.17961003017821012,6108,3 -6109,11428921,0.4354563650863478,6109,3 -6110,43225121,2.184080881671354,6110,3 -6111,78759094,-1.245419263964099,6111,3 -6112,74731548,-0.397511952444684,6112,3 -6113,11955527,0.03912440403300794,6113,3 -6114,14351709,-1.8766761771432823,6114,3 -6115,81602639,0.6369219138447113,6115,3 -6116,12082302,0.07126719701633913,6116,3 -6117,72317665,-2.476872808045525,6117,3 -6118,86604367,2.446110981268445,6118,3 -6119,66107026,-0.57434696842756,6119,3 -6120,75004239,-0.21732609252303095,6120,3 -6121,30821685,1.3135224833792811,6121,3 -6122,78302805,-0.762640419311453,6122,3 -6123,87695703,0.40266964766830526,6123,3 -6124,76679844,-0.7116625122320446,6124,3 -6125,40925042,-0.6713715725632807,6125,3 -6126,79905380,-0.15777273701348626,6126,3 -6127,86951710,-0.8914187942486071,6127,3 -6128,58318261,-0.043562644279927405,6128,3 -6129,42976681,-0.5301463691231878,6129,3 -6130,11279968,1.676101898798032,6130,3 -6131,26153784,-0.5791354254382701,6131,3 -6132,60979961,0.3459306945443323,6132,3 -6133,85143554,0.541193557920401,6133,3 -6134,89412825,-1.006303436627434,6134,3 -6135,23755031,0.0052275796223485195,6135,3 -6136,79219912,-0.29272347437140267,6136,3 -6137,19845234,-0.29158549927050675,6137,3 -6138,43511593,1.7588762594826004,6138,3 -6139,44409454,0.4349775332603283,6139,3 -6140,74195006,-0.18680510161407898,6140,3 -6141,19711391,-0.36577274262543996,6141,3 -6142,25119576,-1.4357337989648868,6142,3 -6143,45581179,-0.42975571612666336,6143,3 -6144,69122384,0.9686754971296306,6144,3 -6145,27064631,1.0031557801760655,6145,3 -6146,85785966,-1.878236742322215,6146,3 -6147,69324622,-0.20637844769018066,6147,3 -6148,70743444,-0.4694210625432255,6148,3 -6149,55152730,0.25683492042397166,6149,3 -6150,48953306,-1.0890352464859432,6150,3 -6151,64142867,-0.35304556301046713,6151,3 -6152,20041529,1.7516685838697459,6152,3 -6153,49023894,-0.5305179186186215,6153,3 -6154,74397685,-0.7347584618434135,6154,3 -6155,78753565,-0.6376394067883143,6155,3 -6156,32338576,-0.8037833147649539,6156,3 -6157,68230611,-0.08846411407358268,6157,3 -6158,20585988,0.7675452630689131,6158,3 -6159,84956700,-2.433470345542199,6159,3 -6160,89367831,-0.3186683302580448,6160,3 -6161,89322016,0.03940666964442401,6161,3 -6162,28544726,0.04494874600174643,6162,3 -6163,25886958,1.464797064125876,6163,3 -6164,88437921,0.8269278427713845,6164,3 -6165,52391578,0.3107355626863926,6165,3 -6166,74879056,-0.6796571787248861,6166,3 -6167,51770629,-0.6647884739629467,6167,3 -6168,31459085,1.0470384829971284,6168,3 -6169,34437425,-1.2491009238839013,6169,3 -6170,53175743,0.5232001343056754,6170,3 -6171,46071745,0.032699677948805926,6171,3 -6172,63613156,0.357082444990939,6172,3 -6173,46087787,0.2079690118303106,6173,3 -6174,24428069,-1.4808421005303427,6174,3 -6175,76122556,0.565307221857171,6175,3 -6176,44574356,-0.8109578751887109,6176,3 -6177,54260217,0.14662612013364434,6177,3 -6178,78365989,1.2148978052806496,6178,3 -6179,46222227,-0.3893032017379039,6179,3 -6180,81238014,0.24735512016425715,6180,3 -6181,53163533,0.7081751356860114,6181,3 -6182,78817811,-0.1664441296626925,6182,3 -6183,42676450,-0.2717618199975548,6183,3 -6184,11853416,-2.6598039079599682,6184,3 -6185,36514773,-0.11327238439855516,6185,3 -6186,27160783,-1.3991132776655786,6186,3 -6187,62660764,0.25793687584920855,6187,3 -6188,87735307,1.740726333314115,6188,3 -6189,26748369,1.6926824629879138,6189,3 -6190,35696436,2.018108767848748,6190,3 -6191,28383527,0.5508728064251689,6191,3 -6192,67737022,0.33332943667981807,6192,3 -6193,58806807,2.0354083086105565,6193,3 -6194,25677333,-0.5248658862453561,6194,3 -6195,63475503,-0.856880000998168,6195,3 -6196,41835163,0.5233329255301126,6196,3 -6197,30527758,1.2410911558809585,6197,3 -6198,37384806,-0.6992777771272168,6198,3 -6199,38217213,-0.6598613316929156,6199,3 -6200,14054835,0.9893939394297617,6200,3 -6201,65125672,-0.07373452961613028,6201,3 -6202,36485647,-0.2711656455610155,6202,3 -6203,84627154,-0.5882058854260892,6203,3 -6204,66102786,1.0500291392635746,6204,3 -6205,40081159,-0.1852490102118147,6205,3 -6206,81775501,-1.257964907203762,6206,3 -6207,50783525,-0.5318429517941823,6207,3 -6208,74500987,-0.3965491644950719,6208,3 -6209,68528875,0.3208272543952627,6209,3 -6210,30771677,-0.5354542636585334,6210,3 -6211,61615381,0.7780343030018945,6211,3 -6212,80922466,0.01836419135752865,6212,3 -6213,74555040,2.708051374510505,6213,3 -6214,11912822,0.6644162106364887,6214,3 -6215,12763685,0.37556713061206914,6215,3 -6216,26014379,-0.32317484592873924,6216,3 -6217,13700234,0.3837505570920769,6217,3 -6218,48187566,-0.16086760188958737,6218,3 -6219,47900141,0.44991960226088196,6219,3 -6220,46076267,-0.29385666162795265,6220,3 -6221,15359089,-1.095852283169224,6221,3 -6222,62498042,0.6122447638342756,6222,3 -6223,87999673,0.23821197005005174,6223,3 -6224,12682378,-2.4328490223671295,6224,3 -6225,63114611,0.5046607645809842,6225,3 -6226,37447438,-1.54595764172811,6226,3 -6227,36517864,0.7094090169655166,6227,3 -6228,25712211,1.6131256968070864,6228,3 -6229,41772817,0.4740491921570019,6229,3 -6230,54738671,0.8496010560804184,6230,3 -6231,16094057,-0.43713541072853046,6231,3 -6232,55890292,0.627291102482323,6232,3 -6233,11072150,0.3407293736446416,6233,3 -6234,15953733,-1.2700725723361652,6234,3 -6235,77104059,0.23704890771633225,6235,3 -6236,23311673,0.663449361662095,6236,3 -6237,10201926,-0.7114586532993427,6237,3 -6238,37230674,0.6555975615784053,6238,3 -6239,33433795,-0.9276823090230488,6239,3 -6240,48641273,-0.3565764898794087,6240,3 -6241,34557863,-0.23535115871704843,6241,3 -6242,67513361,0.3101512775553299,6242,3 -6243,85003134,-0.5200569326554197,6243,3 -6244,48473426,0.12945434656763263,6244,3 -6245,18143421,0.21885339446666605,6245,3 -6246,54117003,-2.4910881473369884,6246,3 -6247,41806781,0.45586631354488855,6247,3 -6248,67923250,0.18367185242947603,6248,3 -6249,20490849,0.513335403410341,6249,3 -6250,15429467,-0.5692568506708025,6250,3 -6251,14013670,1.4327044295905231,6251,3 -6252,85124850,0.07673792731018507,6252,3 -6253,33176653,1.8864391104617684,6253,3 -6254,58957779,0.11081821758816487,6254,3 -6255,80246894,-0.23312820850331725,6255,3 -6256,52784089,0.883458895732864,6256,3 -6257,30412087,-0.24747916016265695,6257,3 -6258,62012714,1.6532278196967274,6258,3 -6259,11434785,-0.7906263117070285,6259,3 -6260,44476570,0.5630833429970967,6260,3 -6261,57341734,-0.6268593509912594,6261,3 -6262,13783491,0.9185092215497921,6262,3 -6263,21578697,2.097262735513281,6263,3 -6264,83312482,-0.37999447750496146,6264,3 -6265,27191748,-0.14861563785733747,6265,3 -6266,13839878,0.829077205772618,6266,3 -6267,85662953,0.5546877712793816,6267,3 -6268,61032665,1.2111113343663344,6268,3 -6269,22309030,-1.4553218250043765,6269,3 -6270,20176441,0.594639486908472,6270,3 -6271,64720405,2.4747782291185225,6271,3 -6272,12433323,-0.9252271260405152,6272,3 -6273,48588608,-0.7355200671932329,6273,3 -6274,35183355,1.6277317906839954,6274,3 -6275,38538212,0.7308130173300768,6275,3 -6276,22335607,-0.6666666051863878,6276,3 -6277,78058904,1.838435569939941,6277,3 -6278,66925344,-1.2785675308459388,6278,3 -6279,66277430,0.8892264318555484,6279,3 -6280,63843762,1.5000042695223743,6280,3 -6281,70184882,-1.5126884900476063,6281,3 -6282,41295329,2.002287025396726,6282,3 -6283,40378552,-0.024699101454786956,6283,3 -6284,49545814,1.0843664828545045,6284,3 -6285,15529853,1.4730679193794103,6285,3 -6286,14268073,-0.09956568276860323,6286,3 -6287,46399378,-0.05550778759830259,6287,3 -6288,82585570,-1.1530006586933481,6288,3 -6289,28241962,0.6997415779160046,6289,3 -6290,42614914,-0.7905534071451342,6290,3 -6291,40148425,0.34040660397518846,6291,3 -6292,21641347,-0.19655527346436788,6292,3 -6293,50983971,-0.08887554410859028,6293,3 -6294,72569869,0.4501433020710075,6294,3 -6295,73802574,-0.9507676672165271,6295,3 -6296,51658032,-0.7832502368309249,6296,3 -6297,89333968,0.5765944936282488,6297,3 -6298,23360027,-0.39461314319082497,6298,3 -6299,24608184,-0.513705571079144,6299,3 -6300,83436137,-0.18514704758311398,6300,3 -6301,55024886,0.1687892769856774,6301,3 -6302,52934125,-0.6639434788308516,6302,3 -6303,26976524,-0.3118477856118695,6303,3 -6304,39942484,1.3175378816022274,6304,3 -6305,12045489,-0.4604897829010253,6305,3 -6306,41516164,-1.3188003611149979,6306,3 -6307,16515415,-1.048912701625412,6307,3 -6308,45893611,-0.0861574998657646,6308,3 -6309,62720539,1.0763531675862055,6309,3 -6310,47741356,-1.0108312417379761,6310,3 -6311,25995601,0.13737097045712743,6311,3 -6312,72513410,0.3558393157834766,6312,3 -6313,78823155,0.13516279192669298,6313,3 -6314,54206459,0.8025036323699359,6314,3 -6315,75655495,0.557642941017906,6315,3 -6316,84082442,-2.0805960760562345,6316,3 -6317,39689675,-0.30441201374220955,6317,3 -6318,65970152,0.3056557468418689,6318,3 -6319,46506280,0.028928078834070427,6319,3 -6320,25498596,1.0872948664860218,6320,3 -6321,54461147,-0.048533109903599964,6321,3 -6322,70106987,0.4098962899202692,6322,3 -6323,68169581,-0.13318914000901969,6323,3 -6324,12176971,0.39069250136603656,6324,3 -6325,52032530,-0.03866917877103397,6325,3 -6326,89917256,0.786391285856951,6326,3 -6327,60856973,-0.941824893400517,6327,3 -6328,32623299,0.8027836251591114,6328,3 -6329,88032287,-0.5693279796929428,6329,3 -6330,80906811,1.1895208633479546,6330,3 -6331,59813598,-0.1858529835469434,6331,3 -6332,55671070,-0.308968751700901,6332,3 -6333,81302196,-1.6548570460693355,6333,3 -6334,43402056,-1.3699194784018918,6334,3 -6335,67256100,-0.04739598492152465,6335,3 -6336,61918562,0.0928324683151365,6336,3 -6337,82370427,0.7037881926079942,6337,3 -6338,70459203,-0.2423489833297253,6338,3 -6339,51489937,-0.5226417289461373,6339,3 -6340,21251125,-0.7297281889632014,6340,3 -6341,35907048,0.28074571926469566,6341,3 -6342,40467554,-0.9415988074839149,6342,3 -6343,22097696,-0.5194333259445787,6343,3 -6344,84852165,-0.4735678316511535,6344,3 -6345,45939859,0.16696386212098108,6345,3 -6346,12444573,-0.8975080506385461,6346,3 -6347,62391373,-0.5600941272307021,6347,3 -6348,71705545,0.4351586550581912,6348,3 -6349,24672872,-0.641604890330386,6349,3 -6350,20225063,1.3219214465685367,6350,3 -6351,16899889,0.842375644139444,6351,3 -6352,42448432,0.28684127316623487,6352,3 -6353,77955064,-0.7240010368514928,6353,3 -6354,69854521,-0.6801561261681733,6354,3 -6355,42586148,0.1546297935696857,6355,3 -6356,22269010,-0.30758344672156157,6356,3 -6357,87013963,0.23868995207258267,6357,3 -6358,76462156,0.1346688323793042,6358,3 -6359,23372851,0.43749830550308216,6359,3 -6360,43427003,-1.1068032071933653,6360,3 -6361,68656996,0.5703234097396553,6361,3 -6362,78864714,-0.7751441593179419,6362,3 -6363,24294813,0.4235930578398853,6363,3 -6364,68465125,0.8892250207855383,6364,3 -6365,23279983,-0.9099922196142111,6365,3 -6366,20638331,0.17351742313713123,6366,3 -6367,80620531,-0.012427524745328895,6367,3 -6368,62910192,0.2552267065327452,6368,3 -6369,78478867,0.7031096954440224,6369,3 -6370,11376623,-0.0588051934290089,6370,3 -6371,50177605,-0.3085488407987978,6371,3 -6372,36659740,0.2751095819693658,6372,3 -6373,76860881,0.6742281076990271,6373,3 -6374,37999199,0.010646799786855933,6374,3 -6375,78838439,-1.7512700385874076,6375,3 -6376,63379651,0.05026816515418651,6376,3 -6377,32946142,1.1687475056562682,6377,3 -6378,85576635,-1.1557462735545636,6378,3 -6379,16091155,0.055462607562052575,6379,3 -6380,17429173,-1.4005978748797347,6380,3 -6381,36151849,1.2306814411639626,6381,3 -6382,78597411,-0.09572642684642936,6382,3 -6383,11913619,-0.00157261955062254,6383,3 -6384,84267142,1.6773755465389113,6384,3 -6385,86408873,1.3402670666473653,6385,3 -6386,56610403,0.8738696228698032,6386,3 -6387,28452411,-0.8627332482238338,6387,3 -6388,40359408,-1.009205993612646,6388,3 -6389,39075269,-0.5166919777688498,6389,3 -6390,27302412,-1.415886799766431,6390,3 -6391,64997204,-0.4403617024850088,6391,3 -6392,85376680,1.231557741469559,6392,3 -6393,75406344,-0.15550606959360727,6393,3 -6394,11513420,-0.25484774791726267,6394,3 -6395,80103131,-0.004907720513922858,6395,3 -6396,32603517,2.0185852452190023,6396,3 -6397,44803033,-0.5160403320571266,6397,3 -6398,76130522,-0.09233359760843284,6398,3 -6399,25191593,-0.9248445023374103,6399,3 -6400,28040661,0.6452081618776426,6400,3 -6401,20487091,1.5218978285541322,6401,3 -6402,77314668,-0.6830931395452191,6402,3 -6403,51255458,-0.5624092919971967,6403,3 -6404,66033717,-0.14664360457586484,6404,3 -6405,52797261,-1.7005819308423078,6405,3 -6406,36881282,-2.6914381508450305,6406,3 -6407,67068481,0.5108561809918263,6407,3 -6408,47931027,0.42343979491702466,6408,3 -6409,62815239,-0.09406796105330877,6409,3 -6410,80654422,1.5990119759866952,6410,3 -6411,61809908,-1.376415990506333,6411,3 -6412,69532755,-0.35777077537712576,6412,3 -6413,47520427,-1.4364550633231077,6413,3 -6414,67221049,-0.4666622511804585,6414,3 -6415,23405781,-0.4298970554162506,6415,3 -6416,79129404,-0.34287860861247876,6416,3 -6417,61027924,2.1094299653596065,6417,3 -6418,81138002,-0.7737266228439666,6418,3 -6419,51748418,-0.25953693012491963,6419,3 -6420,11972090,-0.29155954136719264,6420,3 -6421,24337068,-0.7581880327798161,6421,3 -6422,65788807,-1.3450647996704876,6422,3 -6423,32842117,0.08729145031698801,6423,3 -6424,74055607,0.7918318106961489,6424,3 -6425,40461515,-0.3566160671026499,6425,3 -6426,69256263,-0.6516171105442367,6426,3 -6427,52503005,0.5156108123892879,6427,3 -6428,65885046,-0.2963363532624556,6428,3 -6429,51821303,0.20199223040062736,6429,3 -6430,68594246,0.3544246265411361,6430,3 -6431,65176222,0.5042320175526601,6431,3 -6432,76559968,-0.38245191857015487,6432,3 -6433,16253821,0.5743976139141909,6433,3 -6434,31461988,-0.30628577019067016,6434,3 -6435,50169612,-0.29932734035632524,6435,3 -6436,63333910,0.4029004282063347,6436,3 -6437,42791143,-1.426435753976431,6437,3 -6438,37570788,0.18415055884054687,6438,3 -6439,80821194,-0.34993667459625155,6439,3 -6440,73759716,1.2339867229809103,6440,3 -6441,48299692,-0.413490319168428,6441,3 -6442,61068329,-0.5651015645425473,6442,3 -6443,30862614,-0.43564442221983857,6443,3 -6444,46163080,-0.4511249204833251,6444,3 -6445,86604207,-2.342664240439773,6445,3 -6446,27818125,0.0791288295598066,6446,3 -6447,40597454,-0.4937485752971246,6447,3 -6448,86256808,-0.10345412796418,6448,3 -6449,89813958,-1.5821130971595596,6449,3 -6450,13889300,-0.25699526518173815,6450,3 -6451,60551063,0.17024604623985953,6451,3 -6452,45404229,1.2719808084160906,6452,3 -6453,21140975,-0.11347199989976116,6453,3 -6454,86695175,-1.5392076451820167,6454,3 -6455,15216190,-0.6273670065322384,6455,3 -6456,43727131,2.953590796271051,6456,3 -6457,16772669,-0.39893835260696664,6457,3 -6458,71266972,0.10853912393879935,6458,3 -6459,28001126,-1.670055697079224,6459,3 -6460,75551715,-1.3910232075988465,6460,3 -6461,56092566,0.6260895260383927,6461,3 -6462,71401281,0.0062097552858207125,6462,3 -6463,36226379,0.014000260756797379,6463,3 -6464,24086791,-0.17327956641112338,6464,3 -6465,44452687,1.1958724360041073,6465,3 -6466,56807625,-0.8011358020398086,6466,3 -6467,32772613,0.16021242825602808,6467,3 -6468,30911629,-0.5871283506942658,6468,3 -6469,57211862,-0.6373181577203064,6469,3 -6470,74510236,1.5885744929018784,6470,3 -6471,39872998,0.8658767129720287,6471,3 -6472,43485919,-0.5295510788621788,6472,3 -6473,75786961,0.6469136560610852,6473,3 -6474,31699762,-0.35718444501138846,6474,3 -6475,75611485,2.4906752016124365,6475,3 -6476,87025408,0.32767161127889444,6476,3 -6477,75929289,0.2624204050039922,6477,3 -6478,15041475,-0.1244006656127829,6478,3 -6479,84068693,0.4914057968060723,6479,3 -6480,46250425,0.15470756140384198,6480,3 -6481,63698287,0.8750444026781449,6481,3 -6482,23561025,0.7597955025264969,6482,3 -6483,34855760,-2.278911020401205,6483,3 -6484,19872510,0.6607647927756843,6484,3 -6485,65784761,-0.03319305431705851,6485,3 -6486,54621039,-0.47563584000476994,6486,3 -6487,21652163,-1.3449874243710493,6487,3 -6488,40622419,1.0816618006807022,6488,3 -6489,49362382,0.19684922331810473,6489,3 -6490,29632407,-0.5675564905506544,6490,3 -6491,66649453,0.5394929138441421,6491,3 -6492,25060780,0.31174579483221443,6492,3 -6493,45697637,-0.344850508996511,6493,3 -6494,78899133,1.0007847500411617,6494,3 -6495,32540696,-0.8058495565070182,6495,3 -6496,36122298,1.6404963775801074,6496,3 -6497,83024147,0.712860323429565,6497,3 -6498,19732576,1.5017298380549804,6498,3 -6499,73788758,1.5911826502567454,6499,3 -6500,57594755,-0.3333876972734495,6500,3 -6501,10991519,-1.3668993392536652,6501,3 -6502,35984101,0.7982733648089296,6502,3 -6503,15054936,1.3168450161021523,6503,3 -6504,17327089,1.27879251442041,6504,3 -6505,47622588,-0.4432929602730352,6505,3 -6506,31718235,0.22623547142912823,6506,3 -6507,61772778,0.6368036089355228,6507,3 -6508,29344923,-3.104504313340308,6508,3 -6509,26500907,-0.1843495901535202,6509,3 -6510,11609149,-2.213801884368714,6510,3 -6511,37311226,0.2938219659977409,6511,3 -6512,55532995,-0.40551577913954096,6512,3 -6513,58776010,0.5790434458033412,6513,3 -6514,65403161,1.0230043900395176,6514,3 -6515,44801566,-0.7750444610876707,6515,3 -6516,68048912,-0.461147340875034,6516,3 -6517,44780112,-0.16569967058741308,6517,3 -6518,38911756,-0.8999497122812099,6518,3 -6519,40844655,0.05104008654583432,6519,3 -6520,44562588,0.2176054116961632,6520,3 -6521,32909621,-0.26593357669126627,6521,3 -6522,14905464,-0.5230118752685705,6522,3 -6523,68232147,-0.8479686045797143,6523,3 -6524,70628764,-1.178186904712501,6524,3 -6525,20843343,-0.3414927506553076,6525,3 -6526,70321837,-1.6588108740109435,6526,3 -6527,16279219,-0.5562985506785678,6527,3 -6528,13954053,1.017440107217653,6528,3 -6529,35653722,0.6774502882744012,6529,3 -6530,85526413,-0.7582353835220361,6530,3 -6531,88936355,-0.717105971481715,6531,3 -6532,34265526,-0.05821938388833443,6532,3 -6533,68473358,-0.3258259103925657,6533,3 -6534,69023746,-0.6905456693521731,6534,3 -6535,75097498,-1.7437876534209549,6535,3 -6536,52362228,-0.4906811865865352,6536,3 -6537,75123026,0.011845545737348672,6537,3 -6538,27445440,-0.8444663910487944,6538,3 -6539,31661995,-1.1459853773032125,6539,3 -6540,72576503,-1.0433099915281197,6540,3 -6541,11044981,-0.7638612096642381,6541,3 -6542,44029356,-0.4172626197513068,6542,3 -6543,45106624,-0.7673879753293233,6543,3 -6544,55195857,-0.41642639510407226,6544,3 -6545,56102624,0.4745238140874117,6545,3 -6546,21197757,-0.19119539695179288,6546,3 -6547,51611490,0.6225413967308173,6547,3 -6548,89545412,-0.5547568053443244,6548,3 -6549,13354913,-0.38532492142425034,6549,3 -6550,46530143,0.6679524044796995,6550,3 -6551,56760122,0.2264996374824428,6551,3 -6552,68104412,0.586946361391963,6552,3 -6553,60656193,-0.0391156857306247,6553,3 -6554,38029905,-0.19785666295307733,6554,3 -6555,34711233,-1.3111597229650669,6555,3 -6556,89954835,-0.6573561404553067,6556,3 -6557,66451655,0.3366788583467193,6557,3 -6558,31231832,1.429050811201393,6558,3 -6559,47494165,-1.284125133735302,6559,3 -6560,89002360,-0.7517675099498582,6560,3 -6561,45511207,0.6093746864186929,6561,3 -6562,15322418,-1.5551858753905146,6562,3 -6563,25552236,0.32191378361624395,6563,3 -6564,34920281,0.2894037832012006,6564,3 -6565,80642280,-0.2970916234123481,6565,3 -6566,14609614,-0.6345874990062546,6566,3 -6567,66721314,-0.9509824334906539,6567,3 -6568,40662251,1.6609975223120352,6568,3 -6569,26836835,-0.10975545550076683,6569,3 -6570,49208141,0.46556329651371264,6570,3 -6571,32344424,-0.9142995870489975,6571,3 -6572,82346140,-0.5562612533797656,6572,3 -6573,43468538,0.9569957999618773,6573,3 -6574,63984051,2.403316343742395,6574,3 -6575,79790554,0.6267420900237267,6575,3 -6576,88057404,-0.04898578325957717,6576,3 -6577,50589801,0.927061405570072,6577,3 -6578,77460894,-1.5139667665206191,6578,3 -6579,87538846,0.9945853910211834,6579,3 -6580,34403108,1.7384768639538877,6580,3 -6581,51274058,1.9232560136932995,6581,3 -6582,55474164,1.6864321178789798,6582,3 -6583,81502688,0.5613708492551712,6583,3 -6584,80980136,-0.8938090565342032,6584,3 -6585,29418947,-0.6766117453299854,6585,3 -6586,13882591,-0.7661425959602589,6586,3 -6587,68418895,1.081775056624639,6587,3 -6588,29959165,0.4343740816072813,6588,3 -6589,73447732,-0.23820336029478226,6589,3 -6590,56225632,0.18925984483317532,6590,3 -6591,65744315,-0.7139700167845033,6591,3 -6592,61880687,-0.023619502248462088,6592,3 -6593,22753392,1.6616747309575959,6593,3 -6594,42495569,0.30253780789399454,6594,3 -6595,52563032,1.3808482953765069,6595,3 -6596,35741720,0.8319557756086221,6596,3 -6597,62257842,0.9735968040986879,6597,3 -6598,44138975,-0.215692916847203,6598,3 -6599,81471551,0.6932662982811659,6599,3 -6600,69243799,-0.5781134525586685,6600,3 -6601,55527382,-1.2986767014192468,6601,3 -6602,12206522,-0.49558126547418424,6602,3 -6603,39608354,0.25340148694395614,6603,3 -6604,68612077,-0.06279518682850666,6604,3 -6605,54644278,0.9108837776335116,6605,3 -6606,62132934,0.16686207915853632,6606,3 -6607,43765784,0.0027009771149285426,6607,3 -6608,35133040,0.4702371045350749,6608,3 -6609,45497335,-1.5309150757839471,6609,3 -6610,35902911,-0.2037525118800451,6610,3 -6611,18170210,-1.5234391002665382,6611,3 -6612,37460752,-0.846347074525771,6612,3 -6613,36950492,0.7950963445843892,6613,3 -6614,46924641,0.08131087424146252,6614,3 -6615,54150763,-0.8184320970794408,6615,3 -6616,19841957,0.39953578324883343,6616,3 -6617,10977893,-0.4996464014401477,6617,3 -6618,84401422,-0.787329544937837,6618,3 -6619,34334657,-1.0354384970825607,6619,3 -6620,81452333,-0.41292185306652424,6620,3 -6621,54742586,-0.04429341035963298,6621,3 -6622,11888727,1.0320537690497769,6622,3 -6623,18043430,0.3127354733695663,6623,3 -6624,43496368,-0.8995037637547928,6624,3 -6625,12755224,-0.7943195368731242,6625,3 -6626,52681259,0.8751708874589393,6626,3 -6627,42935785,-0.05575620782839995,6627,3 -6628,85449564,0.5881339328050721,6628,3 -6629,11269439,-1.519489961184061,6629,3 -6630,37066374,1.4705944859129065,6630,3 -6631,26927805,-0.8549974818791581,6631,3 -6632,81038438,-0.28786951526315474,6632,3 -6633,76339526,-0.4529625472957146,6633,3 -6634,77047297,1.6337615689343874,6634,3 -6635,32756228,-0.7944952337214908,6635,3 -6636,10637536,-0.11756318302036879,6636,3 -6637,65428855,1.6126349916036682,6637,3 -6638,19507988,0.48622999712507153,6638,3 -6639,79907636,-1.9516327495652133,6639,3 -6640,10228587,0.3049803238337743,6640,3 -6641,21695139,-0.3836383447568082,6641,3 -6642,65723656,-1.0576776910095382,6642,3 -6643,59662371,0.33983037656146153,6643,3 -6644,27306621,0.18671543425692397,6644,3 -6645,46937130,0.6495978809714034,6645,3 -6646,27868774,0.4252758721211207,6646,3 -6647,17909522,-0.8349227686842748,6647,3 -6648,26729774,0.16074267357280855,6648,3 -6649,10989567,0.4660462474082666,6649,3 -6650,80690689,1.431880304289756,6650,3 -6651,46984802,-1.399850939628662,6651,3 -6652,27350135,1.604530625749992,6652,3 -6653,50114002,1.3393449427345665,6653,3 -6654,22557467,0.6167821604926305,6654,3 -6655,36200317,-2.177338100981625,6655,3 -6656,73639277,-2.5809660301915236,6656,3 -6657,55807105,-0.12102734505409077,6657,3 -6658,87174233,-0.1168225488788523,6658,3 -6659,84203291,-0.19029080553266953,6659,3 -6660,75525278,0.8493434347198593,6660,3 -6661,16643803,-0.3304684814883938,6661,3 -6662,23334215,0.4773334057698427,6662,3 -6663,16835379,1.4278278101831676,6663,3 -6664,51093036,-1.7974382558722726,6664,3 -6665,87844299,-0.4922094017329873,6665,3 -6666,62890626,0.8867839208545484,6666,3 -6667,27041460,-0.7980352064032111,6667,3 -6668,19182116,0.4467321449262273,6668,3 -6669,13125575,0.8018527462665636,6669,3 -6670,78060525,0.2620722785139647,6670,3 -6671,10766058,0.32406531076546535,6671,3 -6672,34623851,-1.1944171161186976,6672,3 -6673,80911266,0.4612928896800686,6673,3 -6674,37367395,-0.03199120156198508,6674,3 -6675,42938521,-1.824146291584202,6675,3 -6676,68367117,-0.8396148337864109,6676,3 -6677,83211372,-0.23414119912036221,6677,3 -6678,79852906,0.7353609882937416,6678,3 -6679,80011101,-0.06827683197358003,6679,3 -6680,38159448,-0.45922661665143516,6680,3 -6681,12869047,-0.636253665107354,6681,3 -6682,22798726,-1.5228102138455475,6682,3 -6683,38407915,2.0537795977098536,6683,3 -6684,85692774,1.296416625907307,6684,3 -6685,29197877,-1.0771116114085784,6685,3 -6686,87977141,0.8958366512214464,6686,3 -6687,51057926,-1.2115515090699704,6687,3 -6688,58701673,-0.4783514827946244,6688,3 -6689,87550258,-0.8760969040116549,6689,3 -6690,89094950,0.7189140495408809,6690,3 -6691,24378673,-1.6976645450596883,6691,3 -6692,11879249,-1.257147190648877,6692,3 -6693,16232348,1.307029786195486,6693,3 -6694,47560778,-0.10550921126482152,6694,3 -6695,12429538,-0.07777444740373365,6695,3 -6696,32334316,0.3274541745910986,6696,3 -6697,16158720,-2.912554660219709,6697,3 -6698,86840274,0.1089942179233168,6698,3 -6699,67537391,1.1637705116025345,6699,3 -6700,43483791,0.8801765127575732,6700,3 -6701,31216735,-2.8543023980477926,6701,3 -6702,70787853,-0.9741095399028433,6702,3 -6703,54687142,0.1982678537410848,6703,3 -6704,29582605,0.22814265562594144,6704,3 -6705,31487488,1.8532064511716293,6705,3 -6706,32532425,0.41657983894047934,6706,3 -6707,74135155,0.21591329855004437,6707,3 -6708,39930571,-0.12131413663337894,6708,3 -6709,57434215,0.1268911210580543,6709,3 -6710,72730250,0.10267944881028679,6710,3 -6711,40656207,-0.7900228741182822,6711,3 -6712,29967599,-0.505352430624939,6712,3 -6713,24905057,0.33618405086506237,6713,3 -6714,32936667,-1.5405432499077398,6714,3 -6715,56004332,-0.6193233044271863,6715,3 -6716,62336759,-2.7030891649625404,6716,3 -6717,89144200,-0.1296157539682988,6717,3 -6718,35499935,-0.22442278264228468,6718,3 -6719,37431694,-0.44839528771231013,6719,3 -6720,61749539,0.4255026877220953,6720,3 -6721,40043340,-0.6113878808018717,6721,3 -6722,34024509,-1.4358980271392707,6722,3 -6723,60572934,-0.897321961766567,6723,3 -6724,66073059,0.49547443854617146,6724,3 -6725,52554790,-1.7706074290048992,6725,3 -6726,54812345,-0.23709967115360464,6726,3 -6727,59263862,0.19557674003528347,6727,3 -6728,43747937,0.7206318315638112,6728,3 -6729,38944753,0.018922150564767336,6729,3 -6730,89267812,-0.19677234922444264,6730,3 -6731,57563146,-0.04398687042139688,6731,3 -6732,62090280,-0.7887385899986041,6732,3 -6733,40968344,-0.05883640969266413,6733,3 -6734,87592720,-0.7078254106137979,6734,3 -6735,26722336,-0.10924347013689692,6735,3 -6736,54173929,0.1936218581769101,6736,3 -6737,46372340,0.6786872936818744,6737,3 -6738,72488285,0.4344884317693194,6738,3 -6739,70261712,-1.2338543544974852,6739,3 -6740,89899819,0.02416787405260979,6740,3 -6741,38646887,-0.898412477920176,6741,3 -6742,67211366,-0.669783937723217,6742,3 -6743,21089334,-2.968344001880943,6743,3 -6744,32195558,1.0118114291489204,6744,3 -6745,54687089,-1.3576882845141158,6745,3 -6746,83533690,-0.7096073550525444,6746,3 -6747,71936944,-0.4669501491719854,6747,3 -6748,73525501,0.7939202473681336,6748,3 -6749,45407189,-0.34379007827211017,6749,3 -6750,66774542,-1.3834142610161364,6750,3 -6751,40041211,0.8623557150087777,6751,3 -6752,14785445,-0.2956959948565487,6752,3 -6753,29797029,-0.7032680780782987,6753,3 -6754,13240429,0.5058578120118576,6754,3 -6755,41686335,-0.8634336253517686,6755,3 -6756,86613668,0.7933461503983614,6756,3 -6757,30787273,1.9426510731536502,6757,3 -6758,30737130,0.3965617697772724,6758,3 -6759,69656851,0.515063730641508,6759,3 -6760,77672904,-0.17330556412612577,6760,3 -6761,67568795,-2.414435639131525,6761,3 -6762,16423574,-1.7225006708595463,6762,3 -6763,76155262,-0.4048362670658766,6763,3 -6764,19479360,0.17357172768591775,6764,3 -6765,33807365,0.35414760489660424,6765,3 -6766,24109073,0.5599062464471651,6766,3 -6767,24414256,-0.49236292791817526,6767,3 -6768,54360355,-1.527878764264289,6768,3 -6769,67027897,0.43199164531570017,6769,3 -6770,48959118,-0.9149307657433556,6770,3 -6771,28375015,-0.9874449970590634,6771,3 -6772,69250505,-0.2833875562528087,6772,3 -6773,44264576,-0.13627787085516857,6773,3 -6774,12692191,0.10407241267346938,6774,3 -6775,44363439,1.3950550421455385,6775,3 -6776,41706321,-0.015713925616208567,6776,3 -6777,58444969,1.1876807687487487,6777,3 -6778,79824985,-1.823532534299815,6778,3 -6779,87510411,-0.2981829530096041,6779,3 -6780,67487028,-1.6072800838111445,6780,3 -6781,82701795,-0.44701820127576414,6781,3 -6782,77675134,-0.431732122208456,6782,3 -6783,14853886,-1.478588003631217,6783,3 -6784,22805383,1.7213142220644504,6784,3 -6785,89881622,1.102822175500921,6785,3 -6786,46628104,-1.363302650539142,6786,3 -6787,63094816,0.6694693816135718,6787,3 -6788,63722780,0.2617153778583369,6788,3 -6789,15919195,-0.06116474582523375,6789,3 -6790,20652748,0.950768809817096,6790,3 -6791,35726729,-0.20579536094439185,6791,3 -6792,67818799,-0.12006456286820977,6792,3 -6793,87384763,-1.025760309641064,6793,3 -6794,83095284,2.4214647402340703,6794,3 -6795,76349256,1.736959188368001,6795,3 -6796,10580569,-0.47971336255086566,6796,3 -6797,52026234,1.0909689709916512,6797,3 -6798,10068735,-0.36367066511354984,6798,3 -6799,41491942,0.37444066427718,6799,3 -6800,68461986,-1.1507715196213457,6800,3 -6801,76611658,1.7857035283797391,6801,3 -6802,72358074,0.7607685268982732,6802,3 -6803,14970300,0.08331998119966312,6803,3 -6804,79905644,-0.3498534565843363,6804,3 -6805,16872969,-0.6271038691701555,6805,3 -6806,72028153,0.7036547916645584,6806,3 -6807,46194185,-2.0112888263384328,6807,3 -6808,89448231,0.4765773324012194,6808,3 -6809,55911658,-0.07414288288661923,6809,3 -6810,50479485,-0.41753800143384107,6810,3 -6811,52676574,-0.41112576846268034,6811,3 -6812,78305033,-0.4240756317898078,6812,3 -6813,83723791,-0.24626487055186647,6813,3 -6814,30810190,-0.25576154086043507,6814,3 -6815,51829352,0.5961642696102003,6815,3 -6816,22138551,1.3308984368140309,6816,3 -6817,58663473,-0.5869993861661976,6817,3 -6818,58528452,-0.021886163481469514,6818,3 -6819,36569807,-0.00495513271873991,6819,3 -6820,44397408,0.9412773088477883,6820,3 -6821,47337524,0.08019530887697997,6821,3 -6822,53244087,-0.027885729282388125,6822,3 -6823,79760457,0.4352834660058892,6823,3 -6824,20447569,0.45233158232567455,6824,3 -6825,71951071,0.9849917232290131,6825,3 -6826,58952942,-0.917099682966436,6826,3 -6827,38737514,1.1082468427310168,6827,3 -6828,89668052,0.43482455420260835,6828,3 -6829,59450832,0.776833660698212,6829,3 -6830,66990103,-0.8494796506760047,6830,3 -6831,63878678,-1.9958161874588163,6831,3 -6832,57279916,-0.9372982721204968,6832,3 -6833,76607531,-1.4714891345885397,6833,3 -6834,72179385,1.9513282029469905,6834,3 -6835,29012923,-0.2637290071029137,6835,3 -6836,52871946,0.3656967334409178,6836,3 -6837,41192565,-0.06066005147377913,6837,3 -6838,18781692,-1.5845713400067019,6838,3 -6839,10079018,-0.0752595124860023,6839,3 -6840,47234425,-1.107288212194425,6840,3 -6841,36150547,-0.2519903077698196,6841,3 -6842,78783137,0.9063128862053188,6842,3 -6843,81161040,0.18195762378408864,6843,3 -6844,21030209,-0.32741798181609405,6844,3 -6845,87423920,0.6568662791227761,6845,3 -6846,73048242,-0.32698629009543717,6846,3 -6847,82383159,-0.43818234427126623,6847,3 -6848,87759346,-0.018370488693252987,6848,3 -6849,49881371,0.6032230253546703,6849,3 -6850,12966225,-1.3141979130269659,6850,3 -6851,80712762,-0.46842008429560633,6851,3 -6852,13832603,1.566852210961369,6852,3 -6853,25158645,-1.120549571228077,6853,3 -6854,19057609,-0.7229763233091197,6854,3 -6855,11831254,-0.6288354902612814,6855,3 -6856,88660981,-0.9121563651382225,6856,3 -6857,86505655,-0.9621186998769902,6857,3 -6858,21871598,-1.2429188530862063,6858,3 -6859,55886193,-0.9631090427070972,6859,3 -6860,57317065,0.7446182179145854,6860,3 -6861,85016554,-1.1237904520206419,6861,3 -6862,43409578,2.3248121461306956,6862,3 -6863,50930270,-0.12501550373047318,6863,3 -6864,15922129,0.3170924868237109,6864,3 -6865,89855761,0.43421673799684424,6865,3 -6866,27937887,-0.4540385127096502,6866,3 -6867,42782287,0.04153332016935464,6867,3 -6868,15125540,0.12440253304314014,6868,3 -6869,55112175,-0.5809098721324953,6869,3 -6870,57836151,0.5727031778664408,6870,3 -6871,80351742,-1.243072910495927,6871,3 -6872,16928394,0.3593945034653456,6872,3 -6873,48885222,1.0887063615094479,6873,3 -6874,72368054,-0.4847902906397683,6874,3 -6875,12610836,0.03197022857619716,6875,3 -6876,40114097,-1.1819541532568656,6876,3 -6877,68772880,0.9958450924912282,6877,3 -6878,16377178,0.39529012509013967,6878,3 -6879,41982956,0.5165354999284723,6879,3 -6880,77749080,0.8930683906598645,6880,3 -6881,69169402,-0.698851359645128,6881,3 -6882,56638328,-1.2061851972973718,6882,3 -6883,14467379,1.842300644893531,6883,3 -6884,67154166,1.9344137411862306,6884,3 -6885,11175935,0.13077299719555693,6885,3 -6886,74851149,2.0769771480734214,6886,3 -6887,45704233,0.37766992792380083,6887,3 -6888,45486866,0.8482600769390848,6888,3 -6889,38406564,-0.11507578827158009,6889,3 -6890,83670991,1.141743700693211,6890,3 -6891,42381365,1.215170406096649,6891,3 -6892,81077819,-0.0847641718374049,6892,3 -6893,33154748,-0.42243828721296406,6893,3 -6894,22999629,0.9556777870984369,6894,3 -6895,84645709,2.3889007106232567,6895,3 -6896,40291915,0.8043025275600065,6896,3 -6897,51983039,1.5311825292842771,6897,3 -6898,40143516,-1.067832146497667,6898,3 -6899,78595689,0.7837861222594876,6899,3 -6900,45084494,0.479010547275316,6900,3 -6901,42220300,0.27947575370979827,6901,3 -6902,53877201,-0.5407768725915294,6902,3 -6903,47392189,0.5470440064063169,6903,3 -6904,65093791,1.7514807608845133,6904,3 -6905,50913130,0.1835768280894031,6905,3 -6906,48648908,0.16166833128181993,6906,3 -6907,40699266,-1.9640305538902958,6907,3 -6908,12924106,-0.7150684990520465,6908,3 -6909,44586545,-2.145686438561697,6909,3 -6910,74381194,-0.18002857862755473,6910,3 -6911,19495796,-0.14637261604563062,6911,3 -6912,80826587,0.07821100903653962,6912,3 -6913,63321559,1.1215137007400244,6913,3 -6914,42378864,0.8808340837454508,6914,3 -6915,57177002,-0.9812856864797029,6915,3 -6916,58939020,0.44133921271263143,6916,3 -6917,76534083,0.5116583825804473,6917,3 -6918,22062361,0.07679794065136147,6918,3 -6919,57820829,-0.5857161320646426,6919,3 -6920,13696979,-1.2055347949581499,6920,3 -6921,71176546,-0.21971067063357064,6921,3 -6922,20580289,0.23329378160331898,6922,3 -6923,31009996,-0.2833313387850934,6923,3 -6924,70883360,-0.614442958958864,6924,3 -6925,60751186,-1.2408200852348408,6925,3 -6926,40539299,-1.0100103286376807,6926,3 -6927,67815519,0.7227385359622485,6927,3 -6928,46822742,0.5558910084560527,6928,3 -6929,19130569,1.2473500974199354,6929,3 -6930,23738880,-1.706305251406914,6930,3 -6931,43005794,0.10863219130261956,6931,3 -6932,30682781,-0.2053273509491707,6932,3 -6933,49568290,0.5317843717695562,6933,3 -6934,40188805,0.2463742267203258,6934,3 -6935,71504523,-0.40631794450536446,6935,3 -6936,88478677,1.8310672788909665,6936,3 -6937,74819015,0.4570286957928855,6937,3 -6938,74082211,0.3160553713885928,6938,3 -6939,64171631,0.6915005342983793,6939,3 -6940,14162718,-0.30004321095195824,6940,3 -6941,24319062,1.7271638279282258,6941,3 -6942,62473711,0.28153752409819544,6942,3 -6943,38168854,-1.5541714785094434,6943,3 -6944,73877204,-0.13240562820582172,6944,3 -6945,67110134,-0.5871276963783816,6945,3 -6946,25408793,0.6748012689231316,6946,3 -6947,12721869,1.0306137004881732,6947,3 -6948,78571482,-0.5071828343948326,6948,3 -6949,70200036,0.5479028396686558,6949,3 -6950,66607731,1.4393213710874593,6950,3 -6951,71238386,0.007519600633561608,6951,3 -6952,57449537,-0.23197246405045852,6952,3 -6953,73268222,0.2296366302840318,6953,3 -6954,22945732,-2.5094972842537575,6954,3 -6955,25329169,-0.4682805093127025,6955,3 -6956,72064154,-1.3148181983544165,6956,3 -6957,30466698,0.18784570761553956,6957,3 -6958,69744055,1.360066217425237,6958,3 -6959,45150235,-0.10649016243667178,6959,3 -6960,80736498,-2.2096522630351387,6960,3 -6961,17850750,0.5418452993742616,6961,3 -6962,15884242,1.671305862714535,6962,3 -6963,55940894,-2.1609190863688426,6963,3 -6964,25202494,0.7164304211725024,6964,3 -6965,32803825,1.4326204536815301,6965,3 -6966,47224544,2.2544860780064764,6966,3 -6967,37946331,0.3683288715910624,6967,3 -6968,49147609,0.4251586466955351,6968,3 -6969,51703460,0.07546169294933125,6969,3 -6970,73237622,0.17323350807790738,6970,3 -6971,60496999,-1.0369597366820937,6971,3 -6972,39068657,-0.24196156576637495,6972,3 -6973,60925472,0.6499272219762027,6973,3 -6974,53185112,0.08859225818941993,6974,3 -6975,42290707,1.3084283351571715,6975,3 -6976,65929970,2.2874302304888787,6976,3 -6977,53503565,0.9313890383382195,6977,3 -6978,63742035,-0.6823688183658357,6978,3 -6979,17979617,0.863072888145431,6979,3 -6980,78993073,0.3188027407400138,6980,3 -6981,76486568,0.2909412448134157,6981,3 -6982,34448749,-1.121512461726284,6982,3 -6983,30640276,0.5304706252316682,6983,3 -6984,45693487,-1.0991980416004545,6984,3 -6985,48411149,-0.777428565459662,6985,3 -6986,50993585,0.9680933361813454,6986,3 -6987,64597149,1.2092181988899113,6987,3 -6988,87320051,0.6312129665216308,6988,3 -6989,64161797,1.796025171609308,6989,3 -6990,51566051,0.8044769368890258,6990,3 -6991,57327906,0.3179155481940513,6991,3 -6992,81972812,-0.3815661784038825,6992,3 -6993,64343634,0.7329579155326486,6993,3 -6994,10537357,1.9609367841667105,6994,3 -6995,13795420,0.43270607789169147,6995,3 -6996,37184013,0.02912098659074802,6996,3 -6997,80457377,-0.5766490528209521,6997,3 -6998,63832077,-1.900950488558347,6998,3 -6999,39792325,1.3825253099166195,6999,3 -7000,24561574,-0.7491818739116886,7000,3 -7001,33969954,1.3949771473149886,7001,3 -7002,56957553,0.8046846179924366,7002,3 -7003,23218163,0.03743468588141389,7003,3 -7004,47742326,0.9735291359953965,7004,3 -7005,74860959,0.08599807410575257,7005,3 -7006,68630410,-1.371668778119841,7006,3 -7007,48055850,-1.2247524424831895,7007,3 -7008,24046284,-1.100873358249475,7008,3 -7009,81788902,0.6070037676693119,7009,3 -7010,65140885,3.8293765520161966,7010,3 -7011,26951242,-0.44773372098886477,7011,3 -7012,62929870,0.11512566227669373,7012,3 -7013,68179880,0.3837282455709653,7013,3 -7014,77574772,-0.24694506061378899,7014,3 -7015,32454070,1.8428386941005077,7015,3 -7016,65853282,-0.16431991706509905,7016,3 -7017,89988238,-1.4967991698738308,7017,3 -7018,17729587,0.28272914357816253,7018,3 -7019,68772496,-0.6131200842839121,7019,3 -7020,62930101,0.19384008221599924,7020,3 -7021,16167516,0.14009206014287895,7021,3 -7022,24427014,-1.603197590131502,7022,3 -7023,79981927,0.5882256875897632,7023,3 -7024,68011887,-1.5481071003375042,7024,3 -7025,15082671,1.2674920520500388,7025,3 -7026,60650844,-1.216979960262289,7026,3 -7027,79500126,2.300600005593179,7027,3 -7028,54560636,0.4192477520600159,7028,3 -7029,23346562,1.8323565661529027,7029,3 -7030,31670993,-0.38967362227446567,7030,3 -7031,32079702,0.6382387753196379,7031,3 -7032,81843824,-0.29183212144739046,7032,3 -7033,87200977,-1.3163779435349128,7033,3 -7034,61173166,-0.25698087431281297,7034,3 -7035,60829169,-0.908527177496485,7035,3 -7036,21451639,-0.4965588551090847,7036,3 -7037,14600877,1.0759619194793928,7037,3 -7038,60295706,-0.32367219766515753,7038,3 -7039,22960738,0.14069350494276178,7039,3 -7040,66069746,-0.5985441777348408,7040,3 -7041,25594864,-1.3764682971622653,7041,3 -7042,30341635,-1.5524523176773293,7042,3 -7043,41607188,-2.251449596898798,7043,3 -7044,56523416,-1.4952190742293983,7044,3 -7045,67654668,-0.30573389306281223,7045,3 -7046,39727005,1.3774337372210321,7046,3 -7047,22223462,-0.2146098984800985,7047,3 -7048,12832413,-0.14492341469584324,7048,3 -7049,13518914,-0.6895079251727615,7049,3 -7050,29500536,-1.8456400999124543,7050,3 -7051,12292333,1.2516556731130564,7051,3 -7052,72048852,2.1619760065568085,7052,3 -7053,52862183,1.3214371948692636,7053,3 -7054,49609223,-0.5787122079366327,7054,3 -7055,76428242,-0.8517364188893741,7055,3 -7056,42981400,0.13684772180314747,7056,3 -7057,12386617,1.0074923065400299,7057,3 -7058,48008129,-0.6061087504306665,7058,3 -7059,78899374,0.15289961018130133,7059,3 -7060,77650338,0.07343689723490174,7060,3 -7061,38152253,-1.2748449322070239,7061,3 -7062,25808920,1.0676315382321129,7062,3 -7063,52290155,1.9867592849192046,7063,3 -7064,43704021,0.10910774030619466,7064,3 -7065,70639055,1.3878339928048065,7065,3 -7066,69854150,-0.30859144497175883,7066,3 -7067,84189383,0.33478847362831604,7067,3 -7068,73020534,0.0442615521920799,7068,3 -7069,47918834,-0.16666591466202574,7069,3 -7070,53200585,0.3004070261992127,7070,3 -7071,76767120,0.023698289916253435,7071,3 -7072,20350974,1.3651649216910526,7072,3 -7073,50293091,0.08713082471272494,7073,3 -7074,44804703,1.3812022701929827,7074,3 -7075,58264063,-0.5125811229941633,7075,3 -7076,48446393,-0.8033944384810506,7076,3 -7077,35689302,-1.2630427923043637,7077,3 -7078,10308618,-0.17145355958269792,7078,3 -7079,12805231,-0.6144634310988991,7079,3 -7080,60303906,0.8492131717245066,7080,3 -7081,61366679,-0.14815492907415348,7081,3 -7082,10574600,-1.7154132291046345,7082,3 -7083,10468254,-0.7064855034200189,7083,3 -7084,82417729,-0.05508835438916041,7084,3 -7085,43287103,0.0276998903193217,7085,3 -7086,71432097,-0.5897793490958829,7086,3 -7087,83440116,-0.2529602399166923,7087,3 -7088,68057868,-0.30878778886755875,7088,3 -7089,66265642,-0.5257112041357913,7089,3 -7090,11917747,-1.4020936339780703,7090,3 -7091,78065345,-1.8078923075568947,7091,3 -7092,89191521,-0.8131186731166548,7092,3 -7093,29619268,-0.17998043713085551,7093,3 -7094,87241520,-0.15399733075552285,7094,3 -7095,44550102,3.751864571941952,7095,3 -7096,20234268,0.5378706165904973,7096,3 -7097,77890272,1.5590700378341564,7097,3 -7098,86000160,0.1478076940776135,7098,3 -7099,20750605,1.3331750743986817,7099,3 -7100,38958902,-0.40157066368086064,7100,3 -7101,17475739,-0.26683631757497955,7101,3 -7102,76507797,0.0070039105192666665,7102,3 -7103,19504937,0.7113060792216376,7103,3 -7104,33921261,-0.23320738541767752,7104,3 -7105,31501563,-0.27389300237048264,7105,3 -7106,28938322,-1.4387123966302933,7106,3 -7107,60753801,1.519429617930782,7107,3 -7108,52362136,-0.3472874880027642,7108,3 -7109,72065363,0.06958253022532918,7109,3 -7110,79844429,-0.14629492552121703,7110,3 -7111,44842806,0.46684610560264184,7111,3 -7112,54174864,-0.09369989401596145,7112,3 -7113,32834013,-0.032218756324608064,7113,3 -7114,34312079,-0.5969920598859944,7114,3 -7115,59362424,-0.08901934283366286,7115,3 -7116,22559946,0.05343649179782283,7116,3 -7117,66030726,-2.2565443201578095,7117,3 -7118,24347369,-0.25034255293199686,7118,3 -7119,20188482,-1.072545975952487,7119,3 -7120,86811436,-1.5668217121090222,7120,3 -7121,71431063,0.29299533936730315,7121,3 -7122,68020629,-0.8641852546629556,7122,3 -7123,62794042,0.22565301003810131,7123,3 -7124,70631059,0.8004029411017128,7124,3 -7125,63027931,-1.0010447170465941,7125,3 -7126,73082311,-0.5867724635467074,7126,3 -7127,57659518,-0.10989525305098728,7127,3 -7128,63898648,-1.0259839608323245,7128,3 -7129,28811971,0.4243935601082859,7129,3 -7130,39810904,1.2563568045996107,7130,3 -7131,35761831,-0.2929449303344082,7131,3 -7132,29094900,-1.0636585764493738,7132,3 -7133,83351042,-0.20631349779561106,7133,3 -7134,34131811,1.6353075288204648,7134,3 -7135,86687373,0.22625685299330275,7135,3 -7136,26051058,-1.230868059377361,7136,3 -7137,73961902,-0.5368139207103196,7137,3 -7138,31114977,1.166209957641864,7138,3 -7139,56278136,0.20793707188400243,7139,3 -7140,53115175,0.4421227239651589,7140,3 -7141,62596606,1.8290372723468635,7141,3 -7142,73039793,-0.9514951252127144,7142,3 -7143,41624009,-0.8897186183781707,7143,3 -7144,40961517,-0.6824433141865517,7144,3 -7145,75381908,0.32170772462939184,7145,3 -7146,61743354,0.517527125598428,7146,3 -7147,70684973,-0.4971491857808731,7147,3 -7148,64427860,2.312062681502299,7148,3 -7149,41084540,1.5882091356620627,7149,3 -7150,72489776,-0.2769824310366269,7150,3 -7151,21347679,-0.0035396477968373417,7151,3 -7152,74702452,0.07034066330594085,7152,3 -7153,60423571,-0.6680307897128475,7153,3 -7154,44903661,1.1616096925369699,7154,3 -7155,45639749,0.8900030782549216,7155,3 -7156,28911000,-0.2772839588385373,7156,3 -7157,25874607,-0.19635135542515814,7157,3 -7158,39467772,-0.8038605534752961,7158,3 -7159,59225844,-0.6874227999066299,7159,3 -7160,21744948,0.7978829025367679,7160,3 -7161,62934196,0.11144304845456239,7161,3 -7162,65182393,1.6467945350255875,7162,3 -7163,79637434,-0.005162756043102277,7163,3 -7164,75569596,1.216064883525218,7164,3 -7165,72469806,-0.07094188173333216,7165,3 -7166,36637107,-0.6636185728702321,7166,3 -7167,72931282,1.5057572618550927,7167,3 -7168,31572307,2.615632402229662,7168,3 -7169,48484200,-0.18180558375424674,7169,3 -7170,75180408,-0.2538315109617241,7170,3 -7171,67090383,-0.2536967230412804,7171,3 -7172,68630374,-0.32976546108162225,7172,3 -7173,61929948,0.48949989559216345,7173,3 -7174,45809254,0.6840313521674,7174,3 -7175,32652847,0.43875957604526916,7175,3 -7176,76425459,1.0152679749115565,7176,3 -7177,46520275,1.5638056677829715,7177,3 -7178,26252935,0.08275372473636212,7178,3 -7179,57575741,-0.7611390424978982,7179,3 -7180,58072522,-1.7722575539308105,7180,3 -7181,42903425,-0.12164400244509328,7181,3 -7182,50601528,-0.24233501947757755,7182,3 -7183,17837715,-0.22253085515500473,7183,3 -7184,32839810,-1.4401601960908335,7184,3 -7185,34458109,0.373807994464178,7185,3 -7186,10003587,0.8903708007113014,7186,3 -7187,58538803,0.2621864561584242,7187,3 -7188,70759875,-3.1331056789381657,7188,3 -7189,88412541,-0.38015867241839146,7189,3 -7190,58808352,-0.4902609681756129,7190,3 -7191,58104812,-0.8276499292270146,7191,3 -7192,66331659,-1.0935141445423933,7192,3 -7193,78038077,1.479124599794363,7193,3 -7194,71915034,0.49642096117182827,7194,3 -7195,64337150,0.6129501565683466,7195,3 -7196,64873690,-1.7948772655350913,7196,3 -7197,28156206,-1.5163647704048817,7197,3 -7198,14731307,-0.3063810233626517,7198,3 -7199,22745991,-0.31208953133974604,7199,3 -7200,23126962,1.0923798200965613,7200,3 -7201,89981463,-1.7787928996343787,7201,3 -7202,72501538,-0.07641932057181691,7202,3 -7203,32724721,0.3438520834964774,7203,3 -7204,27495663,1.050875910506699,7204,3 -7205,42177805,-1.609960928939433,7205,3 -7206,67991710,-0.9633665532349724,7206,3 -7207,65812664,-0.32015188877939016,7207,3 -7208,18194218,0.23816222540156287,7208,3 -7209,52805385,-0.6016958317724179,7209,3 -7210,78108752,-2.1378807677820237,7210,3 -7211,66957996,0.40837115669829893,7211,3 -7212,54565393,-0.5647762320673829,7212,3 -7213,13899157,-1.0239356541789408,7213,3 -7214,28125594,-0.8299741132994628,7214,3 -7215,38359100,0.7367208750449308,7215,3 -7216,40339051,1.7320084247569072,7216,3 -7217,83183604,-0.4348624255861526,7217,3 -7218,89485326,0.9666185034246612,7218,3 -7219,25022145,-1.2591210889342952,7219,3 -7220,89005765,0.6781762285937607,7220,3 -7221,40126506,-1.2277316595910732,7221,3 -7222,20780136,-1.18329786229123,7222,3 -7223,40162278,-1.0080977971655363,7223,3 -7224,23103969,-0.3770272549487088,7224,3 -7225,49247037,0.24059079931159802,7225,3 -7226,18637455,-1.7440971803032734,7226,3 -7227,20673164,1.6369329056257842,7227,3 -7228,28935370,-0.16142059319946045,7228,3 -7229,37760979,0.3255271428515815,7229,3 -7230,49310309,-0.33545857689139713,7230,3 -7231,19871166,-0.7121626246129285,7231,3 -7232,63502130,1.1460518821550834,7232,3 -7233,87631130,0.272650303116404,7233,3 -7234,84538787,0.7963851080035325,7234,3 -7235,70300432,0.37970784805907076,7235,3 -7236,31999477,0.289697775205479,7236,3 -7237,36795749,0.39864777654331185,7237,3 -7238,16493106,-0.0753709355890793,7238,3 -7239,29883567,-0.2307283797578502,7239,3 -7240,11226835,-1.7560514776441076,7240,3 -7241,14441483,0.16819465543339432,7241,3 -7242,46089805,1.9425483938026824,7242,3 -7243,86761432,0.4617813061666363,7243,3 -7244,21016980,-1.2010319868216865,7244,3 -7245,85098823,-0.7328219469513212,7245,3 -7246,15725068,-0.39172410629292437,7246,3 -7247,78379760,0.7373570834724398,7247,3 -7248,48885854,0.22388333695608034,7248,3 -7249,34966964,-1.6942761513161702,7249,3 -7250,36360000,0.36338458944372615,7250,3 -7251,64886751,0.15411163752019702,7251,3 -7252,37213426,0.14606590519653215,7252,3 -7253,37276848,0.23772566128114883,7253,3 -7254,78813388,-0.6843559279649779,7254,3 -7255,15957335,0.21852316403080355,7255,3 -7256,85712711,0.44044084920881793,7256,3 -7257,44508540,0.47460398679690474,7257,3 -7258,12086327,0.22545128496090613,7258,3 -7259,63017814,-0.44256146939203544,7259,3 -7260,32010486,2.146086354285995,7260,3 -7261,42031120,-1.2154700434052934,7261,3 -7262,20652366,-0.6995027336176503,7262,3 -7263,74354895,-1.5469172284493318,7263,3 -7264,61446539,-1.43631813195678,7264,3 -7265,20392602,1.144661449230306,7265,3 -7266,71073236,-0.3346494592990865,7266,3 -7267,73220454,1.4220195850032213,7267,3 -7268,26971630,-0.4270542814570277,7268,3 -7269,24842645,-0.40382480256490505,7269,3 -7270,69523523,-1.1851136996837137,7270,3 -7271,36262501,0.7712992485799127,7271,3 -7272,70577010,1.6215467732504312,7272,3 -7273,35013051,0.8521906652842494,7273,3 -7274,87839135,0.6530281563183954,7274,3 -7275,32604033,0.2575483304334983,7275,3 -7276,55012226,-0.2170869414678152,7276,3 -7277,39128529,1.1648856670632084,7277,3 -7278,14616053,-1.4466978196292015,7278,3 -7279,44058260,-0.5000515006899555,7279,3 -7280,79373903,-0.6470369373520981,7280,3 -7281,35042385,-1.5307575668061661,7281,3 -7282,32047342,-1.0202544260357174,7282,3 -7283,66202487,-0.1892236283856627,7283,3 -7284,25927626,-0.4236312882735036,7284,3 -7285,78303795,-1.1056650615971502,7285,3 -7286,60935430,0.23821368225167927,7286,3 -7287,60982589,0.24183799402950965,7287,3 -7288,15375667,-1.1679652453276295,7288,3 -7289,19581007,1.785155278431533,7289,3 -7290,27706053,-1.1861232347281765,7290,3 -7291,17501922,-1.2067152897430926,7291,3 -7292,72038178,-0.28251985037047117,7292,3 -7293,53445798,-0.4118014890250703,7293,3 -7294,66733989,0.8804374614112636,7294,3 -7295,23893957,-0.3792815441430627,7295,3 -7296,36596492,-0.41687235401422956,7296,3 -7297,28527036,-1.1644522345085355,7297,3 -7298,34061361,-2.0908658237472264,7298,3 -7299,67024648,0.720259037867707,7299,3 -7300,40468614,-0.6357659600306396,7300,3 -7301,45919423,-0.7927157812431509,7301,3 -7302,47499014,-0.7531120055454938,7302,3 -7303,29229167,2.315926636495532,7303,3 -7304,12986145,0.4121170414545543,7304,3 -7305,28346943,-0.10298506686981493,7305,3 -7306,49976614,-0.44187576800650225,7306,3 -7307,66585319,-0.6878555862611286,7307,3 -7308,82175411,-1.6968261630505188,7308,3 -7309,40987750,0.9512427635184721,7309,3 -7310,35409615,0.23261042252904754,7310,3 -7311,52301541,0.009159352568271002,7311,3 -7312,70419088,0.8902736987079624,7312,3 -7313,49240806,-1.0893717603591098,7313,3 -7314,84289081,0.10527418463819485,7314,3 -7315,72014221,-0.20345773485328694,7315,3 -7316,47816741,-0.5320004221445781,7316,3 -7317,44426168,0.21209555367177105,7317,3 -7318,21690672,0.19168478011652912,7318,3 -7319,11342695,-0.5012872838397106,7319,3 -7320,77748768,-2.6532589356243506,7320,3 -7321,12816323,0.47953307388234123,7321,3 -7322,74717825,-1.5172179364575784,7322,3 -7323,79211297,-1.1383527117483503,7323,3 -7324,79627522,-0.06954331393119499,7324,3 -7325,22033104,0.255742827895304,7325,3 -7326,52361384,0.674829483015361,7326,3 -7327,29286506,1.1344649297855292,7327,3 -7328,34991855,-0.2566028213547358,7328,3 -7329,13251623,1.2131542128498722,7329,3 -7330,33855250,0.8077517450162964,7330,3 -7331,50291279,0.15802676221994366,7331,3 -7332,73857677,1.494299647503502,7332,3 -7333,69867675,0.7006118267334687,7333,3 -7334,30460747,-1.6842629013828236,7334,3 -7335,51526921,-0.6438996431085902,7335,3 -7336,81261742,1.6382882177893106,7336,3 -7337,82833695,1.0201582834239402,7337,3 -7338,41000284,-1.2122982306640495,7338,3 -7339,56779360,0.7464712864667021,7339,3 -7340,67437141,0.49029973325118026,7340,3 -7341,23168318,-1.9293048877670371,7341,3 -7342,30606716,-1.3195986279159233,7342,3 -7343,88356749,-0.5952782246683626,7343,3 -7344,44230712,-0.8279299512829492,7344,3 -7345,18271867,1.3964350674762853,7345,3 -7346,73688532,0.7423050901832752,7346,3 -7347,74802652,-0.4969087412961713,7347,3 -7348,76903861,-1.1424870620732088,7348,3 -7349,81612310,-0.2935135926781994,7349,3 -7350,23792020,-1.1043958952600332,7350,3 -7351,75743443,-0.6213385180241945,7351,3 -7352,58315952,0.9400083588781772,7352,3 -7353,37686418,0.6302100566291616,7353,3 -7354,17874651,0.13790628651738968,7354,3 -7355,27634889,-1.0455538737438494,7355,3 -7356,67375421,0.7963849461355662,7356,3 -7357,34232304,0.8419829065357337,7357,3 -7358,31341306,2.347454513036448,7358,3 -7359,81526321,0.01752003370494952,7359,3 -7360,73004901,-1.2723341132268824,7360,3 -7361,66800682,0.29888046902936244,7361,3 -7362,48248696,0.2185334804808007,7362,3 -7363,17241339,0.4575798218830464,7363,3 -7364,69373244,0.010814034584503402,7364,3 -7365,64095840,0.03315357111441865,7365,3 -7366,16129841,0.4208258296759863,7366,3 -7367,45866298,0.044305302066496625,7367,3 -7368,60726506,0.5322641197857284,7368,3 -7369,88367992,-0.268039357191938,7369,3 -7370,26749837,-0.01849734810987011,7370,3 -7371,28048013,-0.5215271363256008,7371,3 -7372,24427409,-0.946002214393976,7372,3 -7373,77886385,-0.859146578931916,7373,3 -7374,57959762,1.4230627297768106,7374,3 -7375,43696216,-0.59533660768788,7375,3 -7376,88951073,-0.3831647178224106,7376,3 -7377,22138917,0.982366645025997,7377,3 -7378,28281394,0.03651216436839389,7378,3 -7379,54957640,-0.05027833553643934,7379,3 -7380,60277717,-0.854447558070055,7380,3 -7381,47923417,2.389099046228381,7381,3 -7382,42861692,-0.37296298341138445,7382,3 -7383,65328695,-0.7580001920595768,7383,3 -7384,73257123,0.5272629416099294,7384,3 -7385,76819811,1.7399003679133056,7385,3 -7386,29612354,-0.28350170734797836,7386,3 -7387,36035316,0.041876797710951374,7387,3 -7388,77593191,0.06545618352361629,7388,3 -7389,46137584,-0.4633967736224009,7389,3 -7390,41480068,1.0104568549192616,7390,3 -7391,38303220,0.348600860237962,7391,3 -7392,84800240,-1.4738289866066063,7392,3 -7393,85659623,-0.49234510107445667,7393,3 -7394,87117867,-0.05790316586991433,7394,3 -7395,80311147,-0.2697462643147589,7395,3 -7396,35922111,-0.6896447276032972,7396,3 -7397,30688879,0.530964971637803,7397,3 -7398,52476256,0.7167189958204564,7398,3 -7399,63018046,-0.45081711112725975,7399,3 -7400,37323726,2.116757385085002,7400,3 -7401,12816505,-0.750527940270261,7401,3 -7402,79923378,1.1190530077081435,7402,3 -7403,46741323,1.411529491235561,7403,3 -7404,82219721,-0.0455392813180545,7404,3 -7405,32737309,-1.3789601011832247,7405,3 -7406,80612702,1.0718982324396213,7406,3 -7407,89009678,-0.7110987961406741,7407,3 -7408,28465465,-0.24479471589113871,7408,3 -7409,59123673,1.2087255208712455,7409,3 -7410,40889882,-1.0014434930982348,7410,3 -7411,61383780,0.16074905572621148,7411,3 -7412,55181179,-0.958765970628949,7412,3 -7413,82034147,2.9391403989941645,7413,3 -7414,63972878,-1.434796957959228,7414,3 -7415,89312769,0.10846889324165242,7415,3 -7416,23140293,0.4609042459508016,7416,3 -7417,67144088,0.18894358278956144,7417,3 -7418,60041396,1.695663514574963,7418,3 -7419,30814013,1.560900203044976,7419,3 -7420,56719780,-0.2387978278365094,7420,3 -7421,12056104,-0.1410891548559893,7421,3 -7422,51347177,2.1518268009849955,7422,3 -7423,84537034,1.7083806034216638,7423,3 -7424,53755886,-0.6855716708510504,7424,3 -7425,44961100,0.23325733837873602,7425,3 -7426,41686788,-1.144168333324333,7426,3 -7427,64615855,-0.4458467162416393,7427,3 -7428,35029137,-0.9503707801118756,7428,3 -7429,63644694,-0.3829284357113846,7429,3 -7430,52935562,0.004718774289057126,7430,3 -7431,44047879,0.07502227911542649,7431,3 -7432,41431998,-0.21426278367632454,7432,3 -7433,62276744,-1.6730839892071891,7433,3 -7434,62610248,0.01055175556682419,7434,3 -7435,12885218,-1.316794028384092,7435,3 -7436,14287327,0.3042971583217232,7436,3 -7437,63962874,-1.843583062738286,7437,3 -7438,16542199,1.0858416689535317,7438,3 -7439,88262342,-0.5276643381595124,7439,3 -7440,49946211,1.1526015989817777,7440,3 -7441,43511659,0.011650380683825514,7441,3 -7442,72073395,-0.19376410629595453,7442,3 -7443,15183007,0.22571524103380414,7443,3 -7444,39607727,-0.6813538980790134,7444,3 -7445,12366467,-0.04999624372873549,7445,3 -7446,19059406,0.6463814219735761,7446,3 -7447,55706023,-0.33293111038424045,7447,3 -7448,75943626,-0.5464095184542622,7448,3 -7449,37761318,0.8721971059691794,7449,3 -7450,89988458,-0.9232103166105592,7450,3 -7451,15625141,-1.2108788885666415,7451,3 -7452,36106058,0.43965562251519086,7452,3 -7453,18927681,0.954394776324745,7453,3 -7454,71427514,-1.202575537734726,7454,3 -7455,24963796,-0.7644385833999162,7455,3 -7456,44234934,0.272590033794837,7456,3 -7457,47176199,0.040725109929413195,7457,3 -7458,58511510,0.3996895714360177,7458,3 -7459,10595857,0.5827653276111988,7459,3 -7460,37757877,-1.043070741940114,7460,3 -7461,57284444,-0.4196937079439099,7461,3 -7462,19437139,0.9370653785935747,7462,3 -7463,86537629,0.3104562304250931,7463,3 -7464,82325777,-0.5007923126605335,7464,3 -7465,17491766,0.35949801607835075,7465,3 -7466,65026275,0.45150061811278064,7466,3 -7467,36613820,-0.3618654113687077,7467,3 -7468,45578380,0.01934849761673954,7468,3 -7469,46898576,0.09773020465749283,7469,3 -7470,65017902,0.24871495809463198,7470,3 -7471,43879952,-0.7060255677789197,7471,3 -7472,60962820,2.3248686791780355,7472,3 -7473,18198131,1.1377717293714467,7473,3 -7474,12985876,-0.6432532445876502,7474,3 -7475,45456933,-1.4485856541809239,7475,3 -7476,67009408,0.5828610608980825,7476,3 -7477,12162692,1.5517814710214792,7477,3 -7478,61236225,1.4095713257208953,7478,3 -7479,18793206,1.5438138098057925,7479,3 -7480,89366400,0.7368182755039857,7480,3 -7481,35809419,0.02648641352576351,7481,3 -7482,18821118,-0.5199418203588598,7482,3 -7483,49852838,-0.9048605403463024,7483,3 -7484,87581437,-0.11415623822037409,7484,3 -7485,66307411,-0.8415350256100875,7485,3 -7486,15748917,0.09412485084387594,7486,3 -7487,48513080,1.4186281469620148,7487,3 -7488,67751298,0.368919980727952,7488,3 -7489,20702008,0.0614240158164913,7489,3 -7490,26303128,2.5416456588286933,7490,3 -7491,39614951,0.4429148002035969,7491,3 -7492,11141732,-1.0556510480912518,7492,3 -7493,55868735,-0.8720725828004072,7493,3 -7494,45229200,0.04373336516956516,7494,3 -7495,39122375,0.2833951005888916,7495,3 -7496,75066243,0.47597232216796836,7496,3 -7497,80551082,0.24575553729838628,7497,3 -7498,27684607,-1.1262897335737776,7498,3 -7499,51499266,0.40151327152930905,7499,3 -7500,61585118,-1.4615847958690744,7500,3 -7501,81796266,-1.4180457020043857,7501,3 -7502,78422568,-0.27273698589912154,7502,3 -7503,76618828,-0.281101193016548,7503,3 -7504,61646554,1.3959410766178721,7504,3 -7505,15322665,-0.9346884223164571,7505,3 -7506,71715857,-1.7989271341699282,7506,3 -7507,15647826,1.2284593571839255,7507,3 -7508,53981657,-0.47783194603018025,7508,3 -7509,31460252,0.7931997853776315,7509,3 -7510,74217625,1.3674767172555204,7510,3 -7511,59932986,-0.21364101811665434,7511,3 -7512,66704668,-0.9727344449285681,7512,3 -7513,74052631,-0.7738300715695001,7513,3 -7514,84154552,0.44837729549995115,7514,3 -7515,61806465,-2.6515391624502636,7515,3 -7516,12015869,2.05058202634545,7516,3 -7517,50643744,-0.16250002951585196,7517,3 -7518,45063420,0.4064812531948861,7518,3 -7519,84502816,0.3467559925548941,7519,3 -7520,26830379,-0.10867350001102365,7520,3 -7521,88075795,0.19195560874186174,7521,3 -7522,65747520,-1.3324484191253863,7522,3 -7523,82339050,1.5859925533497903,7523,3 -7524,34563903,0.22594223450744927,7524,3 -7525,88903666,0.035264781703266274,7525,3 -7526,83390753,1.6714296120624081,7526,3 -7527,81851998,-0.588889884158834,7527,3 -7528,50235922,0.07928013254566751,7528,3 -7529,72223843,-1.243566915223989,7529,3 -7530,48427363,1.8214431911801836,7530,3 -7531,23994763,-0.09065669881783242,7531,3 -7532,14292528,0.5597717609432393,7532,3 -7533,67901657,-0.5985938688845448,7533,3 -7534,43551018,-0.9372023290121015,7534,3 -7535,41618066,-0.17362810507113957,7535,3 -7536,57762482,0.28584424941860326,7536,3 -7537,76294746,2.355491698223641,7537,3 -7538,64274631,2.6787987926295154,7538,3 -7539,43148303,1.3015864387823335,7539,3 -7540,54847297,0.573875803809176,7540,3 -7541,45670571,0.6339699973443066,7541,3 -7542,23937680,-0.6106969150079302,7542,3 -7543,85062180,-0.5904530115513986,7543,3 -7544,28200244,-2.1023270076442615,7544,3 -7545,47812002,0.769377024503693,7545,3 -7546,52516689,0.052521212426944,7546,3 -7547,15022010,2.0631436952720152,7547,3 -7548,31010199,0.21731585690758976,7548,3 -7549,80206053,-0.966828500806469,7549,3 -7550,48848820,-1.2217816442935971,7550,3 -7551,60945003,0.854549575416859,7551,3 -7552,27537479,0.45150295096752985,7552,3 -7553,57070183,-0.1646943451637387,7553,3 -7554,71593845,-0.579419648936697,7554,3 -7555,35737232,1.3826823417413943,7555,3 -7556,85283812,1.2644492777521494,7556,3 -7557,59419825,-0.08976710555903565,7557,3 -7558,71856956,-0.3874950964012998,7558,3 -7559,74159045,-0.3469681937723846,7559,3 -7560,59700489,-0.32786495157038925,7560,3 -7561,45281124,-0.4617647118440496,7561,3 -7562,86611886,0.13676156169448775,7562,3 -7563,68418821,1.2356569018525583,7563,3 -7564,63240341,-0.16046493056936706,7564,3 -7565,70152044,-0.6317368716446314,7565,3 -7566,47586612,0.14323967217286637,7566,3 -7567,63970853,0.19099735494859413,7567,3 -7568,64198967,1.468645981704228,7568,3 -7569,80663694,-0.7240209509784777,7569,3 -7570,61082157,-0.598798122553221,7570,3 -7571,12313722,1.1421461173745213,7571,3 -7572,55261403,0.18533682135280344,7572,3 -7573,45060062,-0.7279352900915809,7573,3 -7574,73054026,0.23657600073710505,7574,3 -7575,25826158,-0.7747084814394135,7575,3 -7576,74331097,-1.078330186780468,7576,3 -7577,31411740,-1.7266527139523085,7577,3 -7578,45540480,-0.7448723811521892,7578,3 -7579,19654292,-3.0052600396193947,7579,3 -7580,53711164,0.17446122649253337,7580,3 -7581,80227195,0.8182583299497397,7581,3 -7582,72165320,0.9772513390335341,7582,3 -7583,54069855,-0.0988048882567146,7583,3 -7584,80768938,-1.2268111297118147,7584,3 -7585,19292408,-1.347372936055858,7585,3 -7586,68154145,-1.3784077888887587,7586,3 -7587,46885594,2.3624785724811987,7587,3 -7588,33111736,0.22517247498009402,7588,3 -7589,23788529,-0.8822190315759323,7589,3 -7590,57509191,-0.2659239722646799,7590,3 -7591,21037835,0.5686485084517278,7591,3 -7592,12947212,-0.3611714215140773,7592,3 -7593,36827372,-1.6016374973262866,7593,3 -7594,50169134,1.22948967443605,7594,3 -7595,58424730,-1.280692200582427,7595,3 -7596,26420473,-0.8156486947913182,7596,3 -7597,74690375,1.6808868718746215,7597,3 -7598,27440253,0.986263181665035,7598,3 -7599,63353557,1.0075322591589504,7599,3 -7600,22916199,1.0463329434810635,7600,3 -7601,27849689,0.377611829769732,7601,3 -7602,55643405,0.2760893187338696,7602,3 -7603,40370618,-0.7450190367521072,7603,3 -7604,40549838,1.3295257479523768,7604,3 -7605,55575096,-1.4928991932594478,7605,3 -7606,14826873,0.5504288896455537,7606,3 -7607,83627016,-0.5666465540242294,7607,3 -7608,39691701,0.9136848709686267,7608,3 -7609,43671608,0.3706761473883157,7609,3 -7610,10364955,-2.8192585467542486,7610,3 -7611,74642963,0.4140971552125925,7611,3 -7612,27072010,0.3168056733173586,7612,3 -7613,51821593,-0.12759321746483407,7613,3 -7614,72596672,-0.5829816251522628,7614,3 -7615,13140181,1.2980478457151476,7615,3 -7616,62603362,1.9624764625556348,7616,3 -7617,73840077,-1.4788371601136456,7617,3 -7618,18206465,0.7991928901674837,7618,3 -7619,87171260,-1.4486912917121708,7619,3 -7620,84063530,-0.94000831445382,7620,3 -7621,30290638,0.6931617642968635,7621,3 -7622,42365266,-0.3309843793572239,7622,3 -7623,62672123,-0.5597600720757825,7623,3 -7624,87153149,0.5814494354721995,7624,3 -7625,63098799,0.011525820450864966,7625,3 -7626,55666614,-0.3636380205270963,7626,3 -7627,22224852,0.2514645402106645,7627,3 -7628,89417505,1.6686544488215682,7628,3 -7629,11282082,-0.21003439949801989,7629,3 -7630,64021234,-0.4383958996209289,7630,3 -7631,29762532,-2.3941414769305234,7631,3 -7632,31309672,0.08913113696877904,7632,3 -7633,77685350,1.5960703051958056,7633,3 -7634,15745747,0.4961936960375014,7634,3 -7635,89928389,-0.29891809982123385,7635,3 -7636,54294521,1.0147715081774074,7636,3 -7637,30240845,1.8489534219249812,7637,3 -7638,45449086,0.482981642188388,7638,3 -7639,89816926,-0.27967141308229326,7639,3 -7640,19726805,0.0017490654655451822,7640,3 -7641,57457994,0.6547259725927366,7641,3 -7642,36245290,-0.28568791444100416,7642,3 -7643,36369988,-0.9521264195772242,7643,3 -7644,32223606,-0.6916069612704631,7644,3 -7645,51170506,0.9186211030804192,7645,3 -7646,29657683,1.094735341169661,7646,3 -7647,87014664,-0.4641125828654696,7647,3 -7648,10255075,-0.8114067812057829,7648,3 -7649,88390314,-0.08153011268455991,7649,3 -7650,62502768,-0.6807283118420714,7650,3 -7651,28523693,0.8842781277618407,7651,3 -7652,86215859,-0.2013897291893682,7652,3 -7653,54465626,-0.17135399795686634,7653,3 -7654,66326243,-2.263206493225529,7654,3 -7655,22413729,0.015100790521055786,7655,3 -7656,41978470,-0.9180272936281124,7656,3 -7657,84291654,-2.5655797555716835,7657,3 -7658,77949770,-0.8909087327908842,7658,3 -7659,50643854,0.6116563314583354,7659,3 -7660,69733266,0.9385151851073997,7660,3 -7661,46559202,-0.4236513345062914,7661,3 -7662,61364163,-0.23916465318327051,7662,3 -7663,52053948,2.141149247133055,7663,3 -7664,26043574,-0.7954518875660715,7664,3 -7665,68513260,1.9834959485553445,7665,3 -7666,72151937,0.1415112347201249,7666,3 -7667,83173743,0.169039526966999,7667,3 -7668,38420802,0.4303399884943413,7668,3 -7669,23632078,-0.2936640046150811,7669,3 -7670,87702073,1.0450493738525395,7670,3 -7671,82446000,-0.7388851868591138,7671,3 -7672,79479747,-0.21603711758385058,7672,3 -7673,41530803,-0.6233368038589486,7673,3 -7674,84508111,-0.3902962196767802,7674,3 -7675,26083589,-0.5417021751491783,7675,3 -7676,28010804,0.45756920122159866,7676,3 -7677,43144711,1.6440281496586049,7677,3 -7678,18171959,-0.10910170897867008,7678,3 -7679,10742216,-1.2949734421853365,7679,3 -7680,15104316,0.2138847217073956,7680,3 -7681,33739464,0.07217631060401866,7681,3 -7682,15669555,-0.15440267148260756,7682,3 -7683,25103130,-0.05415925041558713,7683,3 -7684,13424735,-0.26998705768535924,7684,3 -7685,40073937,0.11834769467866135,7685,3 -7686,62392635,1.188912540937088,7686,3 -7687,59420629,-0.9772094633788775,7687,3 -7688,68510608,-0.4766021932644326,7688,3 -7689,24832067,-0.5110848003687142,7689,3 -7690,10385302,-0.2844213235007703,7690,3 -7691,28390200,-0.032530816794974236,7691,3 -7692,74277943,-0.4904066158615799,7692,3 -7693,11007337,0.04307845036383758,7693,3 -7694,62101932,0.37779621592967805,7694,3 -7695,25787099,-0.11554363131000735,7695,3 -7696,87837924,1.4201846745394915,7696,3 -7697,83911672,-0.7498430570973207,7697,3 -7698,31410655,-0.7699670071798205,7698,3 -7699,12304933,-0.20346798309247827,7699,3 -7700,64244783,1.0511895892907206,7700,3 -7701,79474431,0.344255552217328,7701,3 -7702,34667356,-0.2895942922066683,7702,3 -7703,70408350,0.25041475229196175,7703,3 -7704,13831654,-0.8546168723217242,7704,3 -7705,74936105,1.7868589074864363,7705,3 -7706,50666521,-1.83770780334409,7706,3 -7707,85973611,0.49391940655019967,7707,3 -7708,66834017,-0.5093131347062818,7708,3 -7709,65446019,-0.00042716069508241605,7709,3 -7710,62267965,0.3866970484824803,7710,3 -7711,56328135,-0.2668192278803834,7711,3 -7712,54002357,2.527406154629293,7712,3 -7713,26450925,-1.0606692809549498,7713,3 -7714,22515566,-0.6096160070674302,7714,3 -7715,12188645,-0.41210587140464233,7715,3 -7716,32473235,-0.5670255183344932,7716,3 -7717,47839532,-1.4610934108793896,7717,3 -7718,16840967,-1.242801245706851,7718,3 -7719,89367912,0.5095282618395359,7719,3 -7720,14379841,-0.5873562955439161,7720,3 -7721,71896352,0.5126873213499621,7721,3 -7722,68535900,0.6458076628940822,7722,3 -7723,50361801,1.712204537593487,7723,3 -7724,88385432,0.701413574706737,7724,3 -7725,72671751,-0.5139379354432533,7725,3 -7726,42286437,1.1564353853024383,7726,3 -7727,27045173,-0.47838940332584656,7727,3 -7728,22481168,0.45290635181058664,7728,3 -7729,79102192,0.1717941344267676,7729,3 -7730,51711786,0.5113207272684254,7730,3 -7731,76168657,-1.0755998868024916,7731,3 -7732,38297958,-0.2982662384918508,7732,3 -7733,59276791,1.214386062891952,7733,3 -7734,23320381,-1.0534929228798915,7734,3 -7735,54565936,1.734820014337629,7735,3 -7736,63445657,-1.0674799638908634,7736,3 -7737,46363913,-1.7444737026991135,7737,3 -7738,25292140,-0.3366508640076993,7738,3 -7739,68942656,0.14319183048800063,7739,3 -7740,24709012,-0.4096299606803029,7740,3 -7741,48776901,0.11964472281067627,7741,3 -7742,74186123,0.31784036993436293,7742,3 -7743,15463673,5.112773281589536,7743,3 -7744,21053421,0.7679821572632607,7744,3 -7745,30052008,0.5696847915759753,7745,3 -7746,35033633,1.4926767467700641,7746,3 -7747,84037211,1.6630408844586413,7747,3 -7748,53784740,0.34884685281325406,7748,3 -7749,53527152,0.5372649479545952,7749,3 -7750,42967179,-0.4848989813367009,7750,3 -7751,30620779,-0.7617370811318886,7751,3 -7752,30775730,0.6984854053334565,7752,3 -7753,84627294,0.01322392117492244,7753,3 -7754,35233511,0.04354201210812305,7754,3 -7755,45082358,1.488790939789602,7755,3 -7756,37790657,0.6599045065542652,7756,3 -7757,89553329,-0.8888562967793119,7757,3 -7758,21115857,1.1571188419047944,7758,3 -7759,45746033,-0.22801801800056495,7759,3 -7760,49697507,-1.2891099369781007,7760,3 -7761,59382039,1.0154652605850978,7761,3 -7762,86299692,1.4597984472297303,7762,3 -7763,74699602,0.03881282037039797,7763,3 -7764,80789027,1.2323814222540392,7764,3 -7765,26714172,0.8647583920809283,7765,3 -7766,72661798,-0.1854948383394685,7766,3 -7767,83056003,-0.8373686709576242,7767,3 -7768,63637611,0.9823711998521266,7768,3 -7769,56873509,-0.059410090773839595,7769,3 -7770,82693002,0.29474994849933556,7770,3 -7771,74656565,0.21208986774853947,7771,3 -7772,87985503,0.0632094115550337,7772,3 -7773,72237758,-1.0317105809326246,7773,3 -7774,13939608,-0.8077252215432352,7774,3 -7775,15770514,-1.8837185876018743,7775,3 -7776,37170344,0.395137345479381,7776,3 -7777,33758515,-0.6593855183177915,7777,3 -7778,22620546,0.905466440980876,7778,3 -7779,14492815,-1.0851927916590995,7779,3 -7780,43429098,-0.2745675642762142,7780,3 -7781,81109488,-0.4399405137837714,7781,3 -7782,26462515,0.9883875182124804,7782,3 -7783,20409547,-0.7976654601078259,7783,3 -7784,82232058,0.7854146855101617,7784,3 -7785,55458704,-3.054543528034009,7785,3 -7786,76853148,0.19255596265376224,7786,3 -7787,71977852,-1.9223124067015989,7787,3 -7788,57629802,-1.2319864944975971,7788,3 -7789,20838600,-0.8870966785286373,7789,3 -7790,19595632,0.4352342815932086,7790,3 -7791,44359519,-0.22712098598067834,7791,3 -7792,33122789,1.3831347070473052,7792,3 -7793,57076421,2.52215962711992,7793,3 -7794,69216851,1.2903393167139428,7794,3 -7795,48191746,1.740583690798556,7795,3 -7796,48310308,-0.04817854155054436,7796,3 -7797,66296389,1.2326997465702456,7797,3 -7798,64359603,-0.9145331037629363,7798,3 -7799,15785058,-0.8574767854161157,7799,3 -7800,62560649,0.9257923853088094,7800,3 -7801,13940468,0.6002968134462123,7801,3 -7802,68412590,2.528229930980193,7802,3 -7803,32565682,1.0119603630235683,7803,3 -7804,13476952,0.9730600415345401,7804,3 -7805,44826705,1.9440007891514635,7805,3 -7806,70105609,-0.4682895917181614,7806,3 -7807,33423502,-0.6634442812102793,7807,3 -7808,75074234,-0.7401025610756823,7808,3 -7809,40026229,-0.09567672203631516,7809,3 -7810,69374001,-1.0890430496985881,7810,3 -7811,88821716,0.6151868836761766,7811,3 -7812,80888619,-0.6070319127604632,7812,3 -7813,22243291,-0.8180960143538814,7813,3 -7814,38075959,0.398811054774642,7814,3 -7815,32673128,0.6617640455927583,7815,3 -7816,34924517,1.1530438413886916,7816,3 -7817,48503648,-0.02783029759022475,7817,3 -7818,26064939,-0.46194970426124266,7818,3 -7819,39058570,-0.8177471906761409,7819,3 -7820,61956785,0.009203324478562955,7820,3 -7821,35810427,-2.0294385183726917,7821,3 -7822,53699928,0.9775450830104946,7822,3 -7823,71323138,1.8335022105169188,7823,3 -7824,51352694,1.2633200042421773,7824,3 -7825,61602363,-0.6308576760407265,7825,3 -7826,82328638,0.6007442043760496,7826,3 -7827,71168303,1.5022008793557973,7827,3 -7828,55226106,-1.5728714158798942,7828,3 -7829,38549954,-0.5613215494423669,7829,3 -7830,53074089,-0.1842306779183611,7830,3 -7831,69378560,1.4492405950519502,7831,3 -7832,27108266,-0.5358165411651392,7832,3 -7833,44070469,-0.8975969831635703,7833,3 -7834,50341370,0.4043098253540986,7834,3 -7835,59304241,-1.651426644832327,7835,3 -7836,23965771,-1.5396689228106097,7836,3 -7837,21661728,2.030961681238647,7837,3 -7838,50432968,-0.9540797953583052,7838,3 -7839,84038471,0.6832486058908107,7839,3 -7840,71908043,-0.9956915283296014,7840,3 -7841,26265256,-0.6320778084261098,7841,3 -7842,10757534,0.05374567959076787,7842,3 -7843,72324880,1.4288042537839782,7843,3 -7844,48541679,-1.2525317433599523,7844,3 -7845,74678990,0.7117176162661158,7845,3 -7846,66124106,1.1988917666255319,7846,3 -7847,36756930,-1.6023112459548892,7847,3 -7848,13824819,0.7009828747146315,7848,3 -7849,71676988,-0.9655825542665019,7849,3 -7850,82789075,-0.21547404596078837,7850,3 -7851,16293621,0.9358150556852649,7851,3 -7852,51334506,-0.1344532449591964,7852,3 -7853,27765194,0.6249768263156734,7853,3 -7854,76552752,2.3137321611524664,7854,3 -7855,79227074,0.39927837826413426,7855,3 -7856,62094918,-0.06299679212125354,7856,3 -7857,76256425,-0.5237911413103732,7857,3 -7858,68454296,0.07645616800746113,7858,3 -7859,11404360,-0.8574998857616442,7859,3 -7860,33639321,-2.924682666751688,7860,3 -7861,69441439,0.12709562787157114,7861,3 -7862,36044914,0.12330732008186653,7862,3 -7863,28889054,-2.594084117324889,7863,3 -7864,83085313,0.06878085386215371,7864,3 -7865,89355914,-1.1642134650311693,7865,3 -7866,10934238,-0.5728718882538485,7866,3 -7867,48802571,-0.9927405633840025,7867,3 -7868,59638883,-1.9467686457725497,7868,3 -7869,28894183,1.6567128188518314,7869,3 -7870,85250438,0.27597027396836876,7870,3 -7871,42703121,1.364438175853541,7871,3 -7872,10034328,0.13781061799832087,7872,3 -7873,79883185,0.4271222138788957,7873,3 -7874,55085726,-0.840415534577104,7874,3 -7875,36326675,0.11159792610848243,7875,3 -7876,39503294,1.006409880260326,7876,3 -7877,64600178,-0.5109649776836552,7877,3 -7878,42227069,0.05287974616221711,7878,3 -7879,56724176,1.0230501445695104,7879,3 -7880,51935964,0.26670061915998405,7880,3 -7881,74392226,-0.1565943124531338,7881,3 -7882,32767040,-1.3278710393028819,7882,3 -7883,39709357,-1.4031772342994653,7883,3 -7884,33157663,0.259465827068745,7884,3 -7885,17177334,0.4195858771439682,7885,3 -7886,68771744,0.1546509688019161,7886,3 -7887,25521702,0.013347637817915975,7887,3 -7888,15451764,2.3353418876486534,7888,3 -7889,24036760,-0.6416428698762071,7889,3 -7890,18040802,-0.13912568166629677,7890,3 -7891,28924136,-2.4078179622119826,7891,3 -7892,82051293,0.3804064921966475,7892,3 -7893,55636404,1.9416622661667013,7893,3 -7894,50332179,-0.42233797165978765,7894,3 -7895,46059754,-0.918169742009471,7895,3 -7896,39704970,0.27231707184314197,7896,3 -7897,15428254,-0.6108236494006398,7897,3 -7898,79772886,1.37866245107313,7898,3 -7899,65355972,-0.5613190222944633,7899,3 -7900,80235691,0.048753798759604824,7900,3 -7901,47744269,-0.4909940749270326,7901,3 -7902,54958789,-0.5163112818051407,7902,3 -7903,10223023,1.280664254684142,7903,3 -7904,42023357,-0.05018211816810787,7904,3 -7905,12581244,-1.0144203767870792,7905,3 -7906,86587230,-1.7054675018584025,7906,3 -7907,52803222,0.26197280316869187,7907,3 -7908,23838618,0.3893185209622429,7908,3 -7909,88994979,-0.4321915191509961,7909,3 -7910,33032427,3.1821897434538444,7910,3 -7911,79614100,0.42051781408606953,7911,3 -7912,86342305,-0.9532754459529111,7912,3 -7913,73144565,0.7346456889652905,7913,3 -7914,88034697,1.2165035829482138,7914,3 -7915,56920603,-1.1314885295420347,7915,3 -7916,75377893,1.8819467279560085,7916,3 -7917,88544489,-2.6541490828739245,7917,3 -7918,78611621,1.028977217818341,7918,3 -7919,43882713,1.105190570704406,7919,3 -7920,58971991,-2.22767878072423,7920,3 -7921,85433192,-0.20318883722678954,7921,3 -7922,73989522,-1.8577871260782315,7922,3 -7923,52945273,-0.6569130133341721,7923,3 -7924,46343430,-0.057201681260906065,7924,3 -7925,30751864,-0.8682375665269584,7925,3 -7926,86459053,-1.0024872138902112,7926,3 -7927,80739443,-0.8695714464610599,7927,3 -7928,29693019,1.3447514634411015,7928,3 -7929,50186762,0.017721459423844652,7929,3 -7930,36190149,1.2859644586090373,7930,3 -7931,60922586,0.20605163639308732,7931,3 -7932,39115547,0.5793697052239277,7932,3 -7933,32535623,-0.5196398040151448,7933,3 -7934,70836134,-0.3771015759874397,7934,3 -7935,28129157,-0.17488746575278105,7935,3 -7936,37827606,-0.5659863561024323,7936,3 -7937,67794896,2.243200572992066,7937,3 -7938,87247093,0.8948527164032628,7938,3 -7939,74524622,1.0082267535767224,7939,3 -7940,35941369,-0.004945716623571751,7940,3 -7941,18037441,-1.587468931177641,7941,3 -7942,35153167,-1.7843508977560176,7942,3 -7943,42698453,-0.910303747590552,7943,3 -7944,67352861,-0.44185608652391817,7944,3 -7945,71074119,-1.470573100206755,7945,3 -7946,51032705,-0.13596674944753936,7946,3 -7947,12044258,0.4388480071188702,7947,3 -7948,17680078,-0.10519385749506323,7948,3 -7949,73342109,-0.8657789583863168,7949,3 -7950,41319052,-0.3229655004432815,7950,3 -7951,36736191,-0.0722632814630251,7951,3 -7952,89640764,1.6499851139421442,7952,3 -7953,30522682,-0.05153751012298034,7953,3 -7954,11818287,1.2043507580656296,7954,3 -7955,14015849,-0.2083511895479847,7955,3 -7956,33237770,-1.0926279291229837,7956,3 -7957,72082485,-0.5694192422788247,7957,3 -7958,48892409,-0.34847486954731105,7958,3 -7959,55782137,1.2546912623541104,7959,3 -7960,68707027,-1.1275563099646624,7960,3 -7961,62859802,-1.2232921791359346,7961,3 -7962,66367560,0.8543444968192194,7962,3 -7963,42174960,0.5475137287135824,7963,3 -7964,53233900,0.10275331531373531,7964,3 -7965,60083162,0.23217509311393492,7965,3 -7966,68616259,-0.5572404637767224,7966,3 -7967,28633186,-0.9775047227029248,7967,3 -7968,74632682,0.19484450860220837,7968,3 -7969,68062850,-0.4512241750393207,7969,3 -7970,66546993,-1.4292393662211127,7970,3 -7971,31755251,0.3775364011124574,7971,3 -7972,43283983,-0.5665586328431235,7972,3 -7973,60209976,1.1451407167784429,7973,3 -7974,45690966,1.57469171862218,7974,3 -7975,47568149,1.2339583145181219,7975,3 -7976,68819277,-1.2412153732310927,7976,3 -7977,47321707,1.0961558609876678,7977,3 -7978,61117279,-0.629245562700284,7978,3 -7979,87163505,-1.6290938119702558,7979,3 -7980,60132522,-1.5516587935125705,7980,3 -7981,64199508,0.09701633799197582,7981,3 -7982,78150459,0.38830372954176123,7982,3 -7983,31346703,-1.9479248386254189,7983,3 -7984,15497699,0.6582973826430987,7984,3 -7985,57844887,-1.6104507329016802,7985,3 -7986,50595872,-0.0490154646416379,7986,3 -7987,58000911,0.368220746260932,7987,3 -7988,88701395,-0.8027998070927932,7988,3 -7989,75398623,-1.240371355929308,7989,3 -7990,54548341,0.045871577009716766,7990,3 -7991,30916051,0.8660608045343672,7991,3 -7992,13824643,0.35051992928751846,7992,3 -7993,39635886,0.388091638474925,7993,3 -7994,18250566,0.44840358045212964,7994,3 -7995,86817456,0.5956976050816812,7995,3 -7996,68747746,-2.3035543475713744,7996,3 -7997,53630424,-0.7524543556673245,7997,3 -7998,75529450,-0.34779880723163165,7998,3 -7999,46587969,-0.5146281966405851,7999,3 -8000,16225453,0.42429359718381626,8000,3 -8001,65246157,1.1610952591742414,8001,3 -8002,79232649,-0.5457595729281606,8002,3 -8003,25469616,0.7292529313831538,8003,3 -8004,12458795,-0.02532572815690712,8004,3 -8005,66639321,0.10416874964063137,8005,3 -8006,22211824,1.1351796435649704,8006,3 -8007,53036796,0.7019416684146731,8007,3 -8008,76141806,0.39847986164590976,8008,3 -8009,69659553,-0.06503757535180106,8009,3 -8010,78374745,-0.5422469727351643,8010,3 -8011,45496190,0.6631993516278594,8011,3 -8012,81762503,1.9955709604677452,8012,3 -8013,35337011,-0.4570962248074841,8013,3 -8014,50177187,-1.035305165646314,8014,3 -8015,63224336,-0.4268450883279816,8015,3 -8016,57508369,1.2974170623847758,8016,3 -8017,62119955,-0.598401170642092,8017,3 -8018,77673188,0.09052925909970783,8018,3 -8019,77750652,-1.1407368669576292,8019,3 -8020,89046807,1.4994090155048345,8020,3 -8021,13437921,1.3037567641702106,8021,3 -8022,17383620,-0.9031605480315108,8022,3 -8023,51667855,-0.4811251895709154,8023,3 -8024,22180312,-0.1692335426675159,8024,3 -8025,21989816,0.8942443473335203,8025,3 -8026,74898535,-1.096824288389027,8026,3 -8027,40607200,1.1805185577863995,8027,3 -8028,59164251,0.23011957450713424,8028,3 -8029,22743084,0.05477455005832366,8029,3 -8030,55666052,-1.0149909065419855,8030,3 -8031,35734610,-0.8582140967012893,8031,3 -8032,82839200,0.9153096610360245,8032,3 -8033,25122830,0.564260567950917,8033,3 -8034,80686709,-0.6692903598732851,8034,3 -8035,15628680,-2.108166002917239,8035,3 -8036,44946056,-0.5980123145436218,8036,3 -8037,78422048,0.2894777451279014,8037,3 -8038,55937522,0.21152922475997096,8038,3 -8039,59701950,0.9261798877802515,8039,3 -8040,43602014,-0.02978967798924137,8040,3 -8041,24560820,-2.3984875336859854,8041,3 -8042,64483840,-1.182061808209839,8042,3 -8043,35312815,1.5012350270997514,8043,3 -8044,27961515,-1.592672553094862,8044,3 -8045,31268511,0.23279245015439365,8045,3 -8046,35760458,0.14043909849759204,8046,3 -8047,15032845,-1.9120995323827763,8047,3 -8048,65828274,2.0871433339612238,8048,3 -8049,44835588,-0.2941352320751907,8049,3 -8050,85529156,-0.5845069956730378,8050,3 -8051,78071172,-0.8911155213392543,8051,3 -8052,31094924,1.3002927502121313,8052,3 -8053,68950042,0.5933196581252972,8053,3 -8054,27998706,-0.7615062220745863,8054,3 -8055,18957654,-0.748617405346051,8055,3 -8056,18650597,1.646393569055956,8056,3 -8057,19468719,0.2931352420510413,8057,3 -8058,47792530,0.4358265783929473,8058,3 -8059,28468422,-0.35316365710774367,8059,3 -8060,81353966,1.0202852609739614,8060,3 -8061,37122435,-1.3309161436539632,8061,3 -8062,85773517,0.1328423018423372,8062,3 -8063,47241703,-0.5006585309787164,8063,3 -8064,20838808,1.8235571102378956,8064,3 -8065,83067939,1.6025133629942747,8065,3 -8066,81282823,-0.9744923805092037,8066,3 -8067,37463273,0.08338234096515879,8067,3 -8068,48490424,-0.6483986190491623,8068,3 -8069,11674362,0.6971498757670251,8069,3 -8070,44279966,1.9388796788783005,8070,3 -8071,59919104,-0.42578126531456995,8071,3 -8072,19015781,1.4979933226102462,8072,3 -8073,45174878,-0.8259945053987873,8073,3 -8074,82075881,-1.0781860596424329,8074,3 -8075,32457132,-0.16060836213069044,8075,3 -8076,26933519,0.5986125587818987,8076,3 -8077,59417532,-0.6045797420506932,8077,3 -8078,80073617,-0.16696586514042716,8078,3 -8079,55017940,1.8092147800174714,8079,3 -8080,68794531,-0.8240143939992601,8080,3 -8081,82947585,0.11212067116894017,8081,3 -8082,86377493,0.475485651572953,8082,3 -8083,86662428,0.24927610731018993,8083,3 -8084,40441410,0.5672205476266065,8084,3 -8085,12836719,0.09169121265592925,8085,3 -8086,45719163,0.5111594472798902,8086,3 -8087,28334129,0.5914398331898809,8087,3 -8088,11219167,1.7029609597470738,8088,3 -8089,57625503,-2.025592889799013,8089,3 -8090,33158799,0.36872465682162264,8090,3 -8091,22184272,0.608822475833982,8091,3 -8092,38028107,0.47897301592490454,8092,3 -8093,58838480,3.0130648518416248,8093,3 -8094,48808241,-0.39492061526771266,8094,3 -8095,21076833,-0.48180423636361835,8095,3 -8096,28584627,-0.39463442067336896,8096,3 -8097,55582593,-1.4410824398819695,8097,3 -8098,36794000,-1.0746971451023986,8098,3 -8099,24741727,-0.011626092263894843,8099,3 -8100,61318764,-1.2789307571412003,8100,3 -8101,88969389,1.4584875201977299,8101,3 -8102,51742771,0.20205193367200314,8102,3 -8103,23967337,-0.5304910991787884,8103,3 -8104,82719511,-0.8778639656610634,8104,3 -8105,29434027,-0.43439238545912134,8105,3 -8106,64182782,-0.3048422963562105,8106,3 -8107,68136023,0.07041306262480415,8107,3 -8108,42210722,-0.46065231630068565,8108,3 -8109,42130912,0.4547041899963674,8109,3 -8110,46860882,1.738818989442238,8110,3 -8111,41332854,1.4719975053880463,8111,3 -8112,53479479,0.5092025211860961,8112,3 -8113,44354649,1.3324182742345914,8113,3 -8114,58793920,0.9047176363086421,8114,3 -8115,72285401,0.4441832228601342,8115,3 -8116,56000624,1.1548951208570695,8116,3 -8117,32323117,0.044669787554819713,8117,3 -8118,65269067,1.5455795687792466,8118,3 -8119,66965518,0.1975657459860984,8119,3 -8120,35666959,-0.6057150770914721,8120,3 -8121,32799148,-0.9510330762970481,8121,3 -8122,30683632,-1.074290493064643,8122,3 -8123,62803660,0.47650410848019764,8123,3 -8124,37962291,0.9855561944648324,8124,3 -8125,44483478,0.005882307804222052,8125,3 -8126,42259393,0.8998514130023054,8126,3 -8127,15203925,-1.022167115616193,8127,3 -8128,33298219,-0.4968549277192317,8128,3 -8129,18499612,-0.6134326262040514,8129,3 -8130,50424642,0.2788652737234955,8130,3 -8131,62229460,0.9042837504723683,8131,3 -8132,24620483,0.8742847952540114,8132,3 -8133,12030695,0.0021624880354230466,8133,3 -8134,88636868,1.179643494898792,8134,3 -8135,54863745,1.147175663110687,8135,3 -8136,24159760,0.33637952970167034,8136,3 -8137,85892006,-0.7207662031929231,8137,3 -8138,58676982,-0.7874269713635701,8138,3 -8139,12700621,0.47742529978911935,8139,3 -8140,23813937,-0.8641074569757987,8140,3 -8141,39903289,1.3857129235049284,8141,3 -8142,36835270,-2.0063300999889875,8142,3 -8143,37279195,0.09615789226004974,8143,3 -8144,63352488,-0.9419455601009413,8144,3 -8145,84604236,-0.7436568254181731,8145,3 -8146,78368387,-1.2955664424320679,8146,3 -8147,15530995,0.6763689454273754,8147,3 -8148,51868739,-0.7015073948057012,8148,3 -8149,86744444,-0.17739942289225333,8149,3 -8150,22123215,-1.4293322199043341,8150,3 -8151,65765494,-0.4295515292168592,8151,3 -8152,65695319,0.3802409475939972,8152,3 -8153,70892206,1.7305178694801406,8153,3 -8154,18709112,2.5305174639628008,8154,3 -8155,48524316,-0.2948610531336422,8155,3 -8156,12390843,-0.8530960548938514,8156,3 -8157,29236458,1.1180638588025125,8157,3 -8158,89023688,0.5830767710711016,8158,3 -8159,79053156,-0.7622647925121369,8159,3 -8160,17249639,1.3201394467520398,8160,3 -8161,11938701,-0.6525473752732993,8161,3 -8162,71005488,-1.1515153661193938,8162,3 -8163,84065697,1.2214806072658193,8163,3 -8164,43327474,0.11240175913626152,8164,3 -8165,12706083,-2.3584386238999793,8165,3 -8166,13494142,0.6294195831591604,8166,3 -8167,39118956,-1.2262054943771912,8167,3 -8168,63357835,0.7265458073126049,8168,3 -8169,75762544,-0.06483717737698044,8169,3 -8170,20058394,0.03934930281159573,8170,3 -8171,28435473,-1.7062666218642897,8171,3 -8172,19256787,-1.3969545565936847,8172,3 -8173,55034601,0.9230336635215863,8173,3 -8174,54588502,-0.019348393193966768,8174,3 -8175,85526691,0.1877687438873877,8175,3 -8176,60072071,0.3589014745725423,8176,3 -8177,20813284,-0.6133523987550794,8177,3 -8178,50153433,-0.01952254381992447,8178,3 -8179,13293602,0.014039418461420377,8179,3 -8180,39059632,-0.4816025390934871,8180,3 -8181,10620657,-0.4839757049472589,8181,3 -8182,87719348,-1.6900341527406686,8182,3 -8183,78422300,-0.5611835959943355,8183,3 -8184,34712532,-0.11513281424491427,8184,3 -8185,75498913,-0.1921746003649813,8185,3 -8186,63769413,-0.5301909762224291,8186,3 -8187,30994963,-0.4090479419126831,8187,3 -8188,54964774,0.6796374830735569,8188,3 -8189,27735748,0.490521583224144,8189,3 -8190,56624518,2.1846477151837504,8190,3 -8191,26315651,0.5863602333040699,8191,3 -8192,40227701,0.692035848467676,8192,3 -8193,23296199,-1.4089577074265232,8193,3 -8194,81082435,-0.8822222840903893,8194,3 -8195,88608719,-1.3231913270493734,8195,3 -8196,20481378,-1.628022343467122,8196,3 -8197,23586762,-2.102357821798134,8197,3 -8198,44573644,0.9387961145517435,8198,3 -8199,26827070,-0.7838825172826493,8199,3 -8200,84995243,0.18101789546031877,8200,3 -8201,35686578,-0.9770034425294103,8201,3 -8202,54502617,1.3269996958190686,8202,3 -8203,66924087,-2.476056829244921,8203,3 -8204,10941717,-0.5853376517232748,8204,3 -8205,38335839,-1.0362768112323262,8205,3 -8206,51276313,1.471517621125198,8206,3 -8207,69850084,0.5661779659800351,8207,3 -8208,64372444,-1.2381404743554754,8208,3 -8209,82112960,0.7209252314133374,8209,3 -8210,51831544,-0.281645268898052,8210,3 -8211,70599708,-0.34639568262751275,8211,3 -8212,64128663,-1.601754515356087,8212,3 -8213,39462982,0.471102999392673,8213,3 -8214,38796503,1.2723105582065328,8214,3 -8215,46832321,1.4119894006325306,8215,3 -8216,37944946,-0.5327843445336713,8216,3 -8217,11835387,-0.18243654832880066,8217,3 -8218,21776851,0.49890790317941297,8218,3 -8219,28045001,-0.002337167415060254,8219,3 -8220,66050078,1.1724935306205568,8220,3 -8221,61685884,-1.3028755715386144,8221,3 -8222,19297849,1.3288407318613416,8222,3 -8223,68796208,2.7901968992072366,8223,3 -8224,45904569,2.410637337220211,8224,3 -8225,69973553,0.4031539897567281,8225,3 -8226,52760105,1.443876314052295,8226,3 -8227,56209006,0.5051346695314926,8227,3 -8228,32952341,-2.413182639455862,8228,3 -8229,56613710,2.1586971697422346,8229,3 -8230,45134098,-0.8676185055664886,8230,3 -8231,20700827,-2.135916732598311,8231,3 -8232,18970155,-1.1928109038328298,8232,3 -8233,56375147,-0.11602543501121525,8233,3 -8234,31172927,0.3016009815409046,8234,3 -8235,73021373,-0.5352337609198826,8235,3 -8236,14242057,0.969058187943441,8236,3 -8237,65560382,-1.3496894994537654,8237,3 -8238,16430296,0.3354611486307436,8238,3 -8239,36830249,-0.32489853797610085,8239,3 -8240,37904620,-0.3170463167265468,8240,3 -8241,81121490,1.8020221074881408,8241,3 -8242,49770742,-2.233817936925064,8242,3 -8243,70962240,-0.011728616510128376,8243,3 -8244,43926412,0.4319361876242853,8244,3 -8245,24747850,0.7267539397316531,8245,3 -8246,84949682,1.4004286595732283,8246,3 -8247,82504457,1.0976868478652264,8247,3 -8248,88141000,-0.3874797389652691,8248,3 -8249,31025923,0.5254346751165042,8249,3 -8250,72461317,0.3509365479001168,8250,3 -8251,37006554,-0.15936859674972112,8251,3 -8252,28630583,0.5182059978978849,8252,3 -8253,55928036,-0.5488972208395838,8253,3 -8254,77184552,0.9000777558131512,8254,3 -8255,66314858,-1.0847092927296964,8255,3 -8256,89070172,1.1708492547491016,8256,3 -8257,13599935,1.1252729115585653,8257,3 -8258,59499945,0.10366544466888508,8258,3 -8259,57093991,-0.4627785318222133,8259,3 -8260,84720668,1.8581915298011524,8260,3 -8261,40095943,-1.2069678593643798,8261,3 -8262,71906720,-0.4252010148070358,8262,3 -8263,18482637,0.24946979759342963,8263,3 -8264,41499611,0.2618954782831883,8264,3 -8265,44867792,-0.33948361850132497,8265,3 -8266,79847102,1.0748806793829468,8266,3 -8267,23095898,-0.34507270621115566,8267,3 -8268,36874109,0.8354210331329315,8268,3 -8269,21031972,0.5483900245989642,8269,3 -8270,20581540,-1.2830734658461265,8270,3 -8271,56805400,0.30361904223264863,8271,3 -8272,34419801,0.13985808268600555,8272,3 -8273,65045475,-0.8832202361134638,8273,3 -8274,45122392,0.6557551940941334,8274,3 -8275,55660201,-0.7857394843257066,8275,3 -8276,61113455,-1.5130616909849788,8276,3 -8277,70246699,-0.11090897564188619,8277,3 -8278,26146458,-1.263212587518674,8278,3 -8279,77582625,-1.1301012889905506,8279,3 -8280,42031848,1.3553277537303212,8280,3 -8281,89332761,0.2617066321904625,8281,3 -8282,50465031,-1.0994046434921818,8282,3 -8283,12443009,-1.0635432312054418,8283,3 -8284,83282509,-0.33530999809056966,8284,3 -8285,68051026,-0.3860605637516466,8285,3 -8286,31238226,-1.224456872634458,8286,3 -8287,80919277,0.7347698971564416,8287,3 -8288,34139718,-2.075086154216999,8288,3 -8289,51448495,0.3905113986679309,8289,3 -8290,77748138,-0.688218308406318,8290,3 -8291,13211000,0.17649516668506762,8291,3 -8292,88861270,0.5826220582802552,8292,3 -8293,78594623,-1.2686666050387558,8293,3 -8294,22341659,-2.9889860740355725,8294,3 -8295,70870776,-0.6638623098091854,8295,3 -8296,88629159,-0.9107043763154338,8296,3 -8297,47305025,0.17582310490553715,8297,3 -8298,80666078,0.365428589669087,8298,3 -8299,12301373,0.9469188531045978,8299,3 -8300,29014803,0.1454708858884717,8300,3 -8301,89359671,-0.9966093549910183,8301,3 -8302,37236018,-1.7147954798297358,8302,3 -8303,13342259,-0.15755776194341392,8303,3 -8304,17100714,-1.2854346839588207,8304,3 -8305,82047855,0.643808440113864,8305,3 -8306,74516033,1.52645459599129,8306,3 -8307,60414741,0.869062558012849,8307,3 -8308,16294340,1.6315347234634765,8308,3 -8309,65059156,1.3496528765638294,8309,3 -8310,70596404,1.7908181628975577,8310,3 -8311,34360822,0.5521631164059863,8311,3 -8312,67029371,0.12622686339235734,8312,3 -8313,47524795,-0.095752662789524,8313,3 -8314,33905686,1.7887742183811504,8314,3 -8315,56468642,-0.5575223987786413,8315,3 -8316,18740847,1.8007998078882306,8316,3 -8317,55063479,1.5236335546495177,8317,3 -8318,30108322,-0.6253598688419831,8318,3 -8319,29806598,-0.458291335594545,8319,3 -8320,66560133,1.0321167067334425,8320,3 -8321,30544711,-1.3931128565869813,8321,3 -8322,19405214,0.18191520624674276,8322,3 -8323,56397071,-1.4609739911820723,8323,3 -8324,53278712,-0.6884878182953282,8324,3 -8325,62536012,-1.0108661186038486,8325,3 -8326,56591964,0.0014772383057755382,8326,3 -8327,67071791,0.870371952731462,8327,3 -8328,12168094,-1.10689747433569,8328,3 -8329,84967469,0.12136889422808239,8329,3 -8330,28215706,-0.8554574517021719,8330,3 -8331,17273821,1.0785798225389334,8331,3 -8332,41567660,1.166230258698866,8332,3 -8333,36662569,0.7087982498405992,8333,3 -8334,32536851,0.4103010887721396,8334,3 -8335,57810304,-1.3207078523141658,8335,3 -8336,15660764,0.8672331232702266,8336,3 -8337,49353194,1.647720753074747,8337,3 -8338,13601131,-0.7088137060596705,8338,3 -8339,56499603,0.017444292429197927,8339,3 -8340,57160306,0.01825105057808995,8340,3 -8341,71846639,-0.8608711974829146,8341,3 -8342,89132189,1.2358769240294274,8342,3 -8343,38949699,1.0255218557353571,8343,3 -8344,43590509,1.3305382546493933,8344,3 -8345,65843261,-0.9790157431928654,8345,3 -8346,36987098,-0.1972638390770332,8346,3 -8347,67856534,1.968134002154174,8347,3 -8348,68257191,-0.32803398035954856,8348,3 -8349,12600871,-1.370979318931637,8349,3 -8350,31559887,-0.3434850694079711,8350,3 -8351,79168626,-0.1935023039848714,8351,3 -8352,11731518,-0.37158628680444084,8352,3 -8353,70188769,-0.8427852488474606,8353,3 -8354,42494058,-0.086796285537579,8354,3 -8355,24236150,1.0290087666883139,8355,3 -8356,76499499,-1.3593429715704228,8356,3 -8357,29889501,-0.7257049713195257,8357,3 -8358,55844237,-0.6068110860135987,8358,3 -8359,18246840,0.0451156159392486,8359,3 -8360,80288442,-0.631359250563309,8360,3 -8361,45982988,0.3555446472087541,8361,3 -8362,13728711,-0.16162133594687048,8362,3 -8363,36925054,-0.3389726905206568,8363,3 -8364,29805078,-2.273183345330171,8364,3 -8365,77559448,-0.1414709540740687,8365,3 -8366,26250058,0.529205405178023,8366,3 -8367,69115519,1.0937958827611551,8367,3 -8368,18721570,0.6410819477167004,8368,3 -8369,34504196,-0.8607881956460289,8369,3 -8370,49607520,-0.35877542631540893,8370,3 -8371,89121418,-0.7466460332094934,8371,3 -8372,30306688,-1.3783679282528603,8372,3 -8373,21629797,0.19569150841684851,8373,3 -8374,63387859,-0.6693689633690183,8374,3 -8375,48904142,1.3728553230411504,8375,3 -8376,40097651,0.19407562801147632,8376,3 -8377,13270589,1.2774474872694457,8377,3 -8378,23065420,-0.3777013628819553,8378,3 -8379,89666673,-0.6647005330773423,8379,3 -8380,88050502,-1.8326394912647408,8380,3 -8381,41206378,-0.9594144994107456,8381,3 -8382,76711596,0.984452456335693,8382,3 -8383,28605546,0.48287270317511116,8383,3 -8384,48649346,-0.9218790574836994,8384,3 -8385,14627586,1.3578292934902962,8385,3 -8386,13513234,1.7692070851027981,8386,3 -8387,15828875,-1.839711806610766,8387,3 -8388,67863930,-0.10231304216732998,8388,3 -8389,64467805,0.13948955174605776,8389,3 -8390,22220051,-1.5302855935973776,8390,3 -8391,31212511,0.3163943155826154,8391,3 -8392,36596440,-1.7495671741658934,8392,3 -8393,44431708,-0.7008158062553539,8393,3 -8394,39760892,-0.650530843358159,8394,3 -8395,30950343,-0.25000345835363674,8395,3 -8396,80060807,0.4328551102611295,8396,3 -8397,64092558,1.0605401560747378,8397,3 -8398,22119445,-0.7621419865284025,8398,3 -8399,42061506,-0.46864973975611873,8399,3 -8400,47731237,0.708863093342341,8400,3 -8401,58764265,0.9278404411479906,8401,3 -8402,39196457,0.8046066312267494,8402,3 -8403,44422933,0.8825661233404887,8403,3 -8404,31908106,0.909265380388789,8404,3 -8405,89647111,-0.4281924668843785,8405,3 -8406,73339254,2.652021388635983,8406,3 -8407,84187313,-0.8606849028463851,8407,3 -8408,31250784,-0.35762131826329124,8408,3 -8409,79425960,-1.8876227439117912,8409,3 -8410,72957549,-1.4773196398300028,8410,3 -8411,65602662,-1.6739699744044494,8411,3 -8412,66218099,-0.32608376154113167,8412,3 -8413,33152705,-1.1243808378657494,8413,3 -8414,36395959,-0.34788076635472803,8414,3 -8415,16675640,0.23952461163916763,8415,3 -8416,68318007,-0.3296245853698174,8416,3 -8417,50826429,2.480511960252662,8417,3 -8418,51272421,-1.5781851602189614,8418,3 -8419,77872060,0.07929846505433145,8419,3 -8420,72447454,0.3165624410889844,8420,3 -8421,29010034,1.466868237866804,8421,3 -8422,22904488,0.13842792854486213,8422,3 -8423,26713789,2.521140664407932,8423,3 -8424,77565163,1.4656602695995962,8424,3 -8425,28772150,-0.08132114850226178,8425,3 -8426,86745251,0.6569755096689821,8426,3 -8427,34494926,-1.484657005974602,8427,3 -8428,48085656,0.4028470048056669,8428,3 -8429,37269135,-0.9946555109544203,8429,3 -8430,82203012,-0.2883983694062085,8430,3 -8431,25369764,-0.6629431356838305,8431,3 -8432,88841523,-0.21416962296962658,8432,3 -8433,72087219,0.12909514473809416,8433,3 -8434,53515291,0.7813261772285174,8434,3 -8435,51171926,-0.8020033513420173,8435,3 -8436,34651700,-0.252243583673835,8436,3 -8437,58670484,-0.9643390000235762,8437,3 -8438,81772677,-0.5283835414845306,8438,3 -8439,80840246,1.2010625963802997,8439,3 -8440,78282228,-0.5808339077803355,8440,3 -8441,24416775,0.3686185192056085,8441,3 -8442,19820734,1.5962110037620598,8442,3 -8443,83335529,-0.02431254024844759,8443,3 -8444,87538939,1.0248067303970319,8444,3 -8445,81087827,-0.5780891034195637,8445,3 -8446,53337289,-1.5345300184059907,8446,3 -8447,67177672,0.24611101979086414,8447,3 -8448,43012075,-1.3310938041826472,8448,3 -8449,41406959,-0.1706835728347951,8449,3 -8450,17469263,-1.122005673621724,8450,3 -8451,68406345,0.2511478937512289,8451,3 -8452,57515842,-1.9733241804835526,8452,3 -8453,54131978,-0.4013123116722711,8453,3 -8454,43554836,0.027067529950042846,8454,3 -8455,32680676,0.5124569626465368,8455,3 -8456,51137596,-0.9860778072158903,8456,3 -8457,13143272,0.70432484389937,8457,3 -8458,30562671,0.8129763199144969,8458,3 -8459,42266168,-0.26487574297865496,8459,3 -8460,32956845,0.11400663938477183,8460,3 -8461,77531988,0.5233352743830564,8461,3 -8462,22621110,-0.18149652865386437,8462,3 -8463,19428104,-2.020669012648714,8463,3 -8464,29958194,0.008485400915889644,8464,3 -8465,80435417,1.164143192101276,8465,3 -8466,65697397,-0.39312398450052605,8466,3 -8467,78692796,-1.1694426208307949,8467,3 -8468,63915551,-0.5538468556801388,8468,3 -8469,20652737,-1.519481030536679,8469,3 -8470,13740307,0.5833890403416995,8470,3 -8471,87977421,-0.386821158252979,8471,3 -8472,67433433,-0.8184187206947556,8472,3 -8473,30026842,-0.11605924845678282,8473,3 -8474,68045217,0.013449259739327136,8474,3 -8475,51535278,1.1749193827416555,8475,3 -8476,59659502,1.8941904752794239,8476,3 -8477,78472260,-1.5986537748273677,8477,3 -8478,21471191,0.5597200354742033,8478,3 -8479,34470135,0.3183734905037023,8479,3 -8480,53574329,1.7475382839017481,8480,3 -8481,11952346,1.6675579111218501,8481,3 -8482,61761294,0.9186314301073553,8482,3 -8483,32339502,-0.20082765284410262,8483,3 -8484,60761703,-0.3158734309059637,8484,3 -8485,89733204,0.7043369002094448,8485,3 -8486,51716507,0.5168972216055155,8486,3 -8487,28834052,-0.46290032426929073,8487,3 -8488,64807644,-1.182985227694402,8488,3 -8489,18793905,-0.3753359116388908,8489,3 -8490,49366967,-0.47615567593870434,8490,3 -8491,33451246,0.054630462874399134,8491,3 -8492,50335315,0.7085054465079422,8492,3 -8493,21005989,0.35465252619507626,8493,3 -8494,53573559,-1.3271073585078923,8494,3 -8495,72067941,-0.2259194397378853,8495,3 -8496,39534011,-0.14342463732589558,8496,3 -8497,57141028,0.7938952766879249,8497,3 -8498,53075152,3.047900190774172,8498,3 -8499,76971593,-0.3102248456372595,8499,3 -8500,75370151,0.8891858148599435,8500,3 -8501,19199443,-0.30517098183812763,8501,3 -8502,72940491,-0.47772854368543144,8502,3 -8503,33179007,0.5869027598915212,8503,3 -8504,71685693,-0.7815706112611939,8504,3 -8505,65169682,-0.7579438304668473,8505,3 -8506,31362962,1.4771941658859837,8506,3 -8507,82330680,2.389687590740971,8507,3 -8508,10892634,-0.11074240836703719,8508,3 -8509,51596276,-1.2936387972820222,8509,3 -8510,34715786,0.2446767949826801,8510,3 -8511,76523761,0.6282780255849904,8511,3 -8512,73574996,0.672046213309839,8512,3 -8513,27197399,-0.2489065657856063,8513,3 -8514,88198831,0.6061902923226618,8514,3 -8515,10626912,0.024037451094745,8515,3 -8516,62259352,-0.33573484824178984,8516,3 -8517,11384793,-0.004753961527256196,8517,3 -8518,66122619,-0.023904764317840405,8518,3 -8519,78136624,-1.446184004492971,8519,3 -8520,51750994,-0.8976815180833619,8520,3 -8521,64516451,-0.8361895311065639,8521,3 -8522,40040146,-0.4605227890488367,8522,3 -8523,16427473,-0.12796071272504178,8523,3 -8524,11670534,-0.20099583821255235,8524,3 -8525,73261041,2.4843289067187113,8525,3 -8526,23969958,-2.095850456835503,8526,3 -8527,34701544,-0.3456523095285143,8527,3 -8528,81192555,-1.048883809938495,8528,3 -8529,74064620,-0.5184696817766041,8529,3 -8530,19927397,-0.9928828044408897,8530,3 -8531,53078964,1.8071867311029617,8531,3 -8532,88595882,0.44559988341720197,8532,3 -8533,86683354,-0.597994118830939,8533,3 -8534,68076726,0.053819410372929456,8534,3 -8535,68258501,-1.09988156985987,8535,3 -8536,33220619,0.42724248613845794,8536,3 -8537,59446511,-0.7793869131288133,8537,3 -8538,46659581,-0.4672038412483565,8538,3 -8539,12736845,-0.2940876929302577,8539,3 -8540,18673244,-0.07196086701873763,8540,3 -8541,36252065,-0.467916503665652,8541,3 -8542,39914990,1.3737708101492567,8542,3 -8543,24377297,-0.3940247134105171,8543,3 -8544,85182278,2.6749542273776243,8544,3 -8545,46571453,0.3733615479792256,8545,3 -8546,57579660,1.2590562769184268,8546,3 -8547,45786336,-2.09850330191106,8547,3 -8548,22077441,0.9852252434799916,8548,3 -8549,26986391,0.7245748250448312,8549,3 -8550,51988224,-0.3531635828676095,8550,3 -8551,77502409,1.7137236268812313,8551,3 -8552,39178513,-0.7689113674538042,8552,3 -8553,40214015,-1.5404333502089802,8553,3 -8554,57801851,-0.280388357024873,8554,3 -8555,66704521,-0.41001578285406354,8555,3 -8556,12570220,0.6167078654114689,8556,3 -8557,54853447,1.9904800700973346,8557,3 -8558,81623766,-0.34251237600940443,8558,3 -8559,46969771,-1.0553332247704867,8559,3 -8560,14981800,0.22454367725777089,8560,3 -8561,47453732,-0.5065987712189285,8561,3 -8562,89360329,0.28695694482244244,8562,3 -8563,11265671,-0.22109096473900602,8563,3 -8564,32280153,-1.9111316380033194,8564,3 -8565,73448933,0.49316663732980975,8565,3 -8566,76682910,0.8609591378517045,8566,3 -8567,56655113,-0.15285650994426642,8567,3 -8568,56810231,-0.4395573897012918,8568,3 -8569,54320898,0.18759521350903105,8569,3 -8570,75014109,-0.24127522120576458,8570,3 -8571,82398967,0.007810165212407695,8571,3 -8572,25489451,0.6769358908462024,8572,3 -8573,81008880,-0.917215058219212,8573,3 -8574,22083513,0.9284859239124502,8574,3 -8575,16350791,-0.17694666024813313,8575,3 -8576,71556442,-1.169352592575245,8576,3 -8577,74433914,-0.5025563355397618,8577,3 -8578,36115255,-0.8153374470383282,8578,3 -8579,42409194,1.3305305808647925,8579,3 -8580,28055231,2.306659641296105,8580,3 -8581,73181962,-2.397169006275642,8581,3 -8582,35786389,-0.2767309204081864,8582,3 -8583,29293542,1.557567925893111,8583,3 -8584,82767335,0.9300571559344992,8584,3 -8585,66789518,2.1150194895021763,8585,3 -8586,53596855,1.9195919555501453,8586,3 -8587,73389208,0.5350407620184592,8587,3 -8588,25550576,-1.4259822150627082,8588,3 -8589,53994617,-1.0017235247783312,8589,3 -8590,78305561,-0.5345906775922068,8590,3 -8591,64338611,0.380409522217062,8591,3 -8592,56785809,-0.4773401984404635,8592,3 -8593,34591381,-0.3195338055329969,8593,3 -8594,44874264,0.48431928199826657,8594,3 -8595,10844523,0.10713220183800079,8595,3 -8596,82363720,0.7214070800230411,8596,3 -8597,38291589,1.0077014341031274,8597,3 -8598,51412210,-0.24331264967958588,8598,3 -8599,38982709,1.0183334472451553,8599,3 -8600,41867425,0.9844740901892887,8600,3 -8601,74845752,1.5075886494926993,8601,3 -8602,55748709,-0.4478593469717832,8602,3 -8603,71124690,0.31073880301710716,8603,3 -8604,47643696,1.2659430734810855,8604,3 -8605,10977762,0.13269657956413758,8605,3 -8606,31123937,0.09003505323215401,8606,3 -8607,77522176,1.200306397589438,8607,3 -8608,75913737,0.18711740030458524,8608,3 -8609,59950222,0.15015768953942218,8609,3 -8610,57940325,0.22875084829051875,8610,3 -8611,80772279,0.5577909261088002,8611,3 -8612,81616978,-0.5813783749111179,8612,3 -8613,38247686,1.523265365776274,8613,3 -8614,19849870,-1.0321093487743456,8614,3 -8615,28067407,0.5706874681283634,8615,3 -8616,86675086,-0.0909837178266969,8616,3 -8617,58242630,0.1608504641542544,8617,3 -8618,45123861,-0.40762415739437463,8618,3 -8619,33392691,0.8268952568550978,8619,3 -8620,76598914,1.1285190622042824,8620,3 -8621,26104060,-1.7168046330923319,8621,3 -8622,58957393,-0.37033810401919964,8622,3 -8623,28312627,-0.7933023364406687,8623,3 -8624,39537537,1.6815028528125286,8624,3 -8625,54885875,1.9223434068208531,8625,3 -8626,71077664,0.02239141603213038,8626,3 -8627,29888633,1.0092362486425182,8627,3 -8628,87175206,-0.7378669867046205,8628,3 -8629,26349858,-1.2839309969513633,8629,3 -8630,33262979,-0.3626778434527785,8630,3 -8631,31483453,0.09241440609923914,8631,3 -8632,35805866,-0.5962317080978992,8632,3 -8633,68354801,-1.5933458364864066,8633,3 -8634,74888099,-0.9115712934086753,8634,3 -8635,66259669,-0.5296053309017863,8635,3 -8636,48279202,-0.389185683818224,8636,3 -8637,50921330,0.3739944226982874,8637,3 -8638,45962434,-0.09253225927189002,8638,3 -8639,53374480,-0.2571536082858787,8639,3 -8640,65899131,-2.169471935116824,8640,3 -8641,68026901,0.23744310828480047,8641,3 -8642,44312568,-0.14877734637091844,8642,3 -8643,55196950,0.10740086955327295,8643,3 -8644,45763523,-0.6921283505443062,8644,3 -8645,61008484,1.3403904805616016,8645,3 -8646,55170431,1.684574403303127,8646,3 -8647,29251534,0.01503922284487255,8647,3 -8648,70849528,-0.5939235162784811,8648,3 -8649,45144075,0.13214585598066364,8649,3 -8650,51121844,-1.1944398951620823,8650,3 -8651,37495911,0.7197070884463722,8651,3 -8652,55895086,0.9365258380397344,8652,3 -8653,73689086,1.4819855049435977,8653,3 -8654,71864540,0.21006730938211998,8654,3 -8655,54165127,0.49911503774843763,8655,3 -8656,70466962,0.9491255988192727,8656,3 -8657,64357652,0.677571416404659,8657,3 -8658,29928592,-1.5412055187851008,8658,3 -8659,73014171,-0.02078328604963612,8659,3 -8660,72556747,-0.28428979473212435,8660,3 -8661,30214534,-0.8705836969664504,8661,3 -8662,21329410,0.6996053533926014,8662,3 -8663,21999050,2.0072870628714186,8663,3 -8664,66077157,1.1043589225201105,8664,3 -8665,66735320,0.12146559376215495,8665,3 -8666,38815341,0.2552395889957058,8666,3 -8667,73609692,1.2996381340856114,8667,3 -8668,56342200,0.792485534609105,8668,3 -8669,40207538,0.5279097096680652,8669,3 -8670,88176438,-0.6269906882177001,8670,3 -8671,33787823,1.2800743518659354,8671,3 -8672,63408209,-0.8705914083920907,8672,3 -8673,89746763,-0.1588636830551777,8673,3 -8674,31983543,0.7715311224377266,8674,3 -8675,41539662,0.12257127854593569,8675,3 -8676,60252920,-2.616093042872558,8676,3 -8677,30780575,0.21496339226336567,8677,3 -8678,11311521,0.4122926277886764,8678,3 -8679,86496385,0.9198836270718888,8679,3 -8680,17480794,2.1293027715218416,8680,3 -8681,14126632,0.5304090295292522,8681,3 -8682,44074211,-0.29362466621501127,8682,3 -8683,26856720,0.7695687474455218,8683,3 -8684,18284989,1.5904850055075734,8684,3 -8685,19853346,0.10869091592079644,8685,3 -8686,54389138,-0.781261197566148,8686,3 -8687,76669398,-0.26211250641219386,8687,3 -8688,42075327,-0.5809208670335406,8688,3 -8689,53327364,-0.2842288956686932,8689,3 -8690,32993797,-0.5399972534521671,8690,3 -8691,86992106,-0.7325412686514081,8691,3 -8692,46276826,1.57057100546997,8692,3 -8693,48497046,0.32452989032644836,8693,3 -8694,42383042,0.5536948020685303,8694,3 -8695,88914078,-1.207204356745618,8695,3 -8696,53355500,1.1029465753860668,8696,3 -8697,33101728,-1.542579168623052,8697,3 -8698,36776412,-0.45226896948653655,8698,3 -8699,63875453,-0.22601000547984534,8699,3 -8700,12803025,-0.37788968607361756,8700,3 -8701,11211247,1.011421923296761,8701,3 -8702,27862379,1.0468307310957174,8702,3 -8703,29658436,0.4342833452331569,8703,3 -8704,71669424,0.8552276359814819,8704,3 -8705,87784983,1.214425597471769,8705,3 -8706,21552087,0.14869946854683852,8706,3 -8707,49750207,-0.6847296620688139,8707,3 -8708,85553456,-0.08580810867960678,8708,3 -8709,31633240,0.5363585395875291,8709,3 -8710,25229624,0.16851421959923385,8710,3 -8711,88654536,1.4831420170945253,8711,3 -8712,53407530,0.9692459213452084,8712,3 -8713,32404846,0.08432580031099571,8713,3 -8714,65503798,0.2694089464696758,8714,3 -8715,41609047,1.1408003921351069,8715,3 -8716,63887997,-0.27751512911739346,8716,3 -8717,27509148,-1.5160091882578626,8717,3 -8718,30237446,-0.6478679200508962,8718,3 -8719,86987156,-0.6423835748378814,8719,3 -8720,10926019,1.7894019032711603,8720,3 -8721,37766057,-0.6903833554182698,8721,3 -8722,75342907,-0.6802972070062087,8722,3 -8723,39377169,-1.2864559402739004,8723,3 -8724,59391424,-0.18824958620691443,8724,3 -8725,81349730,0.3355494490640889,8725,3 -8726,67937386,-0.3336949979034887,8726,3 -8727,41142415,1.842426237162799,8727,3 -8728,63283906,-0.7887821615356511,8728,3 -8729,35584114,-0.5125359814210011,8729,3 -8730,54982067,-2.07703666532885,8730,3 -8731,19124952,-0.8008891709219934,8731,3 -8732,50463779,0.8620009090013853,8732,3 -8733,15864138,0.5531242509310194,8733,3 -8734,66541313,0.44496628917214137,8734,3 -8735,24100312,0.8240317179877906,8735,3 -8736,52912479,-1.8219297631401465,8736,3 -8737,48391768,-0.9075436238763106,8737,3 -8738,11844952,-0.45341183061551127,8738,3 -8739,86274715,-0.5467483016518004,8739,3 -8740,11562950,1.9885239828788746,8740,3 -8741,66769142,0.1263201268885527,8741,3 -8742,88134150,-1.575483784900851,8742,3 -8743,84603615,0.3942567221671303,8743,3 -8744,82712794,1.8218371828386424,8744,3 -8745,58172967,-2.012721987599106,8745,3 -8746,80619967,0.5592055902990595,8746,3 -8747,71120332,0.8802830361683825,8747,3 -8748,28546848,0.8747660411673052,8748,3 -8749,54985942,1.1688589469797728,8749,3 -8750,50204338,-0.4766905507822404,8750,3 -8751,37216258,0.1385837363756003,8751,3 -8752,23263505,0.6749770548189172,8752,3 -8753,48701775,0.2176692261955587,8753,3 -8754,13439264,-1.4225077814836156,8754,3 -8755,37129290,-0.5098779635767766,8755,3 -8756,78319473,1.1837897135176223,8756,3 -8757,16679060,2.1876185356657514,8757,3 -8758,21607050,-0.534956547096808,8758,3 -8759,88908291,0.9078567960657112,8759,3 -8760,51650226,-0.17144950764742936,8760,3 -8761,26837296,0.33678142742922756,8761,3 -8762,56959790,0.11712547062357367,8762,3 -8763,21283163,0.0650149188642594,8763,3 -8764,29117425,0.9051156119369624,8764,3 -8765,70590883,0.6697133690346982,8765,3 -8766,83826580,0.17363912895155864,8766,3 -8767,64955189,0.19204046142496217,8767,3 -8768,34382968,0.19800922757295686,8768,3 -8769,84486838,1.4791523659899737,8769,3 -8770,38298124,-0.8864163941425599,8770,3 -8771,63946860,1.0400718449478432,8771,3 -8772,47231686,0.2872607481084797,8772,3 -8773,62041076,-0.11857190074881849,8773,3 -8774,54021799,-1.8082294565117487,8774,3 -8775,29116385,-0.219189875754317,8775,3 -8776,89804816,1.6860900987619791,8776,3 -8777,80959888,-0.7445264111406388,8777,3 -8778,37063933,0.21623833504034348,8778,3 -8779,36838647,-0.8054948426638633,8779,3 -8780,57377510,1.8074916891946236,8780,3 -8781,74583856,1.485766959100162,8781,3 -8782,21803193,0.25628178511335403,8782,3 -8783,89258100,0.8547583464000632,8783,3 -8784,53079310,-1.5015792216331316,8784,3 -8785,62468542,-0.6822758561396974,8785,3 -8786,81785105,-0.39661909870250467,8786,3 -8787,69175123,0.20960492768442174,8787,3 -8788,69374174,0.29797270073212545,8788,3 -8789,19651990,-1.8423981011675437,8789,3 -8790,82311079,-0.6264069962413199,8790,3 -8791,33411876,1.5851214080841156,8791,3 -8792,56740118,-0.16261855627946015,8792,3 -8793,64204194,0.5330478259075594,8793,3 -8794,69980903,-0.02830071680460899,8794,3 -8795,30654866,-0.8081543378984665,8795,3 -8796,37737614,-2.389395121517257,8796,3 -8797,73809772,0.30721320634251464,8797,3 -8798,30368742,-0.6075368077176961,8798,3 -8799,37452437,-0.4651069756918807,8799,3 -8800,17724494,0.3974664119224685,8800,3 -8801,40313919,0.6758052477833106,8801,3 -8802,72287403,0.4759789958212877,8802,3 -8803,43252932,1.1328523342906511,8803,3 -8804,66059481,-0.9724338223695675,8804,3 -8805,21368050,-0.8562031587851185,8805,3 -8806,68575642,-0.9655971857067013,8806,3 -8807,46164281,-2.0843191501091214,8807,3 -8808,13012168,1.4358598362093529,8808,3 -8809,43504319,-0.40426897589590827,8809,3 -8810,68142516,-1.645948771834764,8810,3 -8811,63315097,-1.5328672544490514,8811,3 -8812,55894589,0.7320647435845942,8812,3 -8813,51696093,-0.3209975440227119,8813,3 -8814,40434048,-0.7978973988818097,8814,3 -8815,48527298,-0.4538849641865171,8815,3 -8816,36393925,-1.068400582728013,8816,3 -8817,13528565,0.49206571270109395,8817,3 -8818,11171263,-0.07351839154193486,8818,3 -8819,12955932,1.5105265961046719,8819,3 -8820,25673767,0.08899605662042986,8820,3 -8821,16875594,0.05009195880240185,8821,3 -8822,82117848,-0.2125196686227891,8822,3 -8823,26208163,2.088363650697293,8823,3 -8824,49339269,-0.41670331699127533,8824,3 -8825,10213891,-1.4833863865127583,8825,3 -8826,33049234,0.06220948622959,8826,3 -8827,16293436,-2.2296062565599337,8827,3 -8828,78104177,1.361371813134378,8828,3 -8829,39707530,1.017512979000181,8829,3 -8830,56751353,0.3703272710915183,8830,3 -8831,39928328,1.2383383617923112,8831,3 -8832,51156036,0.11028471056948723,8832,3 -8833,83349190,-0.05704215541464368,8833,3 -8834,37486786,0.9613661046356422,8834,3 -8835,67370220,-0.10286006587393577,8835,3 -8836,37079746,1.6330952541790953,8836,3 -8837,53725095,-0.49364199439309414,8837,3 -8838,87588366,0.9788739121773152,8838,3 -8839,45244666,-0.5408212576325332,8839,3 -8840,10266562,0.6936028569294401,8840,3 -8841,64056979,0.5510781124814508,8841,3 -8842,35340283,1.0109119621480636,8842,3 -8843,18807755,-0.6814324443712185,8843,3 -8844,59523909,0.47606017076795143,8844,3 -8845,21627948,-0.7942783454467078,8845,3 -8846,59552979,-0.004982728959808631,8846,3 -8847,17606323,0.6234936226733756,8847,3 -8848,71301727,-0.33541716034130686,8848,3 -8849,29210631,-0.6904092743993318,8849,3 -8850,89565273,-0.822004771386328,8850,3 -8851,26886674,-0.9789598260375059,8851,3 -8852,82093633,1.8155918539310472,8852,3 -8853,35509839,0.5757938935394028,8853,3 -8854,69623365,1.3976176872139092,8854,3 -8855,52199301,-1.0252894336578933,8855,3 -8856,51247565,0.23554931696223155,8856,3 -8857,31264422,-0.9631142267611535,8857,3 -8858,29363942,-0.055461960339717425,8858,3 -8859,17073308,0.5263207165998585,8859,3 -8860,87972709,-0.12403916473408666,8860,3 -8861,69793872,-1.9095226452357141,8861,3 -8862,37224297,2.487759116429913,8862,3 -8863,87501272,-0.1251078417086788,8863,3 -8864,72371431,0.7017315781888311,8864,3 -8865,64103961,-0.9521517860052741,8865,3 -8866,49532515,-0.024723718094733546,8866,3 -8867,31853851,1.5191687291421152,8867,3 -8868,47834865,-0.3729736399754344,8868,3 -8869,21489764,-0.24144097663250877,8869,3 -8870,44199156,-0.7416151358938917,8870,3 -8871,38145751,0.1116304794326479,8871,3 -8872,42526266,0.9157843641078799,8872,3 -8873,85908254,-0.7176388914529293,8873,3 -8874,23998805,0.14517159681333222,8874,3 -8875,46425210,-1.1237207180496818,8875,3 -8876,33523745,1.0135866217807294,8876,3 -8877,21617498,-0.8928675585606898,8877,3 -8878,46863248,0.7803268162472919,8878,3 -8879,63628503,0.35985052940524115,8879,3 -8880,47013389,-0.9284919850247032,8880,3 -8881,62779878,1.6461292390593678,8881,3 -8882,26706609,-0.8438639524150923,8882,3 -8883,31405484,0.4804369851535657,8883,3 -8884,86506375,0.03795436378001398,8884,3 -8885,55683931,0.06692938033058597,8885,3 -8886,79318031,0.09419967878817616,8886,3 -8887,60157777,0.6276900766801288,8887,3 -8888,85280326,-0.4133234795618856,8888,3 -8889,29288850,-1.14702160710901,8889,3 -8890,58549911,0.25539231861495293,8890,3 -8891,22675041,-0.4904093122557721,8891,3 -8892,49346094,-0.041379746491515684,8892,3 -8893,62594351,0.730183691943527,8893,3 -8894,69038049,0.5333067644775282,8894,3 -8895,75718317,0.10337308884743937,8895,3 -8896,31493431,-1.2085810395193557,8896,3 -8897,70594513,-0.5422487008395189,8897,3 -8898,65707335,-1.2790965146621711,8898,3 -8899,46367099,-1.0138384735518329,8899,3 -8900,55396761,-0.7352980478019593,8900,3 -8901,40472147,-0.27020333962328325,8901,3 -8902,43063652,-0.10109395489741702,8902,3 -8903,79659826,1.1963784584147876,8903,3 -8904,13387625,-1.9655719801299782,8904,3 -8905,17467862,-0.1715700305738897,8905,3 -8906,81939209,0.9483822093587441,8906,3 -8907,44374857,0.0563257952655757,8907,3 -8908,70350760,1.1441281601391167,8908,3 -8909,38281308,0.31724622113197715,8909,3 -8910,52540203,0.5285290897118397,8910,3 -8911,35653240,0.7001100314289196,8911,3 -8912,13192012,0.5465952495460322,8912,3 -8913,54532634,0.18716548357540694,8913,3 -8914,62392019,-0.629841666352951,8914,3 -8915,47853149,0.039195475532644936,8915,3 -8916,47585073,1.5994770092160304,8916,3 -8917,82334444,0.43849795431342803,8917,3 -8918,71256261,0.1095011388794815,8918,3 -8919,20286674,-0.9682222339494366,8919,3 -8920,35302176,-0.855040417629083,8920,3 -8921,78776352,0.34036719225777523,8921,3 -8922,21566762,0.24862633277973695,8922,3 -8923,35775013,-1.1753528415224186,8923,3 -8924,82255661,0.43433500820194604,8924,3 -8925,80661317,0.04719171192917522,8925,3 -8926,88856259,0.29456236603634844,8926,3 -8927,22283389,2.2742023891143366,8927,3 -8928,31488017,0.8632626977512372,8928,3 -8929,61195828,-0.24159738874783415,8929,3 -8930,51807021,0.9326294184249405,8930,3 -8931,24799792,-1.469909080118229,8931,3 -8932,36366546,1.9720789179842506,8932,3 -8933,18136231,-1.6790704945719346,8933,3 -8934,16579387,0.5052750249540581,8934,3 -8935,60990626,-0.26590188810746,8935,3 -8936,38515021,-0.18367615919689836,8936,3 -8937,31888426,-0.26773058842487457,8937,3 -8938,30925381,-0.6886880282493243,8938,3 -8939,78902763,-2.1469928445466295,8939,3 -8940,47385550,-0.4541335017228081,8940,3 -8941,49859440,1.2846998493297312,8941,3 -8942,21546636,-0.3650971778228408,8942,3 -8943,70312700,-1.3144929944014838,8943,3 -8944,68286829,0.6936137902015189,8944,3 -8945,42589462,-1.361438938628514,8945,3 -8946,14251645,-0.3414810790027796,8946,3 -8947,63972095,0.8145093446845192,8947,3 -8948,55926743,-0.976294078863383,8948,3 -8949,66364433,0.09921512289627939,8949,3 -8950,25728768,0.08148152321816682,8950,3 -8951,20440789,-0.7459954696674088,8951,3 -8952,16424483,-0.11482354383068487,8952,3 -8953,77318499,-0.23307871480519474,8953,3 -8954,37303349,-0.020423211922554408,8954,3 -8955,48594946,-1.0087859257310363,8955,3 -8956,30363163,-0.7029827045532017,8956,3 -8957,24447974,0.3035188166729427,8957,3 -8958,22903359,0.6275341973681265,8958,3 -8959,71243517,0.6459985704540836,8959,3 -8960,51124501,-0.057913711198070934,8960,3 -8961,36074447,-0.36025910580376297,8961,3 -8962,27823501,-0.17995921962873884,8962,3 -8963,70528693,-0.3494188845097388,8963,3 -8964,80440014,-0.06387203812542402,8964,3 -8965,28839156,1.2127408901333674,8965,3 -8966,71061481,1.270456444072579,8966,3 -8967,63795383,0.8186540474406947,8967,3 -8968,13539453,0.4245455345064479,8968,3 -8969,54247322,-0.21884101544505408,8969,3 -8970,73300004,1.0569334678631068,8970,3 -8971,65099947,0.41946032577243036,8971,3 -8972,86491765,-0.575322137584023,8972,3 -8973,61295229,-0.2351856846826022,8973,3 -8974,72227668,-0.2580751894759379,8974,3 -8975,87871922,-0.501735958209642,8975,3 -8976,43000078,-0.5313460737098724,8976,3 -8977,58671261,2.565706380840101,8977,3 -8978,11989902,0.9173225800967356,8978,3 -8979,39326684,-0.9891552004280192,8979,3 -8980,12038708,0.16759481085715086,8980,3 -8981,52367772,1.3674047955968311,8981,3 -8982,21858398,-0.8880007916991648,8982,3 -8983,61987273,0.3557878966259317,8983,3 -8984,68148382,0.4571282584978946,8984,3 -8985,59729068,0.7543749836101808,8985,3 -8986,46293776,-1.5172272443592103,8986,3 -8987,49956563,-0.01405321056763723,8987,3 -8988,27608853,0.343873412514145,8988,3 -8989,43417772,-0.33770715867024703,8989,3 -8990,40159717,1.0132531582150115,8990,3 -8991,17775708,-0.14251485896462246,8991,3 -8992,47366422,0.394573110335041,8992,3 -8993,89937970,-0.4440325797116647,8993,3 -8994,28822757,-0.9036461011843497,8994,3 -8995,54746333,0.7020313558563807,8995,3 -8996,53720772,-0.21899372593106853,8996,3 -8997,52424466,-2.052579271786468,8997,3 -8998,24309472,0.4604483039126179,8998,3 -8999,16815132,-0.33883514714131274,8999,3 -9000,64513125,0.5259334610340354,9000,3 -9001,75784991,1.770617865443842,9001,3 -9002,86277736,-1.608877331224618,9002,3 -9003,48739849,0.05159052078865618,9003,3 -9004,55443624,-0.7751203437749761,9004,3 -9005,79382107,1.1862427916040539,9005,3 -9006,34910789,-1.4188208749015745,9006,3 -9007,39606056,-0.3485053791682368,9007,3 -9008,84445665,0.4035786415869585,9008,3 -9009,61973753,-0.9993102351654553,9009,3 -9010,66598373,-0.19963494018408126,9010,3 -9011,15920471,1.325632395149801,9011,3 -9012,46632721,1.0267296392246086,9012,3 -9013,22046559,1.1771842421233096,9013,3 -9014,13619348,-1.2858184435824485,9014,3 -9015,32794024,1.2485062167075498,9015,3 -9016,78615934,-1.3207184791746058,9016,3 -9017,13988026,0.3160997621751641,9017,3 -9018,75585849,-0.4008493612152184,9018,3 -9019,58756032,0.7459842107337796,9019,3 -9020,51126768,-1.2443459170033802,9020,3 -9021,77924893,0.8841190535499487,9021,3 -9022,66031134,-2.0662411110101377,9022,3 -9023,40411607,0.3293521609857256,9023,3 -9024,28683384,-0.22968684784672913,9024,3 -9025,79472713,0.5112540668025005,9025,3 -9026,82040411,-1.0149504896628827,9026,3 -9027,27958869,-0.22768206004462774,9027,3 -9028,13217542,1.2695817751125171,9028,3 -9029,73374446,-0.7205406459621523,9029,3 -9030,86866225,-0.6957687220565868,9030,3 -9031,35757799,1.2526373225470409,9031,3 -9032,33980365,-1.2905841062382644,9032,3 -9033,32573702,0.2888502169537368,9033,3 -9034,66973151,3.034579931499079,9034,3 -9035,15559084,0.8727947796810132,9035,3 -9036,72756944,-0.10969501522569648,9036,3 -9037,37332517,0.21868771280122673,9037,3 -9038,60923801,0.17747052879334732,9038,3 -9039,81634533,0.15306340430726675,9039,3 -9040,16163906,-0.3503800851540312,9040,3 -9041,83315060,-1.0980205253399962,9041,3 -9042,25402009,-1.9629688332528545,9042,3 -9043,76341648,0.27537944838928957,9043,3 -9044,16955801,-0.25794284836837655,9044,3 -9045,54724098,0.5543269640429204,9045,3 -9046,75505879,-0.7675668048324623,9046,3 -9047,13475607,2.3493412939911575,9047,3 -9048,41376277,-1.0632926015411892,9048,3 -9049,39597744,-0.9059434845136506,9049,3 -9050,11477240,-0.6834879808456936,9050,3 -9051,76331301,1.558911988734506,9051,3 -9052,71946707,0.04983221807732765,9052,3 -9053,80696418,-0.7411313049769885,9053,3 -9054,83305571,0.20178576982147034,9054,3 -9055,57176816,1.9693537207837901,9055,3 -9056,52598295,0.8297100017321106,9056,3 -9057,41370965,1.1062003808365164,9057,3 -9058,12390435,0.007452571691904064,9058,3 -9059,18325274,-0.32496760815009507,9059,3 -9060,37528935,-1.393647784558976,9060,3 -9061,11598079,0.9725760020799585,9061,3 -9062,44603614,-0.07652606814268303,9062,3 -9063,79839745,0.028662471824859002,9063,3 -9064,27420416,0.9587014287644452,9064,3 -9065,50038224,-1.3144243984887873,9065,3 -9066,87789485,-2.838425048955705,9066,3 -9067,74859494,0.7849423889918464,9067,3 -9068,30241011,0.20305055150988774,9068,3 -9069,47041135,-0.043222442607853705,9069,3 -9070,88518168,-1.0431849928276418,9070,3 -9071,69647435,-3.8362553785844073,9071,3 -9072,33080024,-1.069722698055978,9072,3 -9073,17769944,1.668435770387781,9073,3 -9074,66893021,0.1521629527326596,9074,3 -9075,54105161,0.1686807883580071,9075,3 -9076,12481936,1.6051568679594024,9076,3 -9077,56231021,-0.4606058468892779,9077,3 -9078,21697409,-0.8047202188015843,9078,3 -9079,41722519,0.6499934663986586,9079,3 -9080,42926302,-0.16277810698315973,9080,3 -9081,64777966,1.219034345840715,9081,3 -9082,54037827,-0.12074594510001589,9082,3 -9083,63360126,0.20018503211163688,9083,3 -9084,79455012,0.9133722326844832,9084,3 -9085,75267451,-1.447426318653357,9085,3 -9086,29263964,0.8824335949370066,9086,3 -9087,71292373,0.3093920343220814,9087,3 -9088,43182315,-0.39037070250958206,9088,3 -9089,45830926,-0.18774043414222275,9089,3 -9090,53529018,-0.7807094447801748,9090,3 -9091,19314389,0.009830267445337661,9091,3 -9092,50214321,0.2079791871947754,9092,3 -9093,52751206,-0.4620448289380133,9093,3 -9094,24878137,0.2940086194565651,9094,3 -9095,15851833,1.4914893191358771,9095,3 -9096,48762068,-1.4417321246775159,9096,3 -9097,60736545,-0.3755927606024762,9097,3 -9098,38896442,-2.3632989427545144,9098,3 -9099,32905583,-0.22160781055412315,9099,3 -9100,15434883,-1.1077012688195755,9100,3 -9101,63916432,0.2701678933328002,9101,3 -9102,33358014,0.2926803706491356,9102,3 -9103,12420040,0.5184846195121084,9103,3 -9104,77844042,-1.8837895218446032,9104,3 -9105,31986862,0.2999971960490293,9105,3 -9106,56145183,-0.4804809824233663,9106,3 -9107,46178248,-1.174686167432617,9107,3 -9108,82645612,-0.24221747842751876,9108,3 -9109,44025951,-0.6978658024957075,9109,3 -9110,73240478,1.9663942778198036,9110,3 -9111,26291051,0.8928807574033322,9111,3 -9112,17532989,-1.501241249806505,9112,3 -9113,64241758,-0.8933375460808357,9113,3 -9114,53100404,2.718261793114465,9114,3 -9115,69699764,-0.3360361390468144,9115,3 -9116,40753437,1.930853001651613,9116,3 -9117,75402749,-0.23066369044355423,9117,3 -9118,50221777,-0.8045300327626017,9118,3 -9119,82300531,0.24307422613605859,9119,3 -9120,47475473,-0.4631617858282529,9120,3 -9121,43232829,0.4844400841197105,9121,3 -9122,64434447,-0.542462083002879,9122,3 -9123,37109966,1.1092942898798832,9123,3 -9124,89619482,0.37167740381475123,9124,3 -9125,35201119,-0.4856807095230941,9125,3 -9126,49804208,0.8547899626883,9126,3 -9127,86564745,0.7832836633687544,9127,3 -9128,64827221,-0.5418735665029049,9128,3 -9129,82947706,0.17592343648315462,9129,3 -9130,40022344,1.1253422448431452,9130,3 -9131,81954593,0.15605561541262497,9131,3 -9132,31374356,-0.9206675156115005,9132,3 -9133,63187994,1.9725969043565046,9133,3 -9134,83732290,-1.459296202237407,9134,3 -9135,22965623,0.1198416999200322,9135,3 -9136,64966806,-0.9478335189078919,9136,3 -9137,38595716,-1.7239005959884166,9137,3 -9138,59599708,-1.0238389703524662,9138,3 -9139,35051044,0.21321107750915888,9139,3 -9140,19607911,-1.8825483244918908,9140,3 -9141,32831761,1.7085367225979808,9141,3 -9142,27971045,1.86491395027872,9142,3 -9143,71849828,-1.1538210617740774,9143,3 -9144,28426325,0.7654782042356053,9144,3 -9145,42422361,-0.9558200800671816,9145,3 -9146,20033455,1.5074905199359143,9146,3 -9147,50308065,1.4185256906977208,9147,3 -9148,11041232,-1.1286085399416466,9148,3 -9149,55746512,-0.4495739520389813,9149,3 -9150,75766056,2.1314228436069715,9150,3 -9151,37380370,0.9917410708931891,9151,3 -9152,32347846,1.5621782093562568,9152,3 -9153,66186305,0.01696145093766573,9153,3 -9154,24268100,-0.1363001653339502,9154,3 -9155,22179682,-0.18890338831677586,9155,3 -9156,38181678,-0.6182545276979363,9156,3 -9157,40337084,-0.3074735959631045,9157,3 -9158,23410697,-0.8133683714124368,9158,3 -9159,30359279,-0.5897807569159542,9159,3 -9160,75232328,-0.2999649086819378,9160,3 -9161,78198611,0.8164926736755236,9161,3 -9162,26014226,-0.01181959020105484,9162,3 -9163,76549385,-2.5643790700356885,9163,3 -9164,71798702,0.19472253341202253,9164,3 -9165,11644918,-0.6004130102152104,9165,3 -9166,83161586,0.2671411232571414,9166,3 -9167,19349253,-0.03617687782875995,9167,3 -9168,29265977,-0.041075431821664565,9168,3 -9169,37220468,0.11441523796037076,9169,3 -9170,68495981,0.47506986198568796,9170,3 -9171,12660066,-1.2397120428087551,9171,3 -9172,62314867,1.1124720080597819,9172,3 -9173,40453083,-0.9638502376082345,9173,3 -9174,82737040,0.828658299883303,9174,3 -9175,62881983,-0.5339047825229415,9175,3 -9176,50965355,-2.3932175832870275,9176,3 -9177,45249368,-0.15031122060845814,9177,3 -9178,36049939,-1.1176909791492413,9178,3 -9179,57963573,0.9731623917196502,9179,3 -9180,72410577,0.7273108695738937,9180,3 -9181,29781577,-0.02609103727172629,9181,3 -9182,23922438,1.0096637310409842,9182,3 -9183,55386897,1.4832647914705621,9183,3 -9184,75616707,-0.6836089102395903,9184,3 -9185,43537963,-0.5792233016980493,9185,3 -9186,88448878,0.8571822571833007,9186,3 -9187,30323224,-0.36697940482749425,9187,3 -9188,70805662,-0.5647808444060658,9188,3 -9189,21771116,-1.0680826735724203,9189,3 -9190,20496679,-0.44055679065187164,9190,3 -9191,22797586,-0.6503543009630953,9191,3 -9192,46591241,-0.41286278990209935,9192,3 -9193,14041026,0.2801648368424088,9193,3 -9194,88748875,2.0451639425480277,9194,3 -9195,80500706,0.20419840904057202,9195,3 -9196,55229446,-1.5672560343069692,9196,3 -9197,83006536,-0.220859917121948,9197,3 -9198,60621823,-0.9440556760748137,9198,3 -9199,67555508,0.25259455577039336,9199,3 -9200,64382929,0.35562210928345406,9200,3 -9201,40964072,-0.14211039653879093,9201,3 -9202,33667046,0.8213008618998988,9202,3 -9203,68025446,-0.8045605129307761,9203,3 -9204,59352701,0.13195653162297658,9204,3 -9205,60534643,0.41066519923671185,9205,3 -9206,72676201,2.0691866787948556,9206,3 -9207,69195132,-0.26219689740934765,9207,3 -9208,73427280,-0.5304239240814203,9208,3 -9209,58714945,1.0049550689350304,9209,3 -9210,54735731,-0.8150137386743409,9210,3 -9211,85794114,0.8283871669893554,9211,3 -9212,14985989,-1.3966997950810323,9212,3 -9213,86082868,1.1303511905065855,9213,3 -9214,38571023,0.676956833816894,9214,3 -9215,76291864,-0.13472945899075248,9215,3 -9216,48964886,-1.2812499620291369,9216,3 -9217,29702511,-1.1382410667477112,9217,3 -9218,80570717,-0.08300553397633172,9218,3 -9219,11832786,-0.17495788927251618,9219,3 -9220,54099800,-0.4741457236553835,9220,3 -9221,86876592,-1.2648859830702357,9221,3 -9222,73299393,0.22049967389722364,9222,3 -9223,67491906,-0.2614933335865818,9223,3 -9224,47357110,-0.21240518619849447,9224,3 -9225,18432084,1.2541308368335184,9225,3 -9226,85765065,-0.006665670150200362,9226,3 -9227,40699249,1.490047853843885,9227,3 -9228,82291596,-1.1040387421151334,9228,3 -9229,63472053,0.11934484692055213,9229,3 -9230,85731659,-0.4013711276881479,9230,3 -9231,78539371,-1.4587338614167615,9231,3 -9232,48884879,-2.041183726283454,9232,3 -9233,28752154,-0.9803187054529013,9233,3 -9234,10051761,0.15661548394905628,9234,3 -9235,60633031,0.1336253571431266,9235,3 -9236,32906725,-0.8789187184597069,9236,3 -9237,84037349,-1.2439769487577734,9237,3 -9238,54027456,-0.6897317756024675,9238,3 -9239,53940250,-1.4141713642539866,9239,3 -9240,59239810,2.137715012669406,9240,3 -9241,17158471,-0.027500423355388885,9241,3 -9242,39367303,-0.8205787663727938,9242,3 -9243,86642945,-1.8471985746511017,9243,3 -9244,66484451,-0.6443066289832642,9244,3 -9245,13919340,0.25947098015734615,9245,3 -9246,61484565,0.8808293488810662,9246,3 -9247,73433461,-0.7670756464022082,9247,3 -9248,45039791,0.9677294719755647,9248,3 -9249,10133201,-0.7984830515972875,9249,3 -9250,44107352,1.8544014151444235,9250,3 -9251,75572897,1.0810830773577296,9251,3 -9252,82017701,0.2831980062376974,9252,3 -9253,25267401,0.17893206792510466,9253,3 -9254,45316150,0.10894994873085109,9254,3 -9255,67925403,-0.6521822996468661,9255,3 -9256,40110635,-1.2504496318897567,9256,3 -9257,31241336,-0.6213945935448328,9257,3 -9258,75007720,0.17676721385742242,9258,3 -9259,25636101,-0.15745804806608382,9259,3 -9260,86540857,0.5744612914593712,9260,3 -9261,72804966,-0.20442828969894417,9261,3 -9262,82282691,0.2914492434466952,9262,3 -9263,52266805,2.0906913564357748,9263,3 -9264,20234005,0.7769954586131721,9264,3 -9265,30979180,0.9013312445279643,9265,3 -9266,57399156,-0.51881324232638,9266,3 -9267,68135328,-0.15138453926401887,9267,3 -9268,43830306,-3.105752961089028,9268,3 -9269,70174095,0.44983573055486,9269,3 -9270,59372687,-0.2699251157993983,9270,3 -9271,83573668,-0.6422133277282042,9271,3 -9272,37269577,0.7861100687064179,9272,3 -9273,59870423,-0.10084833097196826,9273,3 -9274,56217766,-0.6633130015195624,9274,3 -9275,67538396,-0.6988655815839957,9275,3 -9276,89854914,0.8437235479782869,9276,3 -9277,29879783,0.14500586345257085,9277,3 -9278,77666488,-0.6779700529584382,9278,3 -9279,46546996,1.5745376423668243,9279,3 -9280,32227723,-0.5050109783478689,9280,3 -9281,35913519,-1.0576568978340912,9281,3 -9282,52594914,-1.1746297900403382,9282,3 -9283,50339579,-1.19520261273483,9283,3 -9284,87101144,-0.3923650223053192,9284,3 -9285,79644654,-0.7148435218707981,9285,3 -9286,85565582,2.9745918913363663,9286,3 -9287,84863919,0.5718637847516335,9287,3 -9288,41095866,-1.416493285140224,9288,3 -9289,18045312,0.9029841195721658,9289,3 -9290,25745705,-0.048899433904552675,9290,3 -9291,48739558,1.2257327183571118,9291,3 -9292,37495127,2.0669570326637805,9292,3 -9293,25879371,1.0127704844465009,9293,3 -9294,23233889,-0.4751151917408361,9294,3 -9295,71099964,-0.6499053952033252,9295,3 -9296,76589826,-0.3015348060385277,9296,3 -9297,32883278,-1.3364591630404778,9297,3 -9298,13060996,-1.5987561063743572,9298,3 -9299,61076696,-0.1794593111260751,9299,3 -9300,13054824,-1.275438655318453,9300,3 -9301,66541243,1.2654245194788782,9301,3 -9302,63687309,0.5844717205008626,9302,3 -9303,26638865,1.6216508432381527,9303,3 -9304,64727279,2.233105252874375,9304,3 -9305,70256988,-1.3127673483162017,9305,3 -9306,43899809,-0.3296070027770753,9306,3 -9307,26364398,0.8883539756236145,9307,3 -9308,22635975,-0.5731316793770782,9308,3 -9309,41293079,0.31452384815532797,9309,3 -9310,81356534,0.40252396385619765,9310,3 -9311,55439962,0.7934708805295362,9311,3 -9312,89315951,-1.8047689821783888,9312,3 -9313,48791381,1.4012338562008906,9313,3 -9314,52331039,0.45270445153720046,9314,3 -9315,18200010,-0.26292322516684646,9315,3 -9316,60795793,0.6018335557898336,9316,3 -9317,29593268,0.4233714606516029,9317,3 -9318,23446330,-1.0866404540851846,9318,3 -9319,67498736,-1.3376611188566225,9319,3 -9320,75343092,1.4353764164090597,9320,3 -9321,78593423,0.448241170778946,9321,3 -9322,83413884,-1.798881801232483,9322,3 -9323,27262005,-0.0018040663883860152,9323,3 -9324,62983236,3.4898272141814215,9324,3 -9325,23641902,0.5998193338057414,9325,3 -9326,57898046,-0.10408795286137032,9326,3 -9327,49832177,-0.47265585941689064,9327,3 -9328,21686227,0.23016103027115364,9328,3 -9329,46066231,-0.3600903542663429,9329,3 -9330,66180229,1.2100299780182109,9330,3 -9331,11704200,-0.21881565414513465,9331,3 -9332,56103137,0.3266965095511009,9332,3 -9333,18705686,-4.093472825315073,9333,3 -9334,66625056,1.0424947378513272,9334,3 -9335,32635298,0.9425635856848725,9335,3 -9336,56712511,-0.41793495358197713,9336,3 -9337,78819380,0.1955434299969777,9337,3 -9338,43322388,-0.8095878797859726,9338,3 -9339,69682817,-1.576181290336462,9339,3 -9340,70610216,-0.6671076067771112,9340,3 -9341,49785562,1.065209018917329,9341,3 -9342,23507381,0.25355491998501073,9342,3 -9343,30187492,-2.939121713372324,9343,3 -9344,65582322,0.08825408329313567,9344,3 -9345,83785885,-1.7954210621718882,9345,3 -9346,66874128,-1.336225925881859,9346,3 -9347,20542930,-1.9832532599333998,9347,3 -9348,21854314,-0.3313606891037333,9348,3 -9349,27903007,-0.5408788683722341,9349,3 -9350,35606060,0.49959528034788714,9350,3 -9351,80554833,0.0016591063375582563,9351,3 -9352,15274516,-1.9738071829197281,9352,3 -9353,14176119,-1.2086234455858431,9353,3 -9354,18163231,-1.1557986679936965,9354,3 -9355,74241054,-1.8304255708228694,9355,3 -9356,70001907,1.492529904544573,9356,3 -9357,35333384,0.4035227598722179,9357,3 -9358,71149483,-0.610418228404742,9358,3 -9359,68957839,1.451266365572806,9359,3 -9360,88386974,2.4669447455410682,9360,3 -9361,26409319,-2.629352495868097,9361,3 -9362,63071020,0.5111045751440337,9362,3 -9363,87948859,-0.31958036938225176,9363,3 -9364,89386536,-0.14772349901493978,9364,3 -9365,53941825,0.6615078586308094,9365,3 -9366,44354350,-0.6872936332107328,9366,3 -9367,50622106,-0.7101328691550498,9367,3 -9368,18994429,0.8941733631676563,9368,3 -9369,34266124,-0.08372761819877048,9369,3 -9370,35100591,0.8428262418768007,9370,3 -9371,73004263,0.9632711054529142,9371,3 -9372,66915263,-0.6387786041618091,9372,3 -9373,76146603,-0.8720145201656765,9373,3 -9374,56909735,0.17672452285214307,9374,3 -9375,54700154,0.5184595285475772,9375,3 -9376,65306527,2.151054133831608,9376,3 -9377,87384517,-0.4855456259999336,9377,3 -9378,17438356,-0.32277811011093277,9378,3 -9379,70773277,0.33212809241917723,9379,3 -9380,41946984,0.45990767786205017,9380,3 -9381,22443472,1.0652784453483188,9381,3 -9382,66240284,0.16272939182738508,9382,3 -9383,60933479,0.0943215383973594,9383,3 -9384,82179251,0.07425776044124761,9384,3 -9385,70970880,0.7121233984983731,9385,3 -9386,48290077,-0.46820455774094144,9386,3 -9387,54847870,-1.6820717343007987,9387,3 -9388,43665179,-0.5611733511124943,9388,3 -9389,67833139,-0.02696118473561397,9389,3 -9390,21739648,-0.5201857162317991,9390,3 -9391,75833380,-1.025266459694636,9391,3 -9392,83513877,1.681837455664986,9392,3 -9393,56067711,-1.2231371985086654,9393,3 -9394,15686778,-0.20110446820832603,9394,3 -9395,51354246,0.7786216090440489,9395,3 -9396,16741289,-0.543972883013605,9396,3 -9397,44834194,-0.2132513742390516,9397,3 -9398,89650591,0.47587131988071607,9398,3 -9399,64660438,1.4140489362823254,9399,3 -9400,13066835,0.21585292234637335,9400,3 -9401,80842038,-1.1529505338501223,9401,3 -9402,24851948,-1.295695917848923,9402,3 -9403,80022637,-0.3862724144739333,9403,3 -9404,87387553,2.0446311294491766,9404,3 -9405,87770148,1.743704588912658,9405,3 -9406,41444710,-1.0939830245748363,9406,3 -9407,37652951,-1.4857696556267361,9407,3 -9408,75916343,1.1440969472607958,9408,3 -9409,89811260,-0.9111892549011189,9409,3 -9410,72730647,0.26955729268384415,9410,3 -9411,60101767,-0.2556348370073342,9411,3 -9412,17992470,-0.14688447865012033,9412,3 -9413,34261909,1.7322758437255983,9413,3 -9414,71785690,1.4809501634711613,9414,3 -9415,62718859,0.6418152828103341,9415,3 -9416,35025564,1.3262681822393707,9416,3 -9417,86762460,0.9868808465251897,9417,3 -9418,23153138,-1.291857485333502,9418,3 -9419,42838818,-0.2923943405000041,9419,3 -9420,56933603,-0.5153946836944443,9420,3 -9421,73384142,1.3281053929592752,9421,3 -9422,70045786,1.1143033225540373,9422,3 -9423,53930490,-1.2196591413087945,9423,3 -9424,81510082,0.149968346184717,9424,3 -9425,14005255,-0.0074433989378921185,9425,3 -9426,65975475,0.2765345865248133,9426,3 -9427,71140603,-0.5316575783273558,9427,3 -9428,50535086,0.4795661741484909,9428,3 -9429,65131466,-0.9119449551091378,9429,3 -9430,78578673,1.7696962767861568,9430,3 -9431,50310359,-0.8790375688450213,9431,3 -9432,43493921,-0.3755153688938205,9432,3 -9433,29465132,0.8997160091573961,9433,3 -9434,65847180,-0.6592112465095217,9434,3 -9435,68584569,-0.37060515591304616,9435,3 -9436,48027167,0.4794440886370582,9436,3 -9437,55764836,-0.736727681173888,9437,3 -9438,73379527,0.5803953636561632,9438,3 -9439,29745574,0.6185294550436703,9439,3 -9440,87968264,0.3558633395286638,9440,3 -9441,38625596,2.207025383289296,9441,3 -9442,16452792,-0.30890340410900996,9442,3 -9443,17636291,0.2959615712722414,9443,3 -9444,67140120,-0.8154624815433058,9444,3 -9445,87889473,1.181354878520304,9445,3 -9446,42560561,0.25340015924569875,9446,3 -9447,47620170,-0.8405645496464861,9447,3 -9448,14947595,0.01803586727008935,9448,3 -9449,38578559,2.19401726469875,9449,3 -9450,88181267,1.1453139174704117,9450,3 -9451,26407182,-0.22519304780592217,9451,3 -9452,64870155,0.708161120275474,9452,3 -9453,13761137,-0.38773409508793194,9453,3 -9454,33641106,-0.032731384080583154,9454,3 -9455,69820722,0.4761879423450168,9455,3 -9456,67324224,0.8938674234147181,9456,3 -9457,15343396,-0.0009238863259356392,9457,3 -9458,32642459,1.3108932031082245,9458,3 -9459,16393815,0.3660938091832667,9459,3 -9460,55524870,0.6762907217357003,9460,3 -9461,48922302,-0.6267107996450421,9461,3 -9462,73386922,1.0685528804849858,9462,3 -9463,56845469,-0.3687537466638823,9463,3 -9464,49496798,-0.6731880612318287,9464,3 -9465,16888192,0.3555415857406676,9465,3 -9466,57430288,0.7722768019836476,9466,3 -9467,52253306,-0.08016914363204916,9467,3 -9468,60670592,0.10626338015873749,9468,3 -9469,35912552,-0.7604513089344964,9469,3 -9470,64856761,0.6582070847138106,9470,3 -9471,67051438,-0.20704989036220348,9471,3 -9472,57527915,-0.07101830003820273,9472,3 -9473,56972885,-0.28902515397620254,9473,3 -9474,78570075,1.8525566204995423,9474,3 -9475,71172688,1.1221811627788658,9475,3 -9476,37031621,0.6319604103202675,9476,3 -9477,23705627,0.8626791357338991,9477,3 -9478,73117367,-0.6451224807812498,9478,3 -9479,11154277,-0.979199458852109,9479,3 -9480,44818262,-1.1510721023503978,9480,3 -9481,83700565,1.3123989594054122,9481,3 -9482,11033191,-0.7327348277584449,9482,3 -9483,53030375,1.7264765836264735,9483,3 -9484,84395391,0.745821261854561,9484,3 -9485,79906651,-0.2593773901650675,9485,3 -9486,52054492,1.0342821552997463,9486,3 -9487,21122665,0.788076985583885,9487,3 -9488,64819400,-0.7103510610948457,9488,3 -9489,60632444,0.026118289720753862,9489,3 -9490,85894842,-0.16260433772074204,9490,3 -9491,40369566,-0.990117088281537,9491,3 -9492,48804807,0.5082984730295224,9492,3 -9493,57812778,0.6900749410633575,9493,3 -9494,20751160,-0.6819776074838084,9494,3 -9495,44892204,-0.44143401190600523,9495,3 -9496,26275746,-1.1092100820802258,9496,3 -9497,82906180,1.217268672605619,9497,3 -9498,43846508,-0.4509974986858386,9498,3 -9499,39291157,-0.06853610198496145,9499,3 -9500,33146158,-0.43685891664676635,9500,3 -9501,64078148,-0.660081378140588,9501,3 -9502,25271604,-0.1902992840848635,9502,3 -9503,60213593,0.15867448872158013,9503,3 -9504,43039788,-0.9338475729038259,9504,3 -9505,52194369,-1.2026762489303071,9505,3 -9506,57666551,0.4829493975314441,9506,3 -9507,72129208,0.679102295930031,9507,3 -9508,74069582,0.2865201781830647,9508,3 -9509,23705755,0.39071212465040833,9509,3 -9510,34474299,-0.4581060722345627,9510,3 -9511,76374379,0.8474716103444343,9511,3 -9512,23385509,-0.07117247422282255,9512,3 -9513,50072445,0.966001806591277,9513,3 -9514,29317266,-0.3474138199640909,9514,3 -9515,17092528,0.8695141345822918,9515,3 -9516,68233175,0.3716081422891579,9516,3 -9517,51729975,0.8253246795634618,9517,3 -9518,63989766,0.235614206166454,9518,3 -9519,68691139,-0.9948820469983042,9519,3 -9520,75635725,0.5912188354502248,9520,3 -9521,45752475,-0.6854555209045644,9521,3 -9522,25836229,-2.1355745652932145,9522,3 -9523,50158469,-0.5990495857435372,9523,3 -9524,17677109,0.01713558666573082,9524,3 -9525,46652103,3.1585328469109246,9525,3 -9526,78277439,-0.24560486916133736,9526,3 -9527,69490807,0.9535137839608089,9527,3 -9528,86502950,1.0211538374879707,9528,3 -9529,77509717,0.15727379801776756,9529,3 -9530,10013079,-1.0654817937737329,9530,3 -9531,29526674,0.3184804866133727,9531,3 -9532,81985957,0.21973835884021237,9532,3 -9533,10619685,-1.8524277887684062,9533,3 -9534,82974178,0.640509515518977,9534,3 -9535,37305102,0.9714930221121265,9535,3 -9536,33109243,-0.7147759421710524,9536,3 -9537,79654158,-1.0062676427388302,9537,3 -9538,32136922,-0.6235593286039828,9538,3 -9539,51705105,-0.3021804299839092,9539,3 -9540,30494353,1.067578739101089,9540,3 -9541,72647433,-0.7399429237091771,9541,3 -9542,24008654,1.1753722717034831,9542,3 -9543,61147560,-1.635507155669445,9543,3 -9544,84843313,-0.5390399792807185,9544,3 -9545,72310300,0.24003182642206844,9545,3 -9546,87912785,-0.5945302910990858,9546,3 -9547,56130549,0.5259835817839674,9547,3 -9548,31655114,1.0718537551201972,9548,3 -9549,45114423,-0.2651524051394125,9549,3 -9550,24415339,0.13442948301375318,9550,3 -9551,24188725,1.1256239567641393,9551,3 -9552,27622906,-0.0951275414859847,9552,3 -9553,35432601,0.6788393101856612,9553,3 -9554,17157457,-2.0719118664637413,9554,3 -9555,12063790,-0.5459752838880428,9555,3 -9556,17958157,-1.1662604322094645,9556,3 -9557,22163375,-1.2522618290984915,9557,3 -9558,54632258,-2.0883339900017166,9558,3 -9559,60828893,-0.22618034336484388,9559,3 -9560,54902419,-2.8175509766027322,9560,3 -9561,47548243,-1.179473188761456,9561,3 -9562,48067226,1.801586574878018,9562,3 -9563,42628361,-0.08609777132509995,9563,3 -9564,12469307,1.9855004121989621,9564,3 -9565,67666459,-1.5988004747130706,9565,3 -9566,58748814,-0.9220784448680522,9566,3 -9567,84691356,1.1336944062482175,9567,3 -9568,26127470,-0.04131075194013076,9568,3 -9569,33990195,1.6242441971960526,9569,3 -9570,12679165,0.9814522810382157,9570,3 -9571,69709500,0.6028135285503669,9571,3 -9572,31569160,0.28480110997260494,9572,3 -9573,52436969,0.06998311651883621,9573,3 -9574,12514095,0.7053021620847091,9574,3 -9575,55537130,0.13428913514218221,9575,3 -9576,19804644,0.3016059083540441,9576,3 -9577,39706288,0.4700498560451063,9577,3 -9578,54972976,0.27978977333586136,9578,3 -9579,51889497,0.21630226549349563,9579,3 -9580,51213196,0.41546860521488527,9580,3 -9581,19218318,0.36735415347123246,9581,3 -9582,56377842,-0.660179430884765,9582,3 -9583,30852992,2.054678871790873,9583,3 -9584,42729873,0.3546484656422995,9584,3 -9585,45672930,-0.9044887359735793,9585,3 -9586,26391093,-0.6211913946759307,9586,3 -9587,78260469,-0.26049425359419714,9587,3 -9588,69646008,-1.0052823832557853,9588,3 -9589,73377951,0.32085062376145823,9589,3 -9590,42359009,-0.5181242473394535,9590,3 -9591,52363670,0.8964845039380315,9591,3 -9592,15354846,1.0917338474463303,9592,3 -9593,29582315,2.4183682406918123,9593,3 -9594,67356005,-0.33618892432511754,9594,3 -9595,35189839,1.4851112846762593,9595,3 -9596,74927417,0.7078830156721487,9596,3 -9597,36997641,-0.044746428665135424,9597,3 -9598,20643595,0.32637795155771526,9598,3 -9599,64938418,0.9663697237987605,9599,3 -9600,41276415,1.2004597008859974,9600,3 -9601,80892395,-0.49641339300120424,9601,3 -9602,73637658,2.6391871390472,9602,3 -9603,78410317,1.1249494546309027,9603,3 -9604,27585867,0.24114786162788832,9604,3 -9605,20968531,-0.7764707884141365,9605,3 -9606,66187202,0.34810880716220477,9606,3 -9607,61001220,0.6539108927789724,9607,3 -9608,75681797,-0.18071160652767457,9608,3 -9609,44436122,-1.5164600923692282,9609,3 -9610,57837321,0.18129553649067898,9610,3 -9611,66741773,-0.46862500314801175,9611,3 -9612,66732946,-1.6946749975247912,9612,3 -9613,88019712,-0.990803212730803,9613,3 -9614,86778252,-0.4444910475997202,9614,3 -9615,44949339,0.5998374521075401,9615,3 -9616,31963489,-1.1319076467255287,9616,3 -9617,58011606,0.06846989053195983,9617,3 -9618,73035281,-0.8799223461115445,9618,3 -9619,71504812,-0.4179881121508704,9619,3 -9620,42185092,-1.393541959226148,9620,3 -9621,73242385,-0.3002686402473962,9621,3 -9622,20235701,-0.7061713503508771,9622,3 -9623,47648001,1.1327703434083403,9623,3 -9624,23015790,-0.8603236737693604,9624,3 -9625,17824147,2.8104929575602675,9625,3 -9626,52816288,0.0423932817118656,9626,3 -9627,20974591,0.5503520076172388,9627,3 -9628,84619785,0.2928388498193677,9628,3 -9629,54524610,-1.6469649615875424,9629,3 -9630,54796186,1.7334125753188525,9630,3 -9631,86460408,0.16541087884923344,9631,3 -9632,89446373,-0.5638307206960435,9632,3 -9633,42697851,-0.9051154904057552,9633,3 -9634,83430801,-1.1609835305334804,9634,3 -9635,15632343,0.3374227683264431,9635,3 -9636,58201741,-0.6777057760952404,9636,3 -9637,79903647,0.70804657294014,9637,3 -9638,24696546,-1.184536012333203,9638,3 -9639,68455969,-0.06181650253140835,9639,3 -9640,53949727,-0.8671520822208334,9640,3 -9641,75496953,0.14359529960853296,9641,3 -9642,61307903,-0.44678246880186456,9642,3 -9643,20927492,-0.8148562597487038,9643,3 -9644,25497362,1.0255323934441691,9644,3 -9645,53857709,-0.6776198068871943,9645,3 -9646,41899602,0.0022535552176768895,9646,3 -9647,81109391,-0.6728386038233288,9647,3 -9648,61665638,0.19839934258120823,9648,3 -9649,74873074,0.5797921646909935,9649,3 -9650,76684403,1.8638451603474244,9650,3 -9651,56280714,0.5075076204080259,9651,3 -9652,12345944,-0.7932795354593148,9652,3 -9653,87523582,1.8203114066674229,9653,3 -9654,65916181,-0.2701688459618791,9654,3 -9655,39538623,-0.13093018034601064,9655,3 -9656,47190805,-0.47357738663276167,9656,3 -9657,16450708,0.9874003445628001,9657,3 -9658,62939092,0.2183525169127435,9658,3 -9659,52286913,-0.3029181104545025,9659,3 -9660,20993739,0.5937134311932413,9660,3 -9661,68102070,-0.5741567701034805,9661,3 -9662,49268817,-1.0134570341703322,9662,3 -9663,46080340,-0.6250003439663759,9663,3 -9664,81584424,0.24172009119811597,9664,3 -9665,69239628,-1.8380374800021562,9665,3 -9666,16713405,-1.4601558391134075,9666,3 -9667,49399010,-0.18820015894016554,9667,3 -9668,59494928,1.2561192240053571,9668,3 -9669,59120322,-0.11706906358764593,9669,3 -9670,75584653,0.24179867838667388,9670,3 -9671,50378279,-0.6202424550499979,9671,3 -9672,79017026,-0.4608866909627652,9672,3 -9673,18938159,-1.0647698776156194,9673,3 -9674,69843370,-0.08744053012444697,9674,3 -9675,55409031,-1.0021445003493359,9675,3 -9676,17265375,-0.509962269130693,9676,3 -9677,10817076,0.48840399694809367,9677,3 -9678,32578038,0.8863788219578934,9678,3 -9679,56290937,0.1319412068511058,9679,3 -9680,15130557,-0.5436653189781955,9680,3 -9681,34697839,-0.18921194678346812,9681,3 -9682,44457263,0.42032727416490134,9682,3 -9683,43529691,-0.9760426001373647,9683,3 -9684,20947523,-1.2605765624772847,9684,3 -9685,34347444,0.6236523604878447,9685,3 -9686,13104711,-0.9521757605750151,9686,3 -9687,28322383,-0.6927642490791003,9687,3 -9688,60148984,0.11543555442260447,9688,3 -9689,54276273,2.0442531522508034,9689,3 -9690,69991425,0.4058484537290816,9690,3 -9691,88189366,-1.190692740703374,9691,3 -9692,33241776,1.77978468432646,9692,3 -9693,76928233,2.001382325030804,9693,3 -9694,64326133,-1.0752891395243138,9694,3 -9695,12398414,0.4049415537505196,9695,3 -9696,20429365,0.8956971114716106,9696,3 -9697,16751182,0.8077975960292438,9697,3 -9698,81046864,1.0881461933660292,9698,3 -9699,71951596,-0.40569164489627596,9699,3 -9700,39453450,0.8760313557579379,9700,3 -9701,12758374,-0.9601980859378807,9701,3 -9702,82657108,0.4295238738249711,9702,3 -9703,66935413,0.340791988155828,9703,3 -9704,50249564,0.30660933385676253,9704,3 -9705,15254620,0.7036593253807962,9705,3 -9706,58893470,-2.397624655757237,9706,3 -9707,55537679,0.6318236452687714,9707,3 -9708,48219923,0.6350238421920805,9708,3 -9709,55107149,1.2284545991770386,9709,3 -9710,14447059,0.5691180945140314,9710,3 -9711,26173634,-0.03145465888272167,9711,3 -9712,73076857,0.8877290276470146,9712,3 -9713,10412519,0.926165657401599,9713,3 -9714,89054779,0.07971586701124588,9714,3 -9715,12868469,-0.20929522974200865,9715,3 -9716,19254343,0.7226128002015283,9716,3 -9717,11246586,0.04675114076162054,9717,3 -9718,41770651,0.10398036650776242,9718,3 -9719,21724217,0.7328082588487613,9719,3 -9720,67803872,0.701256232939613,9720,3 -9721,16800012,1.1762266078054668,9721,3 -9722,52126786,0.9824157911701781,9722,3 -9723,20269747,0.022811923693074873,9723,3 -9724,23473544,-0.5468439668216347,9724,3 -9725,65241286,-0.6870046138470036,9725,3 -9726,89630562,-1.3715848412337492,9726,3 -9727,43662472,-1.0312457027822794,9727,3 -9728,83096156,0.8806835971662765,9728,3 -9729,58062584,0.3486085384102859,9729,3 -9730,29157734,0.7205178700888213,9730,3 -9731,36212172,0.006437302533188023,9731,3 -9732,20868468,-0.4810893218978941,9732,3 -9733,49183127,-0.7972691879092167,9733,3 -9734,78272977,0.08668841285111929,9734,3 -9735,71064731,0.5839707026315689,9735,3 -9736,17059311,-1.3441007468551647,9736,3 -9737,53625655,0.12038939927561686,9737,3 -9738,65226247,0.7254493824150505,9738,3 -9739,61199706,0.10117919117584823,9739,3 -9740,60040468,0.7855139022124162,9740,3 -9741,43051844,-0.496020423276994,9741,3 -9742,50201939,0.9590343058126329,9742,3 -9743,75814003,1.8886171977957518,9743,3 -9744,23470014,-0.9861606474015965,9744,3 -9745,52158505,0.17430386126608852,9745,3 -9746,61659144,-0.045911368072312685,9746,3 -9747,23853483,-0.2365450393913714,9747,3 -9748,14892458,0.4604764480628423,9748,3 -9749,58032825,0.8077775514275558,9749,3 -9750,60074197,0.016944832562978965,9750,3 -9751,88951567,2.136511360787014,9751,3 -9752,62132956,-0.32166561102628816,9752,3 -9753,43827046,-0.05176101091826408,9753,3 -9754,70512143,1.1445965345795048,9754,3 -9755,72451745,0.6636277148419117,9755,3 -9756,16975387,0.20666385660317177,9756,3 -9757,42830807,-0.41697921861237786,9757,3 -9758,26295576,-2.2603072290841664,9758,3 -9759,72912376,1.7458005745678487,9759,3 -9760,76505731,-1.2714335032757615,9760,3 -9761,75774364,0.2567144284868113,9761,3 -9762,25957325,0.8618997059218187,9762,3 -9763,81885445,-0.3470136392247879,9763,3 -9764,87766862,0.07284084823715736,9764,3 -9765,19688177,1.6210378098822178,9765,3 -9766,75192156,-0.9399429593973089,9766,3 -9767,20953568,-1.0777047743869594,9767,3 -9768,78665588,-0.8403666559870294,9768,3 -9769,12238354,-0.6727424493786885,9769,3 -9770,53971574,0.649295038172562,9770,3 -9771,55301428,0.41122430734907717,9771,3 -9772,19484452,0.9853545136154728,9772,3 -9773,60074601,0.3836854530225959,9773,3 -9774,84345880,-0.9037416284248712,9774,3 -9775,71851445,0.4380784516066054,9775,3 -9776,58844262,-0.9688298293952561,9776,3 -9777,68299943,0.8691276073833696,9777,3 -9778,37522372,-0.33858569436024366,9778,3 -9779,64435312,1.1437769956260588,9779,3 -9780,79899620,-0.493313565743644,9780,3 -9781,73758801,-0.44469826940243906,9781,3 -9782,42196053,0.8203299299056364,9782,3 -9783,30204765,0.21763741830483382,9783,3 -9784,82267191,-0.35408366339525027,9784,3 -9785,46944743,-0.2498817822575866,9785,3 -9786,20117151,-1.543443312564926,9786,3 -9787,56025698,0.3818164182833842,9787,3 -9788,45610848,0.7209227536760366,9788,3 -9789,67596345,2.7985111035766903,9789,3 -9790,68358020,0.1618485291000946,9790,3 -9791,86413889,-0.7382342882781285,9791,3 -9792,65546582,-2.3059619036628014,9792,3 -9793,47987027,-0.23570425482680082,9793,3 -9794,43336214,0.13264977140220202,9794,3 -9795,35305909,-0.259414519517532,9795,3 -9796,18456359,-0.9924987550039247,9796,3 -9797,38171527,0.13987476427015041,9797,3 -9798,20262021,-0.6275345543717663,9798,3 -9799,34134014,0.7369538120389071,9799,3 -9800,58758123,0.34980911491874817,9800,3 -9801,15343021,-0.7170557260760693,9801,3 -9802,27308941,1.1908872395501773,9802,3 -9803,57735334,-2.8301066972028677,9803,3 -9804,64037328,-1.5216608955546924,9804,3 -9805,53268780,1.073767530068157,9805,3 -9806,52446415,0.7827646271762497,9806,3 -9807,73469791,-1.0482747763038214,9807,3 -9808,41299997,1.2490135863879994,9808,3 -9809,70425398,-0.6506951295903756,9809,3 -9810,71371792,-0.6437846592708423,9810,3 -9811,43466721,0.24041601603962365,9811,3 -9812,43722443,0.7007212816582731,9812,3 -9813,75685293,-0.09890387983229441,9813,3 -9814,38714718,1.0020620585527118,9814,3 -9815,60747051,-0.5565993135819004,9815,3 -9816,62147171,-0.28772726024513984,9816,3 -9817,65788714,-1.9879927971490732,9817,3 -9818,83712089,0.6584065507123433,9818,3 -9819,80745471,1.1751199248958866,9819,3 -9820,47013346,0.10804858167345904,9820,3 -9821,74285080,-0.2018261802227336,9821,3 -9822,83016346,0.4676059053686501,9822,3 -9823,68790650,1.068249480984735,9823,3 -9824,12054622,-1.0092648634955672,9824,3 -9825,55820723,-0.4717654487080475,9825,3 -9826,18738169,-0.9527085640260015,9826,3 -9827,83008997,-0.30760100367236465,9827,3 -9828,73662135,-0.5617537458038585,9828,3 -9829,42115784,-2.6246457645369707,9829,3 -9830,38221680,-0.6417249045885945,9830,3 -9831,16960534,-0.33045733242969577,9831,3 -9832,58186265,0.35535152986593366,9832,3 -9833,77767768,-0.4903290665277887,9833,3 -9834,51939436,0.3362054204703171,9834,3 -9835,50281560,-1.2159948286946944,9835,3 -9836,37985693,1.2038600230428698,9836,3 -9837,30555146,-0.30020111665263594,9837,3 -9838,42833873,0.9199821022434375,9838,3 -9839,27954280,0.79325159072304,9839,3 -9840,84687371,-0.34621954665793786,9840,3 -9841,55133122,-0.8636079195514481,9841,3 -9842,67280113,-0.8202780984382704,9842,3 -9843,60880890,0.5911662843806127,9843,3 -9844,33943393,0.7641445033809025,9844,3 -9845,65520380,1.22588088216516,9845,3 -9846,39064382,0.42491143531449505,9846,3 -9847,49850085,-0.06756045875117592,9847,3 -9848,51963865,0.8041070438105581,9848,3 -9849,13124154,-0.006053163556285637,9849,3 -9850,43009227,-0.7272322129635734,9850,3 -9851,37585050,-0.41150900659596723,9851,3 -9852,36264424,0.8211882916237223,9852,3 -9853,80103001,0.4444740065789384,9853,3 -9854,16125144,0.36526620472142335,9854,3 -9855,86248315,-0.14423700795690858,9855,3 -9856,87665671,0.7760173674023911,9856,3 -9857,51987360,-0.02054429698231036,9857,3 -9858,48664283,0.29054197290027184,9858,3 -9859,30676031,0.0773410717501299,9859,3 -9860,55293320,-0.07703550223196692,9860,3 -9861,54268375,-0.2251024426194966,9861,3 -9862,18059082,-0.3091973120330242,9862,3 -9863,44105487,-0.9512353525961645,9863,3 -9864,41454560,0.020886377119822917,9864,3 -9865,65863904,-0.09073328090859355,9865,3 -9866,71603396,-1.744350557541009,9866,3 -9867,70342831,-1.5350500344461768,9867,3 -9868,47690163,-0.6213535158317354,9868,3 -9869,23061926,-0.6084852210169364,9869,3 -9870,51824198,1.0730991294629808,9870,3 -9871,42458796,-0.8728562935206996,9871,3 -9872,44906906,-0.31375048983655107,9872,3 -9873,27170920,-0.8149118823133374,9873,3 -9874,45049798,-1.1784087157649379,9874,3 -9875,33677355,-0.34646277770867545,9875,3 -9876,61694290,0.5074063187062459,9876,3 -9877,15673989,2.065785452950424,9877,3 -9878,81308255,0.977280344098067,9878,3 -9879,41339960,-0.899476539745923,9879,3 -9880,54280860,-0.08513705890104933,9880,3 -9881,44010037,0.5903377919762902,9881,3 -9882,13057585,-0.03864806839072493,9882,3 -9883,83258062,0.15928335786033077,9883,3 -9884,33794654,-0.07701233780564104,9884,3 -9885,23598374,-0.6221988920055964,9885,3 -9886,46880037,-1.2828767688611733,9886,3 -9887,79614850,-1.4570366968761683,9887,3 -9888,16050089,-0.917487225963455,9888,3 -9889,35408931,1.9881032030509822,9889,3 -9890,63308076,-0.08237553771947534,9890,3 -9891,85870710,0.2555411282241725,9891,3 -9892,58684540,-0.3761512698929319,9892,3 -9893,57343687,1.736884385644933,9893,3 -9894,87038515,0.33611668955087753,9894,3 -9895,37883542,0.39313138549760374,9895,3 -9896,19077159,-0.4168478762556525,9896,3 -9897,27319777,-0.756193661730587,9897,3 -9898,22701107,0.7174573414084751,9898,3 -9899,23215858,0.4448905559645102,9899,3 -9900,83790747,1.32975676419269,9900,3 -9901,67988552,-0.09971941377584762,9901,3 -9902,17153845,0.04785402965783342,9902,3 -9903,68308705,0.8968582895890607,9903,3 -9904,63314833,-0.4066718111527395,9904,3 -9905,27991336,0.12735448360968746,9905,3 -9906,62436501,-0.16880773984866776,9906,3 -9907,27019857,1.1425190128079112,9907,3 -9908,12362056,0.8219807713825978,9908,3 -9909,54582663,0.5498557985823841,9909,3 -9910,82154073,-0.87305020874488,9910,3 -9911,84378999,-1.135867719537932,9911,3 -9912,22737877,-1.9534466115812896,9912,3 -9913,41521661,-0.9390248028797823,9913,3 -9914,20999679,-1.796930206538159,9914,3 -9915,85627727,-0.9295031571486116,9915,3 -9916,52352516,-0.9965863667829307,9916,3 -9917,11338229,-1.7144782944283814,9917,3 -9918,34909159,-0.6442664543996302,9918,3 -9919,77031025,0.7650234027229122,9919,3 -9920,43782341,-0.40273049955301027,9920,3 -9921,40658019,0.08834823521310776,9921,3 -9922,42100678,1.039379406703299,9922,3 -9923,66001034,-0.3102322750498676,9923,3 -9924,77274114,-1.4016483421134731,9924,3 -9925,76371024,-0.6828661103907618,9925,3 -9926,38706297,0.36091557506027927,9926,3 -9927,64790487,-0.6723583397353563,9927,3 -9928,30151701,0.18473906879363045,9928,3 -9929,50520283,0.8032895153838178,9929,3 -9930,53220378,0.490111072976708,9930,3 -9931,70510645,-0.1426060878798827,9931,3 -9932,73383993,-0.8761360020257558,9932,3 -9933,12342896,1.8127606409288142,9933,3 -9934,49609179,-0.15160246832055888,9934,3 -9935,59347871,0.4387496603098078,9935,3 -9936,29311061,0.0553079882925919,9936,3 -9937,79884988,0.11779455893364162,9937,3 -9938,81753834,2.3603818191611223,9938,3 -9939,11491409,-0.15731490625835093,9939,3 -9940,19860373,-1.655960502169425,9940,3 -9941,85936749,0.13431990325610602,9941,3 -9942,12294204,-0.8514398699145102,9942,3 -9943,12794601,1.2886842292246308,9943,3 -9944,45004420,0.8547532397065859,9944,3 -9945,67307913,-0.354610879586255,9945,3 -9946,60969644,-1.6425993572613877,9946,3 -9947,66758436,-1.8229880640775689,9947,3 -9948,82054354,-0.7367322629003583,9948,3 -9949,71862176,0.21055208169033918,9949,3 -9950,86049621,0.43974178388173096,9950,3 -9951,35957642,-0.9931575560607312,9951,3 -9952,75740391,-1.0171956962349449,9952,3 -9953,15769893,0.6261829620816528,9953,3 -9954,18498154,-0.9792569917464995,9954,3 -9955,27618976,-0.8730888523415945,9955,3 -9956,77544231,0.04385423877954276,9956,3 -9957,78755135,-0.8830224925391755,9957,3 -9958,42617121,1.3247774627139692,9958,3 -9959,47208564,0.4468391413105722,9959,3 -9960,74482549,1.328906187284446,9960,3 -9961,16351061,0.6750481561797186,9961,3 -9962,78317064,1.3155604239980143,9962,3 -9963,61650318,-0.5061703942011901,9963,3 -9964,15817700,1.1997420373615488,9964,3 -9965,14866622,0.4929282257368848,9965,3 -9966,48363925,0.0145699055934042,9966,3 -9967,63433067,-0.8597944403266752,9967,3 -9968,76495792,0.1851404090425395,9968,3 -9969,84555144,1.0862480922105955,9969,3 -9970,63185280,1.1675823362505044,9970,3 -9971,10714924,-0.6058067612416651,9971,3 -9972,11009097,-0.1553942294077024,9972,3 -9973,49904631,-0.26472419216107124,9973,3 -9974,15053015,-1.1116012281889074,9974,3 -9975,14595386,-0.05082495880326448,9975,3 -9976,70854456,-0.6253811381043323,9976,3 -9977,42092192,0.2568787012447972,9977,3 -9978,63766185,-0.1947548489641124,9978,3 -9979,11929566,-0.21283795310194312,9979,3 -9980,16326509,0.5227275461092844,9980,3 -9981,86475441,0.8034987229210969,9981,3 -9982,89836282,0.4275448886965965,9982,3 -9983,56520598,2.7845111839415444,9983,3 -9984,57233881,1.5216397615611092,9984,3 -9985,14066499,0.08667405816644422,9985,3 -9986,19817493,0.6858018905593957,9986,3 -9987,81927259,-0.0813793057230255,9987,3 -9988,45200690,-1.226815816357012,9988,3 -9989,23951094,0.19965558199559597,9989,3 -9990,85711924,-0.9946999772838925,9990,3 -9991,37609852,-0.04926180394142865,9991,3 -9992,89944972,0.6493299673561582,9992,3 -9993,67826682,-0.6496128502577977,9993,3 -9994,62860524,1.6078135585692366,9994,3 -9995,47566144,0.4936442454925177,9995,3 -9996,43056497,0.1331025316289677,9996,3 -9997,65304745,0.2555988818618706,9997,3 -9998,39305970,-0.5012836275630818,9998,3 -9999,88860828,-0.7482033460740164,9999,3 + ,patient_id,labels,genotype_row,set +0,24794568,0.5319656429,0,1 +1,74186845,-0.7296016993,1,1 +2,49969361,-0.5544813863,2,1 +3,84426429,0.5337409699,3,1 +4,78996046,0.2921455026,4,1 +5,81561851,-0.1870156072,5,1 +6,58088311,0.7172459389,6,1 +7,74541879,-0.363750512,7,1 +8,83200009,-0.2176487723,8,1 +9,37370595,-0.6239154366,9,1 +10,71104697,-0.0465558568,10,1 +11,32145538,-0.9154086323,11,1 +12,30772371,-0.8766028047,12,1 +13,40952840,-0.8858283923,13,1 +14,62131869,0.8253511793,14,1 +15,67504554,0.2365253508,15,1 +16,59664169,2.2763998471,16,1 +17,13158748,-1.6099880099,17,1 +18,63236434,0.2026501392,18,1 +19,72827573,0.5717559185,19,1 +20,45172121,-0.5346354505,20,1 +21,26239782,0.8423246051,21,1 +22,78017193,-1.1198777869,22,1 +23,38211961,-0.1385160377,23,1 +24,52147302,1.5255178884,24,1 +25,32624303,-0.4180205706,25,1 +26,47652429,-0.108265521,26,1 +27,43156133,0.6790401325,27,1 +28,42697527,-0.7030760951,28,1 +29,14266053,-1.2896837921,29,1 +30,29347890,0.1002039931,30,1 +31,54634606,0.884207772,31,1 +32,41333654,2.1122138162,32,1 +33,70789302,0.5374708667,33,1 +34,75251333,-0.5819454122,34,1 +35,44732883,-1.6332974835,35,1 +36,63593634,-0.5923303699,36,1 +37,19393572,-1.209691705,37,1 +38,76481689,-0.8456191547,38,1 +39,45263519,0.0478678521,39,1 +40,84580880,0.6018476772,40,1 +41,13931607,0.7168961534,41,1 +42,11242488,0.004038553,42,1 +43,89681292,1.1296288193,43,1 +44,44046010,1.0309263125,44,1 +45,10629893,0.7471707739,45,1 +46,64853113,0.4627540219,46,1 +47,25786387,-0.4666920339,47,1 +48,35592099,-0.510768137,48,1 +49,18679380,2.3300801823,49,1 +50,33184838,-0.8096579552,50,1 +51,42968513,-0.6552414704,51,1 +52,36393584,0.6879762025,52,1 +53,40409630,0.0629342778,53,1 +54,44601042,-0.5046220263,54,1 +55,47725838,-0.9674581926,55,1 +56,17832771,-0.2340205312,56,1 +57,41254121,-1.0021744672,57,1 +58,83587058,0.2988395002,58,1 +59,59102011,0.560117388,59,1 +60,31342903,0.0181656692,60,1 +61,41590809,0.6462679246,61,1 +62,26451096,-0.2409816832,62,1 +63,24264313,-1.7354154174,63,1 +64,23049705,0.7570238199,64,1 +65,70408810,-0.1377849827,65,1 +66,57017055,-1.4419136599,66,1 +67,76331695,1.0410682674,67,1 +68,35535410,0.872416243,68,1 +69,29621193,0.6837300246,69,1 +70,89517123,-0.0908620204,70,1 +71,86877861,-1.7907027894,71,1 +72,84596763,-1.1600481683,72,1 +73,32681689,0.6554665043,73,1 +74,78131769,-1.2598131086,74,1 +75,63692280,0.315164318,75,1 +76,25116624,-0.3951348221,76,1 +77,53476611,0.3992446818,77,1 +78,51691648,-0.0254818707,78,1 +79,49821255,0.9733161609,79,1 +80,67965139,-0.6523184808,80,1 +81,15179387,-2.629990129,81,1 +82,48009117,1.5499164655,82,1 +83,57978047,-0.1044467937,83,1 +84,43588856,-0.642989739,84,1 +85,79954171,-0.185724772,85,1 +86,28806750,-0.1013245994,86,1 +87,64400761,-0.6568846582,87,1 +88,29680782,0.7722357523,88,1 +89,12809543,-0.0689260825,89,1 +90,82277584,-0.1389525028,90,1 +91,85784647,0.5737833368,91,1 +92,20506771,0.4432311878,92,1 +93,51535635,0.1619308457,93,1 +94,31884319,1.3161766728,94,1 +95,23230268,0.3421060756,95,1 +96,69353898,1.7806031915,96,1 +97,44296259,0.506898752,97,1 +98,53151610,0.5442729039,98,1 +99,20685727,-0.4569501488,99,1 +100,36041441,0.4544959344,100,1 +101,42408207,-0.3974807573,101,1 +102,15679381,0.8671239161,102,1 +103,12276156,-0.188865403,103,1 +104,42568125,-1.5869385248,104,1 +105,43385757,-0.3718240961,105,1 +106,15357468,0.1831694355,106,1 +107,64492304,-1.8378414357,107,1 +108,53564846,0.81966974,108,1 +109,37859586,-0.1551821061,109,1 +110,34996380,-0.1939160173,110,1 +111,86638443,-0.8439338504,111,1 +112,70360053,1.4451184346,112,1 +113,79477381,-0.7897023586,113,1 +114,81051874,0.4694349645,114,1 +115,45525837,0.1720649358,115,1 +116,30603736,-0.2715923168,116,1 +117,60449259,0.3335554059,117,1 +118,41751044,-0.4648006019,118,1 +119,48950706,-1.2324616744,119,1 +120,14189089,2.4218505618,120,1 +121,34064710,-2.3043901048,121,1 +122,71575641,0.1631193585,122,1 +123,58162279,0.0328621357,123,1 +124,78198194,0.0863104012,124,1 +125,31952316,-1.0924087229,125,1 +126,13316889,0.3631716474,126,1 +127,66805541,-1.0481547678,127,1 +128,75412893,-1.7693596534,128,1 +129,29632847,0.2086486957,129,1 +130,32456402,-0.2665961717,130,1 +131,81653364,1.2695214918,131,1 +132,75005866,0.4710638741,132,1 +133,42373021,-0.8063982625,133,1 +134,78715337,0.5953834211,134,1 +135,17967300,-1.2136435376,135,1 +136,16790822,1.3545674374,136,1 +137,21525670,1.9133316084,137,1 +138,83704168,0.3840347586,138,1 +139,71398386,0.8781396619,139,1 +140,23993582,-0.3292082526,140,1 +141,45806461,1.5048348733,141,1 +142,19915428,-0.3205419873,142,1 +143,14852845,0.4586443787,143,1 +144,53061634,-0.5658890956,144,1 +145,42164013,-0.2918945468,145,1 +146,54708232,-0.9980127984,146,1 +147,31162965,-0.6029145206,147,1 +148,12846166,-1.514719119,148,1 +149,76814085,-1.0233365517,149,1 +150,74397280,1.0297391153,150,1 +151,25009993,0.5855966605,151,1 +152,14443948,-1.5466153979,152,1 +153,89387136,0.2877016417,153,1 +154,40085294,-1.9766307534,154,1 +155,19184793,0.3542206769,155,1 +156,43622395,0.2571678527,156,1 +157,35362100,-0.5391139762,157,1 +158,22099232,-1.2668747285,158,1 +159,50866640,-1.2391162529,159,1 +160,59910336,-1.1575531433,160,1 +161,37936065,0.4621065895,161,1 +162,35206714,0.2226173955,162,1 +163,51161475,0.0682924357,163,1 +164,15459892,0.6654019617,164,1 +165,35602038,0.8626621753,165,1 +166,83292027,0.3441070119,166,1 +167,60072913,0.0973631776,167,1 +168,72976216,0.8331005998,168,1 +169,19270065,-0.2876395921,169,1 +170,68814090,0.4380306864,170,1 +171,85831650,-1.7257144314,171,1 +172,84480388,1.3336365036,172,1 +173,20954363,-0.5859096269,173,1 +174,75628985,-1.1329001077,174,1 +175,89798673,0.4718554263,175,1 +176,32261990,0.027844524,176,1 +177,49145907,-0.5623001381,177,1 +178,14786829,-1.9842307093,178,1 +179,67197313,1.9094062053,179,1 +180,22022576,0.6154214509,180,1 +181,11283987,-0.6505981475,181,1 +182,15315215,1.3206432542,182,1 +183,67813944,0.1521798461,183,1 +184,47013574,0.1325480052,184,1 +185,53412546,1.0040989836,185,1 +186,53979800,-1.0272982362,186,1 +187,31186444,-0.6584369456,187,1 +188,26184682,0.3564146789,188,1 +189,66962174,-0.6810581013,189,1 +190,89468363,0.9834780413,190,1 +191,66286000,-0.314420376,191,1 +192,82083864,0.3998452438,192,1 +193,44328872,-0.6217571696,193,1 +194,42897664,-1.0884751361,194,1 +195,45201919,0.7466480526,195,1 +196,12844117,0.1019201755,196,1 +197,38393344,0.5868243386,197,1 +198,35976214,-0.5046376098,198,1 +199,51040075,-0.4918916278,199,1 +200,43050614,-0.9586535254,200,1 +201,14256563,1.3784917621,201,1 +202,78120753,0.5711224885,202,1 +203,40762192,-0.2417576991,203,1 +204,50178355,-0.2365901699,204,1 +205,41783929,-0.2838591115,205,1 +206,71661117,-0.9896545954,206,1 +207,43394026,0.5726422659,207,1 +208,78617708,-0.2297866042,208,1 +209,88097866,2.8228766045,209,1 +210,43927340,0.7410991527,210,1 +211,11295929,0.9878009285,211,1 +212,18677132,-0.6038257991,212,1 +213,29523231,-0.1264345643,213,1 +214,10734634,0.1393556612,214,1 +215,49104124,1.8218952132,215,1 +216,10251388,-0.7275255551,216,1 +217,54612796,0.1915500993,217,1 +218,57727941,-1.4704498498,218,1 +219,42650861,0.1703621365,219,1 +220,23336737,1.0430458721,220,1 +221,55111952,0.365649231,221,1 +222,30209930,1.166602798,222,1 +223,48098086,0.227903435,223,1 +224,83951904,0.6729784882,224,1 +225,84963964,0.0303890934,225,1 +226,61358831,-1.1549477897,226,1 +227,48270672,1.5613379319,227,1 +228,83555084,-0.6311706166,228,1 +229,17167619,-0.0133640322,229,1 +230,25355807,0.7678475937,230,1 +231,67337583,1.023839112,231,1 +232,32748077,0.5197239928,232,1 +233,21791689,-0.1847297575,233,1 +234,85495436,0.0505668829,234,1 +235,74673373,0.0597317788,235,1 +236,50479072,-1.2693142734,236,1 +237,19138590,1.0452296011,237,1 +238,30948846,1.501720327,238,1 +239,22530538,-1.2136510193,239,1 +240,33775783,1.9859969844,240,1 +241,78213892,0.2853349807,241,1 +242,81038495,-0.2538665464,242,1 +243,73903443,-0.6745858569,243,1 +244,88989806,0.2284571172,244,1 +245,21568920,-0.0469699042,245,1 +246,33903488,0.2733744056,246,1 +247,32378010,1.3651150589,247,1 +248,76465894,-0.6517745446,248,1 +249,33898312,0.1232977852,249,1 +250,56984853,-0.9913478428,250,1 +251,45876169,0.0771714066,251,1 +252,81390256,0.4128662089,252,1 +253,76705880,1.0472957559,253,1 +254,18491901,2.6790586644,254,1 +255,31621041,-0.0325149824,255,1 +256,69547514,-1.2551315242,256,1 +257,71571988,-0.6389152231,257,1 +258,30684291,-0.5616072265,258,1 +259,53031661,1.1657388697,259,1 +260,56642310,2.4185252678,260,1 +261,51761829,0.3863522238,261,1 +262,79443048,0.3583362804,262,1 +263,14167638,-1.0797760872,263,1 +264,79670673,-1.3340616789,264,1 +265,11015462,-1.4067650608,265,1 +266,34168989,-2.1125812449,266,1 +267,40969956,0.1974525225,267,1 +268,38598650,-0.2077129278,268,1 +269,42163342,-0.6937456171,269,1 +270,17475189,-0.3726062057,270,1 +271,73172520,-0.0472488217,271,1 +272,73358063,-1.6830357303,272,1 +273,79766458,0.0750695994,273,1 +274,76141590,-0.9555686349,274,1 +275,32986066,0.8267019274,275,1 +276,88264116,-1.9731676499,276,1 +277,75769232,-0.1158605238,277,1 +278,89682482,-1.3166039223,278,1 +279,28673384,-0.4008914227,279,1 +280,36078973,-0.5295199452,280,1 +281,60983062,-0.1621224188,281,1 +282,75668655,0.4708416733,282,1 +283,76764836,0.5061047078,283,1 +284,52469376,0.1247092428,284,1 +285,32676237,1.3199895472,285,1 +286,23444791,-0.1970803208,286,1 +287,59495827,0.4199485323,287,1 +288,52505198,-0.5657405239,288,1 +289,13324527,-1.7347810785,289,1 +290,72967906,2.8805987745,290,1 +291,46500558,-0.7744963637,291,1 +292,54351249,-1.433063435,292,1 +293,87654686,0.3514900412,293,1 +294,11206386,-0.4006810937,294,1 +295,38176113,-0.5523261757,295,1 +296,30691329,0.9276471953,296,1 +297,18813863,0.1460938363,297,1 +298,47703304,-0.041890173,298,1 +299,78647509,0.259171676,299,1 +300,87004898,-0.1373321276,300,1 +301,48678727,0.1443984463,301,1 +302,67731172,-0.7434920852,302,1 +303,52456482,-0.8651385507,303,1 +304,34283594,0.4402757782,304,1 +305,16500433,0.2334553555,305,1 +306,65898415,0.2317381033,306,1 +307,48476124,-0.5056856122,307,1 +308,68728278,0.5159327626,308,1 +309,71310620,-0.4210176223,309,1 +310,75386435,0.7356013177,310,1 +311,77128996,1.5574600079,311,1 +312,27818258,-0.5763445468,312,1 +313,68377865,0.0652387382,313,1 +314,41793177,0.7868309502,314,1 +315,72377441,0.2862537091,315,1 +316,56407844,1.5599694649,316,1 +317,70154889,0.8861616415,317,1 +318,40091076,-0.5401727815,318,1 +319,46741246,0.0353795112,319,1 +320,35640470,-0.2154166101,320,1 +321,73821182,0.039465027,321,1 +322,68773902,0.6397292598,322,1 +323,70319758,0.2494766202,323,1 +324,56771721,-1.3475413321,324,1 +325,41177408,-1.034140411,325,1 +326,34530198,-0.1013024952,326,1 +327,88652308,1.1732342122,327,1 +328,67991975,-1.4949098654,328,1 +329,81855085,1.9340381645,329,1 +330,48379672,-0.8913387413,330,1 +331,34124931,-0.0929611063,331,1 +332,38506565,-1.6841341629,332,1 +333,52575093,-0.3287153119,333,1 +334,60380183,0.8633613983,334,1 +335,69989379,-1.5431246562,335,1 +336,31518783,0.7710732241,336,1 +337,69055654,0.7457165708,337,1 +338,39285683,0.4063135023,338,1 +339,18770488,0.0199306807,339,1 +340,32004104,0.0151413982,340,1 +341,45101041,0.3837105076,341,1 +342,63573483,1.2949107205,342,1 +343,22175745,0.898743788,343,1 +344,89097761,1.3055742743,344,1 +345,64502246,-0.0105725614,345,1 +346,32481066,-0.8388733123,346,1 +347,60453069,-0.6095468964,347,1 +348,74704337,0.9385624838,348,1 +349,69734147,0.2912721873,349,1 +350,55419271,0.8499157283,350,1 +351,20729153,-0.3773323328,351,1 +352,60676869,-1.6257533929,352,1 +353,17700651,2.6849778334,353,1 +354,11599466,1.5449962596,354,1 +355,47564223,-1.2243217559,355,1 +356,10501425,1.9539481188,356,1 +357,58143067,2.0084002876,357,1 +358,65193904,-0.7530489468,358,1 +359,73311952,0.9128436314,359,1 +360,85283311,-0.2880108209,360,1 +361,17145328,-0.316620238,361,1 +362,77636933,0.3023937435,362,1 +363,40756100,0.4366709998,363,1 +364,39913156,0.351012416,364,1 +365,65321173,1.4264275477,365,1 +366,62970450,-0.4683646786,366,1 +367,81514325,-0.464282348,367,1 +368,57137610,-0.0319062614,368,1 +369,43980447,-0.5310093044,369,1 +370,38560818,1.4439327701,370,1 +371,37509001,-1.5192058264,371,1 +372,88314271,-0.4963793853,372,1 +373,28972600,-0.8414787488,373,1 +374,33585179,0.3172454842,374,1 +375,15385767,-1.8516507638,375,1 +376,37937391,-2.6559851429,376,1 +377,89501766,-0.3718928064,377,1 +378,24983357,0.7163358982,378,1 +379,64525529,-0.5463238976,379,1 +380,30568525,0.861132088,380,1 +381,76489781,0.3574187401,381,1 +382,72104132,-0.7249402217,382,1 +383,18207917,-1.4241807935,383,1 +384,65257326,-0.7345395534,384,1 +385,79087978,-0.1929576957,385,1 +386,34088333,-1.3181231631,386,1 +387,20105202,-0.5023985567,387,1 +388,14443517,-0.4601789471,388,1 +389,78309371,-1.9216411443,389,1 +390,12965355,1.1217086739,390,1 +391,22284769,-1.3539626069,391,1 +392,49931651,-0.3432012618,392,1 +393,60500729,1.7665351377,393,1 +394,25097032,0.7071421396,394,1 +395,27882796,-2.0212790925,395,1 +396,33585357,-0.2471965782,396,1 +397,12608338,-1.4352117853,397,1 +398,16018089,-1.1331206607,398,1 +399,25303560,-0.7810926437,399,1 +400,48362249,0.9812401275,400,1 +401,69868667,-0.2422534586,401,1 +402,22986995,-0.5768829694,402,1 +403,50213712,0.0011009761,403,1 +404,75135964,0.4526715669,404,1 +405,55611279,0.3709743747,405,1 +406,72216832,-0.3121963041,406,1 +407,59289888,1.5394986667,407,1 +408,89164533,-0.4067868877,408,1 +409,80591014,-0.3458926602,409,1 +410,28087361,0.0929134154,410,1 +411,35442800,-0.0167324316,411,1 +412,54279926,-0.7833879219,412,1 +413,66697382,0.6769731127,413,1 +414,83884686,-0.6422153704,414,1 +415,79614317,0.645532669,415,1 +416,74489449,0.3141705951,416,1 +417,53661765,1.7755559312,417,1 +418,69887164,-0.8831334972,418,1 +419,65854092,-1.5103060544,419,1 +420,50765511,-0.9823333382,420,1 +421,53281786,-0.223694204,421,1 +422,30102225,0.0349530692,422,1 +423,50015862,1.355764727,423,1 +424,10168298,0.1278832261,424,1 +425,19363643,0.0012018104,425,1 +426,48718829,-0.8580350856,426,1 +427,63869562,0.2374614047,427,1 +428,43220773,1.2152166026,428,1 +429,43445429,0.4104162694,429,1 +430,34948382,0.7930609075,430,1 +431,65356672,-1.3930244651,431,1 +432,56774268,0.6702364472,432,1 +433,58631107,-1.7650604094,433,1 +434,75002509,-0.6884044448,434,1 +435,59705310,0.1372487042,435,1 +436,66568351,1.2272969388,436,1 +437,10376409,1.3486494984,437,1 +438,56146573,-0.2693648578,438,1 +439,12221292,-0.2359031185,439,1 +440,54703417,-0.8194855282,440,1 +441,20686360,-0.3758378208,441,1 +442,53972574,-0.5513820899,442,1 +443,47444174,0.5306458109,443,1 +444,66745696,-0.7452699165,444,1 +445,15159354,-1.3341230327,445,1 +446,56358240,2.3244959907,446,1 +447,85631297,-0.8681388412,447,1 +448,36393013,-0.7883558334,448,1 +449,12573902,-0.6255344662,449,1 +450,59619693,0.3994498928,450,1 +451,15164856,0.3819995837,451,1 +452,57652483,-1.6167441263,452,1 +453,67295361,-0.5311062287,453,1 +454,37656756,-0.0344489263,454,1 +455,26449046,1.2477297622,455,1 +456,41443351,-0.3918372126,456,1 +457,60058135,2.1721072723,457,1 +458,21856933,-0.8613057034,458,1 +459,32264326,1.027336088,459,1 +460,41818349,-0.2888370594,460,1 +461,77184366,0.0839230482,461,1 +462,30982635,-1.1004257691,462,1 +463,61063350,0.2734163116,463,1 +464,88672495,0.7104472081,464,1 +465,83490452,0.1844978109,465,1 +466,12560057,-0.3580699424,466,1 +467,16748739,0.0140724085,467,1 +468,16489655,-0.9623451921,468,1 +469,87567917,-0.7321598231,469,1 +470,21087074,-0.5285511018,470,1 +471,84296369,-0.1946294441,471,1 +472,82590903,1.6629345795,472,1 +473,89095381,-0.3624054129,473,1 +474,85141871,-0.9118182849,474,1 +475,86998830,-0.2907946357,475,1 +476,75649711,-0.1005679334,476,1 +477,61071231,-0.8420914301,477,1 +478,25073437,-0.4557822806,478,1 +479,70243130,0.7942836876,479,1 +480,79474284,-0.3989476543,480,1 +481,13089709,0.1451248862,481,1 +482,33905506,0.3625664145,482,1 +483,86373312,2.0375392266,483,1 +484,70447032,-1.8855019642,484,1 +485,63833084,0.8733551861,485,1 +486,52837420,-0.9390018441,486,1 +487,42939298,1.6650039722,487,1 +488,28067218,-1.4937596647,488,1 +489,84965781,-0.1786262875,489,1 +490,36888616,-0.4744637212,490,1 +491,81534233,-0.6248649852,491,1 +492,48855299,-1.2423946767,492,1 +493,68484286,-1.5741288175,493,1 +494,85389462,0.8236329604,494,1 +495,11056750,1.5746069975,495,1 +496,76510338,2.1836252623,496,1 +497,58551086,0.8417898074,497,1 +498,69104103,0.6337895723,498,1 +499,16018000,0.6508067898,499,1 +500,83008783,1.3903016416,500,1 +501,83147085,0.7417408829,501,1 +502,57838612,0.3206502196,502,1 +503,55351249,0.9574456428,503,1 +504,18257185,0.3285495072,504,1 +505,42396073,-0.241022255,505,1 +506,63585046,-1.3215210519,506,1 +507,17208650,-0.2246402169,507,1 +508,86132701,-0.7070717842,508,1 +509,72437112,0.7776141485,509,1 +510,82424210,0.5646829255,510,1 +511,71221665,-0.0869724441,511,1 +512,70735364,-0.3425872969,512,1 +513,20526362,0.5373375456,513,1 +514,67594384,0.4009754814,514,1 +515,79394026,-0.7552816179,515,1 +516,79504186,-0.0288358005,516,1 +517,47876740,-0.7339318795,517,1 +518,79756842,0.8987871999,518,1 +519,62193539,-1.0452288955,519,1 +520,83522395,0.6931955534,520,1 +521,39167178,-0.8499731525,521,1 +522,71566282,-0.073686647,522,1 +523,86985384,0.5634939004,523,1 +524,88076412,-1.40678665,524,1 +525,56916156,1.5013923405,525,1 +526,73530811,0.4821681213,526,1 +527,53729181,-0.4693180611,527,1 +528,45654299,-0.4783989752,528,1 +529,49835759,0.1060789447,529,1 +530,56423983,0.5187719359,530,1 +531,31887476,-1.6720996691,531,1 +532,10384345,0.7970085506,532,1 +533,40993121,0.7202938187,533,1 +534,86008480,0.1179227193,534,1 +535,31632366,1.0434095772,535,1 +536,36171864,-2.2826122584,536,1 +537,19845880,0.7162602281,537,1 +538,22090581,-0.97017972,538,1 +539,63927618,0.519076931,539,1 +540,10008749,-1.6451122921,540,1 +541,48270901,0.2601006738,541,1 +542,63376415,1.7560856076,542,1 +543,60719104,0.197378154,543,1 +544,28831768,-1.9228860668,544,1 +545,75489649,-0.3810318533,545,1 +546,12952571,0.2347699472,546,1 +547,41314261,1.2611700769,547,1 +548,39172844,-0.3157512533,548,1 +549,15210789,-0.5472934125,549,1 +550,19521055,-0.4802345664,550,1 +551,17414785,-0.9806729207,551,1 +552,25214321,0.9733299462,552,1 +553,64562753,0.9169764259,553,1 +554,89910838,-1.3888670768,554,1 +555,66688757,0.0714113546,555,1 +556,43779845,0.0322946392,556,1 +557,47269629,0.0056608464,557,1 +558,53477773,-0.1218819573,558,1 +559,67403814,-0.656102749,559,1 +560,76947223,1.0576726182,560,1 +561,54368379,-1.0238093948,561,1 +562,46726520,-1.1917576038,562,1 +563,21828683,1.1917704848,563,1 +564,63051029,-0.9486219413,564,1 +565,83585687,0.3487635244,565,1 +566,56526244,-1.122905387,566,1 +567,44516871,-0.0461514637,567,1 +568,21653171,-1.0180626419,568,1 +569,72374748,-0.3923482313,569,1 +570,43301635,-0.4889824171,570,1 +571,25842007,-0.3230743034,571,1 +572,85850858,-1.0353390673,572,1 +573,62005071,1.7147925941,573,1 +574,52770759,0.2785682252,574,1 +575,26839642,-0.2977001816,575,1 +576,54149358,0.676233906,576,1 +577,85285605,0.5142814808,577,1 +578,41861387,-1.0476651741,578,1 +579,33243027,0.4873498906,579,1 +580,76979909,1.0314864451,580,1 +581,85416243,-0.2229367916,581,1 +582,29141852,0.1566813806,582,1 +583,32184293,-1.9221625374,583,1 +584,34048724,0.9133155887,584,1 +585,28428196,1.6459347703,585,1 +586,86999492,-0.2287714013,586,1 +587,85690472,-0.121300939,587,1 +588,55388177,0.6926698134,588,1 +589,45642369,-1.3659369591,589,1 +590,78629542,-0.1461010747,590,1 +591,41890572,1.309672125,591,1 +592,67207893,0.8014753975,592,1 +593,23821744,-0.1898473571,593,1 +594,79057339,0.4484644038,594,1 +595,35630729,0.3858186326,595,1 +596,59191620,1.6178274395,596,1 +597,24859213,1.0281526814,597,1 +598,74611885,-0.1579197334,598,1 +599,69082543,0.5554331862,599,1 +600,35683136,0.5265133804,600,1 +601,41583844,-1.1778234091,601,1 +602,28619533,0.9946822785,602,1 +603,70147165,-0.2734957061,603,1 +604,47340590,-0.591364185,604,1 +605,25686459,-0.5510718237,605,1 +606,70864962,-2.6808795894,606,1 +607,32043262,0.8273471235,607,1 +608,89714325,0.100077965,608,1 +609,63806156,0.0625615943,609,1 +610,13415072,-0.3437056623,610,1 +611,52207947,0.1748326435,611,1 +612,49353250,1.3133894129,612,1 +613,14643757,-1.1990485611,613,1 +614,32297387,-0.4138540473,614,1 +615,44783134,-0.6879630269,615,1 +616,12900117,1.7894019606,616,1 +617,15718762,-1.5735961132,617,1 +618,18400820,-1.1502569202,618,1 +619,13416938,-0.0877111861,619,1 +620,89363414,0.6037239952,620,1 +621,40554130,0.1767770223,621,1 +622,79477759,-2.0524710926,622,1 +623,84756979,0.9386427665,623,1 +624,32564068,0.4937209802,624,1 +625,89358898,-0.1606634939,625,1 +626,45858710,2.5715789844,626,1 +627,43745703,-0.5889869056,627,1 +628,64546987,0.3527050381,628,1 +629,81672002,-1.2313454855,629,1 +630,37738865,0.8115409977,630,1 +631,22300621,0.8864845201,631,1 +632,19345123,1.696333925,632,1 +633,17866624,-0.4681209668,633,1 +634,76121080,-0.6661128281,634,1 +635,22200200,-0.1123989194,635,1 +636,71006342,-0.8848224519,636,1 +637,64158515,0.2185725224,637,1 +638,60536016,1.0511993554,638,1 +639,44176870,-0.6392310374,639,1 +640,81550236,-0.0895027529,640,1 +641,21536934,0.3591506827,641,1 +642,45210676,-0.8387852967,642,1 +643,64740846,-0.1848738664,643,1 +644,71011950,0.6189545027,644,1 +645,55686401,-2.4720654181,645,1 +646,31925506,-1.0234290514,646,1 +647,59571272,0.9555560907,647,1 +648,36513803,-0.5309928382,648,1 +649,35235400,1.1248644103,649,1 +650,89140977,-0.2217508824,650,1 +651,63576311,0.6528862958,651,1 +652,25018279,-0.4334863171,652,1 +653,67235947,-0.5437271418,653,1 +654,49552729,-1.2152377928,654,1 +655,78750649,-0.762983799,655,1 +656,87667861,-1.4662362323,656,1 +657,59045258,0.0725986966,657,1 +658,88303249,-1.0785755761,658,1 +659,54911322,1.5568397073,659,1 +660,50646228,-0.1228695985,660,1 +661,22321976,-0.309675625,661,1 +662,64579699,1.5572804253,662,1 +663,45731584,-0.0896335785,663,1 +664,41287261,-0.5520050999,664,1 +665,63767466,-0.4652072709,665,1 +666,40756499,0.4514743859,666,1 +667,79861990,-1.1280744617,667,1 +668,53943512,0.2483746563,668,1 +669,71831607,-0.1680820061,669,1 +670,37149143,-0.9512653087,670,1 +671,71337529,-1.4931045103,671,1 +672,43131801,0.874590815,672,1 +673,70923809,0.4696245012,673,1 +674,13417117,0.0691700767,674,1 +675,38477046,0.6825303883,675,1 +676,17718310,-0.9670162954,676,1 +677,37907886,-0.1199292515,677,1 +678,24713834,-0.3301547747,678,1 +679,72554001,0.049777528,679,1 +680,47513996,-0.342156523,680,1 +681,46484992,-1.3288924074,681,1 +682,32254721,-0.2681763666,682,1 +683,40455993,0.8021312037,683,1 +684,25592801,0.1572348169,684,1 +685,24843273,-0.2950623838,685,1 +686,43251418,1.6111353339,686,1 +687,38218960,-0.210939218,687,1 +688,77372919,-0.915240195,688,1 +689,84238871,-0.7999404541,689,1 +690,53715985,0.0183746768,690,1 +691,71135507,-0.2933208895,691,1 +692,23525062,0.127086761,692,1 +693,39354295,0.6108045695,693,1 +694,50200640,0.5191989631,694,1 +695,40311421,-0.2027616508,695,1 +696,66209288,-0.5738934183,696,1 +697,24537923,-0.1015577092,697,1 +698,34306473,1.5598979017,698,1 +699,10233631,-0.7260610768,699,1 +700,68343183,0.9374216279,700,1 +701,46433194,-0.3383396931,701,1 +702,66407858,-0.7231057851,702,1 +703,73856001,0.5819784481,703,1 +704,11054513,0.1650107969,704,1 +705,80522036,0.000169643,705,1 +706,89171159,0.4126919001,706,1 +707,67973764,0.2135952923,707,1 +708,67807594,1.1322678992,708,1 +709,86385778,1.0674547081,709,1 +710,62033911,0.090316248,710,1 +711,20787170,1.6721280494,711,1 +712,85834112,1.6346015989,712,1 +713,88609398,-0.6751690899,713,1 +714,20399148,0.9211607777,714,1 +715,76028155,2.674333026,715,1 +716,40151462,0.0023233696,716,1 +717,35764760,-0.9864036975,717,1 +718,73565716,0.0840239684,718,1 +719,80388382,1.9184585033,719,1 +720,61207520,-0.2793292929,720,1 +721,19683344,-1.0132331479,721,1 +722,84372869,0.6304831091,722,1 +723,81870991,-0.1410543645,723,1 +724,82912221,-1.2282701495,724,1 +725,77611071,0.5919556678,725,1 +726,21210901,0.0117312861,726,1 +727,25383127,0.068425864,727,1 +728,14048800,-0.8255214006,728,1 +729,33910984,-1.8415582285,729,1 +730,32648317,-0.7249447246,730,1 +731,12757903,0.5846073418,731,1 +732,77018827,-0.5268140276,732,1 +733,10198328,0.7802534692,733,1 +734,24325256,1.1826075586,734,1 +735,86376261,-0.6797914842,735,1 +736,79201454,1.2984209703,736,1 +737,69133198,1.4610376607,737,1 +738,52008263,0.7842418338,738,1 +739,86535226,0.0855042474,739,1 +740,83854122,0.5209338711,740,1 +741,55168251,-0.1531595764,741,1 +742,39678829,0.4824190251,742,1 +743,26866098,0.0159864379,743,1 +744,66117637,-0.0620033177,744,1 +745,17397610,0.5304113594,745,1 +746,21256259,0.0487966212,746,1 +747,79099071,-1.4747562852,747,1 +748,16883709,0.3258433362,748,1 +749,64890697,-0.1502659795,749,1 +750,28784884,0.3661097244,750,1 +751,68869286,0.3034864299,751,1 +752,57494900,-0.4190241026,752,1 +753,19969080,1.5608616111,753,1 +754,18123823,0.6682965402,754,1 +755,64617468,0.3127313521,755,1 +756,59759952,-1.4943007243,756,1 +757,21635650,-0.0409724665,757,1 +758,12509488,-0.5042027751,758,1 +759,10023399,-0.2964906336,759,1 +760,29910806,-0.1974523856,760,1 +761,70220353,-1.5289462889,761,1 +762,27571195,-0.3706954307,762,1 +763,15313585,-0.5434540195,763,1 +764,13298869,2.8477070448,764,1 +765,64377639,-0.3581508879,765,1 +766,74481060,-0.2127297286,766,1 +767,50607561,-0.3150993456,767,1 +768,46512400,0.0972828674,768,1 +769,76396414,1.3998583537,769,1 +770,51339040,0.164435109,770,1 +771,64651182,0.8254553927,771,1 +772,51337179,1.5826247468,772,1 +773,58037750,-0.2380825493,773,1 +774,32819141,-0.8465173241,774,1 +775,33312380,-0.504632392,775,1 +776,31296309,-1.1541247114,776,1 +777,89236817,1.5718021968,777,1 +778,85595942,-0.2557656885,778,1 +779,51980023,-1.6814993302,779,1 +780,42652768,-0.6957423812,780,1 +781,20205526,-0.3272535485,781,1 +782,57614003,-0.5358960009,782,1 +783,47925532,-0.1362258593,783,1 +784,53489815,0.7149929655,784,1 +785,73482594,1.9183319987,785,1 +786,17542167,1.5542907137,786,1 +787,70893822,0.5498804425,787,1 +788,40224528,0.0124533464,788,1 +789,31707784,1.466200624,789,1 +790,13848485,0.7834682729,790,1 +791,31656729,-1.6947406233,791,1 +792,85285626,0.1639850147,792,1 +793,64031657,-0.3296112619,793,1 +794,54443115,-1.1749471755,794,1 +795,26208362,0.7077481959,795,1 +796,75860480,-0.0767838904,796,1 +797,21314810,-0.0925665879,797,1 +798,15636875,0.8629543416,798,1 +799,54556167,-1.5439963137,799,1 +800,11241262,-0.2641822999,800,1 +801,38911613,0.320633686,801,1 +802,40089338,0.4545079134,802,1 +803,40539673,0.3450591295,803,1 +804,27201551,-0.3923841342,804,1 +805,47672761,0.5612687161,805,1 +806,68402455,-0.1082704142,806,1 +807,24953565,0.1289711317,807,1 +808,43880058,-1.1605931948,808,1 +809,64131714,-0.7472728424,809,1 +810,54615840,-1.7198910543,810,1 +811,89393864,0.0621017275,811,1 +812,53357420,0.9624710245,812,1 +813,39871599,0.1799590103,813,1 +814,59794659,-0.2774048881,814,1 +815,44924631,3.7311856613,815,1 +816,64277149,-0.6665925545,816,1 +817,30535994,0.4011746312,817,1 +818,25230840,0.0690048255,818,1 +819,81313816,-0.6861536294,819,1 +820,18525990,1.7061698468,820,1 +821,64259424,1.5913052701,821,1 +822,64861186,-0.7319802946,822,1 +823,66322490,-1.2790824692,823,1 +824,70045518,-0.5604412941,824,1 +825,17949365,-1.5578771809,825,1 +826,76060868,1.9142254735,826,1 +827,70064101,-0.9273798521,827,1 +828,77539856,1.0222309043,828,1 +829,20197574,-0.6792545468,829,1 +830,37917150,-0.2098451972,830,1 +831,62745318,-0.6369983014,831,1 +832,87783770,-0.1506262873,832,1 +833,28920773,0.2909811282,833,1 +834,58855862,-2.3287991535,834,1 +835,84348137,-0.2920290733,835,1 +836,41403642,-0.8908527942,836,1 +837,26009378,-1.2457555395,837,1 +838,14959511,0.2485067656,838,1 +839,83393972,-0.1838460358,839,1 +840,41115703,0.6365698263,840,1 +841,53951539,0.5989039679,841,1 +842,63836526,-0.7221367845,842,1 +843,19157157,1.0071918634,843,1 +844,17043274,-0.6174039447,844,1 +845,31356265,0.7010456973,845,1 +846,68149992,1.0661755479,846,1 +847,78221177,-1.62643962,847,1 +848,62539580,-0.2802898165,848,1 +849,64093160,-2.0834307156,849,1 +850,49797400,-1.1481579533,850,1 +851,20817296,0.5064978991,851,1 +852,51044745,0.1948993305,852,1 +853,45390418,0.7566100568,853,1 +854,20172263,0.9935784971,854,1 +855,36119365,-3.7224557766,855,1 +856,61680086,-1.5763286896,856,1 +857,57894668,-0.3856741873,857,1 +858,63357232,0.9671621555,858,1 +859,71705042,1.088530855,859,1 +860,58535502,-1.3374296269,860,1 +861,60250986,0.6518872605,861,1 +862,16114298,-0.105814375,862,1 +863,81406016,-0.9564996098,863,1 +864,38438072,-0.2877005731,864,1 +865,87508770,1.6424698713,865,1 +866,31962998,-0.4532156859,866,1 +867,14693641,-0.2377298904,867,1 +868,37640838,-0.7694851235,868,1 +869,54227267,0.6038026008,869,1 +870,18331384,0.2208675379,870,1 +871,88951252,-0.1661470523,871,1 +872,10922932,-0.5135007196,872,1 +873,39310232,-1.6127723488,873,1 +874,14747378,-0.3243561031,874,1 +875,25172007,0.3469815569,875,1 +876,75182167,0.3534436207,876,1 +877,21256707,-0.1070453763,877,1 +878,18815174,0.0115022317,878,1 +879,67718469,0.062762796,879,1 +880,85939176,0.1218617142,880,1 +881,70261961,0.5264066147,881,1 +882,64142902,-0.291905449,882,1 +883,71491744,0.8684689596,883,1 +884,15688225,0.1459503534,884,1 +885,39631370,0.6723372285,885,1 +886,10619578,0.6181981602,886,1 +887,43351685,-0.0590340173,887,1 +888,33346352,-0.3998524471,888,1 +889,29693357,1.2843604469,889,1 +890,41728077,2.7464658485,890,1 +891,12628360,-0.6253765865,891,1 +892,45884490,0.5100397793,892,1 +893,88355286,0.4321582531,893,1 +894,15180354,-0.2854535274,894,1 +895,67190568,0.4030812276,895,1 +896,52416911,0.1617756322,896,1 +897,49421900,0.3649374811,897,1 +898,19763129,1.4718227432,898,1 +899,48732916,1.1471642659,899,1 +900,21426918,0.0346089084,900,1 +901,33732344,-1.0598725317,901,1 +902,65212138,1.0802000968,902,1 +903,22412982,0.9820626174,903,1 +904,22852668,0.5488695423,904,1 +905,37272689,2.5823275471,905,1 +906,43042333,-0.4382325891,906,1 +907,41770840,-1.6624829695,907,1 +908,68141536,1.8714084234,908,1 +909,41344487,1.4699778431,909,1 +910,89904722,0.3720014491,910,1 +911,38409755,-0.5440594558,911,1 +912,10839886,-2.6621547119,912,1 +913,18882290,-0.3337583726,913,1 +914,17990818,-1.3787597129,914,1 +915,59467530,-0.5408689684,915,1 +916,18570584,-0.8331991726,916,1 +917,15091160,0.4128023978,917,1 +918,65963630,0.3612918797,918,1 +919,16664033,-1.9090906207,919,1 +920,20254049,-3.150838972,920,1 +921,26219077,-0.9424522186,921,1 +922,16480017,-2.5681521467,922,1 +923,12050810,0.153482537,923,1 +924,22871992,-0.6143313788,924,1 +925,55775555,0.6989065669,925,1 +926,41759889,0.0872425288,926,1 +927,56875803,1.0789413642,927,1 +928,32551543,-0.8542070482,928,1 +929,22546104,1.6729358348,929,1 +930,17049743,-0.4540573628,930,1 +931,23372595,-0.1288165289,931,1 +932,59338232,-0.7254394777,932,1 +933,54437651,1.1463808117,933,1 +934,51148121,1.6073680041,934,1 +935,89866124,-1.1528357403,935,1 +936,36413716,0.4572562846,936,1 +937,51064616,-2.815515012,937,1 +938,14900091,1.0707599796,938,1 +939,30627605,-0.7674997907,939,1 +940,23125670,0.0609831334,940,1 +941,78759491,-1.2272693216,941,1 +942,22338088,0.112402396,942,1 +943,24167161,-0.3646631246,943,1 +944,55808386,0.3181798285,944,1 +945,55919836,-1.1380403023,945,1 +946,50065596,0.0286852532,946,1 +947,88755924,0.8128676872,947,1 +948,29310869,1.4823277202,948,1 +949,82518567,-2.705428058,949,1 +950,44070936,-0.278414577,950,1 +951,70785963,-0.0521908347,951,1 +952,25626235,-2.1470187762,952,1 +953,87159379,0.7409770509,953,1 +954,30770701,-0.6622932724,954,1 +955,67397308,-0.2631659165,955,1 +956,60661659,-0.8154850338,956,1 +957,62213017,0.0200335055,957,1 +958,52036728,-0.5308955384,958,1 +959,52409058,-0.5977678718,959,1 +960,78006507,-1.6498367534,960,1 +961,75054374,-0.3909659244,961,1 +962,82739131,-1.0599918512,962,1 +963,20655697,-0.7326473389,963,1 +964,17516116,-0.3300305022,964,1 +965,68636361,0.4055559488,965,1 +966,66816080,0.999210469,966,1 +967,83917762,-1.1112327338,967,1 +968,44437239,0.5995181855,968,1 +969,52336083,0.5028879991,969,1 +970,85612972,0.4426842199,970,1 +971,34567191,0.8395633223,971,1 +972,46016180,-0.3764730717,972,1 +973,10502999,-0.8337580755,973,1 +974,54375743,0.0428419416,974,1 +975,30807199,-1.074327299,975,1 +976,13429430,0.4408864291,976,1 +977,22239021,1.4227113274,977,1 +978,78562423,-0.9445990704,978,1 +979,53004084,-0.1254714674,979,1 +980,19778298,-2.0629979357,980,1 +981,21485534,-1.2132476891,981,1 +982,25973139,-0.2792631616,982,1 +983,25159704,1.0981745804,983,1 +984,65490891,-1.947189458,984,1 +985,74408794,-0.0320001676,985,1 +986,69169274,-0.5005351093,986,1 +987,34217792,-0.1040881613,987,1 +988,89372919,-0.3872376445,988,1 +989,52689112,-1.3865530162,989,1 +990,39688297,-0.8659033653,990,1 +991,66989444,-0.6294507943,991,1 +992,48684208,1.2315685547,992,1 +993,84674003,-1.096759089,993,1 +994,46933721,0.9518621228,994,1 +995,76987593,1.8998404139,995,1 +996,49911729,-0.1749482772,996,1 +997,45626097,-1.9811006688,997,1 +998,82339675,0.7086909094,998,1 +999,64672362,-0.708380378,999,1 +1000,20228095,0.6986373667,1000,1 +1001,74344988,0.2501036679,1001,1 +1002,37805776,0.9265955189,1002,1 +1003,32171664,0.842894189,1003,1 +1004,81844114,-0.4833169868,1004,1 +1005,74418218,-0.1638079522,1005,1 +1006,75500146,-1.1828849006,1006,1 +1007,27352655,1.9047692219,1007,1 +1008,86191408,0.9435165356,1008,1 +1009,75614970,-0.8757451775,1009,1 +1010,76967984,-0.7851608364,1010,1 +1011,85670501,0.5772563331,1011,1 +1012,44290015,-1.8627349501,1012,1 +1013,58711479,0.8596642698,1013,1 +1014,60921745,-0.2626004907,1014,1 +1015,26301105,0.310249642,1015,1 +1016,60473693,0.1643560378,1016,1 +1017,34419756,-0.4829767684,1017,1 +1018,26203990,0.8364011635,1018,1 +1019,86933982,0.9276674207,1019,1 +1020,44512836,1.3626444206,1020,1 +1021,80571928,0.1860817832,1021,1 +1022,60921120,-0.9131685955,1022,1 +1023,38040626,-0.6480470484,1023,1 +1024,64813863,0.5526367588,1024,1 +1025,50618982,-0.5615327215,1025,1 +1026,41126974,2.0575182084,1026,1 +1027,85165418,0.001890261,1027,1 +1028,76307877,1.1430278852,1028,1 +1029,71409242,-1.2522862919,1029,1 +1030,82098821,-0.2149975701,1030,1 +1031,89270474,0.9406026297,1031,1 +1032,69947221,-0.8729201493,1032,1 +1033,54989229,-1.189585402,1033,1 +1034,50876797,0.5731829664,1034,1 +1035,82695921,1.5302068733,1035,1 +1036,10247574,-0.1163351246,1036,1 +1037,87572229,-0.8273029137,1037,1 +1038,33102983,1.6237049989,1038,1 +1039,13092441,0.1138206594,1039,1 +1040,67854004,-0.5968547883,1040,1 +1041,15708363,-0.2931336614,1041,1 +1042,10738324,2.0386386395,1042,1 +1043,56433729,2.2779463051,1043,1 +1044,47976063,0.3619072074,1044,1 +1045,65899955,0.294559815,1045,1 +1046,89236894,-1.4649604452,1046,1 +1047,25223355,0.4873286284,1047,1 +1048,31693932,0.3765551639,1048,1 +1049,45920582,-0.9583572334,1049,1 +1050,58583714,2.2574198037,1050,1 +1051,75842708,2.0851305215,1051,1 +1052,49988020,-0.7611305239,1052,1 +1053,45777433,0.3160113639,1053,1 +1054,27785093,-1.0778774324,1054,1 +1055,58534069,0.6378356495,1055,1 +1056,61820171,0.4196803382,1056,1 +1057,69235835,-1.2971503193,1057,1 +1058,34781429,0.2493504782,1058,1 +1059,40978804,-0.0824724855,1059,1 +1060,15622609,-0.7769237178,1060,1 +1061,65116695,-0.6289530947,1061,1 +1062,63411110,-0.2063341804,1062,1 +1063,13249696,-1.2855472109,1063,1 +1064,17071991,0.627031755,1064,1 +1065,14407358,0.6813888269,1065,1 +1066,27270946,-0.0458451843,1066,1 +1067,74636867,-1.0632567167,1067,1 +1068,74901128,0.1893999634,1068,1 +1069,18209426,-0.6066295977,1069,1 +1070,74089282,-1.7077898353,1070,1 +1071,82287429,-0.144927832,1071,1 +1072,31509241,-1.484302884,1072,1 +1073,43530232,-0.422546911,1073,1 +1074,31883500,0.1950747059,1074,1 +1075,37534422,0.8373752942,1075,1 +1076,26153152,0.7300202506,1076,1 +1077,82611890,0.1708151763,1077,1 +1078,15413467,0.6897130655,1078,1 +1079,68058878,0.8741169062,1079,1 +1080,44066385,-0.8645871272,1080,1 +1081,29912290,-1.906828959,1081,1 +1082,32064156,-0.068734486,1082,1 +1083,12407994,0.0428374104,1083,1 +1084,55863361,0.2093625898,1084,1 +1085,76767979,-0.8605488996,1085,1 +1086,80580468,-0.229263667,1086,1 +1087,74039714,-0.4559292885,1087,1 +1088,54604323,0.1742969572,1088,1 +1089,42468193,1.468247573,1089,1 +1090,82983132,0.8837613114,1090,1 +1091,62329056,-1.5319630787,1091,1 +1092,71104421,-1.2475239752,1092,1 +1093,82956249,0.448609278,1093,1 +1094,86566143,1.8748024649,1094,1 +1095,48160133,0.620277123,1095,1 +1096,77098362,-1.6704129475,1096,1 +1097,22610547,-1.3146699494,1097,1 +1098,50105761,-0.2323859311,1098,1 +1099,18094374,-0.1630654731,1099,1 +1100,40950110,0.4346197748,1100,1 +1101,66856697,0.9686878977,1101,1 +1102,47843932,-0.8305524049,1102,1 +1103,56927593,-1.0623202006,1103,1 +1104,73203354,0.603084224,1104,1 +1105,51717308,-0.109378749,1105,1 +1106,18764768,-1.6368307661,1106,1 +1107,87146988,1.6954429648,1107,1 +1108,18994060,0.2812105532,1108,1 +1109,78113536,-0.6451341766,1109,1 +1110,84033088,0.1422395991,1110,1 +1111,41208932,0.1679275454,1111,1 +1112,22815984,0.839854505,1112,1 +1113,42395175,-0.0457590458,1113,1 +1114,63180614,0.0118479499,1114,1 +1115,63775550,1.5798437931,1115,1 +1116,43115789,0.2027985371,1116,1 +1117,78896104,-0.4039102714,1117,1 +1118,33149713,-1.3868096961,1118,1 +1119,51763634,0.1362314113,1119,1 +1120,50248251,1.1620686848,1120,1 +1121,33636871,1.3931664169,1121,1 +1122,89336347,-0.2552859534,1122,1 +1123,85410202,0.0679925212,1123,1 +1124,52897271,-0.6066201802,1124,1 +1125,49373163,0.3947767149,1125,1 +1126,61330474,0.6340399972,1126,1 +1127,60065498,-1.0388288528,1127,1 +1128,57668820,-1.2823691722,1128,1 +1129,76783394,-0.7420702009,1129,1 +1130,12389759,-1.6700716118,1130,1 +1131,31090897,-1.0647378958,1131,1 +1132,52222245,-0.4809957285,1132,1 +1133,35165904,-1.4903193475,1133,1 +1134,81718660,0.6535477749,1134,1 +1135,45062111,0.1133864715,1135,1 +1136,19118317,-0.4448705076,1136,1 +1137,46377656,0.8633036736,1137,1 +1138,39603999,0.1309082763,1138,1 +1139,77514365,1.6539929448,1139,1 +1140,36179596,-1.6963465974,1140,1 +1141,12208905,0.2525078651,1141,1 +1142,36619500,-1.3105779925,1142,1 +1143,11293902,2.6221790624,1143,1 +1144,38356398,-1.0417399064,1144,1 +1145,84445212,0.4524483433,1145,1 +1146,10619083,0.5194281124,1146,1 +1147,60538239,-0.3772032067,1147,1 +1148,26930272,-0.7236537288,1148,1 +1149,40567900,-0.7819931309,1149,1 +1150,70025008,0.7345183861,1150,1 +1151,40948014,0.9442269744,1151,1 +1152,81203695,0.4129501305,1152,1 +1153,56277103,0.8709195008,1153,1 +1154,18374476,-0.5695741676,1154,1 +1155,86630418,-0.8827133931,1155,1 +1156,36974156,-0.3861774305,1156,1 +1157,62335563,-0.1032371354,1157,1 +1158,51967791,0.5437624771,1158,1 +1159,20631999,0.2504499603,1159,1 +1160,49134775,-0.0597584196,1160,1 +1161,52827380,0.3523436739,1161,1 +1162,79810050,-0.5518394059,1162,1 +1163,13480583,0.0637658103,1163,1 +1164,64556771,0.7738460027,1164,1 +1165,25653453,-0.8886226193,1165,1 +1166,36005538,0.153751675,1166,1 +1167,71411494,0.289308432,1167,1 +1168,41828266,-0.9529141535,1168,1 +1169,57129707,0.1904764307,1169,1 +1170,43713850,-0.5694780944,1170,1 +1171,58036330,1.2030995979,1171,1 +1172,33832406,0.3827603741,1172,1 +1173,36233616,-1.9841389353,1173,1 +1174,55310915,0.7019559794,1174,1 +1175,58909517,3.1133570071,1175,1 +1176,66966022,0.3961045111,1176,1 +1177,25446916,0.0782093964,1177,1 +1178,10195770,-1.2757708553,1178,1 +1179,60350148,-0.6861471755,1179,1 +1180,87371047,-0.477126805,1180,1 +1181,59894557,-0.6765061313,1181,1 +1182,34684746,0.6007338807,1182,1 +1183,76991253,-0.6964012928,1183,1 +1184,18144724,0.5702937477,1184,1 +1185,10311682,-0.1264208014,1185,1 +1186,58813103,-0.5496471269,1186,1 +1187,81269945,-0.624773926,1187,1 +1188,67619720,-0.5870607026,1188,1 +1189,79599482,0.8801114204,1189,1 +1190,56151283,0.5620193713,1190,1 +1191,85263590,0.6827553099,1191,1 +1192,46495840,-0.0803933848,1192,1 +1193,79085825,-0.6610294169,1193,1 +1194,80385705,0.4667547509,1194,1 +1195,14371862,-0.3504298352,1195,1 +1196,11959720,0.5553059673,1196,1 +1197,16444500,-0.4688441259,1197,1 +1198,85591622,1.6879040162,1198,1 +1199,42770210,2.0873360225,1199,1 +1200,61202928,-0.4569098359,1200,1 +1201,70468465,0.5908091379,1201,1 +1202,88747269,1.228107635,1202,1 +1203,76199110,-0.8935482191,1203,1 +1204,42850870,2.0601420287,1204,1 +1205,16544407,-0.8132051274,1205,1 +1206,56759217,0.1462259177,1206,1 +1207,73753659,1.104242932,1207,1 +1208,64662570,0.4919488066,1208,1 +1209,52131870,1.864468885,1209,1 +1210,49988077,-0.3448092111,1210,1 +1211,72256262,0.4390250113,1211,1 +1212,50766019,-0.8044513344,1212,1 +1213,58212254,2.4531761787,1213,1 +1214,64207278,-0.388065863,1214,1 +1215,18913193,1.5616329709,1215,1 +1216,54905483,-1.0326979848,1216,1 +1217,57152784,1.0234432239,1217,1 +1218,62053745,-0.3326777532,1218,1 +1219,18821129,-0.9020863761,1219,1 +1220,61299260,1.2519646768,1220,1 +1221,23623800,0.7775674801,1221,1 +1222,87636706,0.3430569349,1222,1 +1223,17101519,-0.4705493306,1223,1 +1224,50024569,-0.5918972831,1224,1 +1225,46465362,2.0987775871,1225,1 +1226,53417865,-0.7809429997,1226,1 +1227,35020398,-0.4941379875,1227,1 +1228,55831689,-1.7627407125,1228,1 +1229,27888091,1.0871909451,1229,1 +1230,58571396,0.3946391478,1230,1 +1231,44187397,0.4623989882,1231,1 +1232,61803663,1.6682731811,1232,1 +1233,50730853,-0.0775956238,1233,1 +1234,26213547,-0.3435432553,1234,1 +1235,63121400,-0.0871518488,1235,1 +1236,28374351,-0.3693423495,1236,1 +1237,56740336,-1.1059717698,1237,1 +1238,48528565,-0.1691878337,1238,1 +1239,42005171,-1.7818051711,1239,1 +1240,39098942,0.0208662137,1240,1 +1241,64701916,0.7386612325,1241,1 +1242,78995839,-1.1486889726,1242,1 +1243,70401042,-0.3502208424,1243,1 +1244,22189593,0.1904278381,1244,1 +1245,66228921,1.2138104459,1245,1 +1246,61387655,1.3837193335,1246,1 +1247,56585510,0.1478745774,1247,1 +1248,38780384,0.4631229139,1248,1 +1249,37342668,0.6094220452,1249,1 +1250,52623155,0.3143038942,1250,1 +1251,71999327,-0.6115196575,1251,1 +1252,12899849,0.1473689626,1252,1 +1253,48549046,-1.3120079991,1253,1 +1254,80413343,1.7225179208,1254,1 +1255,62393085,-0.8782131013,1255,1 +1256,50389361,1.1362018013,1256,1 +1257,33426534,0.078769965,1257,1 +1258,60209833,-0.1404247271,1258,1 +1259,73493266,-1.2155455875,1259,1 +1260,23485260,-1.2050858167,1260,1 +1261,39692215,-1.1842917464,1261,1 +1262,45638871,-1.7519439777,1262,1 +1263,76692214,1.6031046999,1263,1 +1264,29752469,-0.0934076357,1264,1 +1265,48127013,0.2184980148,1265,1 +1266,17219822,-1.1525391586,1266,1 +1267,55059349,-0.1022771396,1267,1 +1268,64529703,0.2336857092,1268,1 +1269,82195845,0.5567747426,1269,1 +1270,58368449,-0.5137204105,1270,1 +1271,21361327,0.8635475567,1271,1 +1272,51976681,0.122275559,1272,1 +1273,33580481,-0.4386861686,1273,1 +1274,70909239,0.7284717641,1274,1 +1275,85056720,1.154233389,1275,1 +1276,30293106,0.6846756748,1276,1 +1277,64554120,-0.9191418065,1277,1 +1278,76607586,0.8835841345,1278,1 +1279,49548721,0.9744045422,1279,1 +1280,52057433,0.5123498134,1280,1 +1281,80991501,0.8671118191,1281,1 +1282,78478058,1.7074489335,1282,1 +1283,42695402,0.4482753191,1283,1 +1284,72468394,0.2700160316,1284,1 +1285,36725771,-0.930939844,1285,1 +1286,22231759,-1.3433445853,1286,1 +1287,83008683,0.7607848881,1287,1 +1288,35363710,-1.6255142675,1288,1 +1289,53356153,-0.4892588806,1289,1 +1290,51776706,1.8324873995,1290,1 +1291,28536831,0.123298952,1291,1 +1292,49272562,-0.0601700828,1292,1 +1293,76518929,0.7788454797,1293,1 +1294,62883800,-0.4579517442,1294,1 +1295,81822383,0.5772437625,1295,1 +1296,36908277,-0.2180621379,1296,1 +1297,47411203,-1.3717082496,1297,1 +1298,45543185,-0.903917546,1298,1 +1299,20147048,-0.9022360167,1299,1 +1300,62990887,-0.1580165683,1300,1 +1301,25606984,0.0062507898,1301,1 +1302,27454032,0.5392301656,1302,1 +1303,13379178,0.7157244249,1303,1 +1304,67480459,-0.5753010313,1304,1 +1305,59983613,-0.9195803405,1305,1 +1306,18613167,0.8797505523,1306,1 +1307,49362112,0.4640164021,1307,1 +1308,36270138,-1.294540074,1308,1 +1309,65977993,-0.2137429086,1309,1 +1310,35081102,-2.3472575448,1310,1 +1311,57109447,-1.2277778387,1311,1 +1312,87569318,0.213692252,1312,1 +1313,20853080,-0.7928604568,1313,1 +1314,50228628,-0.4419361933,1314,1 +1315,45269976,-0.1477720412,1315,1 +1316,74098042,-1.5492939822,1316,1 +1317,13240709,-0.258840812,1317,1 +1318,25540113,-0.8033162693,1318,1 +1319,20300369,-0.8874987904,1319,1 +1320,13914027,1.0657030126,1320,1 +1321,12732148,-0.5337085393,1321,1 +1322,67972734,0.9992226665,1322,1 +1323,59797113,0.3227632894,1323,1 +1324,11480383,0.4739212812,1324,1 +1325,15513286,1.5511103129,1325,1 +1326,50295313,0.0473265179,1326,1 +1327,15379240,-0.8436810079,1327,1 +1328,76069265,-0.2850529027,1328,1 +1329,75764156,-1.0443814495,1329,1 +1330,51947810,0.9841790546,1330,1 +1331,33544839,-0.4892799831,1331,1 +1332,73759394,-0.1006181799,1332,1 +1333,23240602,1.124673759,1333,1 +1334,41563228,-1.96305945,1334,1 +1335,66234242,-0.3471140946,1335,1 +1336,71709487,-0.2859696864,1336,1 +1337,15043960,0.4401369767,1337,1 +1338,79314112,1.2414735441,1338,1 +1339,45788673,-0.6548754602,1339,1 +1340,40219878,-0.3146305154,1340,1 +1341,27559234,0.0707360096,1341,1 +1342,70935365,1.3715108955,1342,1 +1343,66869813,-0.3805815896,1343,1 +1344,75905182,0.9519125473,1344,1 +1345,61787430,0.3467277038,1345,1 +1346,78406811,-0.2279848328,1346,1 +1347,60874641,1.6373944093,1347,1 +1348,51671008,0.962660302,1348,1 +1349,16362493,1.2716238076,1349,1 +1350,71544490,1.9239348019,1350,1 +1351,29329690,-1.9358855668,1351,1 +1352,66481063,-0.7985574122,1352,1 +1353,63037566,0.1840959959,1353,1 +1354,61797775,-0.9036344706,1354,1 +1355,84888444,-0.1976975817,1355,1 +1356,78394099,-0.4414939123,1356,1 +1357,58638437,-0.193266356,1357,1 +1358,86306351,-0.1141835143,1358,1 +1359,39508811,-1.2991578044,1359,1 +1360,81690637,-0.512848623,1360,1 +1361,17631548,-0.7838876745,1361,1 +1362,18124097,-0.5426412573,1362,1 +1363,80462772,0.8948186797,1363,1 +1364,26685180,-0.9510119653,1364,1 +1365,11534926,-1.050637409,1365,1 +1366,12627231,-1.2801140674,1366,1 +1367,45459462,2.3346178927,1367,1 +1368,13981402,-0.486408341,1368,1 +1369,69401008,0.7599500745,1369,1 +1370,49177017,-0.0267364456,1370,1 +1371,73025175,-0.6323125054,1371,1 +1372,57161470,-1.990066442,1372,1 +1373,77824940,-0.2424974635,1373,1 +1374,87009347,0.3376649244,1374,1 +1375,26196713,-0.5995395022,1375,1 +1376,84049867,-0.5569248339,1376,1 +1377,30404529,3.3413423645,1377,1 +1378,68028464,1.7842342503,1378,1 +1379,17871568,-0.610530201,1379,1 +1380,19091354,-0.6744725653,1380,1 +1381,61746118,0.3102171163,1381,1 +1382,20687863,-0.1248361983,1382,1 +1383,42120374,-0.2493242358,1383,1 +1384,38681192,0.8128270959,1384,1 +1385,24691991,0.5430980606,1385,1 +1386,65979315,-0.3064717486,1386,1 +1387,64763101,0.4301017395,1387,1 +1388,21533408,-0.0252431468,1388,1 +1389,13000128,-1.0859812224,1389,1 +1390,44407072,-1.347648178,1390,1 +1391,32277284,-1.8439848362,1391,1 +1392,50247087,0.4773056781,1392,1 +1393,22781337,1.6730364177,1393,1 +1394,50194874,-0.9029804794,1394,1 +1395,81256435,2.3217390123,1395,1 +1396,34424485,-1.3830264648,1396,1 +1397,18772373,-0.9854002059,1397,1 +1398,87552855,-0.2293433071,1398,1 +1399,17009632,0.411423755,1399,1 +1400,63222490,0.0407572136,1400,1 +1401,11861193,0.3505238948,1401,1 +1402,79040168,1.2533280622,1402,1 +1403,84224446,0.3224270671,1403,1 +1404,74134718,0.0508733005,1404,1 +1405,73340893,0.5601130138,1405,1 +1406,44601518,-0.8399640911,1406,1 +1407,63306612,0.6854069082,1407,1 +1408,19231199,0.3944420094,1408,1 +1409,84127128,-0.1575767978,1409,1 +1410,86865106,-1.6237690314,1410,1 +1411,66999890,-1.2992578344,1411,1 +1412,65038539,0.9965614445,1412,1 +1413,13003638,-1.7437210263,1413,1 +1414,52853722,0.2260822348,1414,1 +1415,55355771,-2.1969269141,1415,1 +1416,10150180,-0.8507209916,1416,1 +1417,38891678,1.1238128204,1417,1 +1418,69730315,0.5395768659,1418,1 +1419,54777612,-0.3062698868,1419,1 +1420,84324872,0.4012277195,1420,1 +1421,71135767,1.2315299329,1421,1 +1422,34224665,-0.9923235263,1422,1 +1423,83063589,0.3504307503,1423,1 +1424,55271814,1.7869632622,1424,1 +1425,43499167,-0.7329667958,1425,1 +1426,83906781,0.007639646,1426,1 +1427,88439014,-1.2401694208,1427,1 +1428,86510859,0.6682158274,1428,1 +1429,16975759,-1.0094838283,1429,1 +1430,16286287,0.0565908259,1430,1 +1431,21475519,-1.3785125462,1431,1 +1432,66651419,-1.6371311829,1432,1 +1433,54783188,-0.7491846835,1433,1 +1434,28378326,0.0839105735,1434,1 +1435,79478376,-1.5167372823,1435,1 +1436,21977423,0.6576487316,1436,1 +1437,35752636,-0.1701922361,1437,1 +1438,79171990,-0.03501277,1438,1 +1439,65661853,-0.1093536817,1439,1 +1440,13871751,-1.4750737921,1440,1 +1441,39543648,0.6320844437,1441,1 +1442,69673579,-0.99933161,1442,1 +1443,85865467,1.166774849,1443,1 +1444,76030001,-0.9391361539,1444,1 +1445,28620719,-1.4639119607,1445,1 +1446,25103828,0.1071243956,1446,1 +1447,19939226,-0.0141142117,1447,1 +1448,12065466,-3.1906145594,1448,1 +1449,78334253,1.5031655406,1449,1 +1450,14929820,-0.2071304999,1450,1 +1451,81232628,-0.6705668696,1451,1 +1452,65248823,-0.2156282121,1452,1 +1453,76637983,-0.389705279,1453,1 +1454,81212268,-1.3637617955,1454,1 +1455,15053359,-0.9770395474,1455,1 +1456,44807543,-0.1353470439,1456,1 +1457,14375354,-0.1457465401,1457,1 +1458,54523409,1.2374350596,1458,1 +1459,80351756,1.2062554854,1459,1 +1460,18270435,0.7705338908,1460,1 +1461,26004754,-0.8491562921,1461,1 +1462,77196469,-0.2456581228,1462,1 +1463,84999083,0.5034086257,1463,1 +1464,89609707,0.4350551982,1464,1 +1465,34307399,-1.0941563254,1465,1 +1466,72543699,1.4997711505,1466,1 +1467,73793770,1.4896572494,1467,1 +1468,72935105,-0.8595578535,1468,1 +1469,41025503,-0.2752050432,1469,1 +1470,35754695,1.7589401687,1470,1 +1471,89053720,-0.8096570267,1471,1 +1472,76959962,-1.0686839039,1472,1 +1473,35167414,-0.9150061953,1473,1 +1474,80981335,-0.4375810138,1474,1 +1475,42934490,0.0970036293,1475,1 +1476,87444850,-1.3157546985,1476,1 +1477,52841486,-0.8910778269,1477,1 +1478,14185896,-0.7746726194,1478,1 +1479,65872788,0.6208920398,1479,1 +1480,25830279,0.1939261414,1480,1 +1481,28121283,-0.0778010048,1481,1 +1482,88768111,-0.1742050494,1482,1 +1483,51120736,-0.6863503154,1483,1 +1484,28894233,1.1251945198,1484,1 +1485,79675291,-0.753016774,1485,1 +1486,82121165,-1.1291454051,1486,1 +1487,86104257,0.3719185501,1487,1 +1488,34588650,-2.2669117965,1488,1 +1489,62208951,0.2108958308,1489,1 +1490,13917245,-0.7138598528,1490,1 +1491,75431476,2.441634854,1491,1 +1492,80535969,-2.4469017898,1492,1 +1493,21116598,1.2498688879,1493,1 +1494,34156098,0.6735117395,1494,1 +1495,57353156,0.6927249117,1495,1 +1496,73935105,-0.6000660903,1496,1 +1497,73588227,0.2269854336,1497,1 +1498,29950052,-0.4414150324,1498,1 +1499,43247575,0.4559301913,1499,1 +1500,62749590,-1.3862192887,1500,1 +1501,47578266,2.3009012141,1501,1 +1502,81066762,-1.1635059378,1502,1 +1503,34281432,-0.7952969253,1503,1 +1504,62375179,0.9896386561,1504,1 +1505,63598931,-1.5679900061,1505,1 +1506,41813453,-0.0863086204,1506,1 +1507,75230555,2.5092399583,1507,1 +1508,74612929,-1.1015556035,1508,1 +1509,44813067,-2.5349500675,1509,1 +1510,46966751,-1.3351689912,1510,1 +1511,55127558,-0.9642007541,1511,1 +1512,10207101,-1.1210247579,1512,1 +1513,22428351,1.547329627,1513,1 +1514,10596370,-0.7129827299,1514,1 +1515,69043548,-0.5958344937,1515,1 +1516,13563298,1.504947522,1516,1 +1517,27284515,-1.2734916743,1517,1 +1518,79568935,1.2283797877,1518,1 +1519,39020427,0.9001421775,1519,1 +1520,14124606,1.1195899521,1520,1 +1521,35225339,0.7670564134,1521,1 +1522,69024762,-0.1592802282,1522,1 +1523,33372998,-1.3476456031,1523,1 +1524,67792213,-0.4747577914,1524,1 +1525,35296881,1.6668053597,1525,1 +1526,68719596,-0.125978523,1526,1 +1527,87307937,-0.9234278063,1527,1 +1528,69184535,-0.9008199439,1528,1 +1529,14096367,0.6158492039,1529,1 +1530,22003538,0.2412442765,1530,1 +1531,85839695,-0.3810518615,1531,1 +1532,17487438,-0.5032143493,1532,1 +1533,71236109,-1.6540711709,1533,1 +1534,20371089,-0.2387786869,1534,1 +1535,84639883,0.1481115183,1535,1 +1536,80676027,0.5037242752,1536,1 +1537,48962767,0.1955888206,1537,1 +1538,78419528,-2.0822670478,1538,1 +1539,53606571,-0.2596405662,1539,1 +1540,88683776,-1.970100807,1540,1 +1541,61862096,0.6210994212,1541,1 +1542,25420007,0.6811105958,1542,1 +1543,26826525,-1.0278136003,1543,1 +1544,10898590,0.3800741527,1544,1 +1545,68050699,-0.2573568791,1545,1 +1546,69351145,0.4410128719,1546,1 +1547,43805392,-0.3669191293,1547,1 +1548,83142708,0.7787943036,1548,1 +1549,35218281,-1.9520678686,1549,1 +1550,16707144,1.1941763676,1550,1 +1551,42285845,-0.2992171895,1551,1 +1552,80066931,1.7619568125,1552,1 +1553,64586740,-0.2230888664,1553,1 +1554,49841067,-0.6473850674,1554,1 +1555,73578720,-1.0116812647,1555,1 +1556,29225327,-0.0118768275,1556,1 +1557,11932233,0.0499874799,1557,1 +1558,34820608,-1.5632721441,1558,1 +1559,28596593,1.7566387193,1559,1 +1560,69812660,-0.0359264482,1560,1 +1561,80285263,-1.1179528163,1561,1 +1562,88692647,0.2973808016,1562,1 +1563,49366723,-0.9174128886,1563,1 +1564,53140082,-0.9291825057,1564,1 +1565,27812290,-0.4282465759,1565,1 +1566,23513588,1.2495436922,1566,1 +1567,53539785,0.1932894638,1567,1 +1568,74882702,-1.3026810143,1568,1 +1569,44416214,0.4659544063,1569,1 +1570,46908915,1.3362345442,1570,1 +1571,39646303,-1.8017250781,1571,1 +1572,81811470,-0.6797853222,1572,1 +1573,43078431,0.2857274577,1573,1 +1574,79992605,-0.1549733083,1574,1 +1575,52838700,-1.1536091765,1575,1 +1576,57587232,-1.0031846481,1576,1 +1577,81432136,-1.4254267993,1577,1 +1578,18648128,0.2358285488,1578,1 +1579,57580651,0.2480716114,1579,1 +1580,15865704,0.4260643704,1580,1 +1581,49620155,0.0638783886,1581,1 +1582,84676809,-0.3549298218,1582,1 +1583,53840512,1.0741992522,1583,1 +1584,75400423,-1.971524492,1584,1 +1585,44752744,-1.4715833398,1585,1 +1586,55429596,0.2778395601,1586,1 +1587,88272374,1.6648847247,1587,1 +1588,23008768,-1.5936619206,1588,1 +1589,82425716,-0.5869284937,1589,1 +1590,81679970,-0.6114935646,1590,1 +1591,10956602,-0.141483448,1591,1 +1592,51203621,1.6532047826,1592,1 +1593,74721146,0.200605265,1593,1 +1594,32185562,-0.2585317757,1594,1 +1595,35490884,-0.2779794871,1595,1 +1596,31903626,-0.632112567,1596,1 +1597,58293038,0.5919112767,1597,1 +1598,78603017,-0.2328089828,1598,1 +1599,78797046,-0.6023885231,1599,1 +1600,73288793,0.1422858933,1600,1 +1601,57272791,0.4079550231,1601,1 +1602,73734925,1.1489057808,1602,1 +1603,26252200,-0.3848204321,1603,1 +1604,69195551,-0.8212431214,1604,1 +1605,19778370,0.711070515,1605,1 +1606,76054488,0.8933946305,1606,1 +1607,65071849,1.4227061276,1607,1 +1608,36521923,-1.613505269,1608,1 +1609,60537485,0.4602726785,1609,1 +1610,25210449,0.4189239082,1610,1 +1611,39615116,0.4305435722,1611,1 +1612,13597836,0.3192235993,1612,1 +1613,10689217,0.7420305249,1613,1 +1614,36055128,0.7627484173,1614,1 +1615,58884124,1.1312342428,1615,1 +1616,87362105,1.7671650131,1616,1 +1617,53553813,-1.5193251697,1617,1 +1618,63023843,-0.7068121215,1618,1 +1619,29084571,1.0083191574,1619,1 +1620,35880598,-1.2394592706,1620,1 +1621,30187447,2.3262602954,1621,1 +1622,61314069,0.1803339966,1622,1 +1623,33419545,-1.1379620809,1623,1 +1624,13724411,-0.4680142144,1624,1 +1625,10808074,-1.199640312,1625,1 +1626,88775254,-0.3333755393,1626,1 +1627,79783395,1.750824498,1627,1 +1628,85454986,-0.563588352,1628,1 +1629,84618094,0.1648320877,1629,1 +1630,21661908,2.1153137665,1630,1 +1631,41283869,-0.2817154788,1631,1 +1632,12959594,1.1048978601,1632,1 +1633,38007646,-0.6521597461,1633,1 +1634,88503939,-0.6480710466,1634,1 +1635,63703415,-1.5689631671,1635,1 +1636,38848367,0.3772771514,1636,1 +1637,81256453,0.4047016027,1637,1 +1638,88668310,-1.3781133289,1638,1 +1639,78948929,0.2204891923,1639,1 +1640,24710256,-0.8499733567,1640,1 +1641,84903145,1.4281144422,1641,1 +1642,56593738,-0.9130500317,1642,1 +1643,39487663,-0.0186422204,1643,1 +1644,61944691,-1.2074169773,1644,1 +1645,28843738,1.3032304864,1645,1 +1646,52510959,0.6291087351,1646,1 +1647,80603170,1.3372389449,1647,1 +1648,15923300,0.975045087,1648,1 +1649,87358729,-0.3069068836,1649,1 +1650,20501974,-1.4064664669,1650,1 +1651,81042806,0.0736215911,1651,1 +1652,88625380,0.6457320257,1652,1 +1653,10533307,0.4358181724,1653,1 +1654,81135529,-1.8298274081,1654,1 +1655,23977478,-0.5395088384,1655,1 +1656,68465818,-0.5208816928,1656,1 +1657,57751802,0.4231299502,1657,1 +1658,75994753,-2.0343970482,1658,1 +1659,49331466,-0.2647504871,1659,1 +1660,20582674,0.6211667346,1660,1 +1661,73453067,-1.0544446267,1661,1 +1662,31919403,0.1625508168,1662,1 +1663,11431730,0.6589766074,1663,1 +1664,72081749,0.9908717048,1664,1 +1665,21315923,0.4767748826,1665,1 +1666,42562497,-1.1117140306,1666,1 +1667,20655676,1.7940892776,1667,1 +1668,87860567,-0.5589482916,1668,1 +1669,33454959,-0.1501731116,1669,1 +1670,20920429,0.040066592,1670,1 +1671,37210254,0.0116559756,1671,1 +1672,42624680,0.0407381322,1672,1 +1673,15080874,1.7203813115,1673,1 +1674,35372826,1.0490426264,1674,1 +1675,60763060,0.7585802319,1675,1 +1676,43692005,0.6620915404,1676,1 +1677,56193425,0.206929455,1677,1 +1678,87701895,-1.8696791714,1678,1 +1679,47459723,-0.3284595353,1679,1 +1680,68157187,-0.406900682,1680,1 +1681,42065574,-0.1909948297,1681,1 +1682,18936337,-0.0892539169,1682,1 +1683,13184101,-0.2278890964,1683,1 +1684,35247658,1.0401201032,1684,1 +1685,25089743,-1.2853534291,1685,1 +1686,21793254,0.2093834704,1686,1 +1687,76021132,-0.6816711973,1687,1 +1688,57110400,-2.7818300053,1688,1 +1689,68159125,1.7350421495,1689,1 +1690,59865806,-1.1264723985,1690,1 +1691,48752680,-0.9411215468,1691,1 +1692,55500806,-0.1820954129,1692,1 +1693,82529759,-1.2630965263,1693,1 +1694,23371877,-0.4757184548,1694,1 +1695,26056216,-0.2968119969,1695,1 +1696,69287611,-1.69997504,1696,1 +1697,72755899,0.5760658453,1697,1 +1698,72551836,-1.7365384783,1698,1 +1699,19723353,0.1641547122,1699,1 +1700,12027229,0.8719057179,1700,1 +1701,44840028,-0.9271226072,1701,1 +1702,35551358,0.3828092923,1702,1 +1703,58563166,0.3528640672,1703,1 +1704,16070858,0.6734686745,1704,1 +1705,85961886,-1.2051335959,1705,1 +1706,41986273,2.1451507929,1706,1 +1707,37558401,0.9651011599,1707,1 +1708,77172221,-1.1459743116,1708,1 +1709,63448571,0.3600374702,1709,1 +1710,68086020,-0.5950438965,1710,1 +1711,86622300,0.2717709435,1711,1 +1712,16638262,-0.5443858777,1712,1 +1713,29811900,0.2470560187,1713,1 +1714,30248453,-0.3609803518,1714,1 +1715,17697219,1.9529773337,1715,1 +1716,29212692,1.5455262505,1716,1 +1717,30243494,1.4583438215,1717,1 +1718,56334601,1.1784501972,1718,1 +1719,25346597,0.9206981445,1719,1 +1720,11692815,0.7933333778,1720,1 +1721,83499345,-0.3803655135,1721,1 +1722,35983246,0.5596047941,1722,1 +1723,73776084,-0.0741111555,1723,1 +1724,79898544,0.204117007,1724,1 +1725,33896187,0.461558805,1725,1 +1726,23403452,-0.4146514399,1726,1 +1727,62804782,0.6351755203,1727,1 +1728,10516171,0.7124887735,1728,1 +1729,14115373,0.0919559092,1729,1 +1730,31368088,1.8867739825,1730,1 +1731,18168861,1.3531348858,1731,1 +1732,88727256,-0.6452475711,1732,1 +1733,72866784,-1.0099251153,1733,1 +1734,76423945,-0.314372828,1734,1 +1735,26871513,-0.273931283,1735,1 +1736,88766125,0.8434008461,1736,1 +1737,57095244,0.9710068248,1737,1 +1738,64258048,-1.6007433419,1738,1 +1739,85932623,0.7770254417,1739,1 +1740,64485338,-0.3796311719,1740,1 +1741,60753522,-0.2323946882,1741,1 +1742,30234758,-1.3077063984,1742,1 +1743,86379488,-0.5103078382,1743,1 +1744,79984499,0.0313177686,1744,1 +1745,28153750,0.9352081472,1745,1 +1746,20710375,0.2578593313,1746,1 +1747,61231624,1.0063258218,1747,1 +1748,20133254,1.247079851,1748,1 +1749,62425740,-0.0565629698,1749,1 +1750,10055383,1.0310975177,1750,1 +1751,20943162,0.0230663004,1751,1 +1752,59070226,-0.1381847135,1752,1 +1753,83070171,-1.7484206828,1753,1 +1754,47983498,-0.5567508477,1754,1 +1755,85043700,0.5728034641,1755,1 +1756,22900518,-0.4539858691,1756,1 +1757,51320995,-0.5193035228,1757,1 +1758,12054937,-0.0555389956,1758,1 +1759,77195284,0.4702614013,1759,1 +1760,77169477,0.4958929791,1760,1 +1761,87475102,-1.7299648748,1761,1 +1762,22318532,1.0801980042,1762,1 +1763,74780594,-0.9369123898,1763,1 +1764,18925806,-0.127802113,1764,1 +1765,52387801,-0.1838082201,1765,1 +1766,36355087,1.1476565609,1766,1 +1767,64585973,0.6343621987,1767,1 +1768,39001009,0.9982342002,1768,1 +1769,82886204,1.1625742594,1769,1 +1770,19434892,1.0383934246,1770,1 +1771,46295854,-1.5271414092,1771,1 +1772,30475757,-0.352185984,1772,1 +1773,50515216,-0.5137461376,1773,1 +1774,63268319,1.5092333713,1774,1 +1775,20240587,-1.1312647557,1775,1 +1776,63150600,-0.4816490616,1776,1 +1777,12316541,0.9994883461,1777,1 +1778,56973391,0.3703181377,1778,1 +1779,19100913,-0.8475091103,1779,1 +1780,57142009,2.5551241244,1780,1 +1781,16060919,-1.4530473493,1781,1 +1782,65444910,0.3820245561,1782,1 +1783,30810484,-2.1664921849,1783,1 +1784,29326385,-0.6884756641,1784,1 +1785,12656966,-0.1840462868,1785,1 +1786,61805726,0.287628708,1786,1 +1787,48686594,2.0463114339,1787,1 +1788,52766636,-0.848851823,1788,1 +1789,75189176,-0.048255814,1789,1 +1790,46128733,1.5349362044,1790,1 +1791,37932900,-0.8970829039,1791,1 +1792,32801669,0.4247785809,1792,1 +1793,59337934,0.822623006,1793,1 +1794,61486607,0.352469449,1794,1 +1795,56299304,-1.0976610171,1795,1 +1796,77731578,-0.0416861265,1796,1 +1797,24562208,0.4990129398,1797,1 +1798,38123094,0.1273076827,1798,1 +1799,76951735,1.1399115435,1799,1 +1800,75374851,0.3953186822,1800,1 +1801,17581127,0.092074258,1801,1 +1802,55439564,0.193266935,1802,1 +1803,76427699,-0.6710774741,1803,1 +1804,55490559,1.3760746336,1804,1 +1805,89787515,0.8298758073,1805,1 +1806,24457426,-0.3341865453,1806,1 +1807,21174479,0.7910516555,1807,1 +1808,30399224,0.52327119,1808,1 +1809,82706457,-1.2896883197,1809,1 +1810,18506962,0.3565724506,1810,1 +1811,61324066,-0.1155488197,1811,1 +1812,30624630,-1.9213570533,1812,1 +1813,39937472,-2.4927189073,1813,1 +1814,17029868,0.0922006799,1814,1 +1815,78585097,0.1309229628,1815,1 +1816,22851776,0.095659627,1816,1 +1817,57254622,0.3147875002,1817,1 +1818,61163517,1.8269466916,1818,1 +1819,34893467,-0.7001116382,1819,1 +1820,89030044,-0.7757752978,1820,1 +1821,26948225,0.1443137554,1821,1 +1822,82743702,-0.2965971709,1822,1 +1823,21369871,-0.6449301562,1823,1 +1824,42917518,0.0540681151,1824,1 +1825,47001347,-0.1842525542,1825,1 +1826,33580308,-1.2748764809,1826,1 +1827,23766003,1.3412985749,1827,1 +1828,66969349,-1.4732393479,1828,1 +1829,48346111,-2.4398689757,1829,1 +1830,17435365,-0.3492449431,1830,1 +1831,77160936,0.7828332957,1831,1 +1832,49094896,1.225850748,1832,1 +1833,61662290,-1.7907936514,1833,1 +1834,42945419,-0.470675252,1834,1 +1835,86723952,0.8656324206,1835,1 +1836,12825648,2.4419359252,1836,1 +1837,65297601,-0.1414457128,1837,1 +1838,55163392,-1.2046889905,1838,1 +1839,40940100,-0.6789135569,1839,1 +1840,29928903,-0.3245868408,1840,1 +1841,78754509,-0.1009042207,1841,1 +1842,75179716,-2.5917145429,1842,1 +1843,15036124,-1.0781288972,1843,1 +1844,42957516,1.6185086652,1844,1 +1845,67286916,-2.0213440622,1845,1 +1846,34325558,0.0946403113,1846,1 +1847,14541653,0.0703761647,1847,1 +1848,37273988,0.0863391979,1848,1 +1849,38244317,0.3694378686,1849,1 +1850,46548427,-0.2176907934,1850,1 +1851,42729913,-0.0617011612,1851,1 +1852,47179615,1.3796812218,1852,1 +1853,20764549,-0.745805818,1853,1 +1854,88876673,-0.8453615372,1854,1 +1855,72542209,0.5656989143,1855,1 +1856,56501535,0.0665891707,1856,1 +1857,29327820,1.0095019094,1857,1 +1858,22980185,-1.2259463972,1858,1 +1859,71403967,1.5090941335,1859,1 +1860,86138543,1.2942632956,1860,1 +1861,38630776,0.1936157891,1861,1 +1862,35120076,0.6685428448,1862,1 +1863,18840910,0.8147007172,1863,1 +1864,56765472,4.6688273469,1864,1 +1865,27997776,-1.177263537,1865,1 +1866,67762093,-1.6260539137,1866,1 +1867,82512286,-0.5059921998,1867,1 +1868,29759337,1.1246931001,1868,1 +1869,60809056,1.0385305774,1869,1 +1870,17838072,0.2795933946,1870,1 +1871,42844444,0.5464429967,1871,1 +1872,33689931,-1.4979018116,1872,1 +1873,77104735,-0.6379497428,1873,1 +1874,82860820,1.0000959966,1874,1 +1875,57530972,-0.4890903679,1875,1 +1876,37265941,-0.3803768696,1876,1 +1877,31684266,-0.8227881512,1877,1 +1878,48552414,-0.3274339014,1878,1 +1879,48426341,-0.9623115866,1879,1 +1880,34504575,1.4680864255,1880,1 +1881,48624291,-0.5640784453,1881,1 +1882,11255183,-0.1575375949,1882,1 +1883,82221321,-1.2454001049,1883,1 +1884,64631953,0.9640440098,1884,1 +1885,12172345,-2.2242951409,1885,1 +1886,83329551,-0.820261268,1886,1 +1887,34851144,1.1475221591,1887,1 +1888,79299927,2.1036373638,1888,1 +1889,62490596,-0.1882694827,1889,1 +1890,22199609,-0.2605458136,1890,1 +1891,36492222,-0.9108567772,1891,1 +1892,80200259,0.4491296117,1892,1 +1893,68887674,-1.7376067935,1893,1 +1894,78172432,0.013874872,1894,1 +1895,45269997,-1.1666758451,1895,1 +1896,45440331,0.6238508814,1896,1 +1897,43154038,-2.4154242254,1897,1 +1898,88336338,-1.2191650424,1898,1 +1899,26691392,1.05994248,1899,1 +1900,38755210,1.3618491815,1900,1 +1901,62964703,-0.2586840387,1901,1 +1902,54265966,-0.5085518503,1902,1 +1903,35912901,-0.5826676154,1903,1 +1904,66788536,-1.8541971184,1904,1 +1905,72450940,-0.7700361756,1905,1 +1906,73391135,-0.2556355933,1906,1 +1907,35812896,-0.5902368754,1907,1 +1908,28256932,-0.7424580082,1908,1 +1909,74295545,0.3687283617,1909,1 +1910,66624894,-0.4732723381,1910,1 +1911,36042820,-0.8574484082,1911,1 +1912,51112409,-1.5044632406,1912,1 +1913,61751821,1.5201907482,1913,1 +1914,21662390,-0.9939621796,1914,1 +1915,30726621,-1.0841903389,1915,1 +1916,11611390,-0.3377400475,1916,1 +1917,56651420,0.2051134906,1917,1 +1918,45952801,-0.5017959302,1918,1 +1919,34784433,0.2758283104,1919,1 +1920,59753245,-0.4902496108,1920,1 +1921,32327391,0.4412788009,1921,1 +1922,15237432,1.0578538623,1922,1 +1923,45647743,-2.3625083589,1923,1 +1924,18266760,-0.4080279994,1924,1 +1925,87021081,-0.0298249125,1925,1 +1926,37945194,-0.6397037983,1926,1 +1927,42041551,-0.8798990313,1927,1 +1928,56637459,0.7177748127,1928,1 +1929,11475443,0.3896002725,1929,1 +1930,50797477,-0.2217238883,1930,1 +1931,41715026,-0.3387202235,1931,1 +1932,35970039,-1.8450888913,1932,1 +1933,85392527,0.8945073271,1933,1 +1934,70843553,-1.1474793254,1934,1 +1935,13015015,1.5403110353,1935,1 +1936,41385491,-0.9212872194,1936,1 +1937,67178815,-0.6809084006,1937,1 +1938,65951318,1.0214309904,1938,1 +1939,10640741,1.9945942252,1939,1 +1940,20545297,1.4222671973,1940,1 +1941,69123614,0.1040913567,1941,1 +1942,77806759,0.0375348974,1942,1 +1943,69576453,-0.562205742,1943,1 +1944,51579218,-0.0226445638,1944,1 +1945,30637294,0.8675896239,1945,1 +1946,35373014,0.2282583733,1946,1 +1947,14655552,-0.9753438289,1947,1 +1948,10011155,-0.4622790668,1948,1 +1949,22532303,-0.6415707814,1949,1 +1950,10132538,-1.2659640251,1950,1 +1951,84864524,-0.724078571,1951,1 +1952,22408993,-0.0650195921,1952,1 +1953,23484294,-1.7667218298,1953,1 +1954,23866792,-1.2064841321,1954,1 +1955,38031870,1.46079532,1955,1 +1956,68469632,-0.5813475841,1956,1 +1957,35116258,0.6166836432,1957,1 +1958,27410471,0.3132572804,1958,1 +1959,19143507,1.3003625787,1959,1 +1960,69340366,0.5752529984,1960,1 +1961,73615364,-1.3073650157,1961,1 +1962,55803071,-0.008525088,1962,1 +1963,11369073,-0.1597083316,1963,1 +1964,28511013,0.3614743959,1964,1 +1965,50886490,0.434199004,1965,1 +1966,45918886,0.8963344348,1966,1 +1967,57760357,0.5238831173,1967,1 +1968,17196026,0.3253590925,1968,1 +1969,75589705,-0.2442715807,1969,1 +1970,81472224,2.7213338874,1970,1 +1971,44750584,-0.7818175531,1971,1 +1972,12346158,-0.2398919405,1972,1 +1973,38676063,0.5140447434,1973,1 +1974,56366707,0.5709626481,1974,1 +1975,19469403,0.7341230904,1975,1 +1976,15810767,-0.8191686036,1976,1 +1977,71558072,-1.6670609544,1977,1 +1978,59685188,1.0543710964,1978,1 +1979,78388701,1.4889715486,1979,1 +1980,46951673,1.2045564375,1980,1 +1981,53474091,0.3463095571,1981,1 +1982,85896371,-0.1045951558,1982,1 +1983,69468681,-0.0495681482,1983,1 +1984,37287112,0.3972127211,1984,1 +1985,82291616,-1.1750048232,1985,1 +1986,22354672,0.2600534808,1986,1 +1987,26800193,1.192686469,1987,1 +1988,48868278,-1.7465634485,1988,1 +1989,38008794,-0.1161049373,1989,1 +1990,17398693,0.3851519566,1990,1 +1991,30967652,0.519821196,1991,1 +1992,44721596,-0.233218652,1992,1 +1993,26722648,0.2452626367,1993,1 +1994,44239466,-0.5079645077,1994,1 +1995,27601373,1.7071070457,1995,1 +1996,47795059,-0.2805824821,1996,1 +1997,42580382,-1.0661251335,1997,1 +1998,48387843,0.2054336653,1998,1 +1999,11686695,0.5858748428,1999,1 +2000,16276490,-1.2038153711,2000,1 +2001,56195712,-2.376327732,2001,1 +2002,40722954,1.1070573954,2002,1 +2003,34990849,-0.1048418435,2003,1 +2004,87868992,0.3113835529,2004,1 +2005,81976040,0.0510801952,2005,1 +2006,38622887,0.7356336171,2006,1 +2007,33636974,0.0150972579,2007,1 +2008,78402896,0.3433451717,2008,1 +2009,54129219,-1.3933150083,2009,1 +2010,60773693,0.2631292532,2010,1 +2011,83138621,0.1150866646,2011,1 +2012,31890150,1.6084503803,2012,1 +2013,25369811,0.2247198427,2013,1 +2014,71637339,0.3014364647,2014,1 +2015,43932200,1.4449231503,2015,1 +2016,70530704,0.7262583914,2016,1 +2017,33389005,0.0401023064,2017,1 +2018,80818147,1.594073212,2018,1 +2019,37279722,0.8405323199,2019,1 +2020,12536550,1.4690324013,2020,1 +2021,29179020,0.4074390313,2021,1 +2022,38901064,-0.4076734396,2022,1 +2023,42769175,1.3142339895,2023,1 +2024,37950506,-1.030734431,2024,1 +2025,11940293,0.1936639171,2025,1 +2026,40769540,1.4472469198,2026,1 +2027,11945332,0.4387079471,2027,1 +2028,74343900,-0.1395611243,2028,1 +2029,74509599,-1.8719480059,2029,1 +2030,77598524,0.9459202313,2030,1 +2031,71390808,0.6898511622,2031,1 +2032,68366937,-0.6320911277,2032,1 +2033,64948850,-0.670012238,2033,1 +2034,86495409,-0.8853495899,2034,1 +2035,76558928,-0.8044624614,2035,1 +2036,64160868,0.4987590983,2036,1 +2037,81416203,0.6424366877,2037,1 +2038,87070296,-2.5584820908,2038,1 +2039,14077013,-0.7671809613,2039,1 +2040,11390417,1.0637516546,2040,1 +2041,37649972,-0.2710996051,2041,1 +2042,55474813,-0.2710003847,2042,1 +2043,26797453,-0.2600149214,2043,1 +2044,86724964,-0.1868338221,2044,1 +2045,33838414,1.2068107584,2045,1 +2046,29643694,0.6070074059,2046,1 +2047,44543446,1.1571495527,2047,1 +2048,67391736,0.1761515656,2048,1 +2049,36496002,-1.0477429706,2049,1 +2050,11268593,-0.6044133588,2050,1 +2051,36000352,-0.2537851127,2051,1 +2052,85469485,1.1157926833,2052,1 +2053,27300877,0.0738068517,2053,1 +2054,22904259,1.8020079145,2054,1 +2055,28334774,0.5298597982,2055,1 +2056,30406719,-0.3797709896,2056,1 +2057,64379841,1.0018316734,2057,1 +2058,82995898,-0.3333193071,2058,1 +2059,41198257,1.3389782716,2059,1 +2060,79345562,0.0296415704,2060,1 +2061,34815276,0.2035480202,2061,1 +2062,29182493,-0.7338299513,2062,1 +2063,30793928,-0.2339359377,2063,1 +2064,45094879,-1.8133950298,2064,1 +2065,54139431,0.6439139063,2065,1 +2066,68702396,0.8871415556,2066,1 +2067,55620760,0.5134439396,2067,1 +2068,66855760,1.5090275699,2068,1 +2069,46278052,-1.1658650372,2069,1 +2070,75648194,0.9369287399,2070,1 +2071,16885688,2.4888881099,2071,1 +2072,79816087,0.8739781275,2072,1 +2073,27774311,1.0695187834,2073,1 +2074,39460920,-1.2571786762,2074,1 +2075,33591271,-1.8816716066,2075,1 +2076,48677915,0.1967724776,2076,1 +2077,49866011,-0.1839888254,2077,1 +2078,50432473,1.3402649941,2078,1 +2079,17386576,-0.4564863925,2079,1 +2080,58698658,0.8969597944,2080,1 +2081,36355258,-0.793311189,2081,1 +2082,58665546,-0.8657917414,2082,1 +2083,82378694,0.8471950406,2083,1 +2084,11273041,0.173441609,2084,1 +2085,51037575,-2.3320395749,2085,1 +2086,65968413,0.4327433169,2086,1 +2087,34580877,-1.1258199623,2087,1 +2088,40230115,-0.0579989909,2088,1 +2089,49141035,1.5855594334,2089,1 +2090,10169148,-0.2932952156,2090,1 +2091,72651878,-1.4410981463,2091,1 +2092,20156904,-0.2432948787,2092,1 +2093,69590427,-1.2618206449,2093,1 +2094,21198177,1.4667828721,2094,1 +2095,25973485,0.5242859209,2095,1 +2096,47077017,-0.2123080432,2096,1 +2097,39282256,-1.8983804652,2097,1 +2098,29202864,-0.522904567,2098,1 +2099,62113661,-0.6280684684,2099,1 +2100,18575248,-1.1922143648,2100,1 +2101,60934587,0.6296323101,2101,1 +2102,46667718,0.1030518979,2102,1 +2103,71635619,-0.1039123081,2103,1 +2104,87591155,-0.4980250338,2104,1 +2105,27777492,0.6361765316,2105,1 +2106,38579025,-1.6708481583,2106,1 +2107,66017621,-0.2674113047,2107,1 +2108,73144160,1.1601418729,2108,1 +2109,84983029,-0.3109652269,2109,1 +2110,44699930,-1.2701895018,2110,1 +2111,14411212,-0.1031658778,2111,1 +2112,51719689,-0.0011907937,2112,1 +2113,64539469,-1.8588787708,2113,1 +2114,17336718,1.610964138,2114,1 +2115,83712531,-0.6917186714,2115,1 +2116,38950942,-0.0667183139,2116,1 +2117,43312969,0.1830132987,2117,1 +2118,79405474,0.2221165025,2118,1 +2119,20633905,-1.1433853286,2119,1 +2120,86182891,-0.1639914364,2120,1 +2121,77751545,1.2114738903,2121,1 +2122,66906581,1.7177152631,2122,1 +2123,39291634,-1.1395382178,2123,1 +2124,13296016,-0.1180653032,2124,1 +2125,77316542,-0.0153071226,2125,1 +2126,79323221,1.4033850811,2126,1 +2127,66881017,0.0516029172,2127,1 +2128,18945017,2.2834056284,2128,1 +2129,19560829,0.8745611822,2129,1 +2130,53446469,-0.545181422,2130,1 +2131,55966300,-0.3925676558,2131,1 +2132,82225389,-1.5897025015,2132,1 +2133,22105019,-1.0013938919,2133,1 +2134,70101274,-1.9070019171,2134,1 +2135,43520577,0.4781259982,2135,1 +2136,68830219,-0.2386293419,2136,1 +2137,57921614,0.5304593707,2137,1 +2138,56740725,0.5555118466,2138,1 +2139,75835178,-0.7917397305,2139,1 +2140,79895455,-0.3538208159,2140,1 +2141,14862717,-0.3881979857,2141,1 +2142,19232548,0.085934782,2142,1 +2143,29153089,0.2792570282,2143,1 +2144,71480620,2.1259934508,2144,1 +2145,79066826,0.3025059259,2145,1 +2146,10853783,0.2789895107,2146,1 +2147,76234183,-0.5575084359,2147,1 +2148,80444220,-0.829656719,2148,1 +2149,39746903,0.8878961692,2149,1 +2150,77621538,-0.7053483304,2150,1 +2151,38772929,-0.728233328,2151,1 +2152,67381800,1.6033659089,2152,1 +2153,75127843,-0.0536019054,2153,1 +2154,41929592,-0.3221131521,2154,1 +2155,65023454,0.4207978853,2155,1 +2156,55171128,0.4170931264,2156,1 +2157,51349470,0.0242927049,2157,1 +2158,77618218,1.2926935002,2158,1 +2159,36662404,1.6752655591,2159,1 +2160,19095511,-0.5767712507,2160,1 +2161,49679323,0.6840843096,2161,1 +2162,47728410,0.8039853203,2162,1 +2163,45477796,1.6162818279,2163,1 +2164,43025147,1.4376721446,2164,1 +2165,18166633,0.9515785854,2165,1 +2166,29350261,0.3370924928,2166,1 +2167,89877434,1.0455417698,2167,1 +2168,31252309,-0.1286847319,2168,1 +2169,44290647,0.6433875262,2169,1 +2170,65196405,1.9186517243,2170,1 +2171,23182973,-0.471619665,2171,1 +2172,73981972,1.6899926479,2172,1 +2173,22558216,0.5935908512,2173,1 +2174,37360594,-0.1802646655,2174,1 +2175,32619703,0.8789490049,2175,1 +2176,78490136,0.53080389,2176,1 +2177,60863324,0.2446328625,2177,1 +2178,45809093,0.5208090289,2178,1 +2179,60968368,1.232286369,2179,1 +2180,70240335,-0.2165643942,2180,1 +2181,86818976,-0.0659838183,2181,1 +2182,38226019,-0.2894852236,2182,1 +2183,61009626,0.27829164,2183,1 +2184,82317301,-0.5616432765,2184,1 +2185,89172849,0.6038294498,2185,1 +2186,62965995,-0.1609727166,2186,1 +2187,28521338,-0.0336361141,2187,1 +2188,46261253,-0.3180650996,2188,1 +2189,54156870,0.2252863948,2189,1 +2190,48745003,-1.5759026128,2190,1 +2191,52021748,-0.2453055344,2191,1 +2192,85672211,0.9304477128,2192,1 +2193,55481713,-0.7657307315,2193,1 +2194,13980377,0.587820591,2194,1 +2195,12600477,0.1077690411,2195,1 +2196,53185593,-0.7272109008,2196,1 +2197,68540716,-0.7287781786,2197,1 +2198,32511634,0.2347868676,2198,1 +2199,15417839,-0.0118245162,2199,1 +2200,86871520,-0.0496817757,2200,1 +2201,75494944,-0.7062516777,2201,1 +2202,59501244,-0.3088706022,2202,1 +2203,81030144,1.2474325299,2203,1 +2204,70000403,-0.8354879671,2204,1 +2205,87470213,-0.4249952633,2205,1 +2206,65179572,-0.8859507495,2206,1 +2207,83581331,-0.2630224434,2207,1 +2208,56964908,-1.1318197388,2208,1 +2209,71580894,-0.4187747634,2209,1 +2210,74974795,1.4096978721,2210,1 +2211,87930084,1.0051028866,2211,1 +2212,17514299,0.7721798656,2212,1 +2213,17903372,-0.3490377236,2213,1 +2214,39197319,-0.2954503106,2214,1 +2215,39220759,-0.5447918058,2215,1 +2216,47286528,-1.593209791,2216,1 +2217,61458947,1.1434733859,2217,1 +2218,75087294,-0.1404894051,2218,1 +2219,25401459,3.0042173795,2219,1 +2220,52653047,-0.4029444322,2220,1 +2221,58525366,-0.6314807967,2221,1 +2222,37896396,-1.0105807438,2222,1 +2223,82556768,1.025815633,2223,1 +2224,89591805,1.0929347808,2224,1 +2225,45878734,-0.3423918142,2225,1 +2226,55916422,0.212929905,2226,1 +2227,13044294,1.5738470697,2227,1 +2228,61459433,-0.4038089011,2228,1 +2229,70199806,-1.5321307469,2229,1 +2230,54803958,2.0331104672,2230,1 +2231,53119435,-1.3997735935,2231,1 +2232,56732421,-1.3649493104,2232,1 +2233,30114503,-0.3388045539,2233,1 +2234,61447333,-0.083209941,2234,1 +2235,61270755,0.2200152321,2235,1 +2236,17277696,-0.6087647997,2236,1 +2237,76571730,-0.0217174578,2237,1 +2238,58858159,1.5695004698,2238,1 +2239,57740529,2.0498233602,2239,1 +2240,27329221,0.8048125078,2240,1 +2241,19566194,0.1338463294,2241,1 +2242,23516100,1.1619481909,2242,1 +2243,21464600,-1.3324046825,2243,1 +2244,85386189,-1.6390702927,2244,1 +2245,14322563,-0.2361174579,2245,1 +2246,47579836,-2.5968800192,2246,1 +2247,59973700,-0.6361185761,2247,1 +2248,33724226,0.3077948589,2248,1 +2249,21080540,0.0276400679,2249,1 +2250,34416876,-0.6995663846,2250,1 +2251,27041966,0.5091674118,2251,1 +2252,15112897,-1.3859301812,2252,1 +2253,64084892,1.1030633443,2253,1 +2254,59248875,-1.6811189114,2254,1 +2255,73581121,0.9768238567,2255,1 +2256,89086959,-0.6936713227,2256,1 +2257,12470292,-0.8769222893,2257,1 +2258,45006721,0.7043294309,2258,1 +2259,45301014,-0.8888669048,2259,1 +2260,74815762,0.1424307688,2260,1 +2261,45200236,-2.0337478479,2261,1 +2262,40342800,-0.7284863614,2262,1 +2263,74112986,0.1221475924,2263,1 +2264,48420368,1.0709903092,2264,1 +2265,69520004,-0.4896151523,2265,1 +2266,71877756,0.3849594818,2266,1 +2267,36238167,0.4888121806,2267,1 +2268,10114762,1.59498078,2268,1 +2269,63993484,0.0802525073,2269,1 +2270,28652820,-0.2850678114,2270,1 +2271,71100518,-0.1009338789,2271,1 +2272,30105878,-1.7713715525,2272,1 +2273,77361602,-0.0834739272,2273,1 +2274,47757958,1.0617525314,2274,1 +2275,25163636,-0.1804268836,2275,1 +2276,26818814,0.1720195464,2276,1 +2277,89065880,1.1711288556,2277,1 +2278,40709962,0.7489143955,2278,1 +2279,87611167,-1.9939792767,2279,1 +2280,22029472,-0.962126066,2280,1 +2281,35058344,-0.2566134365,2281,1 +2282,18842765,0.5898423962,2282,1 +2283,40371694,-0.4394613868,2283,1 +2284,24348465,0.3019866031,2284,1 +2285,71636964,0.3539356231,2285,1 +2286,60573315,0.0495771443,2286,1 +2287,66504491,0.1969814318,2287,1 +2288,67305889,1.4972433997,2288,1 +2289,49737296,-2.1286470496,2289,1 +2290,81737389,0.922050987,2290,1 +2291,70525424,-0.5983058133,2291,1 +2292,40261251,-1.143537328,2292,1 +2293,11244944,-1.5739736446,2293,1 +2294,36673813,-0.2558511734,2294,1 +2295,59566990,1.1966836912,2295,1 +2296,23536165,0.3909308262,2296,1 +2297,45308705,0.3178913153,2297,1 +2298,43328025,2.0130700895,2298,1 +2299,85239370,0.9081374603,2299,1 +2300,42265729,-0.0661621867,2300,1 +2301,12886306,-0.1981487369,2301,1 +2302,70389885,0.0203925979,2302,1 +2303,44724537,0.9010462055,2303,1 +2304,86901130,0.3293563977,2304,1 +2305,32319558,-0.5893397634,2305,1 +2306,13812923,-0.1666524534,2306,1 +2307,55858948,0.5388625044,2307,1 +2308,35575253,0.1713582507,2308,1 +2309,49457983,0.5670670316,2309,1 +2310,55483271,-0.0059747788,2310,1 +2311,25792082,-0.8332128895,2311,1 +2312,23249524,-2.1773887417,2312,1 +2313,38239956,-0.1148615496,2313,1 +2314,43583998,0.6427971086,2314,1 +2315,48010743,0.2253621485,2315,1 +2316,26324295,0.4148980267,2316,1 +2317,47800382,-0.3677332523,2317,1 +2318,38489905,-0.4017949807,2318,1 +2319,84209885,0.4516958595,2319,1 +2320,45717488,2.2850263442,2320,1 +2321,77672492,0.1460077801,2321,1 +2322,29866819,-0.0920457943,2322,1 +2323,85222130,1.8701260893,2323,1 +2324,20827943,-0.580658134,2324,1 +2325,65979748,-1.2510010536,2325,1 +2326,12887629,-2.0466795318,2326,1 +2327,79422905,0.372893036,2327,1 +2328,61468538,0.4906573321,2328,1 +2329,51832726,0.0573933224,2329,1 +2330,48650221,0.0383531558,2330,1 +2331,78874949,-0.067003361,2331,1 +2332,68745211,-0.3725541397,2332,1 +2333,65653491,-0.1089492305,2333,1 +2334,73878137,-0.945613695,2334,1 +2335,30432290,-1.0899609997,2335,1 +2336,65044920,0.9641659518,2336,1 +2337,25752755,-0.7126718376,2337,1 +2338,68673303,0.1729011561,2338,1 +2339,73072056,0.1372382294,2339,1 +2340,11179011,-1.0843109065,2340,1 +2341,30022421,1.419806835,2341,1 +2342,84385795,2.3647164648,2342,1 +2343,61281556,0.5207784257,2343,1 +2344,63231141,-0.9661893371,2344,1 +2345,45105064,0.8167377728,2345,1 +2346,33108211,1.0209145382,2346,1 +2347,76666696,0.3142228976,2347,1 +2348,81476202,0.6835790031,2348,1 +2349,75765905,1.1193529602,2349,1 +2350,67403893,-1.0866839586,2350,1 +2351,26653761,0.1999936738,2351,1 +2352,21399471,-0.4230661884,2352,1 +2353,18456518,0.1128586658,2353,1 +2354,82545680,2.0603178527,2354,1 +2355,19656056,-0.8427254592,2355,1 +2356,38230976,0.6545337969,2356,1 +2357,45239392,0.8505732022,2357,1 +2358,34515703,-1.2235107073,2358,1 +2359,34328037,-0.2106587131,2359,1 +2360,77354808,0.1008028032,2360,1 +2361,35873632,1.463844105,2361,1 +2362,40225939,1.1108967984,2362,1 +2363,83025019,-0.885780252,2363,1 +2364,18613309,-0.6552470515,2364,1 +2365,32973992,0.0920570105,2365,1 +2366,49270430,0.6817814499,2366,1 +2367,76871823,0.9366182294,2367,1 +2368,36057341,1.6632294179,2368,1 +2369,53134753,-0.2510351159,2369,1 +2370,71759367,-0.319414896,2370,1 +2371,64860146,1.451631763,2371,1 +2372,31169745,-2.9884488965,2372,1 +2373,29487378,-0.4466443847,2373,1 +2374,59418278,-0.2821713866,2374,1 +2375,60055752,-0.3288801783,2375,1 +2376,56507542,-0.8239906226,2376,1 +2377,61273469,0.3499441721,2377,1 +2378,78009131,-0.2611749292,2378,1 +2379,77886634,0.9731666698,2379,1 +2380,25703361,0.9985154192,2380,1 +2381,84092785,-0.4982843604,2381,1 +2382,28739159,-0.8967490643,2382,1 +2383,53103948,1.560768062,2383,1 +2384,15599794,-1.6128381644,2384,1 +2385,63030278,-3.0536694614,2385,1 +2386,53903546,-0.5848056053,2386,1 +2387,48223602,-0.3335884525,2387,1 +2388,69314674,0.5264370063,2388,1 +2389,45418661,1.0202377009,2389,1 +2390,37307104,0.9278821151,2390,1 +2391,55772577,0.4066254223,2391,1 +2392,25069119,-0.2651706175,2392,1 +2393,21807941,-1.3528671186,2393,1 +2394,41161949,2.0743047926,2394,1 +2395,15311626,0.6493083233,2395,1 +2396,37588539,-2.2666806789,2396,1 +2397,79447740,0.3973684323,2397,1 +2398,56096152,0.1620652714,2398,1 +2399,42855622,-0.5444211316,2399,1 +2400,87672466,-0.53635182,2400,1 +2401,46279195,1.7255062613,2401,1 +2402,86020078,1.2786093659,2402,1 +2403,62199647,1.6468452601,2403,1 +2404,31649248,-0.439810594,2404,1 +2405,42772107,0.1554304,2405,1 +2406,21032202,1.510308287,2406,1 +2407,43787868,1.2763968157,2407,1 +2408,38712799,0.8660712587,2408,1 +2409,15112923,2.590895085,2409,1 +2410,73686498,0.4013771536,2410,1 +2411,87803935,-1.1812534609,2411,1 +2412,64721004,-1.7188415555,2412,1 +2413,18266573,1.2854483277,2413,1 +2414,32542956,0.6441164663,2414,1 +2415,23564525,0.0273184272,2415,1 +2416,22274762,1.0887593822,2416,1 +2417,41865778,0.5780340982,2417,1 +2418,15637153,1.0411842957,2418,1 +2419,76920639,0.5134230951,2419,1 +2420,40146366,1.0280396111,2420,1 +2421,23608237,1.2314482285,2421,1 +2422,33828824,0.2214384597,2422,1 +2423,43081592,-1.8696719976,2423,1 +2424,26631756,-1.9914546185,2424,1 +2425,16848785,0.0671017665,2425,1 +2426,37276275,-0.147964841,2426,1 +2427,22676497,-0.6103767177,2427,1 +2428,31747353,1.7632224184,2428,1 +2429,47909762,1.1193591109,2429,1 +2430,73144189,0.0007629333,2430,1 +2431,13434021,0.7571839963,2431,1 +2432,24437966,0.0758910902,2432,1 +2433,89069421,-0.4969717792,2433,1 +2434,33248278,-0.2930832551,2434,1 +2435,33738250,0.502808951,2435,1 +2436,71830351,1.3318661902,2436,1 +2437,50679839,0.5919378996,2437,1 +2438,14330558,-0.1827682173,2438,1 +2439,23799067,-0.4602696602,2439,1 +2440,54828305,-1.3783601009,2440,1 +2441,29568569,0.1182680213,2441,1 +2442,64842606,0.0801413395,2442,1 +2443,33250017,0.7149302822,2443,1 +2444,74325146,-0.3177174328,2444,1 +2445,30831781,-0.3453136712,2445,1 +2446,67077711,1.7923007445,2446,1 +2447,58262949,-0.3365920139,2447,1 +2448,53672350,-0.4218013903,2448,1 +2449,12448522,0.9814186002,2449,1 +2450,25088179,0.4354186025,2450,1 +2451,74375470,-1.1847772554,2451,1 +2452,30847129,0.9658150909,2452,1 +2453,66783394,0.6142346092,2453,1 +2454,56584530,1.3027001071,2454,1 +2455,85698271,1.8113763478,2455,1 +2456,21627033,0.7599043629,2456,1 +2457,61552661,-0.234462649,2457,1 +2458,51468338,0.2965757297,2458,1 +2459,62134684,-1.3207386319,2459,1 +2460,47282619,-0.3480627204,2460,1 +2461,51875327,1.8767515083,2461,1 +2462,20656786,-0.7285026905,2462,1 +2463,43575306,-0.2995996355,2463,1 +2464,86609357,1.4891900491,2464,1 +2465,59262292,0.6928881932,2465,1 +2466,25845931,0.2768665802,2466,1 +2467,21082450,0.5690926151,2467,1 +2468,15941635,0.3918790182,2468,1 +2469,82677510,-0.7699300644,2469,1 +2470,66551937,-2.0605219842,2470,1 +2471,41356111,-0.3209032005,2471,1 +2472,11727885,-1.311276266,2472,1 +2473,56104715,1.1892693596,2473,1 +2474,31261945,0.2909214019,2474,1 +2475,53337808,-0.4830971043,2475,1 +2476,69849442,0.1208169074,2476,1 +2477,57448154,2.5634003861,2477,1 +2478,66537881,2.1184748241,2478,1 +2479,86646181,0.0408360986,2479,1 +2480,32396456,0.8125670015,2480,1 +2481,17989784,0.6143910471,2481,1 +2482,61488783,0.8159478278,2482,1 +2483,21147624,0.1077248138,2483,1 +2484,77058566,0.7126942658,2484,1 +2485,89138127,-2.0958696269,2485,1 +2486,30372545,1.5976857132,2486,1 +2487,83437265,0.6579524451,2487,1 +2488,21079799,-0.3658943068,2488,1 +2489,17293690,-1.5733643716,2489,1 +2490,25622590,-0.0944147659,2490,1 +2491,78829129,0.1923096614,2491,1 +2492,85691830,0.4032736866,2492,1 +2493,34528351,-0.4235966564,2493,1 +2494,22031750,-0.1148668176,2494,1 +2495,64224503,-0.5110310691,2495,1 +2496,44763227,-0.9865474853,2496,1 +2497,45660355,0.9263083604,2497,1 +2498,56222121,1.7398728089,2498,1 +2499,75080304,-0.9130844968,2499,1 +2500,15664290,-0.1269730943,2500,1 +2501,45400071,-0.4319155686,2501,1 +2502,68353464,-0.5757258586,2502,1 +2503,20629037,-1.2216541889,2503,1 +2504,74647078,0.0030609607,2504,1 +2505,15581179,1.1304703653,2505,1 +2506,67467850,0.1412808726,2506,1 +2507,38701642,-0.7575854497,2507,1 +2508,59196241,0.4269774161,2508,1 +2509,13012836,-0.5074087284,2509,1 +2510,75642650,0.6631906867,2510,1 +2511,37528249,-1.181968898,2511,1 +2512,14830944,0.6784927221,2512,1 +2513,47976304,-1.2041112516,2513,1 +2514,79201289,-0.6059196934,2514,1 +2515,55894298,-0.7354136006,2515,1 +2516,66233982,-0.7306087408,2516,1 +2517,23682062,0.1866184112,2517,1 +2518,26609041,-1.2943634567,2518,1 +2519,10025990,-0.2009612954,2519,1 +2520,33278217,0.8788611906,2520,1 +2521,19360443,-0.1591196642,2521,1 +2522,84693087,1.1195658583,2522,1 +2523,17301360,0.5491128883,2523,1 +2524,82700123,1.0191473687,2524,1 +2525,74644551,-0.3762309512,2525,1 +2526,69935641,-0.1273197921,2526,1 +2527,13737752,0.4375875031,2527,1 +2528,56117441,0.1772586048,2528,1 +2529,27834610,-2.0018884656,2529,1 +2530,50880867,0.7893927965,2530,1 +2531,72272517,-0.6241132326,2531,1 +2532,53639875,-0.3675610777,2532,1 +2533,56612537,1.0835063984,2533,1 +2534,58843403,0.5614176712,2534,1 +2535,19006146,0.6622109017,2535,1 +2536,87251039,-0.0239828552,2536,1 +2537,55461899,1.9273308236,2537,1 +2538,46508529,-1.4104004599,2538,1 +2539,33776697,0.2268750294,2539,1 +2540,67034428,0.0914350307,2540,1 +2541,75532312,-0.5702841859,2541,1 +2542,51304585,-0.7997105362,2542,1 +2543,87852371,0.4223624104,2543,1 +2544,18109355,-0.5280053747,2544,1 +2545,49066205,0.5285539267,2545,1 +2546,79814208,1.0023714026,2546,1 +2547,80277670,-0.6095715637,2547,1 +2548,87477523,-0.5129827305,2548,1 +2549,57613286,0.3466405423,2549,1 +2550,48649009,1.8762583834,2550,1 +2551,76523112,-0.6911432292,2551,1 +2552,73713631,0.1405069032,2552,1 +2553,57390669,1.9879625686,2553,1 +2554,84715335,-0.620015225,2554,1 +2555,50013342,0.3317324811,2555,1 +2556,64021608,0.9969307444,2556,1 +2557,21977181,1.3817874171,2557,1 +2558,15885445,-0.6653379279,2558,1 +2559,60820145,0.0077729377,2559,1 +2560,49564773,-0.4717690988,2560,1 +2561,25165222,-1.341757399,2561,1 +2562,28387183,-0.9474789278,2562,1 +2563,24252496,-0.7437972892,2563,1 +2564,89301212,0.891217236,2564,1 +2565,87079109,-0.7944505378,2565,1 +2566,44521484,2.5288897162,2566,1 +2567,45272078,-0.6838849988,2567,1 +2568,34474197,-1.6297012087,2568,1 +2569,57222423,-0.3425707715,2569,1 +2570,48063475,0.8053290662,2570,1 +2571,32270522,-1.7161247254,2571,1 +2572,53074884,0.7559063963,2572,1 +2573,73657888,0.2916809285,2573,1 +2574,52406235,-0.8282757356,2574,1 +2575,84234067,-0.8319277654,2575,1 +2576,83689700,1.4556082481,2576,1 +2577,73686639,1.0074129543,2577,1 +2578,32734206,0.4693704831,2578,1 +2579,41735755,0.3985342227,2579,1 +2580,72544050,-0.3216448889,2580,1 +2581,32634274,1.8520600721,2581,1 +2582,40702009,-1.9864895314,2582,1 +2583,79448071,0.9579944188,2583,1 +2584,13678420,-0.5643391861,2584,1 +2585,65951319,-0.9878728521,2585,1 +2586,64501253,0.2669623244,2586,1 +2587,34754237,-0.3073654468,2587,1 +2588,65588665,-0.4988484014,2588,1 +2589,88280449,-0.0349276284,2589,1 +2590,31176365,1.0931340893,2590,1 +2591,63886593,-0.8022363681,2591,1 +2592,54356345,0.0236341113,2592,1 +2593,60220424,1.6913068819,2593,1 +2594,71778222,-0.4282431416,2594,1 +2595,19953887,-1.1058207433,2595,1 +2596,47621852,0.1389614634,2596,1 +2597,32776021,-0.1372681847,2597,1 +2598,22582796,1.1973870058,2598,1 +2599,54874632,0.460057487,2599,1 +2600,49102702,1.5916568895,2600,1 +2601,86847227,0.2738073171,2601,1 +2602,17127837,0.6001929567,2602,1 +2603,25312552,-1.3305568453,2603,1 +2604,45486863,-1.124087231,2604,1 +2605,37748165,-0.0114794301,2605,1 +2606,23360280,2.1173250342,2606,1 +2607,36308045,-0.0179425769,2607,1 +2608,23954604,0.395584139,2608,1 +2609,54337728,0.0405527456,2609,1 +2610,42407719,-0.3919840382,2610,1 +2611,24550791,-0.5962275042,2611,1 +2612,25204346,0.2614990003,2612,1 +2613,83136781,0.6009013397,2613,1 +2614,14500159,0.0019422682,2614,1 +2615,61039941,-0.2796280252,2615,1 +2616,66000706,-1.4391785969,2616,1 +2617,15372111,1.7277828571,2617,1 +2618,79387076,-1.7875327459,2618,1 +2619,64778519,-0.3075234719,2619,1 +2620,42833501,-1.2765284846,2620,1 +2621,22898768,-1.8018005367,2621,1 +2622,62875460,1.3837739876,2622,1 +2623,47691659,0.683259886,2623,1 +2624,19720770,-0.2361292824,2624,1 +2625,28299083,-0.2571638105,2625,1 +2626,48549258,-0.4736556433,2626,1 +2627,79831227,0.4633260962,2627,1 +2628,12969778,-0.9245736482,2628,1 +2629,40248532,-0.3207419296,2629,1 +2630,34002981,0.2184368464,2630,1 +2631,27370862,-0.6030750952,2631,1 +2632,20862403,-1.8238256608,2632,1 +2633,62241997,-0.7885950094,2633,1 +2634,82300392,1.091512285,2634,1 +2635,16453488,1.2659345383,2635,1 +2636,81771937,0.6398421104,2636,1 +2637,35015961,-0.4797067511,2637,1 +2638,89448888,0.1009276373,2638,1 +2639,79083694,-0.8570429568,2639,1 +2640,26702278,1.4066329027,2640,1 +2641,73248134,-0.3204695097,2641,1 +2642,44709762,-0.8035775629,2642,1 +2643,41381266,0.4014195953,2643,1 +2644,21884893,1.5879737854,2644,1 +2645,61600523,0.5225411088,2645,1 +2646,58288890,-1.9010182617,2646,1 +2647,17271009,-0.4364990364,2647,1 +2648,41455300,-2.074326001,2648,1 +2649,13832175,0.0893714002,2649,1 +2650,12960604,-0.1242669002,2650,1 +2651,11887128,0.3948122758,2651,1 +2652,36248053,-0.1907694187,2652,1 +2653,76098395,-1.4205764238,2653,1 +2654,34072130,-1.9372008065,2654,1 +2655,47730100,1.5136931349,2655,1 +2656,34580946,-0.9892938562,2656,1 +2657,66020156,0.0645876906,2657,1 +2658,32301258,-0.9164361361,2658,1 +2659,34069865,0.719920879,2659,1 +2660,14900883,0.6096835625,2660,1 +2661,42908224,1.3070347356,2661,1 +2662,43671605,0.0663574694,2662,1 +2663,78275785,0.21484368,2663,1 +2664,62490114,1.0238561818,2664,1 +2665,32142868,0.8118520927,2665,1 +2666,47850832,0.201312958,2666,1 +2667,50084268,0.6697336767,2667,1 +2668,22407430,-1.4505255375,2668,1 +2669,78065465,-0.5042137062,2669,1 +2670,74044945,1.0279995023,2670,1 +2671,42056004,-0.6892063199,2671,1 +2672,50615017,0.0118260092,2672,1 +2673,43184472,-1.2414513727,2673,1 +2674,13840498,-1.0358493846,2674,1 +2675,30386222,0.0031775146,2675,1 +2676,42791802,1.4811494113,2676,1 +2677,50124240,-3.1360887816,2677,1 +2678,34001087,-2.0000700841,2678,1 +2679,87683648,2.718574797,2679,1 +2680,73504834,0.7474969431,2680,1 +2681,38280201,0.2928260889,2681,1 +2682,43327343,1.6100572172,2682,1 +2683,20339009,0.4449416609,2683,1 +2684,31711747,0.2701104799,2684,1 +2685,74325280,1.3609058762,2685,1 +2686,44469835,1.4843829531,2686,1 +2687,70861177,-2.1656915157,2687,1 +2688,54051464,-0.22274815,2688,1 +2689,17271368,-0.4052226546,2689,1 +2690,42188639,1.6746259382,2690,1 +2691,81495107,0.3657631073,2691,1 +2692,33704214,-1.1687899777,2692,1 +2693,39677901,-0.1572620622,2693,1 +2694,21091818,0.4454386032,2694,1 +2695,22439564,-1.3388290856,2695,1 +2696,34277935,-0.5143602007,2696,1 +2697,27939858,0.0646209524,2697,1 +2698,62867663,-0.8558033075,2698,1 +2699,31568448,-0.3354713334,2699,1 +2700,45184829,0.5509320565,2700,1 +2701,73724386,-2.1411970563,2701,1 +2702,67411499,0.5749086965,2702,1 +2703,81656414,1.0521392784,2703,1 +2704,39856004,-0.0988488012,2704,1 +2705,31164231,-0.2440517454,2705,1 +2706,82678175,-1.301446728,2706,1 +2707,48962417,1.3334119893,2707,1 +2708,49349879,0.228047068,2708,1 +2709,88113223,0.6260348666,2709,1 +2710,23698358,-1.4147681788,2710,1 +2711,50711097,1.3152379659,2711,1 +2712,36541166,1.163061653,2712,1 +2713,58776659,-0.2781706411,2713,1 +2714,58584370,-0.1208631376,2714,1 +2715,86874463,0.5446497836,2715,1 +2716,72973292,0.7099904683,2716,1 +2717,31225612,-1.3716052155,2717,1 +2718,20706766,-0.5019325093,2718,1 +2719,79944240,-1.5915003921,2719,1 +2720,43900544,-1.8397650992,2720,1 +2721,62256131,-0.9800736843,2721,1 +2722,66858376,-1.0185645438,2722,1 +2723,36384102,-0.6198581374,2723,1 +2724,27511304,-0.6925512792,2724,1 +2725,53086292,-1.1273167001,2725,1 +2726,70347600,-0.0167559544,2726,1 +2727,54437331,-0.9357850714,2727,1 +2728,76319421,0.0447796755,2728,1 +2729,78350604,0.1467149404,2729,1 +2730,81436125,0.4247938826,2730,1 +2731,88990790,2.4394672329,2731,1 +2732,54916278,0.9675383965,2732,1 +2733,89505814,-0.2945544973,2733,1 +2734,43480490,0.6085099351,2734,1 +2735,13843793,-1.7297123428,2735,1 +2736,67614824,-0.8668213585,2736,1 +2737,75571064,-1.2540748033,2737,1 +2738,16386248,0.961044277,2738,1 +2739,26828861,1.5490650699,2739,1 +2740,51224843,1.0316359042,2740,1 +2741,43702947,0.934732753,2741,1 +2742,58204127,2.0074766144,2742,1 +2743,27520088,0.6514302308,2743,1 +2744,19123444,-1.0518696464,2744,1 +2745,15804223,2.2566050809,2745,1 +2746,33756384,0.7275722077,2746,1 +2747,70496044,-0.391180862,2747,1 +2748,71016508,0.1929419014,2748,1 +2749,62306881,-0.2849572895,2749,1 +2750,35501760,0.3329656585,2750,1 +2751,24589786,-0.2751908252,2751,1 +2752,31894314,0.2477807691,2752,1 +2753,79805255,-0.3243232671,2753,1 +2754,15498340,0.5029333313,2754,1 +2755,45467746,-1.1466755502,2755,1 +2756,83538723,0.6781639705,2756,1 +2757,53109309,-0.8419305446,2757,1 +2758,62329022,1.3863386928,2758,1 +2759,62316924,0.9508269522,2759,1 +2760,33810727,-0.2253709215,2760,1 +2761,80981317,0.1585530667,2761,1 +2762,40537909,1.4709582764,2762,1 +2763,74932619,-0.0414003881,2763,1 +2764,70410916,-0.5422155728,2764,1 +2765,64764086,0.4809550714,2765,1 +2766,51585551,0.2716151924,2766,1 +2767,87181092,0.3186498914,2767,1 +2768,54513010,-1.1812731903,2768,1 +2769,56807754,-0.0220687618,2769,1 +2770,22301958,0.4125960444,2770,1 +2771,54340355,-0.5381524887,2771,1 +2772,10911474,-0.5013472763,2772,1 +2773,22247511,-1.1508471158,2773,1 +2774,63328563,-0.8920074224,2774,1 +2775,72941626,-0.1454687687,2775,1 +2776,48039434,2.1043045917,2776,1 +2777,73499877,1.1234326438,2777,1 +2778,45357161,-1.2973656328,2778,1 +2779,36845931,2.0483251183,2779,1 +2780,51391854,-0.297411668,2780,1 +2781,52360978,-1.481293192,2781,1 +2782,77228916,0.5833293486,2782,1 +2783,10417728,-0.311902115,2783,1 +2784,78766085,-0.2634724973,2784,1 +2785,72906877,0.6005987897,2785,1 +2786,33831229,-0.2723510681,2786,1 +2787,36448864,0.7028945341,2787,1 +2788,89316886,-0.6855120282,2788,1 +2789,11334825,-0.2783335746,2789,1 +2790,79475512,0.9847182103,2790,1 +2791,37848796,0.2841311312,2791,1 +2792,57852003,0.065324874,2792,1 +2793,17184352,1.0175349393,2793,1 +2794,49604274,0.2013150428,2794,1 +2795,55079361,2.2157114312,2795,1 +2796,76881055,-0.4794889417,2796,1 +2797,20529030,0.1659888023,2797,1 +2798,40794511,1.4044129182,2798,1 +2799,59470426,2.3978217623,2799,1 +2800,12362520,-0.894391052,2800,1 +2801,60061832,-0.4510935829,2801,1 +2802,79705141,-0.4276931499,2802,1 +2803,73467270,1.0225029307,2803,1 +2804,22818794,-1.1779947065,2804,1 +2805,52969346,-1.3407612021,2805,1 +2806,71561381,0.1706111643,2806,1 +2807,16815703,-1.5433126201,2807,1 +2808,69145940,0.8249622444,2808,1 +2809,49854712,-1.1037291116,2809,1 +2810,83747977,-0.4205825126,2810,1 +2811,34073089,-1.0922499422,2811,1 +2812,59871480,0.4267988859,2812,1 +2813,86573232,-0.9327038337,2813,1 +2814,58525744,0.2126811378,2814,1 +2815,27870787,-0.1675713222,2815,1 +2816,38802451,0.3255558874,2816,1 +2817,32381788,0.0089790757,2817,1 +2818,50828217,1.1744756842,2818,1 +2819,29662315,-0.0292194035,2819,1 +2820,13367011,0.8691789732,2820,1 +2821,35740137,-0.0304760198,2821,1 +2822,10577663,0.0579545985,2822,1 +2823,42858462,1.0610224009,2823,1 +2824,17014140,0.5627150325,2824,1 +2825,31053604,1.1151534963,2825,1 +2826,45111973,-0.2390926408,2826,1 +2827,47095869,-0.7823205407,2827,1 +2828,53001924,0.2019035765,2828,1 +2829,77248360,-1.6134700455,2829,1 +2830,10928987,0.083556235,2830,1 +2831,25912910,-0.3326581368,2831,1 +2832,55073554,-1.1767024956,2832,1 +2833,32935021,0.497810234,2833,1 +2834,17032135,1.2950587147,2834,1 +2835,12591222,1.0498386353,2835,1 +2836,63177469,0.2089443884,2836,1 +2837,49240839,-1.4562317897,2837,1 +2838,66457928,0.8754509046,2838,1 +2839,39821897,-2.5863250829,2839,1 +2840,89940728,0.4528148466,2840,1 +2841,74795553,2.4645834503,2841,1 +2842,57653527,0.7699432598,2842,1 +2843,22653151,0.1171976828,2843,1 +2844,52207721,-0.0984194754,2844,1 +2845,20137305,1.1172336077,2845,1 +2846,28174729,0.8218600831,2846,1 +2847,48963795,-0.1063847208,2847,1 +2848,10094798,-0.7866651041,2848,1 +2849,21733082,0.5399417063,2849,1 +2850,86736168,-0.7376411756,2850,1 +2851,88951271,-0.5320153997,2851,1 +2852,83535104,-0.1642993467,2852,1 +2853,11560163,1.0913160205,2853,1 +2854,28438730,-1.604445981,2854,1 +2855,56147531,0.9040449602,2855,1 +2856,52719155,-1.2453272717,2856,1 +2857,82376588,-0.5622542893,2857,1 +2858,88139753,-1.0516569209,2858,1 +2859,43545019,-1.1643261458,2859,1 +2860,42741599,-1.2024440744,2860,1 +2861,83900246,-0.1578890855,2861,1 +2862,45468507,0.4160722041,2862,1 +2863,40779354,-0.4121502404,2863,1 +2864,16135809,0.3693916748,2864,1 +2865,26885888,-0.3911590284,2865,1 +2866,20253725,1.425299431,2866,1 +2867,72711656,0.1786658023,2867,1 +2868,89181366,-1.6049995591,2868,1 +2869,41890729,-0.6200477606,2869,1 +2870,61555481,-0.6072328575,2870,1 +2871,21754094,-0.1354647962,2871,1 +2872,38843078,1.5775576006,2872,1 +2873,28886745,-0.7475476965,2873,1 +2874,15889073,-1.1242112337,2874,1 +2875,23594241,-0.4069975003,2875,1 +2876,54591102,-0.9312006972,2876,1 +2877,54530120,0.1899783694,2877,1 +2878,60252141,-0.0834787303,2878,1 +2879,31263789,-0.5222046745,2879,1 +2880,74182100,0.4919203392,2880,1 +2881,27450699,0.0128088134,2881,1 +2882,63716373,0.1582194183,2882,1 +2883,68941889,-1.0604591213,2883,1 +2884,15929104,0.7780789145,2884,1 +2885,47431344,1.2726165677,2885,1 +2886,29750302,1.0671143962,2886,1 +2887,76220996,0.3304228433,2887,1 +2888,48090463,-0.5134412073,2888,1 +2889,59296054,-0.4155789567,2889,1 +2890,22867449,-0.7837984161,2890,1 +2891,25989324,-0.9553971527,2891,1 +2892,69306492,0.4467050918,2892,1 +2893,47390318,1.0743888362,2893,1 +2894,35188652,-0.8898836555,2894,1 +2895,46993101,-0.305902673,2895,1 +2896,27296823,0.0380531009,2896,1 +2897,62856678,1.1672943026,2897,1 +2898,53926017,1.46386019,2898,1 +2899,77463354,-0.3495209764,2899,1 +2900,63034911,-0.6334317174,2900,1 +2901,22326894,-1.1022898844,2901,1 +2902,18662055,0.0448350832,2902,1 +2903,77203495,-1.1063658637,2903,1 +2904,18212154,-1.7013802552,2904,1 +2905,48370449,-0.3265824594,2905,1 +2906,72554729,-0.7262090728,2906,1 +2907,23448995,-0.1098779727,2907,1 +2908,43700473,-0.110919354,2908,1 +2909,58163038,0.4780518357,2909,1 +2910,17433044,1.677912106,2910,1 +2911,59095005,0.8633924874,2911,1 +2912,29689671,0.8979274509,2912,1 +2913,32924926,1.0190525798,2913,1 +2914,34764002,-0.8227789226,2914,1 +2915,89201184,-1.3004501935,2915,1 +2916,87442684,2.2678210619,2916,1 +2917,37155088,0.3938250454,2917,1 +2918,46993361,-0.5140318488,2918,1 +2919,53338493,-1.5873961327,2919,1 +2920,61176994,0.0675982057,2920,1 +2921,35474260,-0.7370230201,2921,1 +2922,22098505,1.3964668794,2922,1 +2923,55099400,-0.2997492504,2923,1 +2924,49892997,-0.471527991,2924,1 +2925,85326882,-0.0962158476,2925,1 +2926,59617120,-1.6244112426,2926,1 +2927,13297468,0.0464944366,2927,1 +2928,58425033,2.0442432317,2928,1 +2929,18117764,-1.7603553184,2929,1 +2930,70814043,1.5555244401,2930,1 +2931,55254811,-1.4086321235,2931,1 +2932,87824784,-1.390254845,2932,1 +2933,60134017,0.6023438216,2933,1 +2934,24447833,-0.4158102515,2934,1 +2935,30727305,1.7074422994,2935,1 +2936,24157948,-0.491924654,2936,1 +2937,29817769,0.8076343626,2937,1 +2938,25667229,0.0638869573,2938,1 +2939,22022935,0.3942808906,2939,1 +2940,41067965,-0.1116317198,2940,1 +2941,12454529,-1.1290297379,2941,1 +2942,11098402,0.8876129472,2942,1 +2943,36911982,0.5698970194,2943,1 +2944,40457239,0.0859173744,2944,1 +2945,46439154,1.8923659716,2945,1 +2946,74034082,1.30353947,2946,1 +2947,52789162,0.3421947235,2947,1 +2948,71035867,-1.7347353774,2948,1 +2949,56042757,-0.0299901639,2949,1 +2950,20212247,1.97181045,2950,1 +2951,63619475,-1.6212676003,2951,1 +2952,23333755,-0.0482931424,2952,1 +2953,41080826,-0.2163083913,2953,1 +2954,13026414,-0.1974789717,2954,1 +2955,72803825,-0.1924359866,2955,1 +2956,58098742,1.0339814761,2956,1 +2957,67247207,-1.8080270557,2957,1 +2958,66937023,2.0991283857,2958,1 +2959,83451554,-0.7154773801,2959,1 +2960,49026740,0.2953346578,2960,1 +2961,78026799,0.2906027911,2961,1 +2962,40517401,-0.0043411739,2962,1 +2963,22684693,1.1238962677,2963,1 +2964,14625840,1.4296232486,2964,1 +2965,49881857,-1.5552061148,2965,1 +2966,54305429,0.7473909264,2966,1 +2967,34644961,-0.8068901792,2967,1 +2968,70179209,2.2167718599,2968,1 +2969,89019529,0.7282628046,2969,1 +2970,62567397,0.7524236726,2970,1 +2971,64749627,-0.7454497505,2971,1 +2972,49243943,-0.7231187499,2972,1 +2973,42918112,-0.8680748029,2973,1 +2974,50809296,-0.0266742794,2974,1 +2975,66960640,0.511378434,2975,1 +2976,50105954,1.311530548,2976,1 +2977,68366882,0.904469777,2977,1 +2978,80013674,-1.0078316393,2978,1 +2979,27929417,2.285573332,2979,1 +2980,49623832,1.0705807254,2980,1 +2981,49414132,1.18032599,2981,1 +2982,13012453,-0.5892207578,2982,1 +2983,70733562,0.7917182381,2983,1 +2984,15165883,-1.4242394315,2984,1 +2985,28856512,-0.2572480564,2985,1 +2986,41090060,-0.215919517,2986,1 +2987,76497179,0.7901200036,2987,1 +2988,71420796,-1.0295522037,2988,1 +2989,77635846,0.4491901053,2989,1 +2990,78229718,0.7770202746,2990,1 +2991,52842112,0.1045097862,2991,1 +2992,26007754,0.9744778522,2992,1 +2993,70378691,0.6137013903,2993,1 +2994,15614053,1.7882143966,2994,1 +2995,43743729,0.9923839442,2995,1 +2996,76052045,0.2596230278,2996,1 +2997,25795545,1.0077246049,2997,1 +2998,87080406,-0.0098734916,2998,1 +2999,72405013,-1.5857151963,2999,1 +3000,42776258,1.454260331,3000,1 +3001,38442235,0.0802530558,3001,1 +3002,62891548,-2.1113409791,3002,1 +3003,50392606,0.0813712524,3003,1 +3004,59775797,1.1185141928,3004,1 +3005,13344616,-1.0403077319,3005,1 +3006,83810714,-0.5264587833,3006,1 +3007,67820443,-0.9559909083,3007,1 +3008,54542765,-1.4568724601,3008,1 +3009,66863965,0.3649584245,3009,1 +3010,45226584,-1.2568826132,3010,1 +3011,70581049,0.438928008,3011,1 +3012,15610475,-1.1778614959,3012,1 +3013,35533077,0.5412866598,3013,1 +3014,49610650,0.5110991191,3014,1 +3015,12628088,0.5645939568,3015,1 +3016,23453199,-0.7446632695,3016,1 +3017,24973327,-0.9054414071,3017,1 +3018,78620680,-0.3553378202,3018,1 +3019,12302802,0.8178713256,3019,1 +3020,39840311,0.2596634025,3020,1 +3021,78082267,0.7883519113,3021,1 +3022,24415749,-2.824644049,3022,1 +3023,59053084,-0.1695599688,3023,1 +3024,38038135,0.9706406768,3024,1 +3025,79746167,-2.1291983424,3025,1 +3026,65423213,0.150332793,3026,1 +3027,57925346,-0.0439773286,3027,1 +3028,12582502,0.0055421376,3028,1 +3029,67704516,-0.967011026,3029,1 +3030,18736480,-0.1199207556,3030,1 +3031,75052720,-0.8333750353,3031,1 +3032,25803048,0.7299390572,3032,1 +3033,62807218,0.8885731798,3033,1 +3034,11635284,0.3517629735,3034,1 +3035,23439112,0.7501822702,3035,1 +3036,72894621,-0.503596442,3036,1 +3037,21966264,0.1395575667,3037,1 +3038,71163399,-1.3837600865,3038,1 +3039,24671736,0.8296700637,3039,1 +3040,86050217,-1.2547660946,3040,1 +3041,73393772,0.3150106895,3041,1 +3042,67471730,1.4910685316,3042,1 +3043,57586852,0.1675479348,3043,1 +3044,31365858,0.721232778,3044,1 +3045,54984083,0.910621268,3045,1 +3046,32371551,1.1025599326,3046,1 +3047,34758146,-1.0227923351,3047,1 +3048,56406785,0.2796466251,3048,1 +3049,22287268,-0.3989328208,3049,1 +3050,64418150,-0.0005896749,3050,1 +3051,78445599,-0.2481385209,3051,1 +3052,18975765,-1.4986533798,3052,1 +3053,63283671,-0.3959341263,3053,1 +3054,28464336,2.5001563604,3054,1 +3055,55624435,-1.7847159585,3055,1 +3056,44297531,0.5495410479,3056,1 +3057,55989739,-0.8580687678,3057,1 +3058,86058289,-1.7095084026,3058,1 +3059,65726438,0.4116619925,3059,1 +3060,55393140,-0.4824818986,3060,1 +3061,34345643,0.8670124963,3061,1 +3062,13729228,-0.2692190142,3062,1 +3063,57833540,1.2559608129,3063,1 +3064,71408989,0.6916863059,3064,1 +3065,22726356,-0.1973742865,3065,1 +3066,51610121,-0.5531878594,3066,1 +3067,89538215,0.9403392042,3067,1 +3068,47259531,-0.8771651899,3068,1 +3069,50695269,-0.2786783598,3069,1 +3070,48968295,-0.0129065842,3070,1 +3071,86810491,0.4196907606,3071,1 +3072,61221997,0.4251416868,3072,1 +3073,69475493,0.3000230558,3073,1 +3074,76551926,-0.2458937416,3074,1 +3075,63499838,-0.6386212719,3075,1 +3076,19222757,0.4575245969,3076,1 +3077,65751814,0.9706979013,3077,1 +3078,58979905,-1.6071486865,3078,1 +3079,57505780,0.4269998396,3079,1 +3080,78711520,0.7711158345,3080,1 +3081,70293713,1.4202599863,3081,1 +3082,11934333,1.6911696811,3082,1 +3083,14109507,-0.7437451765,3083,1 +3084,49420448,1.7201788592,3084,1 +3085,24409338,1.113974157,3085,1 +3086,44207672,0.3845548114,3086,1 +3087,73560678,1.0535520183,3087,1 +3088,21129365,-0.3180459102,3088,1 +3089,37050828,-0.0503117048,3089,1 +3090,15227515,-0.2672013097,3090,1 +3091,66818377,-2.1006967346,3091,1 +3092,77596521,-0.5638578656,3092,1 +3093,58519328,-1.076220733,3093,1 +3094,45280288,0.6294005653,3094,1 +3095,29375042,0.4173837229,3095,1 +3096,56791101,0.5996167971,3096,1 +3097,65259894,-0.0851277088,3097,1 +3098,62027084,-0.3746829764,3098,1 +3099,64640101,0.0239149865,3099,1 +3100,20051652,-0.7087478686,3100,1 +3101,13833395,0.8113353839,3101,1 +3102,62464722,-0.569911893,3102,1 +3103,51296231,0.4491447373,3103,1 +3104,84300991,1.5993434585,3104,1 +3105,35337014,-0.1680657525,3105,1 +3106,70009728,1.8854300032,3106,1 +3107,32563431,0.8992643415,3107,1 +3108,30169394,1.5274439285,3108,1 +3109,16941080,-0.4704952308,3109,1 +3110,82940541,1.2505563644,3110,1 +3111,33056345,-1.0638567162,3111,1 +3112,20521438,0.493460739,3112,1 +3113,85972661,1.7825486307,3113,1 +3114,21602487,-0.1355182971,3114,1 +3115,38329841,1.6274163471,3115,1 +3116,21780677,-1.1466469504,3116,1 +3117,46692029,1.0283043945,3117,1 +3118,71009537,-2.0645517571,3118,1 +3119,14789323,0.1634721379,3119,1 +3120,62093458,0.7411881859,3120,1 +3121,59591385,-0.4842151524,3121,1 +3122,62843328,0.8595477696,3122,1 +3123,10245184,-0.6786409742,3123,1 +3124,83158210,0.0675775416,3124,1 +3125,60999714,0.0880727415,3125,1 +3126,62487881,-0.0642736915,3126,1 +3127,15813348,-1.4208490213,3127,1 +3128,79097349,1.6551903576,3128,1 +3129,19807456,-0.0650682307,3129,1 +3130,78992655,-0.9807464771,3130,1 +3131,33412154,0.3614128768,3131,1 +3132,45622521,0.2015733714,3132,1 +3133,84410934,0.665958094,3133,1 +3134,44925962,-0.3415319957,3134,1 +3135,12935480,-0.4452776215,3135,1 +3136,83273330,-1.460539895,3136,1 +3137,31459199,0.0299435982,3137,1 +3138,47372329,-1.0112509016,3138,1 +3139,67803678,0.6839168841,3139,1 +3140,48470965,0.7131875939,3140,1 +3141,54508775,-0.1798033134,3141,1 +3142,15920273,-1.1916755395,3142,1 +3143,42621131,-0.2431427876,3143,1 +3144,23894342,-1.7763309021,3144,1 +3145,36379504,-0.6555423178,3145,1 +3146,87053962,-0.6277383573,3146,1 +3147,51794487,0.5418973887,3147,1 +3148,47887471,-1.353390061,3148,1 +3149,15629026,0.5180012444,3149,1 +3150,51995986,2.5175486633,3150,1 +3151,22114362,1.1430813105,3151,1 +3152,34099166,-0.0515643253,3152,1 +3153,79677779,-0.6108352041,3153,1 +3154,47750405,0.6149194492,3154,1 +3155,82338214,-0.2034298823,3155,1 +3156,68586645,-1.0861792749,3156,1 +3157,31744134,0.8825307462,3157,1 +3158,53296286,-2.9862443517,3158,1 +3159,48184133,-0.7185777127,3159,1 +3160,45902320,1.3974425619,3160,1 +3161,38101146,-0.8709671522,3161,1 +3162,78733319,-0.189199419,3162,1 +3163,48600025,0.3085166952,3163,1 +3164,88132249,-0.084833838,3164,1 +3165,36885037,-2.339619057,3165,1 +3166,63616536,1.2105577145,3166,1 +3167,77420605,-1.8024725471,3167,1 +3168,87209242,0.0992386209,3168,1 +3169,60612057,1.2548571364,3169,1 +3170,34369301,-0.5750815588,3170,1 +3171,63169978,1.7153877965,3171,1 +3172,83579131,-1.1114049801,3172,1 +3173,63962280,0.4483830369,3173,1 +3174,21888257,0.2574894393,3174,1 +3175,68053392,2.2001250594,3175,1 +3176,86512592,-0.3951772791,3176,1 +3177,81643978,1.3249848013,3177,1 +3178,25896531,-1.0738209105,3178,1 +3179,24273272,-0.9532640089,3179,1 +3180,37780904,-0.0852748181,3180,1 +3181,69794460,-1.2912574512,3181,1 +3182,25530942,0.8052560376,3182,1 +3183,47431945,0.1739319344,3183,1 +3184,62475321,0.2734005801,3184,1 +3185,60805307,-1.2612184987,3185,1 +3186,54593029,-1.3818215143,3186,1 +3187,36276879,-0.3039803707,3187,1 +3188,50262300,-0.0256494155,3188,1 +3189,81027254,1.416141811,3189,1 +3190,42009192,1.2786898754,3190,1 +3191,73920088,0.7592306508,3191,1 +3192,66809176,0.8884615145,3192,1 +3193,55097993,0.3032610386,3193,1 +3194,25249526,-2.5633443645,3194,1 +3195,58863574,0.7329046004,3195,1 +3196,75666013,0.5212049634,3196,1 +3197,21686509,0.8180708537,3197,1 +3198,55079050,-0.2433988868,3198,1 +3199,80041678,0.1654769856,3199,1 +3200,25188436,1.8184054391,3200,1 +3201,78148483,-0.1791946891,3201,1 +3202,47995091,-0.5356951041,3202,1 +3203,67338749,0.7608938112,3203,1 +3204,89566721,-0.6307745065,3204,1 +3205,43673989,-0.221662112,3205,1 +3206,49001151,-2.1110284335,3206,1 +3207,11026859,-0.3593078098,3207,1 +3208,70907196,-0.9630873561,3208,1 +3209,37593099,2.9594737311,3209,1 +3210,72628449,-0.0615209683,3210,1 +3211,89166301,-0.7415571746,3211,1 +3212,51443839,-1.1594024111,3212,1 +3213,74429842,-0.3474597879,3213,1 +3214,57792501,1.5594444378,3214,1 +3215,17571398,-1.239506116,3215,1 +3216,28046049,-0.1492872151,3216,1 +3217,62453840,0.3222240661,3217,1 +3218,69848132,0.1174390828,3218,1 +3219,14797217,0.9719110316,3219,1 +3220,73040395,-0.5909507149,3220,1 +3221,45712171,0.5329099791,3221,1 +3222,36642762,-2.1708516462,3222,1 +3223,40902987,0.3309428522,3223,1 +3224,34161873,-0.7736360137,3224,1 +3225,51538938,0.1275919295,3225,1 +3226,10493315,-1.1123741487,3226,1 +3227,16791080,-1.1013084161,3227,1 +3228,87138389,0.3014471689,3228,1 +3229,51477675,0.409672581,3229,1 +3230,43082340,-0.7871591785,3230,1 +3231,45051984,-0.6436198361,3231,1 +3232,58294937,-0.52914224,3232,1 +3233,46843861,0.0979994744,3233,1 +3234,25164265,1.7895365174,3234,1 +3235,14178046,0.0750040519,3235,1 +3236,25237031,-0.9784570326,3236,1 +3237,76301581,-1.0230681488,3237,1 +3238,14398766,-1.724371167,3238,1 +3239,23098489,0.261415893,3239,1 +3240,47927403,-1.0397075849,3240,1 +3241,16543691,2.4639651446,3241,1 +3242,54461818,0.5585576717,3242,1 +3243,24657005,-0.2119192472,3243,1 +3244,50912162,-0.4119203617,3244,1 +3245,14435574,-0.4225487177,3245,1 +3246,23536890,0.4775644524,3246,1 +3247,21198000,-1.0181034004,3247,1 +3248,47473098,0.1811651726,3248,1 +3249,28246341,-1.4052787342,3249,1 +3250,88497883,-0.6731303478,3250,1 +3251,26198347,1.1155172814,3251,1 +3252,76456251,-1.3319832262,3252,1 +3253,75108432,-1.0605856758,3253,1 +3254,66286133,2.8206097626,3254,1 +3255,37504502,0.4587063672,3255,1 +3256,50245651,0.534856235,3256,1 +3257,76672251,0.4705450384,3257,1 +3258,47530782,-0.3111250317,3258,1 +3259,44675492,0.8789644034,3259,1 +3260,14312573,-0.2100351234,3260,1 +3261,26139699,0.1198285419,3261,1 +3262,16460346,-0.867295183,3262,1 +3263,66215153,1.2691305272,3263,1 +3264,70029970,-1.6904552991,3264,1 +3265,52213771,0.4390408027,3265,1 +3266,68482667,-1.0031786604,3266,1 +3267,75209035,0.9319606927,3267,1 +3268,30322253,0.110496382,3268,1 +3269,10226021,-1.3337062635,3269,1 +3270,71105868,-0.6852090908,3270,1 +3271,28829337,1.3375242562,3271,1 +3272,26122438,-0.32785745,3272,1 +3273,62842917,-0.7343701596,3273,1 +3274,60073768,0.0583900842,3274,1 +3275,65718179,1.3619631545,3275,1 +3276,19056743,0.6917580858,3276,1 +3277,75714625,-1.1536864857,3277,1 +3278,30086888,1.7204660522,3278,1 +3279,48969403,-1.5256505268,3279,1 +3280,16142477,-1.019332949,3280,1 +3281,42849120,-0.4542239181,3281,1 +3282,30266681,0.3084268259,3282,1 +3283,31066314,0.0761675591,3283,1 +3284,12042949,-0.561689507,3284,1 +3285,50074785,-0.7501715108,3285,1 +3286,51728995,-0.7428019133,3286,1 +3287,24955773,2.0200721635,3287,1 +3288,54207564,0.9929431734,3288,1 +3289,77498947,1.4943879213,3289,1 +3290,77496228,-0.269820013,3290,1 +3291,87195566,-0.1055436161,3291,1 +3292,14245718,1.0542389901,3292,1 +3293,62206228,-0.2229326067,3293,1 +3294,14400660,1.3735579986,3294,1 +3295,74068372,0.1908520045,3295,1 +3296,30472651,0.2648103639,3296,1 +3297,86552621,0.7094325846,3297,1 +3298,87136912,-0.2848977383,3298,1 +3299,76493149,1.1858735714,3299,1 +3300,62286296,0.1009901462,3300,1 +3301,50934423,-0.2399818052,3301,1 +3302,48488580,-0.9887616175,3302,1 +3303,10202416,-2.0987477525,3303,1 +3304,51035056,-0.0718782594,3304,1 +3305,68819095,-0.9942998586,3305,1 +3306,60555128,0.0873945855,3306,1 +3307,45062040,0.059571804,3307,1 +3308,45344606,-0.9227748628,3308,1 +3309,84456194,-0.1000815657,3309,1 +3310,46670877,0.4779960969,3310,1 +3311,51323146,0.9380270008,3311,1 +3312,24739678,-0.5366665503,3312,1 +3313,77534777,0.4166148083,3313,1 +3314,61548339,0.2295273937,3314,1 +3315,25687473,-0.5475577612,3315,1 +3316,30736956,1.1268705164,3316,1 +3317,29435661,0.255552154,3317,1 +3318,41180827,-0.5049554596,3318,1 +3319,82129453,-0.3104641532,3319,1 +3320,27756011,-0.3894552857,3320,1 +3321,10537839,0.2889745407,3321,1 +3322,45852799,1.1360579317,3322,1 +3323,50576164,3.5196301454,3323,1 +3324,15357009,-2.0753113304,3324,1 +3325,75013479,0.2659278505,3325,1 +3326,28119947,0.2063647112,3326,1 +3327,64564792,-0.068104797,3327,1 +3328,51754378,-1.6770401775,3328,1 +3329,76231360,-1.0405397445,3329,1 +3330,32938991,1.0006846561,3330,1 +3331,67870465,-0.0393493844,3331,1 +3332,19438970,-0.1678935931,3332,1 +3333,14928658,-0.652123103,3333,1 +3334,27246880,-0.4466953463,3334,1 +3335,75277735,1.1455038688,3335,1 +3336,71495967,1.0820379329,3336,1 +3337,52181375,-0.4892270145,3337,1 +3338,87284987,-1.0111034125,3338,1 +3339,16181481,-0.7400231144,3339,1 +3340,57774316,0.0419601345,3340,1 +3341,85530169,0.6944537152,3341,1 +3342,23890277,-0.0169167897,3342,1 +3343,14227183,-0.1810364976,3343,1 +3344,57305172,1.0650703515,3344,1 +3345,82727137,0.8993627567,3345,1 +3346,14214863,-0.4156168676,3346,1 +3347,21694928,0.0293973971,3347,1 +3348,48218613,0.0319124427,3348,1 +3349,50150569,-1.2221916301,3349,1 +3350,66152377,0.0997671369,3350,1 +3351,37791618,1.1358222132,3351,1 +3352,41807628,0.1636520593,3352,1 +3353,37509324,-0.8823547,3353,1 +3354,73976266,0.6904037643,3354,1 +3355,71656202,0.8011201575,3355,1 +3356,29146643,-1.0700839822,3356,1 +3357,64374305,-0.1924098118,3357,1 +3358,14729938,1.4166832727,3358,1 +3359,70159930,0.3089908596,3359,1 +3360,20707695,1.290350261,3360,1 +3361,81870826,-0.3492950744,3361,1 +3362,74074984,1.242969565,3362,1 +3363,69516121,1.0390032945,3363,1 +3364,60071679,-0.6511298207,3364,1 +3365,74463843,0.8040982258,3365,1 +3366,53636388,-0.304353796,3366,1 +3367,66955674,0.0568778301,3367,1 +3368,59601284,-0.335944487,3368,1 +3369,75600799,-0.0382873037,3369,1 +3370,77197537,-0.4975284448,3370,1 +3371,70221993,0.9981327883,3371,1 +3372,47911122,-0.6403243554,3372,1 +3373,84863086,-0.2928925235,3373,1 +3374,76574598,1.4923612093,3374,1 +3375,81545509,-0.6067513375,3375,1 +3376,43598512,0.2963821585,3376,1 +3377,86375285,0.455794181,3377,1 +3378,12083575,1.1244911002,3378,1 +3379,49774071,-2.2605461786,3379,1 +3380,47001288,0.9548191332,3380,1 +3381,74082150,-0.0522596305,3381,1 +3382,63436468,-0.5712940953,3382,1 +3383,14624788,-0.2836265142,3383,1 +3384,77907987,-0.6438251582,3384,1 +3385,22281571,0.4881479317,3385,1 +3386,71081367,-1.2493111813,3386,1 +3387,75488195,0.7591032535,3387,1 +3388,48021132,-0.7513608088,3388,1 +3389,54795020,-1.5329307599,3389,1 +3390,12610061,-0.1639285878,3390,1 +3391,61192023,1.7552888675,3391,1 +3392,30765282,0.3020545895,3392,1 +3393,54479021,0.3492022886,3393,1 +3394,61719733,-0.3590005603,3394,1 +3395,16573704,-0.2600951571,3395,1 +3396,61845962,-1.057993591,3396,1 +3397,13595658,-1.0912854895,3397,1 +3398,35217990,1.8919917821,3398,1 +3399,15070793,-0.4764178783,3399,1 +3400,34757032,0.5559938666,3400,1 +3401,77808657,0.7505701664,3401,1 +3402,62003865,0.7193020566,3402,1 +3403,35724336,0.4322176449,3403,1 +3404,64381127,0.5995257215,3404,1 +3405,51952359,0.0659118911,3405,1 +3406,20805887,-0.0862677714,3406,1 +3407,84671365,0.8545037705,3407,1 +3408,87639339,-0.9156979661,3408,1 +3409,84314675,0.791837122,3409,1 +3410,34289306,-2.0163342841,3410,1 +3411,17825047,0.449978048,3411,1 +3412,30887288,-1.0226247494,3412,1 +3413,74510697,-0.3924381008,3413,1 +3414,11078020,1.7589550408,3414,1 +3415,53592182,-1.9472153717,3415,1 +3416,68580879,-0.8680321045,3416,1 +3417,49585696,-0.7253537835,3417,1 +3418,65603157,-1.5305592752,3418,1 +3419,62628237,-1.0824615045,3419,1 +3420,52645392,-1.2560148937,3420,1 +3421,73157622,-0.8621918177,3421,1 +3422,16251809,1.4417507065,3422,1 +3423,29471986,-0.9423727003,3423,1 +3424,70244124,0.1433899851,3424,1 +3425,65073301,0.474445452,3425,1 +3426,27046793,0.9956066105,3426,1 +3427,86569074,0.9834559159,3427,1 +3428,69132250,-0.435107812,3428,1 +3429,37426526,-1.7499642743,3429,1 +3430,72760238,-0.8378482152,3430,1 +3431,38536210,-2.0152635744,3431,1 +3432,60942512,3.2580866514,3432,1 +3433,37039445,-1.1438971461,3433,1 +3434,24127726,0.0859040487,3434,1 +3435,82066372,-1.2878031153,3435,1 +3436,11871381,0.6051943379,3436,1 +3437,67364161,-2.1191731206,3437,1 +3438,71427473,-0.1690969867,3438,1 +3439,50610156,1.365315686,3439,1 +3440,82761015,-0.0141919942,3440,1 +3441,21389635,1.3530955386,3441,1 +3442,76881222,-0.2984615789,3442,1 +3443,29626751,-0.460920042,3443,1 +3444,65338054,-1.296024807,3444,1 +3445,57253975,-0.7329287719,3445,1 +3446,45818296,-1.3068850232,3446,1 +3447,22642130,0.155169677,3447,1 +3448,74077038,-0.6814809753,3448,1 +3449,67795170,-0.2695840628,3449,1 +3450,71515211,-3.0816612326,3450,1 +3451,63617230,0.5213779086,3451,1 +3452,76685151,-1.3372113246,3452,1 +3453,42446916,-0.4257720554,3453,1 +3454,15794452,-1.1945257812,3454,1 +3455,80802993,-0.1746668516,3455,1 +3456,36623169,1.1666550673,3456,1 +3457,38740295,-0.2547709269,3457,1 +3458,47626161,0.4831644454,3458,1 +3459,69776554,-0.4277141909,3459,1 +3460,65840731,1.6365120958,3460,1 +3461,39871797,0.8217509647,3461,1 +3462,53437109,-0.4220190401,3462,1 +3463,48407683,-1.1960655364,3463,1 +3464,25038554,0.6768911624,3464,1 +3465,76656236,1.8222735988,3465,1 +3466,74395439,-0.2138640925,3466,1 +3467,28585110,1.4458650475,3467,1 +3468,69866238,-0.4263041386,3468,1 +3469,64022117,0.7540200708,3469,1 +3470,55828410,0.5942353741,3470,1 +3471,13807818,0.482865297,3471,1 +3472,45556440,0.847073969,3472,1 +3473,55004031,-0.3242052625,3473,1 +3474,56553586,0.8901517053,3474,1 +3475,51198349,-1.417946751,3475,1 +3476,35379977,-0.014865305,3476,1 +3477,36314101,-1.2715100343,3477,1 +3478,29198313,-0.4892088224,3478,1 +3479,46221999,-0.8544700588,3479,1 +3480,79309355,-0.8390081217,3480,1 +3481,86573314,1.1464984683,3481,1 +3482,63837897,0.0432402138,3482,1 +3483,89099354,1.5019355563,3483,1 +3484,84996789,-0.0114819918,3484,1 +3485,76101644,-0.0364431226,3485,1 +3486,23161364,-0.80715579,3486,1 +3487,33390414,0.1714913415,3487,1 +3488,41137317,0.0176048039,3488,1 +3489,17724040,0.8896903962,3489,1 +3490,43182434,0.9505512131,3490,1 +3491,84153342,-0.6295319031,3491,1 +3492,61871719,-0.6464333271,3492,1 +3493,13967165,0.2375723339,3493,1 +3494,15037625,-0.8366010546,3494,1 +3495,57865648,1.0270283067,3495,1 +3496,58555550,0.842280665,3496,1 +3497,47958807,1.6747899481,3497,1 +3498,18344729,0.4098882906,3498,1 +3499,87154986,0.8167655326,3499,1 +3500,74725787,-0.6757535327,3500,1 +3501,61295160,1.1006508334,3501,1 +3502,53710363,-0.9867140597,3502,1 +3503,28218127,-2.0654897095,3503,1 +3504,11827798,0.3776509859,3504,1 +3505,56823562,1.3989211529,3505,1 +3506,75222662,-0.7474803569,3506,1 +3507,13251082,-0.6511104232,3507,1 +3508,80553867,0.4429110531,3508,1 +3509,44641274,-1.7534669828,3509,1 +3510,75944613,0.0771446546,3510,1 +3511,48791103,-1.8039425082,3511,1 +3512,53627793,-0.5046037177,3512,1 +3513,84502649,2.290097242,3513,1 +3514,23017662,-0.2534102685,3514,1 +3515,35679481,0.3408375001,3515,1 +3516,25973580,0.2446107322,3516,1 +3517,51300803,0.1497699102,3517,1 +3518,29849449,1.5107800808,3518,1 +3519,32967146,-0.6697526307,3519,1 +3520,21414230,1.5813637095,3520,1 +3521,71746648,0.5427271459,3521,1 +3522,40835722,0.1161953663,3522,1 +3523,10611951,0.4542844977,3523,1 +3524,43853736,-0.71980876,3524,1 +3525,21654379,0.9178155363,3525,1 +3526,52914095,-1.1437944036,3526,1 +3527,64642132,-1.3830045484,3527,1 +3528,67155493,-0.6905265417,3528,1 +3529,74726939,-0.7969207275,3529,1 +3530,15129331,0.6232493116,3530,1 +3531,53439975,1.6200796493,3531,1 +3532,50078450,1.5242394752,3532,1 +3533,84573022,-0.8432797854,3533,1 +3534,48200370,-1.5897485968,3534,1 +3535,45645020,-0.9714720184,3535,1 +3536,41719026,1.5768424334,3536,1 +3537,82363945,0.9365565973,3537,1 +3538,24089275,1.3557431724,3538,1 +3539,32047001,0.6949353024,3539,1 +3540,34667795,-0.1422347964,3540,1 +3541,52338434,3.1402183984,3541,1 +3542,43635099,-0.5685033432,3542,1 +3543,40771825,-0.3045222861,3543,1 +3544,79182416,-0.6511245834,3544,1 +3545,83219227,-0.1173024005,3545,1 +3546,36621590,1.0976330732,3546,1 +3547,79181737,-1.3488340032,3547,1 +3548,38781636,1.4178931235,3548,1 +3549,35751546,0.1238952452,3549,1 +3550,46044254,-0.2230021032,3550,1 +3551,12851570,-0.4607101669,3551,1 +3552,82554784,-0.3077902117,3552,1 +3553,42917865,0.3409919859,3553,1 +3554,30994775,-0.1806194774,3554,1 +3555,29330981,-0.8270447134,3555,1 +3556,25764246,0.2987388065,3556,1 +3557,24580844,-0.467397112,3557,1 +3558,34152340,1.205123173,3558,1 +3559,43868894,-0.0470543385,3559,1 +3560,60166763,-0.3164793868,3560,1 +3561,11757200,0.0115426354,3561,1 +3562,68397371,-0.5136600291,3562,1 +3563,79785828,-0.0476873529,3563,1 +3564,62136959,1.210141584,3564,1 +3565,40233517,-1.1568814171,3565,1 +3566,31450560,-0.2531793309,3566,1 +3567,41985053,-0.4563229354,3567,1 +3568,79039807,0.9207140796,3568,1 +3569,13936170,-0.4795900939,3569,1 +3570,70464901,0.7129156048,3570,1 +3571,10383294,-0.7462367032,3571,1 +3572,15955888,-1.1006285518,3572,1 +3573,38520855,0.4640991773,3573,1 +3574,10922627,0.5922101294,3574,1 +3575,48630474,-1.4183661802,3575,1 +3576,14473106,0.7600207825,3576,1 +3577,81792611,0.9401395577,3577,1 +3578,40835717,-0.6918317426,3578,1 +3579,26924173,-0.8517935821,3579,1 +3580,34484182,-1.5074324653,3580,1 +3581,31305234,-0.7751253332,3581,1 +3582,51743859,0.268510659,3582,1 +3583,16767599,1.2287379407,3583,1 +3584,86087758,-0.8034091464,3584,1 +3585,47742360,-1.7927951456,3585,1 +3586,55297120,-1.2716889958,3586,1 +3587,22105187,2.7903052423,3587,1 +3588,41149212,-0.6356383225,3588,1 +3589,41314213,1.2754439894,3589,1 +3590,60415231,0.2654599911,3590,1 +3591,27160198,-0.4981907672,3591,1 +3592,19008344,0.0263982302,3592,1 +3593,89400120,-0.6157488605,3593,1 +3594,59289358,1.2372312834,3594,1 +3595,76039098,0.4021978322,3595,1 +3596,59341510,0.9133070538,3596,1 +3597,12840322,0.2973702075,3597,1 +3598,83148327,-0.6805333296,3598,1 +3599,32229879,0.6733488392,3599,1 +3600,66355558,-1.2911552361,3600,1 +3601,76024962,1.6501856666,3601,1 +3602,69088008,-0.2740200649,3602,1 +3603,72108963,-2.5872646287,3603,1 +3604,13197466,-0.0739622397,3604,1 +3605,10701422,-0.4642099388,3605,1 +3606,68954971,-1.4826781471,3606,1 +3607,16353774,-1.2545312664,3607,1 +3608,54674631,1.3315809641,3608,1 +3609,23667334,0.090927069,3609,1 +3610,32727261,-1.1150337604,3610,1 +3611,21662565,-1.2944031214,3611,1 +3612,61302466,1.8083904817,3612,1 +3613,75760234,2.2748418953,3613,1 +3614,27380354,0.9462370496,3614,1 +3615,40728372,-0.3833816151,3615,1 +3616,48567658,0.5336616424,3616,1 +3617,80761562,0.9680937341,3617,1 +3618,19319456,0.8756115021,3618,1 +3619,44088860,-0.238383578,3619,1 +3620,87072224,1.9522604111,3620,1 +3621,47418367,0.323904509,3621,1 +3622,89136306,-0.3132152573,3622,1 +3623,75903082,2.0380633609,3623,1 +3624,87596159,-1.0343521052,3624,1 +3625,81692408,-0.9483367537,3625,1 +3626,67143329,-1.7956421655,3626,1 +3627,21361842,-1.1021941901,3627,1 +3628,17770460,1.078776844,3628,1 +3629,64049431,0.5482722971,3629,1 +3630,84843623,0.0471365359,3630,1 +3631,53224779,-0.0066028118,3631,1 +3632,68471846,-0.3854672487,3632,1 +3633,23515149,0.7279278429,3633,1 +3634,11149715,-0.8158299266,3634,1 +3635,43862555,0.1814280056,3635,1 +3636,73888562,0.2081123451,3636,1 +3637,69600683,0.8156569026,3637,1 +3638,64006744,-0.482556177,3638,1 +3639,60210955,-0.2983665998,3639,1 +3640,60304964,0.8886759458,3640,1 +3641,19955540,-0.8993267936,3641,1 +3642,39330729,1.1904256858,3642,1 +3643,42549104,1.49439695,3643,1 +3644,62361035,-1.6378197693,3644,1 +3645,58565594,-0.2811730683,3645,1 +3646,61346847,0.3169255576,3646,1 +3647,79950759,-0.9541542374,3647,1 +3648,44371274,-1.6504536303,3648,1 +3649,27771490,-2.1089311454,3649,1 +3650,64269167,-0.1486864672,3650,1 +3651,70881779,-0.0938556235,3651,1 +3652,40826108,0.1933833368,3652,1 +3653,19363563,-0.906637505,3653,1 +3654,22552452,0.1111886812,3654,1 +3655,35394423,0.9144365214,3655,1 +3656,80012477,0.6733418264,3656,1 +3657,18277512,1.8379938533,3657,1 +3658,88263423,-0.7778871568,3658,1 +3659,18419455,-0.2148374569,3659,1 +3660,73689530,0.8634560302,3660,1 +3661,59134431,-0.1992096089,3661,1 +3662,24905364,0.8027088915,3662,1 +3663,41596240,0.3057959669,3663,1 +3664,58455870,0.7466799287,3664,1 +3665,89045235,0.1489595604,3665,1 +3666,56207216,-1.0902041696,3666,1 +3667,51969317,-0.2142339762,3667,1 +3668,13164169,0.5523690569,3668,1 +3669,22028252,0.4019337948,3669,1 +3670,26036898,-0.808838005,3670,1 +3671,58926860,0.1366201247,3671,1 +3672,48525820,1.3192761436,3672,1 +3673,65256693,-0.7762921079,3673,1 +3674,57135586,-0.2594966818,3674,1 +3675,47912901,-0.3966987164,3675,1 +3676,67883556,0.6316127151,3676,1 +3677,57037378,2.1103545695,3677,1 +3678,66511639,1.1062673871,3678,1 +3679,10586371,1.9719978354,3679,1 +3680,50022326,1.2879755274,3680,1 +3681,45989780,-1.3564844934,3681,1 +3682,39633078,-0.4945875699,3682,1 +3683,83033265,-0.8779246895,3683,1 +3684,11689878,-1.5383903996,3684,1 +3685,39076306,2.8111337205,3685,1 +3686,63676948,-1.7558240508,3686,1 +3687,43013997,-1.2761077241,3687,1 +3688,36570224,0.4186782804,3688,1 +3689,80164024,0.0965166418,3689,1 +3690,72809820,-0.4376441502,3690,1 +3691,35275695,1.3433708328,3691,1 +3692,26952257,-1.595088946,3692,1 +3693,82298984,-0.1835804018,3693,1 +3694,63340322,-1.0020890427,3694,1 +3695,66380079,0.1235974047,3695,1 +3696,67068652,1.4440880654,3696,1 +3697,47465833,1.3091530328,3697,1 +3698,49751180,-1.6438197794,3698,1 +3699,38944453,-0.8465232029,3699,1 +3700,14161087,0.6592881478,3700,1 +3701,15861846,-1.4035008401,3701,1 +3702,51995608,-0.4385670975,3702,1 +3703,46465287,1.5110144966,3703,1 +3704,45430115,-0.7148342508,3704,1 +3705,23287328,1.213511171,3705,1 +3706,78061020,-1.4213973099,3706,1 +3707,59268478,-1.4518849925,3707,1 +3708,31658137,1.802991224,3708,1 +3709,41924442,-0.2201454893,3709,1 +3710,77611714,0.3720717857,3710,1 +3711,52787606,0.098301855,3711,1 +3712,86252258,-1.0437222883,3712,1 +3713,16762939,-1.4493158964,3713,1 +3714,62723086,1.6475700693,3714,1 +3715,22283083,-0.1160235939,3715,1 +3716,68444553,-0.6914166342,3716,1 +3717,75102847,0.6944755628,3717,1 +3718,28559239,-0.8900428772,3718,1 +3719,57287928,0.5085666762,3719,1 +3720,84794626,-1.303612622,3720,1 +3721,37108805,-0.7220546089,3721,1 +3722,62089105,-0.1675113107,3722,1 +3723,45752618,0.9107622765,3723,1 +3724,19371258,0.4465128503,3724,1 +3725,71225744,1.3135685195,3725,1 +3726,83182174,0.3271366358,3726,1 +3727,20964498,-0.6586201257,3727,1 +3728,57995999,-1.6108768582,3728,1 +3729,24583244,1.2058621869,3729,1 +3730,19772193,-0.0126988611,3730,1 +3731,34302250,0.2331888792,3731,1 +3732,21649670,1.6347019054,3732,1 +3733,44381717,1.1331423613,3733,1 +3734,50972157,1.3968248596,3734,1 +3735,16656069,0.4558341319,3735,1 +3736,85774190,-0.1210642593,3736,1 +3737,23338578,-0.7098667142,3737,1 +3738,61780238,0.5001007655,3738,1 +3739,88707057,-1.1663108747,3739,1 +3740,53643927,1.1123454715,3740,1 +3741,68226334,-0.7429908559,3741,1 +3742,86868086,-0.1725079186,3742,1 +3743,81148047,-0.6392998181,3743,1 +3744,66522598,-1.2157168378,3744,1 +3745,43899164,-1.005926736,3745,1 +3746,15815812,0.0506692159,3746,1 +3747,82749913,-0.0443482512,3747,1 +3748,20200395,-0.0404945955,3748,1 +3749,37130372,-0.3456775234,3749,1 +3750,73667387,1.8629047802,3750,1 +3751,60054708,-1.1234828474,3751,1 +3752,51943517,-1.8489839148,3752,1 +3753,80587631,-1.740019307,3753,1 +3754,77131319,-1.2763613744,3754,1 +3755,20436944,-1.123065579,3755,1 +3756,24256031,-0.1304930764,3756,1 +3757,53270792,0.5807127558,3757,1 +3758,18759206,-0.9402935317,3758,1 +3759,29633789,0.6762177509,3759,1 +3760,85396418,-0.2035327425,3760,1 +3761,60122837,1.7449959875,3761,1 +3762,36098978,0.017847865,3762,1 +3763,33291721,-1.2610315791,3763,1 +3764,68039342,-0.1563736798,3764,1 +3765,26198530,-0.8087780345,3765,1 +3766,52761824,-0.9930442033,3766,1 +3767,22776773,-0.7775622877,3767,1 +3768,49234672,-1.2230980357,3768,1 +3769,51318763,0.4961318272,3769,1 +3770,21676186,-0.2852249334,3770,1 +3771,68567624,0.2937933839,3771,1 +3772,54326969,-0.5878145817,3772,1 +3773,71922214,0.3212380208,3773,1 +3774,29804925,-0.5861335637,3774,1 +3775,25674377,0.5904245662,3775,1 +3776,62940807,-1.1293486752,3776,1 +3777,64272655,-0.6189879594,3777,1 +3778,61081642,0.1764687797,3778,1 +3779,43878175,0.0522532883,3779,1 +3780,39744868,-0.1488218303,3780,1 +3781,14086117,1.0809552678,3781,1 +3782,70963214,-1.2818037483,3782,1 +3783,26255499,-2.0744230054,3783,1 +3784,83950240,1.1211802263,3784,1 +3785,34197311,0.2288877187,3785,1 +3786,68276688,-0.5090595771,3786,1 +3787,22840107,-0.8480397261,3787,1 +3788,46948651,0.1286027533,3788,1 +3789,29681515,0.3740486217,3789,1 +3790,68101924,-1.5204433472,3790,1 +3791,15501885,-2.134794194,3791,1 +3792,87787874,0.7300962583,3792,1 +3793,47918935,0.269163781,3793,1 +3794,38433853,-0.896170916,3794,1 +3795,79538396,1.0249099715,3795,1 +3796,61762497,0.8494879994,3796,1 +3797,82577216,-0.4744929914,3797,1 +3798,40660246,0.2174081102,3798,1 +3799,59784353,0.1054243666,3799,1 +3800,50519196,0.4159656861,3800,1 +3801,41366953,0.0576603043,3801,1 +3802,28828730,0.434329218,3802,1 +3803,62922233,-0.675322696,3803,1 +3804,52566612,-0.7553167094,3804,1 +3805,86469488,0.061180137,3805,1 +3806,25816640,0.2893238128,3806,1 +3807,13680162,0.2287829154,3807,1 +3808,12413643,-0.9101029355,3808,1 +3809,72204456,1.6028345191,3809,1 +3810,81420120,-1.0952199224,3810,1 +3811,28526114,1.8210700719,3811,1 +3812,57546516,0.246725425,3812,1 +3813,49697722,1.2362191743,3813,1 +3814,48582214,-0.4704727409,3814,1 +3815,52370411,0.6589619116,3815,1 +3816,68851450,1.3244007287,3816,1 +3817,27130188,-0.2494283689,3817,1 +3818,22991295,-0.4162060095,3818,1 +3819,56748032,0.072699283,3819,1 +3820,24309758,-1.202643032,3820,1 +3821,54088848,0.481703158,3821,1 +3822,34234714,-1.8269905468,3822,1 +3823,47843765,-0.7903916101,3823,1 +3824,60722111,1.85639697,3824,1 +3825,35193983,0.1800544814,3825,1 +3826,65803170,0.4913769601,3826,1 +3827,69824537,-1.3821140546,3827,1 +3828,55235203,-0.9178749179,3828,1 +3829,75262211,2.1233446305,3829,1 +3830,19850955,-0.9132371921,3830,1 +3831,63238244,0.3792220202,3831,1 +3832,10236830,1.185517635,3832,1 +3833,73214239,-0.6107772512,3833,1 +3834,71031099,0.9182765489,3834,1 +3835,14373199,-1.9806083707,3835,1 +3836,38475107,0.7815488471,3836,1 +3837,76875471,0.1717038029,3837,1 +3838,42639804,1.5023655561,3838,1 +3839,20873172,-0.0659962799,3839,1 +3840,64381072,-0.7161637812,3840,1 +3841,53528238,-0.9941668465,3841,1 +3842,36240004,-0.9964299236,3842,1 +3843,56999253,0.1974365701,3843,1 +3844,69250092,-0.9308786271,3844,1 +3845,47481687,-0.7360211541,3845,1 +3846,36604053,-0.6924243386,3846,1 +3847,62794147,-0.468398179,3847,1 +3848,23737919,-0.0784573447,3848,1 +3849,65666637,0.5504321604,3849,1 +3850,64228600,1.4027752762,3850,1 +3851,39219503,0.5251254644,3851,1 +3852,26238343,-0.2623622317,3852,1 +3853,83778283,0.0787514062,3853,1 +3854,28258131,0.8650890951,3854,1 +3855,14721287,-1.8195779431,3855,1 +3856,55545378,-0.019787361,3856,1 +3857,21733950,-1.01752107,3857,1 +3858,28628894,-0.9732796064,3858,1 +3859,60802059,0.815490778,3859,1 +3860,84316419,0.7864651848,3860,1 +3861,76965349,-0.4232502959,3861,1 +3862,70454875,1.232712603,3862,1 +3863,39725428,0.3905691978,3863,1 +3864,46223878,-0.7254832409,3864,1 +3865,81584446,0.73673651,3865,1 +3866,38537799,0.4803259955,3866,1 +3867,46523955,1.4986625586,3867,1 +3868,11683433,0.6445920945,3868,1 +3869,74665157,-0.3466932233,3869,1 +3870,61664297,-1.2739840022,3870,1 +3871,65772114,-0.6172391317,3871,1 +3872,14399479,1.791905518,3872,1 +3873,37009619,0.5710361255,3873,1 +3874,66827116,0.1895702515,3874,1 +3875,80541123,0.1588350701,3875,1 +3876,33522821,1.4855183862,3876,1 +3877,56123992,2.0235044972,3877,1 +3878,44284898,-0.1435212682,3878,1 +3879,67194411,1.2324770211,3879,1 +3880,55214351,0.1146748794,3880,1 +3881,50972411,1.2184887063,3881,1 +3882,79417489,-0.8580890626,3882,1 +3883,71938895,1.8688422686,3883,1 +3884,73144910,-0.3061338094,3884,1 +3885,64951088,0.6218426777,3885,1 +3886,66581919,1.9569460392,3886,1 +3887,34719293,-1.080695064,3887,1 +3888,35984076,0.8444639861,3888,1 +3889,40993664,-0.7472646946,3889,1 +3890,15691712,-1.5634728674,3890,1 +3891,82978278,0.846627723,3891,1 +3892,35827435,-0.1055594399,3892,1 +3893,66389100,-0.3114072288,3893,1 +3894,82901070,-0.2601410841,3894,1 +3895,46030962,-0.7648295366,3895,1 +3896,76838020,-0.9786100114,3896,1 +3897,69861195,0.2823609549,3897,1 +3898,32847512,0.4781423476,3898,1 +3899,80050399,0.712974438,3899,1 +3900,12536450,-0.4076937622,3900,1 +3901,70467027,-1.7433831551,3901,1 +3902,20372004,-1.0059303967,3902,1 +3903,25439855,0.2101467185,3903,1 +3904,58362909,-0.821178033,3904,1 +3905,31760260,0.3371465264,3905,1 +3906,85818663,-0.5235165257,3906,1 +3907,28183479,-0.0536154835,3907,1 +3908,78696694,0.4108581161,3908,1 +3909,35129706,0.5343940034,3909,1 +3910,85927049,-0.9579614145,3910,1 +3911,74797084,-0.3849283619,3911,1 +3912,36451491,-0.2552388717,3912,1 +3913,66783097,0.7306591391,3913,1 +3914,11494498,-0.1911718386,3914,1 +3915,81704140,0.7354077777,3915,1 +3916,73621730,1.3866155601,3916,1 +3917,61087151,-0.1908090178,3917,1 +3918,43688509,1.8992681087,3918,1 +3919,67914056,-0.3068714222,3919,1 +3920,46632960,-0.2800263243,3920,1 +3921,39251743,-2.591419096,3921,1 +3922,80406553,1.0196884381,3922,1 +3923,57720405,0.4796790309,3923,1 +3924,49462187,0.332987344,3924,1 +3925,56701720,0.0501199274,3925,1 +3926,77374162,0.6847276289,3926,1 +3927,87295598,0.6227640364,3927,1 +3928,11705583,-1.1939271241,3928,1 +3929,27047866,-1.1446320145,3929,1 +3930,65960060,0.658426673,3930,1 +3931,69897534,0.6317594758,3931,1 +3932,89266269,1.0944139675,3932,1 +3933,19680029,0.085267382,3933,1 +3934,80057002,-1.6444155172,3934,1 +3935,36584660,1.5469531401,3935,1 +3936,69410776,-0.1297890796,3936,1 +3937,24276714,-0.2202308548,3937,1 +3938,14261561,0.4572229169,3938,1 +3939,39705691,0.1025337609,3939,1 +3940,41935389,-0.8327242444,3940,1 +3941,76900727,0.1160739374,3941,1 +3942,59549205,-0.8476924017,3942,1 +3943,85655287,0.5312813817,3943,1 +3944,10843756,-0.9166909926,3944,1 +3945,79886715,-1.1274427705,3945,1 +3946,19662145,-0.7767917136,3946,1 +3947,86957790,1.0141385386,3947,1 +3948,86947139,0.367425049,3948,1 +3949,56415884,-0.0291914051,3949,1 +3950,58099659,-0.5644876808,3950,1 +3951,26906936,0.2944715773,3951,1 +3952,20911289,1.0317917954,3952,1 +3953,48268824,-0.2581877459,3953,1 +3954,34109262,-0.2166949522,3954,1 +3955,71015604,1.8053006054,3955,1 +3956,79643469,0.2518153643,3956,1 +3957,74297389,-1.7669879572,3957,1 +3958,46439151,1.1947110314,3958,1 +3959,59846734,-1.1876416231,3959,1 +3960,82749187,0.9556321276,3960,1 +3961,26847833,1.0457458014,3961,1 +3962,53989637,0.0936328504,3962,1 +3963,40124480,-0.3968584754,3963,1 +3964,47165475,-0.5253574117,3964,1 +3965,64161438,-1.0812875907,3965,1 +3966,16547948,0.7226559572,3966,1 +3967,14602932,0.1835044357,3967,1 +3968,17839722,0.7322060202,3968,1 +3969,35979765,-0.5525393945,3969,1 +3970,50972108,0.0406346587,3970,1 +3971,35944188,0.0521798574,3971,1 +3972,24036920,0.5134248571,3972,1 +3973,37707421,1.5554551677,3973,1 +3974,26591393,-0.05476144,3974,1 +3975,82352633,0.7603965967,3975,1 +3976,24235748,-0.9244356404,3976,1 +3977,34174950,-0.2822606481,3977,1 +3978,43068421,0.4451511781,3978,1 +3979,30677289,-0.0485174323,3979,1 +3980,12261108,-0.7868553009,3980,1 +3981,72670883,0.7557390105,3981,1 +3982,24308005,1.3190624087,3982,1 +3983,51661313,-0.8342182129,3983,1 +3984,57423989,-0.88576619,3984,1 +3985,83059831,0.2677839564,3985,1 +3986,30964618,0.5553053787,3986,1 +3987,60221341,0.6739144566,3987,1 +3988,73321579,1.3374825935,3988,1 +3989,60825951,2.4384843643,3989,1 +3990,40504844,-1.5678114013,3990,1 +3991,31546652,0.6307642633,3991,1 +3992,46148956,1.0351482837,3992,1 +3993,35186460,-3.0639174626,3993,1 +3994,68955146,1.2200829031,3994,1 +3995,19813149,1.8096360761,3995,1 +3996,62800705,1.0606426991,3996,1 +3997,10681632,-1.8963998548,3997,1 +3998,30869040,-0.388077808,3998,1 +3999,37755827,1.2095972353,3999,1 +4000,39992989,-1.992647501,4000,2 +4001,68335847,-0.7853526269,4001,2 +4002,71953761,0.6637196978,4002,2 +4003,25550196,0.2290865051,4003,2 +4004,44317074,-0.1058148778,4004,2 +4005,53479593,0.5075010131,4005,2 +4006,85430967,1.3716187689,4006,2 +4007,10670773,0.1901825229,4007,2 +4008,10024150,-0.8068796234,4008,2 +4009,13071432,-1.0701469054,4009,2 +4010,41922764,0.063091699,4010,2 +4011,84226745,-0.3356521722,4011,2 +4012,79862826,-1.1852921684,4012,2 +4013,69621644,-0.9726013665,4013,2 +4014,20458204,0.3319095101,4014,2 +4015,71483037,0.0509206701,4015,2 +4016,63933352,-0.8711437824,4016,2 +4017,54677353,-0.7614433306,4017,2 +4018,65498883,0.0685568312,4018,2 +4019,52591125,-0.3767148852,4019,2 +4020,40393814,1.1456196679,4020,2 +4021,41832082,0.7832479183,4021,2 +4022,69330172,0.8973324345,4022,2 +4023,32496210,0.9112199659,4023,2 +4024,39478894,-0.1983416681,4024,2 +4025,38181431,-1.2160375614,4025,2 +4026,35706793,1.4069561251,4026,2 +4027,33782645,-0.1105437319,4027,2 +4028,23162871,-0.9244413577,4028,2 +4029,52733777,-0.2196026458,4029,2 +4030,33867516,-0.7213667158,4030,2 +4031,36509594,-0.3901679915,4031,2 +4032,50163530,0.5178786698,4032,2 +4033,67056953,1.633238965,4033,2 +4034,59686309,0.6986000496,4034,2 +4035,81214902,-1.0374213653,4035,2 +4036,45224008,-0.0155712884,4036,2 +4037,14326461,-1.108910911,4037,2 +4038,31942510,-0.5125988775,4038,2 +4039,38873519,0.6286921402,4039,2 +4040,78857709,-0.6706566601,4040,2 +4041,34425145,0.1425574528,4041,2 +4042,67119110,1.1403122343,4042,2 +4043,89525101,-0.5270322091,4043,2 +4044,16972700,0.7449683251,4044,2 +4045,39708421,0.0442362751,4045,2 +4046,60319276,-0.0563841066,4046,2 +4047,73811001,-0.6649012807,4047,2 +4048,50419562,-0.2740833879,4048,2 +4049,24939415,-1.0513431959,4049,2 +4050,12003999,-1.525584528,4050,2 +4051,57167574,0.7544658748,4051,2 +4052,42602946,0.6630733955,4052,2 +4053,58619658,-0.3170639419,4053,2 +4054,27073636,0.6322971023,4054,2 +4055,65171978,1.7914638044,4055,2 +4056,61680540,0.5931006735,4056,2 +4057,81884431,-0.2389657623,4057,2 +4058,22277046,-0.9035505994,4058,2 +4059,81098659,1.0055073287,4059,2 +4060,25209421,1.3282506021,4060,2 +4061,78185401,0.1881107851,4061,2 +4062,24811986,1.0843187516,4062,2 +4063,83835565,-0.338635522,4063,2 +4064,61459393,-0.1339794958,4064,2 +4065,10178034,-0.1030285541,4065,2 +4066,82026538,0.9726960135,4066,2 +4067,51151085,-0.9092614015,4067,2 +4068,68986327,0.3994286214,4068,2 +4069,44516479,0.7568542806,4069,2 +4070,84544597,0.0738523122,4070,2 +4071,43283099,0.7884258983,4071,2 +4072,53435612,-0.1343737058,4072,2 +4073,50733185,2.2383597794,4073,2 +4074,66420990,0.4619261689,4074,2 +4075,48826611,0.3001619659,4075,2 +4076,12266649,-0.2319358308,4076,2 +4077,72388558,-0.5566660131,4077,2 +4078,66089422,1.1717390757,4078,2 +4079,58840527,0.6342500169,4079,2 +4080,87628272,-1.6420085645,4080,2 +4081,75768958,-0.1469608665,4081,2 +4082,79355895,0.1412659261,4082,2 +4083,48366552,0.7223044333,4083,2 +4084,11140190,-0.7886946338,4084,2 +4085,30398833,1.1072981845,4085,2 +4086,62781118,-0.6308222231,4086,2 +4087,28994134,-0.2763258021,4087,2 +4088,67487428,-0.5013148206,4088,2 +4089,72034583,-0.2474578305,4089,2 +4090,53516889,1.4204567889,4090,2 +4091,48361619,-0.2339443124,4091,2 +4092,81253173,0.4268681611,4092,2 +4093,18964138,0.3144329022,4093,2 +4094,84417052,-0.2134548915,4094,2 +4095,12213909,1.1595841489,4095,2 +4096,84778065,0.6266622092,4096,2 +4097,58725244,-0.1518207854,4097,2 +4098,37632248,1.1269369478,4098,2 +4099,26602412,-1.2322809236,4099,2 +4100,11429744,1.0195593252,4100,2 +4101,72457632,0.1002324607,4101,2 +4102,80853753,0.6970951794,4102,2 +4103,76713238,0.8087653999,4103,2 +4104,79910520,1.1433334168,4104,2 +4105,17511658,0.5731252232,4105,2 +4106,63407180,1.2725619279,4106,2 +4107,20170391,1.6483046155,4107,2 +4108,79563828,-0.0416415731,4108,2 +4109,85873255,-1.2725271692,4109,2 +4110,77880536,0.9013268242,4110,2 +4111,68152013,0.0251271539,4111,2 +4112,77323375,-0.5927739411,4112,2 +4113,19676008,-1.9749625891,4113,2 +4114,36731049,1.2934754926,4114,2 +4115,12862455,0.5629263077,4115,2 +4116,73082438,-1.7183987962,4116,2 +4117,82519846,2.2888654446,4117,2 +4118,40642311,-0.2966698333,4118,2 +4119,83975994,-0.1904905485,4119,2 +4120,59404765,0.2106982146,4120,2 +4121,75812188,0.2365250861,4121,2 +4122,69411896,-1.3688577467,4122,2 +4123,53880538,1.4087968686,4123,2 +4124,31149943,0.2483866393,4124,2 +4125,74017119,-0.1492956159,4125,2 +4126,41127809,-0.7129805716,4126,2 +4127,26658452,2.3644585163,4127,2 +4128,80568984,0.3615392447,4128,2 +4129,44636026,0.1161487994,4129,2 +4130,71961327,1.4350120059,4130,2 +4131,66202837,1.6010113,4131,2 +4132,68035083,0.5784609108,4132,2 +4133,16720026,0.8756292963,4133,2 +4134,50547248,-0.6901282849,4134,2 +4135,61888149,-0.8467167564,4135,2 +4136,36950886,0.8321759896,4136,2 +4137,28800375,-2.0332367275,4137,2 +4138,55331383,0.4032134469,4138,2 +4139,14038206,0.006456696,4139,2 +4140,62897874,-0.480165061,4140,2 +4141,63419226,-1.5033367484,4141,2 +4142,73678664,-0.5002602516,4142,2 +4143,51992608,1.3971830512,4143,2 +4144,34920829,-0.1676826052,4144,2 +4145,22525432,1.0347048779,4145,2 +4146,33984537,0.7682797328,4146,2 +4147,71496573,-1.2752571921,4147,2 +4148,49842034,0.7364469603,4148,2 +4149,33469403,-1.1482657705,4149,2 +4150,54805098,-0.3734640173,4150,2 +4151,32226352,0.9106824698,4151,2 +4152,59589404,-1.2669193861,4152,2 +4153,36522307,-0.2506070625,4153,2 +4154,16298599,-0.6470122972,4154,2 +4155,41471444,0.6007607758,4155,2 +4156,59953064,-0.3896607423,4156,2 +4157,17703184,1.1121649004,4157,2 +4158,30784597,-0.5546946667,4158,2 +4159,27565850,0.2830178026,4159,2 +4160,18189962,-1.5651469119,4160,2 +4161,45039682,-0.7496471058,4161,2 +4162,49226955,-0.1601124229,4162,2 +4163,28314891,-1.5368855473,4163,2 +4164,74075558,-0.4216983971,4164,2 +4165,80432316,-1.1804667072,4165,2 +4166,86377409,1.2909512379,4166,2 +4167,20328195,1.4584294204,4167,2 +4168,16549956,0.9151420642,4168,2 +4169,88129113,-0.0152524904,4169,2 +4170,15460469,0.204318221,4170,2 +4171,16435136,1.0683310795,4171,2 +4172,82918190,-0.6779202974,4172,2 +4173,52390457,1.4169689899,4173,2 +4174,34710360,0.5633987194,4174,2 +4175,69322852,0.9533708014,4175,2 +4176,59885901,-1.1884630367,4176,2 +4177,26783872,0.5497071424,4177,2 +4178,42505143,-0.0230027139,4178,2 +4179,48242103,-0.0379353099,4179,2 +4180,45793234,-0.5195719575,4180,2 +4181,25282890,-1.8543943302,4181,2 +4182,12238763,0.5717579305,4182,2 +4183,56366732,0.5894332221,4183,2 +4184,59434074,0.446150153,4184,2 +4185,75626738,0.5171246236,4185,2 +4186,47017021,1.0047722745,4186,2 +4187,65035453,-0.0483301104,4187,2 +4188,58081422,0.1534997259,4188,2 +4189,80217311,-0.8642325956,4189,2 +4190,38793344,-1.1152132385,4190,2 +4191,41020175,-2.1910303388,4191,2 +4192,67033409,0.0598300745,4192,2 +4193,18420334,1.4115419131,4193,2 +4194,87626546,-0.7255476311,4194,2 +4195,58766540,-0.7164584191,4195,2 +4196,33501985,2.1870388629,4196,2 +4197,64168736,0.6789006891,4197,2 +4198,19463620,0.1534138549,4198,2 +4199,18748778,0.8893505107,4199,2 +4200,43578867,0.34448245,4200,2 +4201,64674135,0.8285584991,4201,2 +4202,25298395,0.282899951,4202,2 +4203,61196976,-1.6240020535,4203,2 +4204,57580174,0.2072439378,4204,2 +4205,52676646,1.923878458,4205,2 +4206,48832823,0.4424469958,4206,2 +4207,87558425,1.2868267168,4207,2 +4208,11853616,0.3394208984,4208,2 +4209,79802411,-1.8821767795,4209,2 +4210,22876404,1.2811798017,4210,2 +4211,62331406,0.8180753521,4211,2 +4212,35544866,-0.6380437475,4212,2 +4213,26043617,-2.0061970349,4213,2 +4214,71602352,-0.8899568849,4214,2 +4215,73433919,-1.2414265983,4215,2 +4216,63221400,0.5515097892,4216,2 +4217,20823062,-1.5026898307,4217,2 +4218,88531414,1.0172824614,4218,2 +4219,53130145,1.2207185024,4219,2 +4220,74242225,-0.2858087044,4220,2 +4221,81044951,-0.9239908926,4221,2 +4222,31683133,-0.7420289091,4222,2 +4223,48811214,0.6199533334,4223,2 +4224,56393674,-1.1387931823,4224,2 +4225,67193689,1.8059458316,4225,2 +4226,42547501,0.0023533539,4226,2 +4227,31730208,0.8481305101,4227,2 +4228,83440423,0.0250145871,4228,2 +4229,38299150,-0.1436628195,4229,2 +4230,83897422,-0.5273843895,4230,2 +4231,57137696,0.2713022826,4231,2 +4232,68734089,0.5479466508,4232,2 +4233,19838456,-1.404899391,4233,2 +4234,79176179,0.4499616698,4234,2 +4235,42227162,1.2042078186,4235,2 +4236,73587028,0.4656762823,4236,2 +4237,38245009,-0.1311266584,4237,2 +4238,52742599,1.4404864606,4238,2 +4239,36134198,-0.5130218568,4239,2 +4240,10339016,0.0712994864,4240,2 +4241,50352999,0.2901210292,4241,2 +4242,44675828,0.9557338024,4242,2 +4243,45426673,-0.0190378471,4243,2 +4244,59521440,0.5084419198,4244,2 +4245,13456274,0.3611074061,4245,2 +4246,38315321,-0.244640261,4246,2 +4247,21191451,0.2480279664,4247,2 +4248,75034020,0.0241876725,4248,2 +4249,83156026,-1.4489310991,4249,2 +4250,89891173,-0.0160324431,4250,2 +4251,62073511,-1.1698381554,4251,2 +4252,61322858,0.6945054494,4252,2 +4253,55171775,2.4856433196,4253,2 +4254,55019521,1.8668193454,4254,2 +4255,20644073,0.5818354437,4255,2 +4256,58476160,-0.5298273413,4256,2 +4257,38113142,2.2587142609,4257,2 +4258,74916456,1.1625892146,4258,2 +4259,19237975,0.752449883,4259,2 +4260,35383416,-0.309340949,4260,2 +4261,51719141,-0.8608080685,4261,2 +4262,88095466,-1.2833016716,4262,2 +4263,89595080,1.1173357999,4263,2 +4264,86501137,-0.2892180195,4264,2 +4265,53547210,-0.8413026309,4265,2 +4266,58178586,0.3080324474,4266,2 +4267,69302293,1.8454951627,4267,2 +4268,49353620,-0.5459823597,4268,2 +4269,31615855,-1.5858205366,4269,2 +4270,76990865,-0.434232215,4270,2 +4271,89965857,-0.7352597656,4271,2 +4272,56693918,0.8853418257,4272,2 +4273,41320013,0.7199196327,4273,2 +4274,77990267,0.1524378025,4274,2 +4275,78229096,-0.0673234617,4275,2 +4276,61185311,1.2473243325,4276,2 +4277,42073990,-1.2048687092,4277,2 +4278,87091260,0.5119018468,4278,2 +4279,70942709,-0.009797057,4279,2 +4280,32524377,0.0558501433,4280,2 +4281,25245714,-0.5856027875,4281,2 +4282,26002842,-1.710230723,4282,2 +4283,38952574,-0.7648481645,4283,2 +4284,16273994,0.6030348803,4284,2 +4285,70522363,0.4558347714,4285,2 +4286,66088919,-0.1827758385,4286,2 +4287,57675360,1.2570476622,4287,2 +4288,52922349,-1.5744166423,4288,2 +4289,68428179,-0.5917862731,4289,2 +4290,64245314,0.212738397,4290,2 +4291,71852093,-0.181272501,4291,2 +4292,43349839,0.0697656871,4292,2 +4293,55786003,0.8129204991,4293,2 +4294,70416985,0.3091476551,4294,2 +4295,43106914,1.5045341394,4295,2 +4296,25050639,-1.6029828918,4296,2 +4297,43960237,-1.1569675601,4297,2 +4298,24219049,-0.7598388868,4298,2 +4299,89111762,-1.1910308443,4299,2 +4300,11173848,-2.2366761324,4300,2 +4301,65921584,-0.6490047957,4301,2 +4302,40006632,0.7784857042,4302,2 +4303,36685339,-1.1359277075,4303,2 +4304,10517444,-1.5527200359,4304,2 +4305,11201426,-0.3032341947,4305,2 +4306,29745604,-1.1030120162,4306,2 +4307,56096065,-0.9619226615,4307,2 +4308,50181169,-1.2902296126,4308,2 +4309,81277866,-0.6048488136,4309,2 +4310,58172161,-0.3466635831,4310,2 +4311,76152413,1.2967002429,4311,2 +4312,47428124,-1.0288390995,4312,2 +4313,45647434,1.2177158418,4313,2 +4314,21878291,0.4078463582,4314,2 +4315,28224558,-0.3856685153,4315,2 +4316,53086784,0.3458360472,4316,2 +4317,87328186,1.3113297084,4317,2 +4318,89859464,-0.0269233895,4318,2 +4319,24355902,-0.8031071432,4319,2 +4320,28554821,-1.3555441167,4320,2 +4321,51113321,0.3253511519,4321,2 +4322,70655587,-2.2308259271,4322,2 +4323,56372565,1.263378376,4323,2 +4324,85042947,-0.3267084112,4324,2 +4325,39665233,0.8015920649,4325,2 +4326,20587392,0.0997529319,4326,2 +4327,22866030,-0.5598698026,4327,2 +4328,68418955,1.6287864296,4328,2 +4329,36712871,-1.7771205861,4329,2 +4330,51635277,0.2982911376,4330,2 +4331,72749437,0.6700838007,4331,2 +4332,31669992,0.7871104921,4332,2 +4333,36890787,-1.734490202,4333,2 +4334,76474762,0.9155587671,4334,2 +4335,88815601,-1.6179640206,4335,2 +4336,45630330,2.2474696014,4336,2 +4337,22905254,0.4380863859,4337,2 +4338,52736414,1.0177262306,4338,2 +4339,58398501,0.0328600096,4339,2 +4340,14020981,0.4676129943,4340,2 +4341,19293665,0.1153203026,4341,2 +4342,86644885,0.6072507075,4342,2 +4343,30126584,-1.0859433748,4343,2 +4344,73704352,1.1625830401,4344,2 +4345,84155590,0.6413346297,4345,2 +4346,87701468,-0.3292829744,4346,2 +4347,50011503,0.5241536553,4347,2 +4348,81227573,0.0106587434,4348,2 +4349,80756084,0.8565043488,4349,2 +4350,61818804,0.1414022063,4350,2 +4351,75324186,1.1477258932,4351,2 +4352,17151232,-0.6278330011,4352,2 +4353,11481258,-0.744965415,4353,2 +4354,46865111,2.3980679555,4354,2 +4355,33479450,-0.1165049997,4355,2 +4356,52928193,-0.5583562947,4356,2 +4357,73709120,-0.5632411065,4357,2 +4358,35824474,-0.703162047,4358,2 +4359,58819533,-0.6577779497,4359,2 +4360,88908744,0.4671014167,4360,2 +4361,66459041,0.1676628977,4361,2 +4362,66855969,0.1339887106,4362,2 +4363,68367161,0.6651927219,4363,2 +4364,74390105,-0.7159172179,4364,2 +4365,26652776,-0.4421823756,4365,2 +4366,24631511,0.5165700748,4366,2 +4367,50200821,-0.313931034,4367,2 +4368,78421459,1.2544380709,4368,2 +4369,82301139,-1.3842359383,4369,2 +4370,86344622,0.4953118647,4370,2 +4371,28054715,-0.2093659861,4371,2 +4372,35583263,-2.2003472658,4372,2 +4373,26516233,-0.7016323274,4373,2 +4374,45179935,-0.6316684094,4374,2 +4375,77396650,-1.2230850379,4375,2 +4376,36909824,0.7804906563,4376,2 +4377,59612081,0.7030193691,4377,2 +4378,20533922,-0.5601121041,4378,2 +4379,38533732,-0.9989972793,4379,2 +4380,78849056,0.5997269646,4380,2 +4381,18878843,-0.2671601115,4381,2 +4382,71630870,-1.7998638823,4382,2 +4383,59314151,-0.361164548,4383,2 +4384,88836501,0.7046809657,4384,2 +4385,69726117,1.2483123703,4385,2 +4386,70951653,-0.8464424863,4386,2 +4387,28640698,-0.6385427487,4387,2 +4388,26888365,-1.4077593412,4388,2 +4389,26218749,-0.2487059035,4389,2 +4390,53525503,0.0906203564,4390,2 +4391,65446877,0.6214925162,4391,2 +4392,52389696,-0.4992271816,4392,2 +4393,23830338,0.4146860825,4393,2 +4394,64568599,-0.0021508397,4394,2 +4395,76722835,-1.2409299488,4395,2 +4396,75370884,0.3082199471,4396,2 +4397,14299333,-0.6619357168,4397,2 +4398,33270364,-1.3998976963,4398,2 +4399,34056510,-0.8961204271,4399,2 +4400,37571458,1.2149444404,4400,2 +4401,59326905,0.1649467427,4401,2 +4402,28706928,-0.9744416801,4402,2 +4403,17504319,0.3773049249,4403,2 +4404,35341539,-1.802315228,4404,2 +4405,13397462,0.2129462657,4405,2 +4406,72539632,2.2243728629,4406,2 +4407,40771560,-0.4825997484,4407,2 +4408,84174388,-0.5618379397,4408,2 +4409,81807417,-0.1122090405,4409,2 +4410,73192220,-2.4512536179,4410,2 +4411,45214810,-1.8412244776,4411,2 +4412,80094668,0.3048646664,4412,2 +4413,34643745,2.0252288878,4413,2 +4414,26012853,-1.4530075836,4414,2 +4415,83832667,0.8735975438,4415,2 +4416,28903595,0.8595636149,4416,2 +4417,82680375,0.5927817295,4417,2 +4418,59308030,0.5222583052,4418,2 +4419,69093157,-1.052892575,4419,2 +4420,70548779,-0.8863958671,4420,2 +4421,69979936,-2.1907264415,4421,2 +4422,60393762,1.9091930755,4422,2 +4423,25631864,1.4107178616,4423,2 +4424,86904942,1.3882302873,4424,2 +4425,32459823,-0.5031298193,4425,2 +4426,82251388,0.2004253952,4426,2 +4427,68363924,0.2296574944,4427,2 +4428,80817663,-1.3021613536,4428,2 +4429,56376398,-1.6751826142,4429,2 +4430,45123059,0.7038480071,4430,2 +4431,81495812,-1.8560586097,4431,2 +4432,75876784,0.2864228213,4432,2 +4433,68643715,2.8862682101,4433,2 +4434,51488288,0.3640041388,4434,2 +4435,20870451,1.0117776253,4435,2 +4436,82492684,-0.6780262627,4436,2 +4437,56981258,0.9032171332,4437,2 +4438,18357697,0.4677141368,4438,2 +4439,77639030,0.956423996,4439,2 +4440,15300855,0.678558588,4440,2 +4441,39292338,1.2905348436,4441,2 +4442,22928670,-0.5263695605,4442,2 +4443,44288888,2.4733477088,4443,2 +4444,14856441,0.9873023537,4444,2 +4445,13932731,1.9544410518,4445,2 +4446,61552529,0.3490847968,4446,2 +4447,45810218,0.0117687228,4447,2 +4448,58961374,-0.2835855796,4448,2 +4449,55005999,1.8274789577,4449,2 +4450,74461512,1.0926977603,4450,2 +4451,34542760,2.1557940036,4451,2 +4452,39899366,-0.3947900202,4452,2 +4453,33741722,-1.1306842817,4453,2 +4454,10747604,-0.1472969663,4454,2 +4455,31600536,-1.1767132384,4455,2 +4456,15275510,-0.3310756848,4456,2 +4457,15007424,-1.064626585,4457,2 +4458,35615263,0.7484786325,4458,2 +4459,16923046,0.2782470721,4459,2 +4460,50750830,0.3356452531,4460,2 +4461,76830505,0.4492921276,4461,2 +4462,75381488,1.4779375127,4462,2 +4463,37918967,-1.692807811,4463,2 +4464,88705113,0.4366921948,4464,2 +4465,32932765,-0.5261930376,4465,2 +4466,31515118,-0.3153840819,4466,2 +4467,68507498,-0.118035908,4467,2 +4468,52982406,-0.7147984718,4468,2 +4469,37985822,-1.3333840422,4469,2 +4470,18700981,-1.0948638547,4470,2 +4471,83148236,-2.0055372402,4471,2 +4472,74066865,1.6788976722,4472,2 +4473,70590028,1.5100657035,4473,2 +4474,27118524,0.1915628595,4474,2 +4475,53363356,0.3172004025,4475,2 +4476,38529327,0.5069167874,4476,2 +4477,62011905,-1.4649387054,4477,2 +4478,74373946,0.8610442942,4478,2 +4479,14990445,1.4507549549,4479,2 +4480,41984757,-0.1865783503,4480,2 +4481,85203556,0.4806094247,4481,2 +4482,77474440,1.1543337597,4482,2 +4483,57399915,-1.9264797554,4483,2 +4484,57665501,0.7770508728,4484,2 +4485,21710546,0.363774575,4485,2 +4486,25252870,-1.1928592377,4486,2 +4487,19330953,0.003749993,4487,2 +4488,12375722,-1.426434208,4488,2 +4489,38765080,1.1329524409,4489,2 +4490,21511620,1.3055891053,4490,2 +4491,49757403,-0.120675083,4491,2 +4492,18008807,0.7482306194,4492,2 +4493,30822298,0.1565055497,4493,2 +4494,52400586,0.774963944,4494,2 +4495,55402796,-0.741479278,4495,2 +4496,51689856,0.7467630677,4496,2 +4497,13674516,-0.351011582,4497,2 +4498,30910563,0.5481219153,4498,2 +4499,22026232,-0.9215239316,4499,2 +4500,20318271,-2.7317761568,4500,2 +4501,64136659,-0.6355371718,4501,2 +4502,83016365,-0.9873742164,4502,2 +4503,33275966,1.2530477379,4503,2 +4504,53927470,-0.3813348286,4504,2 +4505,88482128,-0.2860967419,4505,2 +4506,45424309,-1.0486296878,4506,2 +4507,27150958,1.3188581154,4507,2 +4508,87660048,0.1045788529,4508,2 +4509,59731855,-0.10948184,4509,2 +4510,51989368,-0.6586654507,4510,2 +4511,69351413,0.2363286434,4511,2 +4512,80895552,1.1207280676,4512,2 +4513,15130507,1.7106387781,4513,2 +4514,32225731,-0.7823129144,4514,2 +4515,75205087,0.3638337256,4515,2 +4516,84443726,-0.9866738201,4516,2 +4517,71361260,-1.5457109668,4517,2 +4518,57506779,-0.2479745883,4518,2 +4519,25088342,1.0999624828,4519,2 +4520,79321668,-0.2954546444,4520,2 +4521,16911895,-1.0399320154,4521,2 +4522,71559677,-0.4010070571,4522,2 +4523,24537399,0.0856979037,4523,2 +4524,59842626,-0.99334459,4524,2 +4525,42548716,1.6358046094,4525,2 +4526,30930409,-2.0907728339,4526,2 +4527,35265715,-0.0680643727,4527,2 +4528,62951731,-0.5698734158,4528,2 +4529,14440058,-0.4621440008,4529,2 +4530,18352050,0.0217436511,4530,2 +4531,27188689,0.2645393389,4531,2 +4532,45351118,0.0175164726,4532,2 +4533,44553293,1.0125813415,4533,2 +4534,28132355,-1.2639774272,4534,2 +4535,45589116,0.4095946107,4535,2 +4536,39842691,-0.081532828,4536,2 +4537,40345440,0.8690882035,4537,2 +4538,52093540,-0.8494918014,4538,2 +4539,54893554,-1.499760269,4539,2 +4540,19157411,0.6863712457,4540,2 +4541,49055001,0.4718253664,4541,2 +4542,45333301,-1.2685459876,4542,2 +4543,66676754,-0.3153622022,4543,2 +4544,69695800,0.1771958189,4544,2 +4545,45193305,-0.5502120844,4545,2 +4546,18667291,-1.8597071063,4546,2 +4547,10256262,-0.4504724801,4547,2 +4548,79693434,-0.7316068952,4548,2 +4549,63835832,0.9170687908,4549,2 +4550,87127517,-0.4935981976,4550,2 +4551,30622881,-0.6915677652,4551,2 +4552,50684280,0.8149917024,4552,2 +4553,40211538,1.3110579544,4553,2 +4554,12980710,1.5111087417,4554,2 +4555,73725488,-0.7503906467,4555,2 +4556,57778896,0.8962499468,4556,2 +4557,62505329,1.3988754594,4557,2 +4558,34567078,-0.0634243646,4558,2 +4559,84162402,-0.9693542602,4559,2 +4560,67904369,0.5232406938,4560,2 +4561,17042814,0.1574045741,4561,2 +4562,72749062,1.8297149143,4562,2 +4563,74243667,1.3145087029,4563,2 +4564,39301998,0.9600535015,4564,2 +4565,87902334,0.776371927,4565,2 +4566,43133781,1.0000017846,4566,2 +4567,69567592,2.1037353078,4567,2 +4568,53666153,0.0142253247,4568,2 +4569,70912432,1.7522537193,4569,2 +4570,25479051,-0.3132915427,4570,2 +4571,42998479,-0.4390289047,4571,2 +4572,10159784,0.5798781645,4572,2 +4573,89791524,-1.4057706898,4573,2 +4574,79259248,0.3105833275,4574,2 +4575,53321154,1.366923276,4575,2 +4576,29138414,0.5399417106,4576,2 +4577,70559878,0.2933148852,4577,2 +4578,13349837,0.7365367129,4578,2 +4579,42577193,0.6839409983,4579,2 +4580,56855597,0.234429293,4580,2 +4581,80269798,-0.0223314892,4581,2 +4582,45525642,2.7030982274,4582,2 +4583,88858279,1.2902487193,4583,2 +4584,21562481,0.3526356725,4584,2 +4585,12644124,-0.772314367,4585,2 +4586,17262868,-1.3373041771,4586,2 +4587,34659250,-0.1279292435,4587,2 +4588,18606860,0.4302025321,4588,2 +4589,70960554,-0.2373539019,4589,2 +4590,46848360,0.26021178,4590,2 +4591,32675038,-0.5358093692,4591,2 +4592,12765061,1.4942865512,4592,2 +4593,37940021,-0.2996583878,4593,2 +4594,48204666,-0.1961471035,4594,2 +4595,64808637,0.9881628469,4595,2 +4596,88019215,-1.2524910146,4596,2 +4597,87108259,-0.3396422161,4597,2 +4598,72967401,-0.1375012713,4598,2 +4599,47869106,3.0837935649,4599,2 +4600,82596513,0.0779001286,4600,2 +4601,41849606,0.8053921449,4601,2 +4602,55650057,-0.2016541056,4602,2 +4603,51458858,-0.8704062618,4603,2 +4604,28066375,0.6324806091,4604,2 +4605,70706762,-0.7214988323,4605,2 +4606,22968856,-0.713222062,4606,2 +4607,51721834,2.2836233804,4607,2 +4608,18807430,1.2336376445,4608,2 +4609,18238951,0.6953435802,4609,2 +4610,47262622,-0.6336807793,4610,2 +4611,79738193,-0.5206205891,4611,2 +4612,55368279,-0.0864977182,4612,2 +4613,75624772,-1.2106241676,4613,2 +4614,11029859,0.2137177329,4614,2 +4615,75776127,-0.2485206975,4615,2 +4616,43821427,0.3599017065,4616,2 +4617,55621488,1.4810352414,4617,2 +4618,31585753,-1.4525142378,4618,2 +4619,65448096,0.4863431475,4619,2 +4620,46962821,-0.2493787686,4620,2 +4621,42961747,-2.0546447518,4621,2 +4622,33789249,-0.2529063571,4622,2 +4623,20570811,-0.6039046363,4623,2 +4624,89573527,0.0871178141,4624,2 +4625,24490448,-1.5531471574,4625,2 +4626,72427045,-0.4238666725,4626,2 +4627,61310261,0.170256546,4627,2 +4628,34050877,0.6194232227,4628,2 +4629,82283344,0.5850899449,4629,2 +4630,51347630,0.1169925699,4630,2 +4631,82298154,-1.105217241,4631,2 +4632,78851096,0.1208961111,4632,2 +4633,34847161,0.3308915749,4633,2 +4634,44397817,-0.4584447248,4634,2 +4635,36533815,-1.328314574,4635,2 +4636,62341460,-1.5464080718,4636,2 +4637,66317002,-0.4189499887,4637,2 +4638,58810684,0.0355866457,4638,2 +4639,33764584,0.1861411959,4639,2 +4640,83221192,-1.3354941669,4640,2 +4641,50386969,-0.7425750758,4641,2 +4642,77415953,0.1177474043,4642,2 +4643,80427354,0.8287309625,4643,2 +4644,80659255,-0.3413986682,4644,2 +4645,53164124,-0.4285302562,4645,2 +4646,18652213,-0.5729590472,4646,2 +4647,66131863,1.5553647257,4647,2 +4648,20288161,-0.3211884142,4648,2 +4649,80722653,-0.455479427,4649,2 +4650,71878366,-0.4496282925,4650,2 +4651,65778691,0.2469400417,4651,2 +4652,87922090,-1.4418403512,4652,2 +4653,38345579,-0.5135568223,4653,2 +4654,23429377,0.9985805276,4654,2 +4655,44351488,-1.1068168259,4655,2 +4656,27399503,-1.1032577807,4656,2 +4657,61265454,-1.6370013154,4657,2 +4658,64467718,-0.6012341613,4658,2 +4659,82816820,1.1226103955,4659,2 +4660,36809156,-0.528356106,4660,2 +4661,14321856,-0.0913954091,4661,2 +4662,65539663,-1.3601951994,4662,2 +4663,50893616,-0.8186336142,4663,2 +4664,88399626,-0.5167416483,4664,2 +4665,75121717,-0.5301214948,4665,2 +4666,56354818,2.2972239852,4666,2 +4667,58690727,-0.5148281331,4667,2 +4668,28015699,-0.1614029163,4668,2 +4669,48845254,-1.2592777859,4669,2 +4670,89525156,-0.5452397671,4670,2 +4671,12925349,1.3132277172,4671,2 +4672,30607290,1.6639680439,4672,2 +4673,89393018,1.3840490551,4673,2 +4674,16225126,-0.8951822824,4674,2 +4675,21679496,-1.4278794245,4675,2 +4676,13032180,-1.0872091904,4676,2 +4677,63457154,-0.3585813201,4677,2 +4678,67276094,-0.7080508053,4678,2 +4679,38431138,-0.7670313555,4679,2 +4680,13421696,-1.5506608319,4680,2 +4681,53539342,-0.075465984,4681,2 +4682,30132362,-1.246832196,4682,2 +4683,37666155,1.14060316,4683,2 +4684,48898981,0.2501664371,4684,2 +4685,13415932,1.0030346753,4685,2 +4686,67197951,0.6669863164,4686,2 +4687,24882926,1.5691963536,4687,2 +4688,35322130,1.285540925,4688,2 +4689,66639767,-0.664157586,4689,2 +4690,84499223,0.9716668101,4690,2 +4691,16539695,0.4932171906,4691,2 +4692,54285885,-2.4045675646,4692,2 +4693,22248569,-1.2069439015,4693,2 +4694,43981796,-0.4377222192,4694,2 +4695,19821183,0.2077365119,4695,2 +4696,70083693,-0.5037694784,4696,2 +4697,83923562,-0.2805837203,4697,2 +4698,29049560,-0.8686334083,4698,2 +4699,18987421,1.5526077879,4699,2 +4700,12901971,-0.4752211775,4700,2 +4701,75551435,1.110622748,4701,2 +4702,60690157,-0.5975118093,4702,2 +4703,53469490,0.0985472276,4703,2 +4704,18655850,1.4900760229,4704,2 +4705,18449153,-0.3335483197,4705,2 +4706,69102806,0.3255636513,4706,2 +4707,36300088,0.0364378652,4707,2 +4708,50088038,-1.1913911913,4708,2 +4709,21808978,-0.5657424486,4709,2 +4710,80674539,-1.0098952443,4710,2 +4711,32569609,-0.2097059551,4711,2 +4712,87635066,-0.307865816,4712,2 +4713,12604450,-0.8474022195,4713,2 +4714,44668948,-0.0710729253,4714,2 +4715,43746327,0.5727894706,4715,2 +4716,18982482,-0.7313331152,4716,2 +4717,26752337,-2.4425600646,4717,2 +4718,30023350,0.1192587282,4718,2 +4719,55056089,-0.8861138793,4719,2 +4720,58992680,0.9847444865,4720,2 +4721,67463891,0.3346364958,4721,2 +4722,26369955,0.798852684,4722,2 +4723,25049179,-0.4739278366,4723,2 +4724,41705562,0.5515611841,4724,2 +4725,52668605,1.7305638165,4725,2 +4726,78854593,0.1624948199,4726,2 +4727,51123264,-0.5782677383,4727,2 +4728,44464025,-1.0541178904,4728,2 +4729,26614148,0.8278028659,4729,2 +4730,71714491,-1.569789547,4730,2 +4731,49618898,-0.3214905166,4731,2 +4732,65422530,1.4211598904,4732,2 +4733,22390473,-0.5152585546,4733,2 +4734,55324819,2.2433049402,4734,2 +4735,64878632,-0.6348473703,4735,2 +4736,72982739,-1.8847317532,4736,2 +4737,74398040,-1.3880023097,4737,2 +4738,41978255,-0.6907685898,4738,2 +4739,20743672,-1.0861417512,4739,2 +4740,69546676,0.8491803666,4740,2 +4741,49762409,1.0725641699,4741,2 +4742,75329470,0.8530542944,4742,2 +4743,44319120,-0.5281111699,4743,2 +4744,55917927,-0.2599616441,4744,2 +4745,88128748,-0.1551625292,4745,2 +4746,82383722,4.00912448093822E-05,4746,2 +4747,59748852,-1.3000324163,4747,2 +4748,87100724,0.7559061742,4748,2 +4749,12877272,-0.373966012,4749,2 +4750,25554028,0.1065069091,4750,2 +4751,55645643,-0.3688425822,4751,2 +4752,89637923,-1.2310362075,4752,2 +4753,34898861,0.1326276239,4753,2 +4754,50033506,1.6829542854,4754,2 +4755,79101021,1.7106268493,4755,2 +4756,12936738,0.2414374038,4756,2 +4757,62528666,-0.5687334074,4757,2 +4758,60752116,0.204592387,4758,2 +4759,71982201,0.5016698703,4759,2 +4760,72342444,-2.8466944265,4760,2 +4761,29433268,-0.2844140847,4761,2 +4762,82623740,1.3603477572,4762,2 +4763,55953347,-0.1264385106,4763,2 +4764,61569617,1.2769359901,4764,2 +4765,68024202,1.7874656135,4765,2 +4766,74553178,-1.0719898503,4766,2 +4767,63867685,1.0280631529,4767,2 +4768,52295291,-0.4721399696,4768,2 +4769,40517131,-2.0432562023,4769,2 +4770,76848598,0.0028322878,4770,2 +4771,74640708,0.9838512057,4771,2 +4772,17210610,0.1564812534,4772,2 +4773,57462557,0.1455218431,4773,2 +4774,22826819,-0.9320485822,4774,2 +4775,32181375,-0.4200287991,4775,2 +4776,77671287,-0.0713918907,4776,2 +4777,47516732,-1.2794443356,4777,2 +4778,35390504,-0.4059161158,4778,2 +4779,53677277,0.4813168428,4779,2 +4780,82272306,-0.2749808602,4780,2 +4781,62532430,0.4618280175,4781,2 +4782,40230172,-0.2138061973,4782,2 +4783,27159580,1.0839830863,4783,2 +4784,46159410,-2.0295477149,4784,2 +4785,34852402,1.8512678807,4785,2 +4786,67788332,-0.9580430865,4786,2 +4787,55491233,1.9224228872,4787,2 +4788,28172648,1.0428433999,4788,2 +4789,15577960,-0.4229671257,4789,2 +4790,18627167,0.4748510548,4790,2 +4791,15120190,-0.2877283805,4791,2 +4792,20731481,0.3708293364,4792,2 +4793,26194267,0.1825872732,4793,2 +4794,19954265,-0.0424282387,4794,2 +4795,59656589,-0.1645491221,4795,2 +4796,44742156,0.3737000195,4796,2 +4797,33010147,1.7071339919,4797,2 +4798,15448803,-0.0473955197,4798,2 +4799,28390056,-0.6667917501,4799,2 +4800,36800070,1.6012597968,4800,2 +4801,83046584,0.3423575716,4801,2 +4802,58350209,-0.5829592339,4802,2 +4803,81606161,1.7578723797,4803,2 +4804,87930800,0.4143870573,4804,2 +4805,22756818,0.338548025,4805,2 +4806,58316661,-0.251698792,4806,2 +4807,66593916,0.881590727,4807,2 +4808,29830302,0.4971487577,4808,2 +4809,43080583,1.0517619417,4809,2 +4810,18661186,0.4936224612,4810,2 +4811,59723320,1.1033212647,4811,2 +4812,38848888,-0.6661764042,4812,2 +4813,39063096,0.8244632736,4813,2 +4814,39502996,-0.2925611816,4814,2 +4815,32747012,-0.8183085047,4815,2 +4816,20885548,-1.1646122674,4816,2 +4817,36784774,0.6514424488,4817,2 +4818,80235566,-0.671310315,4818,2 +4819,42068743,0.3015650646,4819,2 +4820,41420764,-0.009497912,4820,2 +4821,86957453,0.3898166262,4821,2 +4822,74401725,-0.0924776857,4822,2 +4823,56855339,-0.3057609151,4823,2 +4824,89738848,0.1806636051,4824,2 +4825,56921100,-1.3860573235,4825,2 +4826,56738430,-0.1211530524,4826,2 +4827,61275169,0.1096477915,4827,2 +4828,86091654,0.4835443075,4828,2 +4829,81578111,-1.5279709695,4829,2 +4830,73299629,0.8511789087,4830,2 +4831,15432855,-0.0368381011,4831,2 +4832,34061621,-0.4224193563,4832,2 +4833,35373088,1.5726463558,4833,2 +4834,85270679,0.4592348125,4834,2 +4835,79592866,0.6157172871,4835,2 +4836,34153723,1.0332521623,4836,2 +4837,78860079,0.1580420109,4837,2 +4838,41851771,1.379313425,4838,2 +4839,19661864,0.0175369172,4839,2 +4840,87206779,-0.9382833206,4840,2 +4841,32314383,-0.8544859102,4841,2 +4842,34015208,1.3102660474,4842,2 +4843,52010966,-0.1476410995,4843,2 +4844,39681776,-1.2658033966,4844,2 +4845,74320495,0.7630228339,4845,2 +4846,26492462,-0.4638824088,4846,2 +4847,20060932,2.0502478698,4847,2 +4848,20238563,-0.0548262761,4848,2 +4849,34377210,-1.5959269232,4849,2 +4850,35420030,-0.2499856545,4850,2 +4851,88265178,1.4037851427,4851,2 +4852,89497471,-0.0439308386,4852,2 +4853,44127460,1.5315407614,4853,2 +4854,30510378,0.0647726065,4854,2 +4855,33137548,-0.018381456,4855,2 +4856,32286897,-0.4286818482,4856,2 +4857,37520370,0.6357819694,4857,2 +4858,87178250,0.2877916976,4858,2 +4859,30724523,1.5728197263,4859,2 +4860,45725070,0.4933991436,4860,2 +4861,59576986,0.873484324,4861,2 +4862,38984683,1.9570629872,4862,2 +4863,48751035,0.9283461537,4863,2 +4864,64303042,0.1107536499,4864,2 +4865,79115935,-0.6874806548,4865,2 +4866,50347531,1.5407486991,4866,2 +4867,37914721,-0.814572527,4867,2 +4868,27464428,-0.9216082504,4868,2 +4869,10001701,-1.0821026619,4869,2 +4870,73276265,0.4984579895,4870,2 +4871,50652473,-1.5635354776,4871,2 +4872,30668320,0.3942572448,4872,2 +4873,81894160,-2.0935935046,4873,2 +4874,22295637,0.2028497397,4874,2 +4875,12852846,1.3826286748,4875,2 +4876,59553986,-0.3005049893,4876,2 +4877,81852229,2.1062096791,4877,2 +4878,80694990,1.3088665705,4878,2 +4879,64129256,-1.1924545785,4879,2 +4880,20790216,-0.129288129,4880,2 +4881,22239167,0.1064734782,4881,2 +4882,25385924,-0.7020886768,4882,2 +4883,21239369,0.5244702204,4883,2 +4884,41006796,-0.3652050101,4884,2 +4885,29052285,-1.1943259087,4885,2 +4886,36255438,-0.8064084885,4886,2 +4887,57386090,-0.3220438089,4887,2 +4888,67009036,-0.1781294991,4888,2 +4889,78291513,-1.5322568904,4889,2 +4890,59801076,-1.0208603624,4890,2 +4891,67748275,1.7813902602,4891,2 +4892,44865654,-1.5134126803,4892,2 +4893,78203431,-1.7391718893,4893,2 +4894,70230522,-0.8883730635,4894,2 +4895,75580751,-0.9934855213,4895,2 +4896,37877007,2.3960676614,4896,2 +4897,60058217,-0.4559986689,4897,2 +4898,37104653,0.0352037029,4898,2 +4899,88138033,-2.0420846174,4899,2 +4900,88192450,0.3684574822,4900,2 +4901,28032750,-0.7786610844,4901,2 +4902,56824647,-0.6855793701,4902,2 +4903,63155618,0.0099516497,4903,2 +4904,64009317,-0.5795106169,4904,2 +4905,49206035,-0.1607902048,4905,2 +4906,46014859,0.0969605161,4906,2 +4907,47150528,0.0760189078,4907,2 +4908,20536617,-1.3727717274,4908,2 +4909,77000070,-2.5859105281,4909,2 +4910,13287797,-0.6740831849,4910,2 +4911,23755772,0.2415812553,4911,2 +4912,89258823,-1.381984947,4912,2 +4913,37331813,-1.567454121,4913,2 +4914,67882547,-0.2109255037,4914,2 +4915,56082211,-0.8545841166,4915,2 +4916,72731025,-0.7569738106,4916,2 +4917,84542537,0.3643980859,4917,2 +4918,49352391,0.3929476008,4918,2 +4919,85888495,-0.7597080619,4919,2 +4920,58028770,-0.4807117965,4920,2 +4921,44482537,0.885740496,4921,2 +4922,84615748,-0.1763316213,4922,2 +4923,41405926,1.3076505524,4923,2 +4924,24114488,1.6618470263,4924,2 +4925,69804101,-1.3849576422,4925,2 +4926,82851331,0.4705661765,4926,2 +4927,83486201,0.4391229908,4927,2 +4928,53589140,0.4003299059,4928,2 +4929,43275550,-1.5083613664,4929,2 +4930,66356073,-1.1613227935,4930,2 +4931,50179533,1.063015056,4931,2 +4932,67921512,-1.4201068936,4932,2 +4933,53397359,-0.5220657997,4933,2 +4934,67764593,-1.7283075446,4934,2 +4935,55188395,0.123472133,4935,2 +4936,81273026,0.3531058956,4936,2 +4937,81332855,-0.7414976562,4937,2 +4938,89910220,-0.6675775242,4938,2 +4939,86482027,-0.4911042833,4939,2 +4940,87432235,-0.1505472463,4940,2 +4941,51394647,0.4519185995,4941,2 +4942,87315102,-1.8691841789,4942,2 +4943,13434853,1.3513348563,4943,2 +4944,73936763,1.1885858605,4944,2 +4945,75467156,0.7567019195,4945,2 +4946,34790187,1.5120966775,4946,2 +4947,73848668,-0.1483027664,4947,2 +4948,41911574,-0.1080099554,4948,2 +4949,71155266,0.745820014,4949,2 +4950,61602843,0.6569555998,4950,2 +4951,30593848,-0.2963597902,4951,2 +4952,20320373,0.7748026316,4952,2 +4953,56876640,-0.0558380415,4953,2 +4954,47898495,-0.6647183166,4954,2 +4955,47067471,0.7137597303,4955,2 +4956,45955911,-0.1475892502,4956,2 +4957,69863671,-0.6810564745,4957,2 +4958,11925834,1.0541915086,4958,2 +4959,16763454,-1.5647747839,4959,2 +4960,11126898,-0.9563001709,4960,2 +4961,64398904,0.1620129164,4961,2 +4962,47109474,-1.1172201998,4962,2 +4963,81369682,0.6848599741,4963,2 +4964,85905490,-1.5427845711,4964,2 +4965,86921900,-0.2021589159,4965,2 +4966,55077567,0.2709462598,4966,2 +4967,62043678,-0.5355484029,4967,2 +4968,65040068,0.5724128288,4968,2 +4969,29730279,0.2325106326,4969,2 +4970,67653851,0.5515152309,4970,2 +4971,67507455,-1.9191646998,4971,2 +4972,62105829,-0.4725115432,4972,2 +4973,65308178,0.1738699116,4973,2 +4974,28478382,0.4006527086,4974,2 +4975,62727197,-0.8733316991,4975,2 +4976,30385668,-1.0077780557,4976,2 +4977,55341227,1.1528461854,4977,2 +4978,31559866,-0.8727269196,4978,2 +4979,51068657,0.4168094261,4979,2 +4980,81303949,2.4266452855,4980,2 +4981,60118828,0.7026697271,4981,2 +4982,59966965,-1.1451649004,4982,2 +4983,31964014,-0.3084349144,4983,2 +4984,26766484,-0.2197191387,4984,2 +4985,44053350,0.8006562075,4985,2 +4986,49125068,2.4936617526,4986,2 +4987,40933194,0.4310283548,4987,2 +4988,28597352,-1.0911805661,4988,2 +4989,20606926,-0.9333453861,4989,2 +4990,27941710,0.3199439354,4990,2 +4991,73429229,-0.3979028241,4991,2 +4992,65543263,0.4254044247,4992,2 +4993,12944922,-0.0110889573,4993,2 +4994,15959996,-1.4901418803,4994,2 +4995,55041921,-0.2037996859,4995,2 +4996,69199606,1.7722490608,4996,2 +4997,12997158,-2.0405029746,4997,2 +4998,33789326,-0.5910719473,4998,2 +4999,78914928,1.1639793912,4999,2 +5000,74324954,0.400918405,5000,2 +5001,10192091,-1.4593498347,5001,2 +5002,80174930,0.2587506469,5002,2 +5003,34917670,0.5977300449,5003,2 +5004,83230680,-0.8123983094,5004,2 +5005,45956425,-1.2178937635,5005,2 +5006,44398446,-0.5855076422,5006,2 +5007,17592696,1.19809319,5007,2 +5008,53516570,0.8909935562,5008,2 +5009,16840443,-0.8690511886,5009,2 +5010,85706596,-0.3687997836,5010,2 +5011,20421447,-0.2905770261,5011,2 +5012,73971037,1.2613284187,5012,2 +5013,84390618,-2.5920494271,5013,2 +5014,75682863,-0.722328804,5014,2 +5015,89671630,0.6506790134,5015,2 +5016,24774019,-1.6285873341,5016,2 +5017,12296998,2.3268147573,5017,2 +5018,68598944,-1.3252988204,5018,2 +5019,45514456,1.1721143932,5019,2 +5020,14532592,-0.258346555,5020,2 +5021,13958205,0.3773383233,5021,2 +5022,78061977,1.3597140751,5022,2 +5023,16582989,-0.0291473378,5023,2 +5024,86516801,2.3289823748,5024,2 +5025,42277187,-0.1814250742,5025,2 +5026,16986649,-1.0721591336,5026,2 +5027,38637994,-1.0263020063,5027,2 +5028,20584898,0.0965190586,5028,2 +5029,88506004,-2.4972614206,5029,2 +5030,46012602,0.5049029201,5030,2 +5031,31292229,0.500088649,5031,2 +5032,64636865,-0.8196984605,5032,2 +5033,84915616,-1.5705091414,5033,2 +5034,30747988,-1.3277325242,5034,2 +5035,58145999,0.2507092213,5035,2 +5036,48684522,-0.0995252181,5036,2 +5037,15842950,0.1294970865,5037,2 +5038,15237229,-0.5477364009,5038,2 +5039,87692294,0.1087542939,5039,2 +5040,31815094,-0.9716902787,5040,2 +5041,38683924,-0.0004216032,5041,2 +5042,79409490,1.522071044,5042,2 +5043,21272408,2.4578463999,5043,2 +5044,29271871,0.0690908027,5044,2 +5045,11104526,1.1620366011,5045,2 +5046,15450035,0.9798046398,5046,2 +5047,56431163,0.2418482234,5047,2 +5048,57061414,0.203179625,5048,2 +5049,60566807,-1.9681346746,5049,2 +5050,30881842,0.9939625058,5050,2 +5051,21301323,-0.3558599831,5051,2 +5052,68944328,-0.2079835786,5052,2 +5053,25680551,1.7797559232,5053,2 +5054,11572847,-0.9843772279,5054,2 +5055,42688193,0.881929149,5055,2 +5056,20051488,-0.0518526283,5056,2 +5057,54186282,-0.4292026219,5057,2 +5058,62967970,0.1585370514,5058,2 +5059,51275258,-2.171112597,5059,2 +5060,86072405,-0.2292225334,5060,2 +5061,44598392,0.2501559556,5061,2 +5062,86203926,-0.9292653101,5062,2 +5063,65251174,-0.9356124009,5063,2 +5064,32241610,0.4403240361,5064,2 +5065,82563516,0.4862059781,5065,2 +5066,31765537,-1.0527028804,5066,2 +5067,41705906,0.8903782051,5067,2 +5068,73989373,1.7729455437,5068,2 +5069,63669383,-0.6476812945,5069,2 +5070,80257109,-0.6330997826,5070,2 +5071,87779565,-0.4954351017,5071,2 +5072,36419262,-0.0470735452,5072,2 +5073,70252893,-1.3986629122,5073,2 +5074,68836422,-0.799570361,5074,2 +5075,48563968,-0.0982210747,5075,2 +5076,29102204,-0.567486682,5076,2 +5077,37656645,-0.0334808226,5077,2 +5078,85000083,0.177280307,5078,2 +5079,13613552,-0.2044464841,5079,2 +5080,14945757,-0.3561901699,5080,2 +5081,23399299,2.0546720556,5081,2 +5082,84191137,-1.2948097789,5082,2 +5083,17272739,0.1039675912,5083,2 +5084,78012602,1.3353234964,5084,2 +5085,46825447,-0.9751854556,5085,2 +5086,78333946,-0.5685083719,5086,2 +5087,40471877,0.4669849431,5087,2 +5088,88957355,0.3884497937,5088,2 +5089,13300403,-0.4894825038,5089,2 +5090,74905487,-0.4414435332,5090,2 +5091,59465122,-1.2057581139,5091,2 +5092,68971614,1.0891042519,5092,2 +5093,18097959,0.4850269173,5093,2 +5094,84629041,-0.8830263692,5094,2 +5095,56669863,-1.158739303,5095,2 +5096,21551741,-0.218643774,5096,2 +5097,43009694,-0.4629638914,5097,2 +5098,70977102,-1.5612837277,5098,2 +5099,52309824,-0.0321870088,5099,2 +5100,22449506,-0.214807309,5100,2 +5101,29408132,0.0555993384,5101,2 +5102,66610850,-1.6423743249,5102,2 +5103,89000553,0.014787624,5103,2 +5104,86103391,0.0689533291,5104,2 +5105,34417382,-0.5788911734,5105,2 +5106,78095487,0.7773730476,5106,2 +5107,16246960,1.0201587992,5107,2 +5108,12667743,0.4769714694,5108,2 +5109,60689282,-0.4322436185,5109,2 +5110,36615904,1.6488204332,5110,2 +5111,31498644,0.9077918422,5111,2 +5112,19212027,0.5868875259,5112,2 +5113,72782399,-0.6511694693,5113,2 +5114,15890451,0.110715081,5114,2 +5115,53876564,1.0191630981,5115,2 +5116,51642372,-0.3402673669,5116,2 +5117,17205689,0.9634084435,5117,2 +5118,44192241,0.1553006509,5118,2 +5119,85700796,0.8435188546,5119,2 +5120,12547116,0.5921069477,5120,2 +5121,73154709,-0.6528378357,5121,2 +5122,75044266,0.8769338143,5122,2 +5123,52641297,-0.5300473643,5123,2 +5124,51190788,-0.3302957105,5124,2 +5125,82147602,-0.4794287624,5125,2 +5126,32601150,0.9280572575,5126,2 +5127,50511201,0.1262203755,5127,2 +5128,77518285,-0.9920527265,5128,2 +5129,71434039,-0.3801930304,5129,2 +5130,61967226,0.1930541547,5130,2 +5131,21295477,-1.7799124669,5131,2 +5132,43037030,-2.3267631969,5132,2 +5133,83581004,-0.6028020932,5133,2 +5134,24472359,0.0367572598,5134,2 +5135,59186605,1.370163776,5135,2 +5136,46698674,-0.2440532379,5136,2 +5137,52125699,-1.0789346922,5137,2 +5138,84009537,-0.2224954311,5138,2 +5139,30778740,0.6645489554,5139,2 +5140,19425848,0.7094718143,5140,2 +5141,61117944,-0.2151704,5141,2 +5142,47723644,0.2987205756,5142,2 +5143,89156402,2.9055469502,5143,2 +5144,36980292,-1.7955112535,5144,2 +5145,11517596,-0.5564970515,5145,2 +5146,22823785,0.2022719645,5146,2 +5147,31605103,-0.5937618832,5147,2 +5148,55421985,-1.0414733983,5148,2 +5149,89834984,0.4899558718,5149,2 +5150,28099457,-1.2865635629,5150,2 +5151,17365981,1.4993503435,5151,2 +5152,84707177,-1.0298796581,5152,2 +5153,59908302,-1.8136662483,5153,2 +5154,18031086,0.6920917131,5154,2 +5155,76620203,2.8943676591,5155,2 +5156,36408075,1.1193465319,5156,2 +5157,41376469,-0.7448434411,5157,2 +5158,23610741,0.4016441597,5158,2 +5159,64079393,-0.7514518367,5159,2 +5160,34611068,-0.7223517797,5160,2 +5161,39045726,1.2042275422,5161,2 +5162,27819436,0.8812747066,5162,2 +5163,21347304,-1.3270109307,5163,2 +5164,18400715,-1.4552945526,5164,2 +5165,18396312,0.0734288119,5165,2 +5166,72317186,-0.3572796672,5166,2 +5167,79770108,0.0261952095,5167,2 +5168,31031804,-1.1682599865,5168,2 +5169,43181603,0.463928551,5169,2 +5170,20330345,-1.9517136877,5170,2 +5171,17675847,-2.1304244516,5171,2 +5172,64436007,1.3922868828,5172,2 +5173,31210186,-0.0072562198,5173,2 +5174,78478616,1.5646333822,5174,2 +5175,70237224,-0.471035336,5175,2 +5176,54354037,-0.0707677246,5176,2 +5177,87065305,-0.7130500009,5177,2 +5178,31046479,-0.8453876732,5178,2 +5179,69487137,0.5117967053,5179,2 +5180,72085224,1.2183140949,5180,2 +5181,18437088,-0.1708147292,5181,2 +5182,56457294,1.1140266174,5182,2 +5183,59460884,-0.8969846293,5183,2 +5184,37651743,-1.5383912536,5184,2 +5185,66841967,-0.8813692609,5185,2 +5186,86225103,0.0375708799,5186,2 +5187,66180378,-1.226687271,5187,2 +5188,31208691,-0.1659455334,5188,2 +5189,73139063,-0.8090770731,5189,2 +5190,84643204,-1.1092485685,5190,2 +5191,39712498,0.1545658418,5191,2 +5192,65750459,-0.3146399036,5192,2 +5193,72434066,-1.3320613809,5193,2 +5194,43565023,0.8483782561,5194,2 +5195,30842394,0.5994124882,5195,2 +5196,55564015,0.7229945508,5196,2 +5197,10206391,-0.2618311218,5197,2 +5198,24456123,1.232580168,5198,2 +5199,81825096,-0.7472078577,5199,2 +5200,37908915,1.1007233341,5200,2 +5201,80384031,2.8755446295,5201,2 +5202,84795612,-1.2756400918,5202,2 +5203,31008293,-1.7134396608,5203,2 +5204,72252175,-0.0636552552,5204,2 +5205,54450185,-0.5331871771,5205,2 +5206,20822468,-0.9352479264,5206,2 +5207,76418869,-0.4255676622,5207,2 +5208,53956825,-0.8947867419,5208,2 +5209,39300742,-0.8227980869,5209,2 +5210,35752548,2.1518404867,5210,2 +5211,46945599,0.4200992167,5211,2 +5212,69144218,-0.7810649711,5212,2 +5213,48021601,0.4305139847,5213,2 +5214,41055768,0.1102454874,5214,2 +5215,54038964,-0.2533027787,5215,2 +5216,62570970,-1.480843264,5216,2 +5217,73927291,-1.0344013514,5217,2 +5218,77495647,-0.0150054318,5218,2 +5219,18396607,1.0102609329,5219,2 +5220,30556673,1.1962275026,5220,2 +5221,73921005,-1.2070068177,5221,2 +5222,21110832,-0.318148985,5222,2 +5223,88481222,-0.0482762011,5223,2 +5224,44903753,-0.1467048105,5224,2 +5225,48833114,0.8460280331,5225,2 +5226,16886845,-1.2991851951,5226,2 +5227,59079972,-0.738196699,5227,2 +5228,84993004,0.8308497286,5228,2 +5229,68047422,0.8021267486,5229,2 +5230,55088763,0.0971760138,5230,2 +5231,76937803,0.495838273,5231,2 +5232,51866013,-0.9483347446,5232,2 +5233,14385157,-1.1430522003,5233,2 +5234,78347422,0.1281678329,5234,2 +5235,74128001,0.6877727607,5235,2 +5236,41181448,0.1957459453,5236,2 +5237,75538678,-0.2954774579,5237,2 +5238,67785932,-0.7144131681,5238,2 +5239,78886436,0.5419619883,5239,2 +5240,59982335,-1.7743794484,5240,2 +5241,18143065,-1.6983374871,5241,2 +5242,46201233,0.902366238,5242,2 +5243,70441751,-1.3409307363,5243,2 +5244,69868503,1.0781010515,5244,2 +5245,38091875,-0.192169652,5245,2 +5246,82142633,-0.5802902854,5246,2 +5247,12652715,-1.2504374168,5247,2 +5248,29403131,-1.424050154,5248,2 +5249,68771680,-0.7585204491,5249,2 +5250,85943910,-0.2068315299,5250,2 +5251,65284155,-0.5227060226,5251,2 +5252,65235183,1.152863759,5252,2 +5253,67301303,1.3302807057,5253,2 +5254,55495758,2.0140414927,5254,2 +5255,17376686,0.6519448997,5255,2 +5256,31227421,-0.4997301216,5256,2 +5257,66413859,0.0052209386,5257,2 +5258,54799458,1.1308435229,5258,2 +5259,48035209,0.8687706099,5259,2 +5260,16145062,-0.8888925916,5260,2 +5261,27086622,1.2727031659,5261,2 +5262,69092569,-0.1654809003,5262,2 +5263,36289961,0.7865899225,5263,2 +5264,86601164,0.2316529233,5264,2 +5265,56556823,0.8763348531,5265,2 +5266,50050569,0.8257867728,5266,2 +5267,22754045,-1.6563915115,5267,2 +5268,76446931,-0.0415150908,5268,2 +5269,68756127,-0.1773111881,5269,2 +5270,74177755,0.3084199023,5270,2 +5271,40902291,-0.1451200761,5271,2 +5272,19040495,-0.0535360883,5272,2 +5273,41445815,-0.5192978097,5273,2 +5274,64379510,-0.705293528,5274,2 +5275,73150117,-1.3523761632,5275,2 +5276,15188676,0.6087565501,5276,2 +5277,81303011,0.6536064086,5277,2 +5278,58226116,-1.3850420291,5278,2 +5279,56101074,-0.7106844817,5279,2 +5280,53562074,-0.6639853598,5280,2 +5281,13210667,-1.4800609289,5281,2 +5282,56579528,-0.3586877027,5282,2 +5283,40719979,0.3859479195,5283,2 +5284,64993231,-1.4422323039,5284,2 +5285,41665712,-1.0224662841,5285,2 +5286,26167897,-2.0473787932,5286,2 +5287,47725196,0.32799469,5287,2 +5288,80018692,-0.1589076472,5288,2 +5289,18580521,0.1701901436,5289,2 +5290,52554056,1.2141213029,5290,2 +5291,73194216,-0.8962652009,5291,2 +5292,63822075,-0.2717663957,5292,2 +5293,71313843,0.4996181769,5293,2 +5294,59608782,2.0409293871,5294,2 +5295,20974077,-0.1854590826,5295,2 +5296,71131561,-0.0670673392,5296,2 +5297,43348920,2.374542024,5297,2 +5298,88046565,0.9746148863,5298,2 +5299,79471633,0.0880289948,5299,2 +5300,31743273,-1.728946225,5300,2 +5301,46037899,1.5416692202,5301,2 +5302,49809144,-0.1555619148,5302,2 +5303,34553034,1.5645914439,5303,2 +5304,42195810,1.6180872943,5304,2 +5305,24300750,-0.5023852388,5305,2 +5306,87415028,0.0231192111,5306,2 +5307,13489203,0.0681449733,5307,2 +5308,85147687,-1.3527300192,5308,2 +5309,83418826,-1.2236235253,5309,2 +5310,59565577,0.6211333263,5310,2 +5311,73131254,-2.3263516796,5311,2 +5312,51055457,-0.1663959803,5312,2 +5313,66234130,0.6389655061,5313,2 +5314,53306412,-0.1633437773,5314,2 +5315,66192850,0.9746604362,5315,2 +5316,59499798,-1.3861074638,5316,2 +5317,52230142,1.1301098531,5317,2 +5318,46510024,-0.498224676,5318,2 +5319,33780025,1.7805221905,5319,2 +5320,39412002,0.2895144166,5320,2 +5321,54808042,-1.3856826576,5321,2 +5322,20388214,1.0378695531,5322,2 +5323,62272087,1.4367399533,5323,2 +5324,61013019,0.0676296938,5324,2 +5325,58387077,-1.4891485642,5325,2 +5326,61930557,1.1465453827,5326,2 +5327,65620733,0.2575712983,5327,2 +5328,48184420,1.9303763861,5328,2 +5329,88003756,-0.1869761524,5329,2 +5330,48974613,2.1241632907,5330,2 +5331,49673378,0.8292762712,5331,2 +5332,37898379,-0.0699147,5332,2 +5333,51893438,-1.5382591075,5333,2 +5334,62806897,1.3576117272,5334,2 +5335,14213294,1.4264192614,5335,2 +5336,51982943,-0.9992610053,5336,2 +5337,47733733,-0.4963623099,5337,2 +5338,52726354,-0.6888105131,5338,2 +5339,29935746,-1.0539715854,5339,2 +5340,71471854,1.4153898769,5340,2 +5341,51088686,-3.0573118516,5341,2 +5342,64721561,0.767312495,5342,2 +5343,17361475,-0.7759189153,5343,2 +5344,31967995,0.0673970286,5344,2 +5345,73162068,-0.1937149256,5345,2 +5346,47826905,1.331545271,5346,2 +5347,67975544,-0.6325016369,5347,2 +5348,56578937,0.9095648398,5348,2 +5349,87935604,-0.3440142563,5349,2 +5350,75978710,0.4856388607,5350,2 +5351,43464425,-0.7459374949,5351,2 +5352,19495069,0.2669416767,5352,2 +5353,68349788,-0.0334678101,5353,2 +5354,46270597,-0.5098631641,5354,2 +5355,15518557,1.3441552286,5355,2 +5356,59735387,1.5993167121,5356,2 +5357,19693395,0.1047201226,5357,2 +5358,69183643,1.7422770859,5358,2 +5359,65591866,0.2373821163,5359,2 +5360,79610900,-0.156849164,5360,2 +5361,67291567,-0.3801105265,5361,2 +5362,42445439,-0.3376753597,5362,2 +5363,80792893,0.2757063893,5363,2 +5364,26817901,1.7292965956,5364,2 +5365,67276029,0.5462363956,5365,2 +5366,46003067,-1.8259687038,5366,2 +5367,26748017,1.8024166859,5367,2 +5368,80943199,1.9771653664,5368,2 +5369,74238345,0.0119761111,5369,2 +5370,32282027,-1.0497438188,5370,2 +5371,18512798,-1.2069348287,5371,2 +5372,57916934,-0.8553408868,5372,2 +5373,52885729,0.9948716358,5373,2 +5374,52750001,1.7248533509,5374,2 +5375,30984865,0.3595885845,5375,2 +5376,58667892,-1.2758028307,5376,2 +5377,89437709,0.1065440322,5377,2 +5378,25310768,1.4857546967,5378,2 +5379,49928550,0.8478091616,5379,2 +5380,86203262,-0.1100821606,5380,2 +5381,62070679,-1.0016574873,5381,2 +5382,32050108,-1.5407059645,5382,2 +5383,66863061,0.8953781678,5383,2 +5384,70421195,0.0443570038,5384,2 +5385,34692425,0.7642770102,5385,2 +5386,39182511,1.5702840468,5386,2 +5387,55490116,1.4710139602,5387,2 +5388,23966711,0.562907159,5388,2 +5389,75058247,0.1370180506,5389,2 +5390,36402605,-1.9639426092,5390,2 +5391,83059891,-0.5822026291,5391,2 +5392,19820266,-0.4444522324,5392,2 +5393,51802288,-1.0557528364,5393,2 +5394,16384041,0.2923833942,5394,2 +5395,54243725,-0.3946142331,5395,2 +5396,36790127,-1.1792667563,5396,2 +5397,24867198,1.0968206961,5397,2 +5398,44109371,-1.1577381371,5398,2 +5399,47948299,-0.0173017689,5399,2 +5400,51341785,0.6840248795,5400,2 +5401,50986330,-0.124075635,5401,2 +5402,13859690,1.1169147752,5402,2 +5403,76520122,-0.8424159838,5403,2 +5404,10107903,0.7990603573,5404,2 +5405,26110540,-0.8668939664,5405,2 +5406,79914406,-0.3617377354,5406,2 +5407,31864684,0.2159623362,5407,2 +5408,54133155,1.2900889308,5408,2 +5409,40401554,-0.2181383904,5409,2 +5410,66122484,0.6202725797,5410,2 +5411,79884468,-0.3319660429,5411,2 +5412,46147985,1.5899419588,5412,2 +5413,24369214,-0.1647509695,5413,2 +5414,88549732,-1.5346674149,5414,2 +5415,22413362,-1.7472799823,5415,2 +5416,73334055,1.5816303025,5416,2 +5417,21076402,-0.0173539176,5417,2 +5418,85252313,0.3588250234,5418,2 +5419,82520116,-1.1932873684,5419,2 +5420,81603526,0.6708455941,5420,2 +5421,36106869,0.9673657404,5421,2 +5422,36964628,0.6449270631,5422,2 +5423,46556142,0.6604530655,5423,2 +5424,69106689,-0.3541697241,5424,2 +5425,23964097,-0.9657096251,5425,2 +5426,67764755,-1.2046652639,5426,2 +5427,80096174,-0.439370425,5427,2 +5428,67126332,1.4858590466,5428,2 +5429,77403455,0.8194031316,5429,2 +5430,48598944,-0.0298562265,5430,2 +5431,19679126,-0.6347300535,5431,2 +5432,61545046,-1.6698260635,5432,2 +5433,11449445,1.4722414424,5433,2 +5434,21745170,-1.8709028074,5434,2 +5435,19011507,1.6822237832,5435,2 +5436,77546672,-0.5628400678,5436,2 +5437,73775934,-1.3814099176,5437,2 +5438,36760319,0.4297856218,5438,2 +5439,71645038,-1.8974168419,5439,2 +5440,63910751,1.073029725,5440,2 +5441,62380312,-0.7944339811,5441,2 +5442,52409130,-0.0484905921,5442,2 +5443,64313529,0.3943533948,5443,2 +5444,33666087,0.9845030953,5444,2 +5445,38578811,0.1378629311,5445,2 +5446,27784665,-0.4842664841,5446,2 +5447,46068168,-0.3821070802,5447,2 +5448,72740938,1.6793792683,5448,2 +5449,59613219,1.561013357,5449,2 +5450,63727259,0.2289775847,5450,2 +5451,78408697,0.4428361914,5451,2 +5452,89755211,-0.17087074,5452,2 +5453,61346119,-1.6929459272,5453,2 +5454,22930215,-1.0893411793,5454,2 +5455,15786657,0.5661777824,5455,2 +5456,60455893,0.7365205302,5456,2 +5457,39431140,-0.2042931718,5457,2 +5458,17634900,-0.4870436594,5458,2 +5459,51153502,-0.2942705836,5459,2 +5460,88140988,-0.8278320252,5460,2 +5461,85419844,2.666182295,5461,2 +5462,22077582,-1.4412841091,5462,2 +5463,17592419,-0.0018501202,5463,2 +5464,85206646,2.7620272651,5464,2 +5465,32704736,-0.004760137,5465,2 +5466,88498137,0.4436692023,5466,2 +5467,77154309,-0.3043804211,5467,2 +5468,70023921,-0.2062192593,5468,2 +5469,62714698,0.4736776522,5469,2 +5470,50605821,-0.6852911013,5470,2 +5471,62504325,-0.3127708202,5471,2 +5472,14972285,1.1577544463,5472,2 +5473,71498165,-0.7646740194,5473,2 +5474,44294122,1.5412780438,5474,2 +5475,81167456,0.9989567782,5475,2 +5476,32382231,0.4140251668,5476,2 +5477,71833663,-0.6241494527,5477,2 +5478,27688409,0.70221675,5478,2 +5479,10701866,1.9814305995,5479,2 +5480,48247492,0.8294310997,5480,2 +5481,60155943,0.1830505441,5481,2 +5482,55852205,-0.6395284256,5482,2 +5483,33894280,-0.1120996545,5483,2 +5484,57167384,-1.6248237187,5484,2 +5485,24058064,1.5344891005,5485,2 +5486,65409507,-0.142258975,5486,2 +5487,15444764,0.9572053665,5487,2 +5488,60751257,0.969126645,5488,2 +5489,48258624,0.2732347493,5489,2 +5490,50560357,-0.2798455498,5490,2 +5491,78959674,1.8700132079,5491,2 +5492,33015672,-0.0063062036,5492,2 +5493,73924831,0.0512077062,5493,2 +5494,70079235,0.8396604457,5494,2 +5495,17001198,1.6888774166,5495,2 +5496,20756498,0.7203421771,5496,2 +5497,81224747,0.4481094872,5497,2 +5498,56368867,0.5740428756,5498,2 +5499,10599939,-0.347915361,5499,2 +5500,63958969,-0.0999033825,5500,2 +5501,14226452,1.6016794477,5501,2 +5502,53560764,-0.8688427165,5502,2 +5503,24433014,0.3447625366,5503,2 +5504,42416134,-0.2997838332,5504,2 +5505,37170358,2.8625846362,5505,2 +5506,70908298,-0.6087480894,5506,2 +5507,49290559,0.869186666,5507,2 +5508,59947468,1.3701999939,5508,2 +5509,73251223,-1.0479711877,5509,2 +5510,59829626,0.5004055137,5510,2 +5511,73801979,-1.2047923891,5511,2 +5512,17289246,-0.8383423706,5512,2 +5513,25403356,-0.8082256842,5513,2 +5514,76943490,0.1023366302,5514,2 +5515,50269478,-1.5812437909,5515,2 +5516,76833037,-0.106868947,5516,2 +5517,66073392,-0.4041919666,5517,2 +5518,51420980,-0.4006493285,5518,2 +5519,13053780,1.2675216515,5519,2 +5520,36514443,2.1179649659,5520,2 +5521,15123990,1.1908858161,5521,2 +5522,43042475,-0.272084207,5522,2 +5523,64809352,0.4947052513,5523,2 +5524,50179810,-1.118116651,5524,2 +5525,17947373,-2.2202578292,5525,2 +5526,16324774,-1.4058710902,5526,2 +5527,47897355,2.678921873,5527,2 +5528,55181856,0.1326069128,5528,2 +5529,57562795,1.5368881703,5529,2 +5530,86714355,0.9975675905,5530,2 +5531,66103025,-1.0541143193,5531,2 +5532,22215819,0.8899685106,5532,2 +5533,84950028,-1.0415571775,5533,2 +5534,42003348,0.2093058793,5534,2 +5535,38214547,0.288187033,5535,2 +5536,15407597,-0.3169169819,5536,2 +5537,27787875,-1.4251189503,5537,2 +5538,16701932,0.7710496774,5538,2 +5539,76180878,-0.2571149189,5539,2 +5540,85192017,-0.77927154,5540,2 +5541,41054294,-0.3131955259,5541,2 +5542,25350908,0.6125175302,5542,2 +5543,17245428,0.6483691459,5543,2 +5544,18729540,0.7379484832,5544,2 +5545,19744928,0.9201141556,5545,2 +5546,59624950,0.6102182001,5546,2 +5547,89889466,1.3429887574,5547,2 +5548,83164607,-0.0581527317,5548,2 +5549,19097999,0.3247514423,5549,2 +5550,35276111,-0.5320642824,5550,2 +5551,59861082,1.0764258364,5551,2 +5552,11601164,-0.4400861943,5552,2 +5553,13808929,-0.4727259762,5553,2 +5554,40789338,0.9723538888,5554,2 +5555,86914101,-0.0646443357,5555,2 +5556,43626200,-0.897941526,5556,2 +5557,48414731,0.222230972,5557,2 +5558,51745714,0.6507904858,5558,2 +5559,24750443,-0.2713025538,5559,2 +5560,18738591,-0.3277496561,5560,2 +5561,59424620,-0.8017538252,5561,2 +5562,35244951,-1.6699508563,5562,2 +5563,52951314,0.9699573621,5563,2 +5564,50941497,0.6134054759,5564,2 +5565,79385299,1.8483631999,5565,2 +5566,74363735,-0.1075258229,5566,2 +5567,35030002,0.3822798213,5567,2 +5568,46983813,0.3351786449,5568,2 +5569,86022249,-0.1069847721,5569,2 +5570,72402322,-2.154777968,5570,2 +5571,55641803,-0.2748816659,5571,2 +5572,17612783,-1.2788889593,5572,2 +5573,19092887,-1.7656198655,5573,2 +5574,11865879,3.1239048508,5574,2 +5575,64937160,-0.2608636873,5575,2 +5576,43735212,-0.3354465983,5576,2 +5577,48497897,2.3101764535,5577,2 +5578,60801540,-1.2362855045,5578,2 +5579,57145734,0.0042193865,5579,2 +5580,17971647,-0.9899943455,5580,2 +5581,81044264,2.861370902,5581,2 +5582,61788529,2.6858749295,5582,2 +5583,12016638,1.0180059251,5583,2 +5584,63860657,-1.2482489615,5584,2 +5585,85131492,0.2216086478,5585,2 +5586,29778898,0.2058107205,5586,2 +5587,53346341,1.4394251929,5587,2 +5588,17084805,-1.2105637597,5588,2 +5589,36595049,0.2624793291,5589,2 +5590,57830807,0.691755201,5590,2 +5591,10607310,-0.2343177701,5591,2 +5592,83383508,0.1205296508,5592,2 +5593,64011913,-0.4979371076,5593,2 +5594,12825889,0.1207721173,5594,2 +5595,41543631,0.8049679601,5595,2 +5596,85920844,-0.4158743025,5596,2 +5597,89415025,1.477248274,5597,2 +5598,56137240,0.5385310865,5598,2 +5599,68952330,0.5947093876,5599,2 +5600,44225674,0.140271633,5600,2 +5601,26210660,-0.5739534812,5601,2 +5602,68703125,-0.7705538725,5602,2 +5603,15431533,0.8200171197,5603,2 +5604,47272733,-1.8312156661,5604,2 +5605,79714385,1.4057841296,5605,2 +5606,68024639,0.9301396709,5606,2 +5607,39342655,0.7178215369,5607,2 +5608,19064973,0.0030742102,5608,2 +5609,86960387,-0.3571633954,5609,2 +5610,63402608,0.4743289993,5610,2 +5611,35750278,0.6732287264,5611,2 +5612,65387403,1.0581879341,5612,2 +5613,26660199,0.6248950608,5613,2 +5614,27169338,-0.5773213157,5614,2 +5615,78814307,-1.9354621816,5615,2 +5616,32419520,0.8005739162,5616,2 +5617,53111329,1.0774268044,5617,2 +5618,37092651,-1.1732203548,5618,2 +5619,20451557,-0.0523407879,5619,2 +5620,48032798,1.0159366234,5620,2 +5621,40515264,-1.0156848787,5621,2 +5622,33235372,-0.8117630426,5622,2 +5623,62565737,-0.7926773345,5623,2 +5624,23335858,-0.5210029282,5624,2 +5625,43372421,-0.624785574,5625,2 +5626,77367684,-1.9815432575,5626,2 +5627,63946877,0.1629716115,5627,2 +5628,57556354,-1.0817087476,5628,2 +5629,50991175,0.321696121,5629,2 +5630,69984031,-0.5854862409,5630,2 +5631,26671516,0.6857792616,5631,2 +5632,31573425,1.3504643707,5632,2 +5633,30560696,1.1793713888,5633,2 +5634,44327806,1.0593627391,5634,2 +5635,33725301,0.356910616,5635,2 +5636,70296142,-0.2387706053,5636,2 +5637,84058334,0.1941239333,5637,2 +5638,52235749,1.517786411,5638,2 +5639,27069456,0.451868587,5639,2 +5640,12912228,-1.3834199326,5640,2 +5641,74031865,-2.319342427,5641,2 +5642,78237644,0.7873451608,5642,2 +5643,24856565,1.2141746026,5643,2 +5644,38505100,-0.7229700862,5644,2 +5645,23821753,0.1751085553,5645,2 +5646,21667782,-1.8486157276,5646,2 +5647,66706973,-0.1218839566,5647,2 +5648,60222136,-0.3032669297,5648,2 +5649,45547192,-1.213446541,5649,2 +5650,57901157,-0.5043226702,5650,2 +5651,60922163,-0.4121982696,5651,2 +5652,64509618,0.4162031837,5652,2 +5653,31398113,-1.1548186106,5653,2 +5654,78344644,0.7461186712,5654,2 +5655,20920411,-1.3818397807,5655,2 +5656,48062046,0.9484747794,5656,2 +5657,44593210,-0.5259889456,5657,2 +5658,36954745,-0.3485627538,5658,2 +5659,43401916,-1.9515943708,5659,2 +5660,21615657,-0.080824277,5660,2 +5661,69507016,-0.8543775234,5661,2 +5662,65044911,0.3503616375,5662,2 +5663,24285050,-0.4869535754,5663,2 +5664,83426634,0.8818402273,5664,2 +5665,75571603,0.3195709164,5665,2 +5666,39388538,0.8586972252,5666,2 +5667,54119799,-1.2956115765,5667,2 +5668,30649949,-0.801206861,5668,2 +5669,68478795,0.6232605606,5669,2 +5670,24005059,-1.4920691305,5670,2 +5671,48718508,-0.730740063,5671,2 +5672,52740187,1.2765934942,5672,2 +5673,41497750,0.0508127849,5673,2 +5674,15683826,-0.13464242,5674,2 +5675,24811383,0.9519977003,5675,2 +5676,38087532,1.7505111881,5676,2 +5677,69830255,0.6073473374,5677,2 +5678,75552011,0.0084005379,5678,2 +5679,72456183,0.4575303773,5679,2 +5680,52159211,0.6967091497,5680,2 +5681,24382341,1.0012263045,5681,2 +5682,70197288,-0.4288190996,5682,2 +5683,88083852,-1.1409656704,5683,2 +5684,86247124,-0.9095860521,5684,2 +5685,13094513,0.0565553196,5685,2 +5686,12752983,-0.2547600918,5686,2 +5687,44862504,-1.4595355037,5687,2 +5688,29319010,-1.0498683743,5688,2 +5689,57392012,-1.1933632065,5689,2 +5690,83467251,-0.3115758828,5690,2 +5691,73759807,-0.5518980796,5691,2 +5692,29422794,0.6201663053,5692,2 +5693,14351823,1.4524694663,5693,2 +5694,46561458,-1.2104021376,5694,2 +5695,52260419,-0.8731085803,5695,2 +5696,28868831,1.5157702721,5696,2 +5697,24210416,-0.7037505341,5697,2 +5698,79488626,0.2794335462,5698,2 +5699,10786135,-0.8905437596,5699,2 +5700,83099774,0.3144623965,5700,2 +5701,22313953,-0.1203611441,5701,2 +5702,32273341,-0.5686665726,5702,2 +5703,73723957,-0.0010755017,5703,2 +5704,19291883,-0.9245857709,5704,2 +5705,11320908,-0.4784399664,5705,2 +5706,68545683,-0.9248151618,5706,2 +5707,60618816,-0.7307503159,5707,2 +5708,52627908,-0.3492140675,5708,2 +5709,52705657,0.6227476813,5709,2 +5710,24659011,0.7513128612,5710,2 +5711,10807709,1.912018629,5711,2 +5712,48874784,-0.1273146363,5712,2 +5713,44417129,-0.3432512548,5713,2 +5714,74376117,1.0770769431,5714,2 +5715,49279015,1.5246253503,5715,2 +5716,41724488,-0.0758856012,5716,2 +5717,87680480,-0.9801410136,5717,2 +5718,55230461,-0.1080363714,5718,2 +5719,12936032,-0.3650033691,5719,2 +5720,57320484,0.9545154974,5720,2 +5721,61584960,0.1007006458,5721,2 +5722,36186581,-0.1682297819,5722,2 +5723,21811984,-1.3486833987,5723,2 +5724,79564623,-0.3278123153,5724,2 +5725,65716919,-1.0561787363,5725,2 +5726,74409504,-1.8260700683,5726,2 +5727,24261960,-1.4919002283,5727,2 +5728,29009747,-0.858210796,5728,2 +5729,36223087,0.6316668786,5729,2 +5730,12685824,0.938633373,5730,2 +5731,89735801,1.251761371,5731,2 +5732,49634179,-0.3926785879,5732,2 +5733,40930153,0.3313353716,5733,2 +5734,25640061,-1.4374655888,5734,2 +5735,59647272,1.8365754669,5735,2 +5736,34833646,0.4914726877,5736,2 +5737,39552225,-0.3431778051,5737,2 +5738,27277625,-0.0177571498,5738,2 +5739,39626143,-0.9771441685,5739,2 +5740,36963522,0.1865878538,5740,2 +5741,40841101,-1.2603324976,5741,2 +5742,16567753,-0.0108181719,5742,2 +5743,87048773,-0.9639570831,5743,2 +5744,31681624,-0.1538527452,5744,2 +5745,18738652,0.4489542044,5745,2 +5746,73224495,0.0523526134,5746,2 +5747,58671689,-1.6923714867,5747,2 +5748,72320738,-0.6175207568,5748,2 +5749,86593681,0.5760156738,5749,2 +5750,42188062,0.4760695297,5750,2 +5751,76852560,-0.634908708,5751,2 +5752,34098157,-0.8497419511,5752,2 +5753,16712216,-0.8225910073,5753,2 +5754,57296718,0.0494829113,5754,2 +5755,42290571,-1.3469262603,5755,2 +5756,45752290,1.0074802355,5756,2 +5757,42609497,0.6197973069,5757,2 +5758,13105819,-1.5411716676,5758,2 +5759,52128365,1.3498704534,5759,2 +5760,24199270,0.1316680782,5760,2 +5761,21068588,0.8813691593,5761,2 +5762,87337892,0.2872037336,5762,2 +5763,86970863,-0.1491015798,5763,2 +5764,50645927,-1.3354288997,5764,2 +5765,69698454,-0.6250223026,5765,2 +5766,28149152,-0.3722760331,5766,2 +5767,26825258,-0.3412510237,5767,2 +5768,28392751,0.2135557055,5768,2 +5769,29965401,-0.3988220721,5769,2 +5770,66012018,-0.694503185,5770,2 +5771,47652090,-0.0990459304,5771,2 +5772,88113602,0.2863583569,5772,2 +5773,75326689,-0.2520200983,5773,2 +5774,45708081,0.5522934575,5774,2 +5775,85620897,0.6329373192,5775,2 +5776,49056009,0.9718801715,5776,2 +5777,16837716,-0.6927282157,5777,2 +5778,33559510,-0.2162726254,5778,2 +5779,79434414,-0.2823376026,5779,2 +5780,62447065,-0.0265524554,5780,2 +5781,85867237,0.0508247393,5781,2 +5782,62623464,0.7760056797,5782,2 +5783,55499586,-0.3119627757,5783,2 +5784,16022853,-1.4194890969,5784,2 +5785,45146036,0.2328799155,5785,2 +5786,73162973,-0.4629427137,5786,2 +5787,50353631,-1.3295184243,5787,2 +5788,54248935,-0.0130126119,5788,2 +5789,11337363,0.2602183418,5789,2 +5790,61340220,-0.4677098509,5790,2 +5791,60682832,0.6056509133,5791,2 +5792,82637740,-0.5279296427,5792,2 +5793,85210133,-1.4443141769,5793,2 +5794,54073658,-0.4999520618,5794,2 +5795,34234886,1.3486492005,5795,2 +5796,20397416,-0.6901577523,5796,2 +5797,84107538,1.6658639898,5797,2 +5798,14107586,1.6200578093,5798,2 +5799,55566017,-1.5995048143,5799,2 +5800,33879561,-0.7848592007,5800,2 +5801,31726669,0.90954323,5801,2 +5802,56962447,-1.0907009222,5802,2 +5803,16464078,-1.1706738618,5803,2 +5804,17345540,1.1773971361,5804,2 +5805,65494419,-0.3991968004,5805,2 +5806,24485302,-0.2712055824,5806,2 +5807,79822521,-0.5720535458,5807,2 +5808,42375009,0.1489289625,5808,2 +5809,75744566,-0.4075335629,5809,2 +5810,24426263,-0.0506703697,5810,2 +5811,57392754,0.2831642849,5811,2 +5812,22473650,-0.7612196499,5812,2 +5813,67688579,-1.5112948476,5813,2 +5814,27867558,0.0894678258,5814,2 +5815,70111488,0.589687903,5815,2 +5816,60800402,0.6974888611,5816,2 +5817,46891972,1.2890402211,5817,2 +5818,15622293,-1.4969265266,5818,2 +5819,27102054,1.7448344619,5819,2 +5820,85885085,2.4887473664,5820,2 +5821,82375717,-1.1924368708,5821,2 +5822,56712562,-0.5495446245,5822,2 +5823,27442864,0.3218081635,5823,2 +5824,52806643,0.8581943623,5824,2 +5825,85121276,0.2270738889,5825,2 +5826,23246297,1.6836373693,5826,2 +5827,72072502,0.2371593529,5827,2 +5828,56046458,-1.2354812045,5828,2 +5829,49561316,-0.3173483002,5829,2 +5830,46571002,1.9305058273,5830,2 +5831,56772838,-0.772696987,5831,2 +5832,33954568,-1.8177627693,5832,2 +5833,59547589,1.3797987811,5833,2 +5834,39696829,1.5771938358,5834,2 +5835,89378101,1.0119444946,5835,2 +5836,44093974,0.3901889536,5836,2 +5837,20137491,0.6867440216,5837,2 +5838,44287491,0.5836634499,5838,2 +5839,18599613,-0.9814318164,5839,2 +5840,31256190,-0.8762589059,5840,2 +5841,26429231,0.0995183627,5841,2 +5842,19891939,-0.8364120573,5842,2 +5843,56635810,-0.9015405853,5843,2 +5844,43498654,0.1683397804,5844,2 +5845,31379041,-1.6639600028,5845,2 +5846,49642742,1.3110651808,5846,2 +5847,82789747,-0.9545494307,5847,2 +5848,39489279,1.2353684697,5848,2 +5849,33933275,-0.0607568092,5849,2 +5850,60572313,1.2391716672,5850,2 +5851,64559994,-0.0484488287,5851,2 +5852,80514134,-0.5865517397,5852,2 +5853,76852290,-0.108291455,5853,2 +5854,56574990,-0.26982482,5854,2 +5855,53256694,-1.3212000791,5855,2 +5856,89597681,0.9593107842,5856,2 +5857,21594906,-0.4646358041,5857,2 +5858,59053366,1.0544134045,5858,2 +5859,12033642,-0.7294652707,5859,2 +5860,11301776,-0.158408766,5860,2 +5861,21331558,-0.4212653359,5861,2 +5862,78825138,0.6276626406,5862,2 +5863,10982925,-1.1702050194,5863,2 +5864,24816407,0.8905972224,5864,2 +5865,68601510,-0.2037171351,5865,2 +5866,51622696,0.4894219174,5866,2 +5867,37599648,-1.000949526,5867,2 +5868,81114097,-0.7246659815,5868,2 +5869,76352507,0.5947060301,5869,2 +5870,26971954,-0.7758248038,5870,2 +5871,58300189,0.8768914201,5871,2 +5872,75088699,-0.5214303138,5872,2 +5873,56483647,0.3445286593,5873,2 +5874,51942808,-0.7026507499,5874,2 +5875,58496938,-0.7969073652,5875,2 +5876,74192608,-0.560723061,5876,2 +5877,19280621,0.7347878095,5877,2 +5878,34855292,0.7916729381,5878,2 +5879,76042445,-0.3778047542,5879,2 +5880,19519792,1.3998715092,5880,2 +5881,42412635,0.6727879967,5881,2 +5882,69153853,0.7943360015,5882,2 +5883,46895543,-0.6517472988,5883,2 +5884,13001999,-0.4638243877,5884,2 +5885,50245018,0.5905591102,5885,2 +5886,85590401,0.747214467,5886,2 +5887,16733711,0.7731508673,5887,2 +5888,33869989,0.6811585445,5888,2 +5889,72438200,-0.7159619489,5889,2 +5890,31509225,0.451550255,5890,2 +5891,44794628,0.4461047618,5891,2 +5892,81507797,-2.2036833313,5892,2 +5893,82549764,-1.2011925003,5893,2 +5894,76483285,0.3163632088,5894,2 +5895,16837046,0.0659423134,5895,2 +5896,86477831,-0.4827152079,5896,2 +5897,80916685,-0.0769702728,5897,2 +5898,79806095,1.7350057989,5898,2 +5899,19340582,-0.6681551638,5899,2 +5900,10164859,-1.0237002126,5900,2 +5901,89092797,1.5744531071,5901,2 +5902,63050067,-0.2907478069,5902,2 +5903,25559571,1.7096448693,5903,2 +5904,26796453,2.0520121663,5904,2 +5905,73498437,0.056347762,5905,2 +5906,47936255,1.249134053,5906,2 +5907,75377275,-0.9929612311,5907,2 +5908,57620508,0.2758914057,5908,2 +5909,16159913,1.1700202516,5909,2 +5910,39631947,-0.6512101934,5910,2 +5911,74601997,-0.4254824339,5911,2 +5912,52043199,-0.2329643602,5912,2 +5913,18074655,0.4069607969,5913,2 +5914,43392771,-0.6254859098,5914,2 +5915,19665724,1.0850055275,5915,2 +5916,68501382,-1.2941665873,5916,2 +5917,25097480,0.2709130705,5917,2 +5918,61592931,-0.0966791264,5918,2 +5919,54096094,1.4666407178,5919,2 +5920,68272828,0.5450902581,5920,2 +5921,75652112,0.9745676264,5921,2 +5922,79487329,-1.1171990055,5922,2 +5923,45291369,0.0760434139,5923,2 +5924,86585930,-2.0768982712,5924,2 +5925,71702801,2.0835310324,5925,2 +5926,11563761,-0.7874760367,5926,2 +5927,60033984,-0.1252367751,5927,2 +5928,85466549,0.6229917961,5928,2 +5929,25010499,-0.8647848751,5929,2 +5930,83249771,-0.3971695645,5930,2 +5931,77218012,0.2064998454,5931,2 +5932,12504019,0.3824896924,5932,2 +5933,15933405,0.7854042756,5933,2 +5934,47506632,1.0538905123,5934,2 +5935,74272668,-1.6018543248,5935,2 +5936,45438322,-0.2267720683,5936,2 +5937,67965535,0.9166692269,5937,2 +5938,57675624,-1.4776704408,5938,2 +5939,59537554,-0.2298353871,5939,2 +5940,36351848,0.1980042012,5940,2 +5941,75488845,0.706478542,5941,2 +5942,77860806,-0.593862209,5942,2 +5943,75391993,0.7576892756,5943,2 +5944,87289693,0.2517715302,5944,2 +5945,30006392,-1.4429426786,5945,2 +5946,64132343,-1.1262206193,5946,2 +5947,77341622,-1.5478619156,5947,2 +5948,34604117,1.7768642422,5948,2 +5949,35850696,0.2296722601,5949,2 +5950,71166573,-0.7916157066,5950,2 +5951,45156036,0.0114899751,5951,2 +5952,78975048,-0.4811446979,5952,2 +5953,75065093,-1.2616875512,5953,2 +5954,75378704,0.2253832556,5954,2 +5955,65184843,-0.2917235893,5955,2 +5956,54534389,-1.0358417159,5956,2 +5957,21567132,0.1194514603,5957,2 +5958,80777227,-0.0908967484,5958,2 +5959,45344566,1.9888075744,5959,2 +5960,88709740,-0.8200050937,5960,2 +5961,48096531,0.2195023284,5961,2 +5962,32457185,-1.2629597206,5962,2 +5963,79701116,-0.7439766449,5963,2 +5964,17622546,-1.0187708293,5964,2 +5965,15683665,-1.4130636077,5965,2 +5966,10159660,-0.3194949669,5966,2 +5967,33870236,-0.4808122224,5967,2 +5968,55202425,-0.2165139004,5968,2 +5969,19632010,-1.0913683422,5969,2 +5970,40254411,0.3661934732,5970,2 +5971,42836525,1.7378854074,5971,2 +5972,37970710,2.1115556305,5972,2 +5973,13831034,0.6300754147,5973,2 +5974,77846021,-0.8727030184,5974,2 +5975,24632089,0.8268014688,5975,2 +5976,38599856,-0.8699646487,5976,2 +5977,87581501,0.9501354138,5977,2 +5978,24469739,0.667621846,5978,2 +5979,44311459,-0.2178567666,5979,2 +5980,66891004,-0.5627119853,5980,2 +5981,83088604,1.7691858287,5981,2 +5982,52799809,-0.8365922111,5982,2 +5983,48621000,-0.9658005011,5983,2 +5984,29087121,1.5697447829,5984,2 +5985,64522710,0.1728813994,5985,2 +5986,60938349,0.3077930698,5986,2 +5987,41314798,0.1643318535,5987,2 +5988,20540495,0.2236205041,5988,2 +5989,34585969,-0.1231213823,5989,2 +5990,59237222,-1.6307791159,5990,2 +5991,75371238,2.1227305309,5991,2 +5992,12815283,-0.0352724313,5992,2 +5993,70307971,-0.7049482891,5993,2 +5994,23024837,1.2303710139,5994,2 +5995,37252899,-0.6888124467,5995,2 +5996,65766936,-0.0639875522,5996,2 +5997,60171981,-1.4080334422,5997,2 +5998,13151162,-0.7348157037,5998,2 +5999,37414125,0.0451672101,5999,2 +6000,80995958,0.9813033062,6000,3 +6001,69363974,1.3081947646,6001,3 +6002,83613305,0.0758157565,6002,3 +6003,19149266,0.3280910339,6003,3 +6004,89326292,-0.1587747717,6004,3 +6005,30396561,0.2441648073,6005,3 +6006,37059892,0.1626766766,6006,3 +6007,42165614,-0.8289338347,6007,3 +6008,52148896,-0.1309321463,6008,3 +6009,63373847,-0.6598413983,6009,3 +6010,89398831,0.8246190976,6010,3 +6011,72244605,1.4997535588,6011,3 +6012,84701978,0.6422237297,6012,3 +6013,80138564,-1.6549100784,6013,3 +6014,77882226,0.1041408265,6014,3 +6015,76711948,0.2315029413,6015,3 +6016,51094781,1.2768735588,6016,3 +6017,13717823,-0.798074267,6017,3 +6018,60099601,-0.9244563091,6018,3 +6019,40820218,1.6134712903,6019,3 +6020,37421314,0.4818372359,6020,3 +6021,53300353,-0.0840360332,6021,3 +6022,38414530,-0.6580649346,6022,3 +6023,85343137,0.0506683907,6023,3 +6024,47907091,-0.3719913726,6024,3 +6025,76097184,-1.3182847925,6025,3 +6026,27636317,0.7500710964,6026,3 +6027,49476319,-0.3574584775,6027,3 +6028,27672457,0.1582687321,6028,3 +6029,88913761,-0.2562947744,6029,3 +6030,59408914,0.038725219,6030,3 +6031,64806131,-0.9934446647,6031,3 +6032,31652601,-1.2604924936,6032,3 +6033,10120184,-0.0425131123,6033,3 +6034,52638121,0.1548843813,6034,3 +6035,75669298,0.7090213593,6035,3 +6036,33495578,-0.1462284502,6036,3 +6037,81287038,2.3269149478,6037,3 +6038,48581021,-1.1285017622,6038,3 +6039,63674261,-0.9648430805,6039,3 +6040,10809763,2.3458799707,6040,3 +6041,38171032,0.2747120202,6041,3 +6042,31443520,0.9726116607,6042,3 +6043,14417776,-0.5739940151,6043,3 +6044,83364365,1.5687980445,6044,3 +6045,65197369,0.4515063084,6045,3 +6046,71184569,0.345062365,6046,3 +6047,84553527,0.4870980584,6047,3 +6048,61348495,-1.8242640763,6048,3 +6049,11137003,0.9681472732,6049,3 +6050,77528541,-1.116539021,6050,3 +6051,62212241,0.4941027921,6051,3 +6052,54933810,-1.7275055992,6052,3 +6053,42845568,0.8380647972,6053,3 +6054,64716107,-0.2881422426,6054,3 +6055,36578206,-0.6935231897,6055,3 +6056,68873637,0.1804068239,6056,3 +6057,61216130,-1.670965911,6057,3 +6058,66195755,-0.5566251254,6058,3 +6059,61991058,-0.3950674407,6059,3 +6060,33106897,0.2572440172,6060,3 +6061,37195811,0.5064106956,6061,3 +6062,29977724,-0.2795059053,6062,3 +6063,61094696,-0.9867858383,6063,3 +6064,44720229,2.2174922826,6064,3 +6065,84934561,0.8399426497,6065,3 +6066,74348052,0.2224150986,6066,3 +6067,18387780,1.8882955768,6067,3 +6068,66874940,-0.1058206604,6068,3 +6069,33509205,0.1146990539,6069,3 +6070,13641737,0.3341806935,6070,3 +6071,82037345,-0.8206905489,6071,3 +6072,81175967,-0.1456713485,6072,3 +6073,27267615,-1.1034742903,6073,3 +6074,82744594,0.5610186616,6074,3 +6075,22041299,0.5561465128,6075,3 +6076,41946637,-0.950667464,6076,3 +6077,61247599,-0.2452554418,6077,3 +6078,77089370,0.0855278005,6078,3 +6079,44732336,-0.9505781681,6079,3 +6080,12840012,2.4426775014,6080,3 +6081,55401932,0.05403336,6081,3 +6082,70764543,-0.0589117591,6082,3 +6083,21991275,0.3545989374,6083,3 +6084,17684742,1.8956646748,6084,3 +6085,17972351,-1.8547387452,6085,3 +6086,44448239,-0.8533669445,6086,3 +6087,40737481,0.3806600209,6087,3 +6088,88633764,-0.199135734,6088,3 +6089,89357112,-1.2663611029,6089,3 +6090,67211323,0.7831831144,6090,3 +6091,74826858,0.0606966843,6091,3 +6092,12989296,0.1030613693,6092,3 +6093,18957942,-1.1334207834,6093,3 +6094,81075950,0.6107626176,6094,3 +6095,78331533,-0.1594490298,6095,3 +6096,67285005,-0.0509340275,6096,3 +6097,21722427,-1.7460600954,6097,3 +6098,26575913,-0.3029154637,6098,3 +6099,19151841,-0.5190552912,6099,3 +6100,64224750,0.8192204945,6100,3 +6101,55815904,-0.8093043379,6101,3 +6102,62705892,0.4386121627,6102,3 +6103,80220819,-0.9341006679,6103,3 +6104,30990340,0.9916149087,6104,3 +6105,10399574,0.8178720663,6105,3 +6106,62275437,0.4629958601,6106,3 +6107,41795919,-0.8540366995,6107,3 +6108,72498273,-0.1796100302,6108,3 +6109,11428921,0.4354563651,6109,3 +6110,43225121,2.1840808817,6110,3 +6111,78759094,-1.245419264,6111,3 +6112,74731548,-0.3975119524,6112,3 +6113,11955527,0.039124404,6113,3 +6114,14351709,-1.8766761771,6114,3 +6115,81602639,0.6369219138,6115,3 +6116,12082302,0.071267197,6116,3 +6117,72317665,-2.476872808,6117,3 +6118,86604367,2.4461109813,6118,3 +6119,66107026,-0.5743469684,6119,3 +6120,75004239,-0.2173260925,6120,3 +6121,30821685,1.3135224834,6121,3 +6122,78302805,-0.7626404193,6122,3 +6123,87695703,0.4026696477,6123,3 +6124,76679844,-0.7116625122,6124,3 +6125,40925042,-0.6713715726,6125,3 +6126,79905380,-0.157772737,6126,3 +6127,86951710,-0.8914187942,6127,3 +6128,58318261,-0.0435626443,6128,3 +6129,42976681,-0.5301463691,6129,3 +6130,11279968,1.6761018988,6130,3 +6131,26153784,-0.5791354254,6131,3 +6132,60979961,0.3459306945,6132,3 +6133,85143554,0.5411935579,6133,3 +6134,89412825,-1.0063034366,6134,3 +6135,23755031,0.0052275796,6135,3 +6136,79219912,-0.2927234744,6136,3 +6137,19845234,-0.2915854993,6137,3 +6138,43511593,1.7588762595,6138,3 +6139,44409454,0.4349775333,6139,3 +6140,74195006,-0.1868051016,6140,3 +6141,19711391,-0.3657727426,6141,3 +6142,25119576,-1.435733799,6142,3 +6143,45581179,-0.4297557161,6143,3 +6144,69122384,0.9686754971,6144,3 +6145,27064631,1.0031557802,6145,3 +6146,85785966,-1.8782367423,6146,3 +6147,69324622,-0.2063784477,6147,3 +6148,70743444,-0.4694210625,6148,3 +6149,55152730,0.2568349204,6149,3 +6150,48953306,-1.0890352465,6150,3 +6151,64142867,-0.353045563,6151,3 +6152,20041529,1.7516685839,6152,3 +6153,49023894,-0.5305179186,6153,3 +6154,74397685,-0.7347584618,6154,3 +6155,78753565,-0.6376394068,6155,3 +6156,32338576,-0.8037833148,6156,3 +6157,68230611,-0.0884641141,6157,3 +6158,20585988,0.7675452631,6158,3 +6159,84956700,-2.4334703455,6159,3 +6160,89367831,-0.3186683303,6160,3 +6161,89322016,0.0394066696,6161,3 +6162,28544726,0.044948746,6162,3 +6163,25886958,1.4647970641,6163,3 +6164,88437921,0.8269278428,6164,3 +6165,52391578,0.3107355627,6165,3 +6166,74879056,-0.6796571787,6166,3 +6167,51770629,-0.664788474,6167,3 +6168,31459085,1.047038483,6168,3 +6169,34437425,-1.2491009239,6169,3 +6170,53175743,0.5232001343,6170,3 +6171,46071745,0.0326996779,6171,3 +6172,63613156,0.357082445,6172,3 +6173,46087787,0.2079690118,6173,3 +6174,24428069,-1.4808421005,6174,3 +6175,76122556,0.5653072219,6175,3 +6176,44574356,-0.8109578752,6176,3 +6177,54260217,0.1466261201,6177,3 +6178,78365989,1.2148978053,6178,3 +6179,46222227,-0.3893032017,6179,3 +6180,81238014,0.2473551202,6180,3 +6181,53163533,0.7081751357,6181,3 +6182,78817811,-0.1664441297,6182,3 +6183,42676450,-0.27176182,6183,3 +6184,11853416,-2.659803908,6184,3 +6185,36514773,-0.1132723844,6185,3 +6186,27160783,-1.3991132777,6186,3 +6187,62660764,0.2579368758,6187,3 +6188,87735307,1.7407263333,6188,3 +6189,26748369,1.692682463,6189,3 +6190,35696436,2.0181087678,6190,3 +6191,28383527,0.5508728064,6191,3 +6192,67737022,0.3333294367,6192,3 +6193,58806807,2.0354083086,6193,3 +6194,25677333,-0.5248658862,6194,3 +6195,63475503,-0.856880001,6195,3 +6196,41835163,0.5233329255,6196,3 +6197,30527758,1.2410911559,6197,3 +6198,37384806,-0.6992777771,6198,3 +6199,38217213,-0.6598613317,6199,3 +6200,14054835,0.9893939394,6200,3 +6201,65125672,-0.0737345296,6201,3 +6202,36485647,-0.2711656456,6202,3 +6203,84627154,-0.5882058854,6203,3 +6204,66102786,1.0500291393,6204,3 +6205,40081159,-0.1852490102,6205,3 +6206,81775501,-1.2579649072,6206,3 +6207,50783525,-0.5318429518,6207,3 +6208,74500987,-0.3965491645,6208,3 +6209,68528875,0.3208272544,6209,3 +6210,30771677,-0.5354542637,6210,3 +6211,61615381,0.778034303,6211,3 +6212,80922466,0.0183641914,6212,3 +6213,74555040,2.7080513745,6213,3 +6214,11912822,0.6644162106,6214,3 +6215,12763685,0.3755671306,6215,3 +6216,26014379,-0.3231748459,6216,3 +6217,13700234,0.3837505571,6217,3 +6218,48187566,-0.1608676019,6218,3 +6219,47900141,0.4499196023,6219,3 +6220,46076267,-0.2938566616,6220,3 +6221,15359089,-1.0958522832,6221,3 +6222,62498042,0.6122447638,6222,3 +6223,87999673,0.2382119701,6223,3 +6224,12682378,-2.4328490224,6224,3 +6225,63114611,0.5046607646,6225,3 +6226,37447438,-1.5459576417,6226,3 +6227,36517864,0.709409017,6227,3 +6228,25712211,1.6131256968,6228,3 +6229,41772817,0.4740491922,6229,3 +6230,54738671,0.8496010561,6230,3 +6231,16094057,-0.4371354107,6231,3 +6232,55890292,0.6272911025,6232,3 +6233,11072150,0.3407293736,6233,3 +6234,15953733,-1.2700725723,6234,3 +6235,77104059,0.2370489077,6235,3 +6236,23311673,0.6634493617,6236,3 +6237,10201926,-0.7114586533,6237,3 +6238,37230674,0.6555975616,6238,3 +6239,33433795,-0.927682309,6239,3 +6240,48641273,-0.3565764899,6240,3 +6241,34557863,-0.2353511587,6241,3 +6242,67513361,0.3101512776,6242,3 +6243,85003134,-0.5200569327,6243,3 +6244,48473426,0.1294543466,6244,3 +6245,18143421,0.2188533945,6245,3 +6246,54117003,-2.4910881473,6246,3 +6247,41806781,0.4558663135,6247,3 +6248,67923250,0.1836718524,6248,3 +6249,20490849,0.5133354034,6249,3 +6250,15429467,-0.5692568507,6250,3 +6251,14013670,1.4327044296,6251,3 +6252,85124850,0.0767379273,6252,3 +6253,33176653,1.8864391105,6253,3 +6254,58957779,0.1108182176,6254,3 +6255,80246894,-0.2331282085,6255,3 +6256,52784089,0.8834588957,6256,3 +6257,30412087,-0.2474791602,6257,3 +6258,62012714,1.6532278197,6258,3 +6259,11434785,-0.7906263117,6259,3 +6260,44476570,0.563083343,6260,3 +6261,57341734,-0.626859351,6261,3 +6262,13783491,0.9185092215,6262,3 +6263,21578697,2.0972627355,6263,3 +6264,83312482,-0.3799944775,6264,3 +6265,27191748,-0.1486156379,6265,3 +6266,13839878,0.8290772058,6266,3 +6267,85662953,0.5546877713,6267,3 +6268,61032665,1.2111113344,6268,3 +6269,22309030,-1.455321825,6269,3 +6270,20176441,0.5946394869,6270,3 +6271,64720405,2.4747782291,6271,3 +6272,12433323,-0.925227126,6272,3 +6273,48588608,-0.7355200672,6273,3 +6274,35183355,1.6277317907,6274,3 +6275,38538212,0.7308130173,6275,3 +6276,22335607,-0.6666666052,6276,3 +6277,78058904,1.8384355699,6277,3 +6278,66925344,-1.2785675308,6278,3 +6279,66277430,0.8892264319,6279,3 +6280,63843762,1.5000042695,6280,3 +6281,70184882,-1.51268849,6281,3 +6282,41295329,2.0022870254,6282,3 +6283,40378552,-0.0246991015,6283,3 +6284,49545814,1.0843664829,6284,3 +6285,15529853,1.4730679194,6285,3 +6286,14268073,-0.0995656828,6286,3 +6287,46399378,-0.0555077876,6287,3 +6288,82585570,-1.1530006587,6288,3 +6289,28241962,0.6997415779,6289,3 +6290,42614914,-0.7905534071,6290,3 +6291,40148425,0.340406604,6291,3 +6292,21641347,-0.1965552735,6292,3 +6293,50983971,-0.0888755441,6293,3 +6294,72569869,0.4501433021,6294,3 +6295,73802574,-0.9507676672,6295,3 +6296,51658032,-0.7832502368,6296,3 +6297,89333968,0.5765944936,6297,3 +6298,23360027,-0.3946131432,6298,3 +6299,24608184,-0.5137055711,6299,3 +6300,83436137,-0.1851470476,6300,3 +6301,55024886,0.168789277,6301,3 +6302,52934125,-0.6639434788,6302,3 +6303,26976524,-0.3118477856,6303,3 +6304,39942484,1.3175378816,6304,3 +6305,12045489,-0.4604897829,6305,3 +6306,41516164,-1.3188003611,6306,3 +6307,16515415,-1.0489127016,6307,3 +6308,45893611,-0.0861574999,6308,3 +6309,62720539,1.0763531676,6309,3 +6310,47741356,-1.0108312417,6310,3 +6311,25995601,0.1373709705,6311,3 +6312,72513410,0.3558393158,6312,3 +6313,78823155,0.1351627919,6313,3 +6314,54206459,0.8025036324,6314,3 +6315,75655495,0.557642941,6315,3 +6316,84082442,-2.0805960761,6316,3 +6317,39689675,-0.3044120137,6317,3 +6318,65970152,0.3056557468,6318,3 +6319,46506280,0.0289280788,6319,3 +6320,25498596,1.0872948665,6320,3 +6321,54461147,-0.0485331099,6321,3 +6322,70106987,0.4098962899,6322,3 +6323,68169581,-0.13318914,6323,3 +6324,12176971,0.3906925014,6324,3 +6325,52032530,-0.0386691788,6325,3 +6326,89917256,0.7863912859,6326,3 +6327,60856973,-0.9418248934,6327,3 +6328,32623299,0.8027836252,6328,3 +6329,88032287,-0.5693279797,6329,3 +6330,80906811,1.1895208633,6330,3 +6331,59813598,-0.1858529835,6331,3 +6332,55671070,-0.3089687517,6332,3 +6333,81302196,-1.6548570461,6333,3 +6334,43402056,-1.3699194784,6334,3 +6335,67256100,-0.0473959849,6335,3 +6336,61918562,0.0928324683,6336,3 +6337,82370427,0.7037881926,6337,3 +6338,70459203,-0.2423489833,6338,3 +6339,51489937,-0.5226417289,6339,3 +6340,21251125,-0.729728189,6340,3 +6341,35907048,0.2807457193,6341,3 +6342,40467554,-0.9415988075,6342,3 +6343,22097696,-0.5194333259,6343,3 +6344,84852165,-0.4735678317,6344,3 +6345,45939859,0.1669638621,6345,3 +6346,12444573,-0.8975080506,6346,3 +6347,62391373,-0.5600941272,6347,3 +6348,71705545,0.4351586551,6348,3 +6349,24672872,-0.6416048903,6349,3 +6350,20225063,1.3219214466,6350,3 +6351,16899889,0.8423756441,6351,3 +6352,42448432,0.2868412732,6352,3 +6353,77955064,-0.7240010369,6353,3 +6354,69854521,-0.6801561262,6354,3 +6355,42586148,0.1546297936,6355,3 +6356,22269010,-0.3075834467,6356,3 +6357,87013963,0.2386899521,6357,3 +6358,76462156,0.1346688324,6358,3 +6359,23372851,0.4374983055,6359,3 +6360,43427003,-1.1068032072,6360,3 +6361,68656996,0.5703234097,6361,3 +6362,78864714,-0.7751441593,6362,3 +6363,24294813,0.4235930578,6363,3 +6364,68465125,0.8892250208,6364,3 +6365,23279983,-0.9099922196,6365,3 +6366,20638331,0.1735174231,6366,3 +6367,80620531,-0.0124275247,6367,3 +6368,62910192,0.2552267065,6368,3 +6369,78478867,0.7031096954,6369,3 +6370,11376623,-0.0588051934,6370,3 +6371,50177605,-0.3085488408,6371,3 +6372,36659740,0.275109582,6372,3 +6373,76860881,0.6742281077,6373,3 +6374,37999199,0.0106467998,6374,3 +6375,78838439,-1.7512700386,6375,3 +6376,63379651,0.0502681652,6376,3 +6377,32946142,1.1687475057,6377,3 +6378,85576635,-1.1557462736,6378,3 +6379,16091155,0.0554626076,6379,3 +6380,17429173,-1.4005978749,6380,3 +6381,36151849,1.2306814412,6381,3 +6382,78597411,-0.0957264268,6382,3 +6383,11913619,-0.0015726196,6383,3 +6384,84267142,1.6773755465,6384,3 +6385,86408873,1.3402670666,6385,3 +6386,56610403,0.8738696229,6386,3 +6387,28452411,-0.8627332482,6387,3 +6388,40359408,-1.0092059936,6388,3 +6389,39075269,-0.5166919778,6389,3 +6390,27302412,-1.4158867998,6390,3 +6391,64997204,-0.4403617025,6391,3 +6392,85376680,1.2315577415,6392,3 +6393,75406344,-0.1555060696,6393,3 +6394,11513420,-0.2548477479,6394,3 +6395,80103131,-0.0049077205,6395,3 +6396,32603517,2.0185852452,6396,3 +6397,44803033,-0.5160403321,6397,3 +6398,76130522,-0.0923335976,6398,3 +6399,25191593,-0.9248445023,6399,3 +6400,28040661,0.6452081619,6400,3 +6401,20487091,1.5218978286,6401,3 +6402,77314668,-0.6830931395,6402,3 +6403,51255458,-0.562409292,6403,3 +6404,66033717,-0.1466436046,6404,3 +6405,52797261,-1.7005819308,6405,3 +6406,36881282,-2.6914381508,6406,3 +6407,67068481,0.510856181,6407,3 +6408,47931027,0.4234397949,6408,3 +6409,62815239,-0.0940679611,6409,3 +6410,80654422,1.599011976,6410,3 +6411,61809908,-1.3764159905,6411,3 +6412,69532755,-0.3577707754,6412,3 +6413,47520427,-1.4364550633,6413,3 +6414,67221049,-0.4666622512,6414,3 +6415,23405781,-0.4298970554,6415,3 +6416,79129404,-0.3428786086,6416,3 +6417,61027924,2.1094299654,6417,3 +6418,81138002,-0.7737266228,6418,3 +6419,51748418,-0.2595369301,6419,3 +6420,11972090,-0.2915595414,6420,3 +6421,24337068,-0.7581880328,6421,3 +6422,65788807,-1.3450647997,6422,3 +6423,32842117,0.0872914503,6423,3 +6424,74055607,0.7918318107,6424,3 +6425,40461515,-0.3566160671,6425,3 +6426,69256263,-0.6516171105,6426,3 +6427,52503005,0.5156108124,6427,3 +6428,65885046,-0.2963363533,6428,3 +6429,51821303,0.2019922304,6429,3 +6430,68594246,0.3544246265,6430,3 +6431,65176222,0.5042320176,6431,3 +6432,76559968,-0.3824519186,6432,3 +6433,16253821,0.5743976139,6433,3 +6434,31461988,-0.3062857702,6434,3 +6435,50169612,-0.2993273404,6435,3 +6436,63333910,0.4029004282,6436,3 +6437,42791143,-1.426435754,6437,3 +6438,37570788,0.1841505588,6438,3 +6439,80821194,-0.3499366746,6439,3 +6440,73759716,1.233986723,6440,3 +6441,48299692,-0.4134903192,6441,3 +6442,61068329,-0.5651015645,6442,3 +6443,30862614,-0.4356444222,6443,3 +6444,46163080,-0.4511249205,6444,3 +6445,86604207,-2.3426642404,6445,3 +6446,27818125,0.0791288296,6446,3 +6447,40597454,-0.4937485753,6447,3 +6448,86256808,-0.103454128,6448,3 +6449,89813958,-1.5821130972,6449,3 +6450,13889300,-0.2569952652,6450,3 +6451,60551063,0.1702460462,6451,3 +6452,45404229,1.2719808084,6452,3 +6453,21140975,-0.1134719999,6453,3 +6454,86695175,-1.5392076452,6454,3 +6455,15216190,-0.6273670065,6455,3 +6456,43727131,2.9535907963,6456,3 +6457,16772669,-0.3989383526,6457,3 +6458,71266972,0.1085391239,6458,3 +6459,28001126,-1.6700556971,6459,3 +6460,75551715,-1.3910232076,6460,3 +6461,56092566,0.626089526,6461,3 +6462,71401281,0.0062097553,6462,3 +6463,36226379,0.0140002608,6463,3 +6464,24086791,-0.1732795664,6464,3 +6465,44452687,1.195872436,6465,3 +6466,56807625,-0.801135802,6466,3 +6467,32772613,0.1602124283,6467,3 +6468,30911629,-0.5871283507,6468,3 +6469,57211862,-0.6373181577,6469,3 +6470,74510236,1.5885744929,6470,3 +6471,39872998,0.865876713,6471,3 +6472,43485919,-0.5295510789,6472,3 +6473,75786961,0.6469136561,6473,3 +6474,31699762,-0.357184445,6474,3 +6475,75611485,2.4906752016,6475,3 +6476,87025408,0.3276716113,6476,3 +6477,75929289,0.262420405,6477,3 +6478,15041475,-0.1244006656,6478,3 +6479,84068693,0.4914057968,6479,3 +6480,46250425,0.1547075614,6480,3 +6481,63698287,0.8750444027,6481,3 +6482,23561025,0.7597955025,6482,3 +6483,34855760,-2.2789110204,6483,3 +6484,19872510,0.6607647928,6484,3 +6485,65784761,-0.0331930543,6485,3 +6486,54621039,-0.47563584,6486,3 +6487,21652163,-1.3449874244,6487,3 +6488,40622419,1.0816618007,6488,3 +6489,49362382,0.1968492233,6489,3 +6490,29632407,-0.5675564906,6490,3 +6491,66649453,0.5394929138,6491,3 +6492,25060780,0.3117457948,6492,3 +6493,45697637,-0.344850509,6493,3 +6494,78899133,1.00078475,6494,3 +6495,32540696,-0.8058495565,6495,3 +6496,36122298,1.6404963776,6496,3 +6497,83024147,0.7128603234,6497,3 +6498,19732576,1.5017298381,6498,3 +6499,73788758,1.5911826503,6499,3 +6500,57594755,-0.3333876973,6500,3 +6501,10991519,-1.3668993393,6501,3 +6502,35984101,0.7982733648,6502,3 +6503,15054936,1.3168450161,6503,3 +6504,17327089,1.2787925144,6504,3 +6505,47622588,-0.4432929603,6505,3 +6506,31718235,0.2262354714,6506,3 +6507,61772778,0.6368036089,6507,3 +6508,29344923,-3.1045043133,6508,3 +6509,26500907,-0.1843495902,6509,3 +6510,11609149,-2.2138018844,6510,3 +6511,37311226,0.293821966,6511,3 +6512,55532995,-0.4055157791,6512,3 +6513,58776010,0.5790434458,6513,3 +6514,65403161,1.02300439,6514,3 +6515,44801566,-0.7750444611,6515,3 +6516,68048912,-0.4611473409,6516,3 +6517,44780112,-0.1656996706,6517,3 +6518,38911756,-0.8999497123,6518,3 +6519,40844655,0.0510400865,6519,3 +6520,44562588,0.2176054117,6520,3 +6521,32909621,-0.2659335767,6521,3 +6522,14905464,-0.5230118753,6522,3 +6523,68232147,-0.8479686046,6523,3 +6524,70628764,-1.1781869047,6524,3 +6525,20843343,-0.3414927507,6525,3 +6526,70321837,-1.658810874,6526,3 +6527,16279219,-0.5562985507,6527,3 +6528,13954053,1.0174401072,6528,3 +6529,35653722,0.6774502883,6529,3 +6530,85526413,-0.7582353835,6530,3 +6531,88936355,-0.7171059715,6531,3 +6532,34265526,-0.0582193839,6532,3 +6533,68473358,-0.3258259104,6533,3 +6534,69023746,-0.6905456694,6534,3 +6535,75097498,-1.7437876534,6535,3 +6536,52362228,-0.4906811866,6536,3 +6537,75123026,0.0118455457,6537,3 +6538,27445440,-0.844466391,6538,3 +6539,31661995,-1.1459853773,6539,3 +6540,72576503,-1.0433099915,6540,3 +6541,11044981,-0.7638612097,6541,3 +6542,44029356,-0.4172626198,6542,3 +6543,45106624,-0.7673879753,6543,3 +6544,55195857,-0.4164263951,6544,3 +6545,56102624,0.4745238141,6545,3 +6546,21197757,-0.191195397,6546,3 +6547,51611490,0.6225413967,6547,3 +6548,89545412,-0.5547568053,6548,3 +6549,13354913,-0.3853249214,6549,3 +6550,46530143,0.6679524045,6550,3 +6551,56760122,0.2264996375,6551,3 +6552,68104412,0.5869463614,6552,3 +6553,60656193,-0.0391156857,6553,3 +6554,38029905,-0.197856663,6554,3 +6555,34711233,-1.311159723,6555,3 +6556,89954835,-0.6573561405,6556,3 +6557,66451655,0.3366788583,6557,3 +6558,31231832,1.4290508112,6558,3 +6559,47494165,-1.2841251337,6559,3 +6560,89002360,-0.7517675099,6560,3 +6561,45511207,0.6093746864,6561,3 +6562,15322418,-1.5551858754,6562,3 +6563,25552236,0.3219137836,6563,3 +6564,34920281,0.2894037832,6564,3 +6565,80642280,-0.2970916234,6565,3 +6566,14609614,-0.634587499,6566,3 +6567,66721314,-0.9509824335,6567,3 +6568,40662251,1.6609975223,6568,3 +6569,26836835,-0.1097554555,6569,3 +6570,49208141,0.4655632965,6570,3 +6571,32344424,-0.914299587,6571,3 +6572,82346140,-0.5562612534,6572,3 +6573,43468538,0.9569958,6573,3 +6574,63984051,2.4033163437,6574,3 +6575,79790554,0.62674209,6575,3 +6576,88057404,-0.0489857833,6576,3 +6577,50589801,0.9270614056,6577,3 +6578,77460894,-1.5139667665,6578,3 +6579,87538846,0.994585391,6579,3 +6580,34403108,1.738476864,6580,3 +6581,51274058,1.9232560137,6581,3 +6582,55474164,1.6864321179,6582,3 +6583,81502688,0.5613708493,6583,3 +6584,80980136,-0.8938090565,6584,3 +6585,29418947,-0.6766117453,6585,3 +6586,13882591,-0.766142596,6586,3 +6587,68418895,1.0817750566,6587,3 +6588,29959165,0.4343740816,6588,3 +6589,73447732,-0.2382033603,6589,3 +6590,56225632,0.1892598448,6590,3 +6591,65744315,-0.7139700168,6591,3 +6592,61880687,-0.0236195022,6592,3 +6593,22753392,1.661674731,6593,3 +6594,42495569,0.3025378079,6594,3 +6595,52563032,1.3808482954,6595,3 +6596,35741720,0.8319557756,6596,3 +6597,62257842,0.9735968041,6597,3 +6598,44138975,-0.2156929168,6598,3 +6599,81471551,0.6932662983,6599,3 +6600,69243799,-0.5781134526,6600,3 +6601,55527382,-1.2986767014,6601,3 +6602,12206522,-0.4955812655,6602,3 +6603,39608354,0.2534014869,6603,3 +6604,68612077,-0.0627951868,6604,3 +6605,54644278,0.9108837776,6605,3 +6606,62132934,0.1668620792,6606,3 +6607,43765784,0.0027009771,6607,3 +6608,35133040,0.4702371045,6608,3 +6609,45497335,-1.5309150758,6609,3 +6610,35902911,-0.2037525119,6610,3 +6611,18170210,-1.5234391003,6611,3 +6612,37460752,-0.8463470745,6612,3 +6613,36950492,0.7950963446,6613,3 +6614,46924641,0.0813108742,6614,3 +6615,54150763,-0.8184320971,6615,3 +6616,19841957,0.3995357832,6616,3 +6617,10977893,-0.4996464014,6617,3 +6618,84401422,-0.7873295449,6618,3 +6619,34334657,-1.0354384971,6619,3 +6620,81452333,-0.4129218531,6620,3 +6621,54742586,-0.0442934104,6621,3 +6622,11888727,1.032053769,6622,3 +6623,18043430,0.3127354734,6623,3 +6624,43496368,-0.8995037638,6624,3 +6625,12755224,-0.7943195369,6625,3 +6626,52681259,0.8751708875,6626,3 +6627,42935785,-0.0557562078,6627,3 +6628,85449564,0.5881339328,6628,3 +6629,11269439,-1.5194899612,6629,3 +6630,37066374,1.4705944859,6630,3 +6631,26927805,-0.8549974819,6631,3 +6632,81038438,-0.2878695153,6632,3 +6633,76339526,-0.4529625473,6633,3 +6634,77047297,1.6337615689,6634,3 +6635,32756228,-0.7944952337,6635,3 +6636,10637536,-0.117563183,6636,3 +6637,65428855,1.6126349916,6637,3 +6638,19507988,0.4862299971,6638,3 +6639,79907636,-1.9516327496,6639,3 +6640,10228587,0.3049803238,6640,3 +6641,21695139,-0.3836383448,6641,3 +6642,65723656,-1.057677691,6642,3 +6643,59662371,0.3398303766,6643,3 +6644,27306621,0.1867154343,6644,3 +6645,46937130,0.649597881,6645,3 +6646,27868774,0.4252758721,6646,3 +6647,17909522,-0.8349227687,6647,3 +6648,26729774,0.1607426736,6648,3 +6649,10989567,0.4660462474,6649,3 +6650,80690689,1.4318803043,6650,3 +6651,46984802,-1.3998509396,6651,3 +6652,27350135,1.6045306258,6652,3 +6653,50114002,1.3393449427,6653,3 +6654,22557467,0.6167821605,6654,3 +6655,36200317,-2.177338101,6655,3 +6656,73639277,-2.5809660302,6656,3 +6657,55807105,-0.1210273451,6657,3 +6658,87174233,-0.1168225489,6658,3 +6659,84203291,-0.1902908055,6659,3 +6660,75525278,0.8493434347,6660,3 +6661,16643803,-0.3304684815,6661,3 +6662,23334215,0.4773334058,6662,3 +6663,16835379,1.4278278102,6663,3 +6664,51093036,-1.7974382559,6664,3 +6665,87844299,-0.4922094017,6665,3 +6666,62890626,0.8867839209,6666,3 +6667,27041460,-0.7980352064,6667,3 +6668,19182116,0.4467321449,6668,3 +6669,13125575,0.8018527463,6669,3 +6670,78060525,0.2620722785,6670,3 +6671,10766058,0.3240653108,6671,3 +6672,34623851,-1.1944171161,6672,3 +6673,80911266,0.4612928897,6673,3 +6674,37367395,-0.0319912016,6674,3 +6675,42938521,-1.8241462916,6675,3 +6676,68367117,-0.8396148338,6676,3 +6677,83211372,-0.2341411991,6677,3 +6678,79852906,0.7353609883,6678,3 +6679,80011101,-0.068276832,6679,3 +6680,38159448,-0.4592266167,6680,3 +6681,12869047,-0.6362536651,6681,3 +6682,22798726,-1.5228102138,6682,3 +6683,38407915,2.0537795977,6683,3 +6684,85692774,1.2964166259,6684,3 +6685,29197877,-1.0771116114,6685,3 +6686,87977141,0.8958366512,6686,3 +6687,51057926,-1.2115515091,6687,3 +6688,58701673,-0.4783514828,6688,3 +6689,87550258,-0.876096904,6689,3 +6690,89094950,0.7189140495,6690,3 +6691,24378673,-1.6976645451,6691,3 +6692,11879249,-1.2571471906,6692,3 +6693,16232348,1.3070297862,6693,3 +6694,47560778,-0.1055092113,6694,3 +6695,12429538,-0.0777744474,6695,3 +6696,32334316,0.3274541746,6696,3 +6697,16158720,-2.9125546602,6697,3 +6698,86840274,0.1089942179,6698,3 +6699,67537391,1.1637705116,6699,3 +6700,43483791,0.8801765128,6700,3 +6701,31216735,-2.854302398,6701,3 +6702,70787853,-0.9741095399,6702,3 +6703,54687142,0.1982678537,6703,3 +6704,29582605,0.2281426556,6704,3 +6705,31487488,1.8532064512,6705,3 +6706,32532425,0.4165798389,6706,3 +6707,74135155,0.2159132986,6707,3 +6708,39930571,-0.1213141366,6708,3 +6709,57434215,0.1268911211,6709,3 +6710,72730250,0.1026794488,6710,3 +6711,40656207,-0.7900228741,6711,3 +6712,29967599,-0.5053524306,6712,3 +6713,24905057,0.3361840509,6713,3 +6714,32936667,-1.5405432499,6714,3 +6715,56004332,-0.6193233044,6715,3 +6716,62336759,-2.703089165,6716,3 +6717,89144200,-0.129615754,6717,3 +6718,35499935,-0.2244227826,6718,3 +6719,37431694,-0.4483952877,6719,3 +6720,61749539,0.4255026877,6720,3 +6721,40043340,-0.6113878808,6721,3 +6722,34024509,-1.4358980271,6722,3 +6723,60572934,-0.8973219618,6723,3 +6724,66073059,0.4954744385,6724,3 +6725,52554790,-1.770607429,6725,3 +6726,54812345,-0.2370996712,6726,3 +6727,59263862,0.19557674,6727,3 +6728,43747937,0.7206318316,6728,3 +6729,38944753,0.0189221506,6729,3 +6730,89267812,-0.1967723492,6730,3 +6731,57563146,-0.0439868704,6731,3 +6732,62090280,-0.78873859,6732,3 +6733,40968344,-0.0588364097,6733,3 +6734,87592720,-0.7078254106,6734,3 +6735,26722336,-0.1092434701,6735,3 +6736,54173929,0.1936218582,6736,3 +6737,46372340,0.6786872937,6737,3 +6738,72488285,0.4344884318,6738,3 +6739,70261712,-1.2338543545,6739,3 +6740,89899819,0.0241678741,6740,3 +6741,38646887,-0.8984124779,6741,3 +6742,67211366,-0.6697839377,6742,3 +6743,21089334,-2.9683440019,6743,3 +6744,32195558,1.0118114291,6744,3 +6745,54687089,-1.3576882845,6745,3 +6746,83533690,-0.7096073551,6746,3 +6747,71936944,-0.4669501492,6747,3 +6748,73525501,0.7939202474,6748,3 +6749,45407189,-0.3437900783,6749,3 +6750,66774542,-1.383414261,6750,3 +6751,40041211,0.862355715,6751,3 +6752,14785445,-0.2956959949,6752,3 +6753,29797029,-0.7032680781,6753,3 +6754,13240429,0.505857812,6754,3 +6755,41686335,-0.8634336254,6755,3 +6756,86613668,0.7933461504,6756,3 +6757,30787273,1.9426510732,6757,3 +6758,30737130,0.3965617698,6758,3 +6759,69656851,0.5150637306,6759,3 +6760,77672904,-0.1733055641,6760,3 +6761,67568795,-2.4144356391,6761,3 +6762,16423574,-1.7225006709,6762,3 +6763,76155262,-0.4048362671,6763,3 +6764,19479360,0.1735717277,6764,3 +6765,33807365,0.3541476049,6765,3 +6766,24109073,0.5599062464,6766,3 +6767,24414256,-0.4923629279,6767,3 +6768,54360355,-1.5278787643,6768,3 +6769,67027897,0.4319916453,6769,3 +6770,48959118,-0.9149307657,6770,3 +6771,28375015,-0.9874449971,6771,3 +6772,69250505,-0.2833875563,6772,3 +6773,44264576,-0.1362778709,6773,3 +6774,12692191,0.1040724127,6774,3 +6775,44363439,1.3950550421,6775,3 +6776,41706321,-0.0157139256,6776,3 +6777,58444969,1.1876807687,6777,3 +6778,79824985,-1.8235325343,6778,3 +6779,87510411,-0.298182953,6779,3 +6780,67487028,-1.6072800838,6780,3 +6781,82701795,-0.4470182013,6781,3 +6782,77675134,-0.4317321222,6782,3 +6783,14853886,-1.4785880036,6783,3 +6784,22805383,1.7213142221,6784,3 +6785,89881622,1.1028221755,6785,3 +6786,46628104,-1.3633026505,6786,3 +6787,63094816,0.6694693816,6787,3 +6788,63722780,0.2617153779,6788,3 +6789,15919195,-0.0611647458,6789,3 +6790,20652748,0.9507688098,6790,3 +6791,35726729,-0.2057953609,6791,3 +6792,67818799,-0.1200645629,6792,3 +6793,87384763,-1.0257603096,6793,3 +6794,83095284,2.4214647402,6794,3 +6795,76349256,1.7369591884,6795,3 +6796,10580569,-0.4797133626,6796,3 +6797,52026234,1.090968971,6797,3 +6798,10068735,-0.3636706651,6798,3 +6799,41491942,0.3744406643,6799,3 +6800,68461986,-1.1507715196,6800,3 +6801,76611658,1.7857035284,6801,3 +6802,72358074,0.7607685269,6802,3 +6803,14970300,0.0833199812,6803,3 +6804,79905644,-0.3498534566,6804,3 +6805,16872969,-0.6271038692,6805,3 +6806,72028153,0.7036547917,6806,3 +6807,46194185,-2.0112888263,6807,3 +6808,89448231,0.4765773324,6808,3 +6809,55911658,-0.0741428829,6809,3 +6810,50479485,-0.4175380014,6810,3 +6811,52676574,-0.4111257685,6811,3 +6812,78305033,-0.4240756318,6812,3 +6813,83723791,-0.2462648706,6813,3 +6814,30810190,-0.2557615409,6814,3 +6815,51829352,0.5961642696,6815,3 +6816,22138551,1.3308984368,6816,3 +6817,58663473,-0.5869993862,6817,3 +6818,58528452,-0.0218861635,6818,3 +6819,36569807,-0.0049551327,6819,3 +6820,44397408,0.9412773088,6820,3 +6821,47337524,0.0801953089,6821,3 +6822,53244087,-0.0278857293,6822,3 +6823,79760457,0.435283466,6823,3 +6824,20447569,0.4523315823,6824,3 +6825,71951071,0.9849917232,6825,3 +6826,58952942,-0.917099683,6826,3 +6827,38737514,1.1082468427,6827,3 +6828,89668052,0.4348245542,6828,3 +6829,59450832,0.7768336607,6829,3 +6830,66990103,-0.8494796507,6830,3 +6831,63878678,-1.9958161875,6831,3 +6832,57279916,-0.9372982721,6832,3 +6833,76607531,-1.4714891346,6833,3 +6834,72179385,1.9513282029,6834,3 +6835,29012923,-0.2637290071,6835,3 +6836,52871946,0.3656967334,6836,3 +6837,41192565,-0.0606600515,6837,3 +6838,18781692,-1.58457134,6838,3 +6839,10079018,-0.0752595125,6839,3 +6840,47234425,-1.1072882122,6840,3 +6841,36150547,-0.2519903078,6841,3 +6842,78783137,0.9063128862,6842,3 +6843,81161040,0.1819576238,6843,3 +6844,21030209,-0.3274179818,6844,3 +6845,87423920,0.6568662791,6845,3 +6846,73048242,-0.3269862901,6846,3 +6847,82383159,-0.4381823443,6847,3 +6848,87759346,-0.0183704887,6848,3 +6849,49881371,0.6032230254,6849,3 +6850,12966225,-1.314197913,6850,3 +6851,80712762,-0.4684200843,6851,3 +6852,13832603,1.566852211,6852,3 +6853,25158645,-1.1205495712,6853,3 +6854,19057609,-0.7229763233,6854,3 +6855,11831254,-0.6288354903,6855,3 +6856,88660981,-0.9121563651,6856,3 +6857,86505655,-0.9621186999,6857,3 +6858,21871598,-1.2429188531,6858,3 +6859,55886193,-0.9631090427,6859,3 +6860,57317065,0.7446182179,6860,3 +6861,85016554,-1.123790452,6861,3 +6862,43409578,2.3248121461,6862,3 +6863,50930270,-0.1250155037,6863,3 +6864,15922129,0.3170924868,6864,3 +6865,89855761,0.434216738,6865,3 +6866,27937887,-0.4540385127,6866,3 +6867,42782287,0.0415333202,6867,3 +6868,15125540,0.124402533,6868,3 +6869,55112175,-0.5809098721,6869,3 +6870,57836151,0.5727031779,6870,3 +6871,80351742,-1.2430729105,6871,3 +6872,16928394,0.3593945035,6872,3 +6873,48885222,1.0887063615,6873,3 +6874,72368054,-0.4847902906,6874,3 +6875,12610836,0.0319702286,6875,3 +6876,40114097,-1.1819541533,6876,3 +6877,68772880,0.9958450925,6877,3 +6878,16377178,0.3952901251,6878,3 +6879,41982956,0.5165354999,6879,3 +6880,77749080,0.8930683907,6880,3 +6881,69169402,-0.6988513596,6881,3 +6882,56638328,-1.2061851973,6882,3 +6883,14467379,1.8423006449,6883,3 +6884,67154166,1.9344137412,6884,3 +6885,11175935,0.1307729972,6885,3 +6886,74851149,2.0769771481,6886,3 +6887,45704233,0.3776699279,6887,3 +6888,45486866,0.8482600769,6888,3 +6889,38406564,-0.1150757883,6889,3 +6890,83670991,1.1417437007,6890,3 +6891,42381365,1.2151704061,6891,3 +6892,81077819,-0.0847641718,6892,3 +6893,33154748,-0.4224382872,6893,3 +6894,22999629,0.9556777871,6894,3 +6895,84645709,2.3889007106,6895,3 +6896,40291915,0.8043025276,6896,3 +6897,51983039,1.5311825293,6897,3 +6898,40143516,-1.0678321465,6898,3 +6899,78595689,0.7837861223,6899,3 +6900,45084494,0.4790105473,6900,3 +6901,42220300,0.2794757537,6901,3 +6902,53877201,-0.5407768726,6902,3 +6903,47392189,0.5470440064,6903,3 +6904,65093791,1.7514807609,6904,3 +6905,50913130,0.1835768281,6905,3 +6906,48648908,0.1616683313,6906,3 +6907,40699266,-1.9640305539,6907,3 +6908,12924106,-0.7150684991,6908,3 +6909,44586545,-2.1456864386,6909,3 +6910,74381194,-0.1800285786,6910,3 +6911,19495796,-0.146372616,6911,3 +6912,80826587,0.078211009,6912,3 +6913,63321559,1.1215137007,6913,3 +6914,42378864,0.8808340837,6914,3 +6915,57177002,-0.9812856865,6915,3 +6916,58939020,0.4413392127,6916,3 +6917,76534083,0.5116583826,6917,3 +6918,22062361,0.0767979407,6918,3 +6919,57820829,-0.5857161321,6919,3 +6920,13696979,-1.205534795,6920,3 +6921,71176546,-0.2197106706,6921,3 +6922,20580289,0.2332937816,6922,3 +6923,31009996,-0.2833313388,6923,3 +6924,70883360,-0.614442959,6924,3 +6925,60751186,-1.2408200852,6925,3 +6926,40539299,-1.0100103286,6926,3 +6927,67815519,0.722738536,6927,3 +6928,46822742,0.5558910085,6928,3 +6929,19130569,1.2473500974,6929,3 +6930,23738880,-1.7063052514,6930,3 +6931,43005794,0.1086321913,6931,3 +6932,30682781,-0.2053273509,6932,3 +6933,49568290,0.5317843718,6933,3 +6934,40188805,0.2463742267,6934,3 +6935,71504523,-0.4063179445,6935,3 +6936,88478677,1.8310672789,6936,3 +6937,74819015,0.4570286958,6937,3 +6938,74082211,0.3160553714,6938,3 +6939,64171631,0.6915005343,6939,3 +6940,14162718,-0.300043211,6940,3 +6941,24319062,1.7271638279,6941,3 +6942,62473711,0.2815375241,6942,3 +6943,38168854,-1.5541714785,6943,3 +6944,73877204,-0.1324056282,6944,3 +6945,67110134,-0.5871276964,6945,3 +6946,25408793,0.6748012689,6946,3 +6947,12721869,1.0306137005,6947,3 +6948,78571482,-0.5071828344,6948,3 +6949,70200036,0.5479028397,6949,3 +6950,66607731,1.4393213711,6950,3 +6951,71238386,0.0075196006,6951,3 +6952,57449537,-0.2319724641,6952,3 +6953,73268222,0.2296366303,6953,3 +6954,22945732,-2.5094972843,6954,3 +6955,25329169,-0.4682805093,6955,3 +6956,72064154,-1.3148181984,6956,3 +6957,30466698,0.1878457076,6957,3 +6958,69744055,1.3600662174,6958,3 +6959,45150235,-0.1064901624,6959,3 +6960,80736498,-2.209652263,6960,3 +6961,17850750,0.5418452994,6961,3 +6962,15884242,1.6713058627,6962,3 +6963,55940894,-2.1609190864,6963,3 +6964,25202494,0.7164304212,6964,3 +6965,32803825,1.4326204537,6965,3 +6966,47224544,2.254486078,6966,3 +6967,37946331,0.3683288716,6967,3 +6968,49147609,0.4251586467,6968,3 +6969,51703460,0.0754616929,6969,3 +6970,73237622,0.1732335081,6970,3 +6971,60496999,-1.0369597367,6971,3 +6972,39068657,-0.2419615658,6972,3 +6973,60925472,0.649927222,6973,3 +6974,53185112,0.0885922582,6974,3 +6975,42290707,1.3084283352,6975,3 +6976,65929970,2.2874302305,6976,3 +6977,53503565,0.9313890383,6977,3 +6978,63742035,-0.6823688184,6978,3 +6979,17979617,0.8630728881,6979,3 +6980,78993073,0.3188027407,6980,3 +6981,76486568,0.2909412448,6981,3 +6982,34448749,-1.1215124617,6982,3 +6983,30640276,0.5304706252,6983,3 +6984,45693487,-1.0991980416,6984,3 +6985,48411149,-0.7774285655,6985,3 +6986,50993585,0.9680933362,6986,3 +6987,64597149,1.2092181989,6987,3 +6988,87320051,0.6312129665,6988,3 +6989,64161797,1.7960251716,6989,3 +6990,51566051,0.8044769369,6990,3 +6991,57327906,0.3179155482,6991,3 +6992,81972812,-0.3815661784,6992,3 +6993,64343634,0.7329579155,6993,3 +6994,10537357,1.9609367842,6994,3 +6995,13795420,0.4327060779,6995,3 +6996,37184013,0.0291209866,6996,3 +6997,80457377,-0.5766490528,6997,3 +6998,63832077,-1.9009504886,6998,3 +6999,39792325,1.3825253099,6999,3 +7000,24561574,-0.7491818739,7000,3 +7001,33969954,1.3949771473,7001,3 +7002,56957553,0.804684618,7002,3 +7003,23218163,0.0374346859,7003,3 +7004,47742326,0.973529136,7004,3 +7005,74860959,0.0859980741,7005,3 +7006,68630410,-1.3716687781,7006,3 +7007,48055850,-1.2247524425,7007,3 +7008,24046284,-1.1008733582,7008,3 +7009,81788902,0.6070037677,7009,3 +7010,65140885,3.829376552,7010,3 +7011,26951242,-0.447733721,7011,3 +7012,62929870,0.1151256623,7012,3 +7013,68179880,0.3837282456,7013,3 +7014,77574772,-0.2469450606,7014,3 +7015,32454070,1.8428386941,7015,3 +7016,65853282,-0.1643199171,7016,3 +7017,89988238,-1.4967991699,7017,3 +7018,17729587,0.2827291436,7018,3 +7019,68772496,-0.6131200843,7019,3 +7020,62930101,0.1938400822,7020,3 +7021,16167516,0.1400920601,7021,3 +7022,24427014,-1.6031975901,7022,3 +7023,79981927,0.5882256876,7023,3 +7024,68011887,-1.5481071003,7024,3 +7025,15082671,1.2674920521,7025,3 +7026,60650844,-1.2169799603,7026,3 +7027,79500126,2.3006000056,7027,3 +7028,54560636,0.4192477521,7028,3 +7029,23346562,1.8323565662,7029,3 +7030,31670993,-0.3896736223,7030,3 +7031,32079702,0.6382387753,7031,3 +7032,81843824,-0.2918321214,7032,3 +7033,87200977,-1.3163779435,7033,3 +7034,61173166,-0.2569808743,7034,3 +7035,60829169,-0.9085271775,7035,3 +7036,21451639,-0.4965588551,7036,3 +7037,14600877,1.0759619195,7037,3 +7038,60295706,-0.3236721977,7038,3 +7039,22960738,0.1406935049,7039,3 +7040,66069746,-0.5985441777,7040,3 +7041,25594864,-1.3764682972,7041,3 +7042,30341635,-1.5524523177,7042,3 +7043,41607188,-2.2514495969,7043,3 +7044,56523416,-1.4952190742,7044,3 +7045,67654668,-0.3057338931,7045,3 +7046,39727005,1.3774337372,7046,3 +7047,22223462,-0.2146098985,7047,3 +7048,12832413,-0.1449234147,7048,3 +7049,13518914,-0.6895079252,7049,3 +7050,29500536,-1.8456400999,7050,3 +7051,12292333,1.2516556731,7051,3 +7052,72048852,2.1619760066,7052,3 +7053,52862183,1.3214371949,7053,3 +7054,49609223,-0.5787122079,7054,3 +7055,76428242,-0.8517364189,7055,3 +7056,42981400,0.1368477218,7056,3 +7057,12386617,1.0074923065,7057,3 +7058,48008129,-0.6061087504,7058,3 +7059,78899374,0.1528996102,7059,3 +7060,77650338,0.0734368972,7060,3 +7061,38152253,-1.2748449322,7061,3 +7062,25808920,1.0676315382,7062,3 +7063,52290155,1.9867592849,7063,3 +7064,43704021,0.1091077403,7064,3 +7065,70639055,1.3878339928,7065,3 +7066,69854150,-0.308591445,7066,3 +7067,84189383,0.3347884736,7067,3 +7068,73020534,0.0442615522,7068,3 +7069,47918834,-0.1666659147,7069,3 +7070,53200585,0.3004070262,7070,3 +7071,76767120,0.0236982899,7071,3 +7072,20350974,1.3651649217,7072,3 +7073,50293091,0.0871308247,7073,3 +7074,44804703,1.3812022702,7074,3 +7075,58264063,-0.512581123,7075,3 +7076,48446393,-0.8033944385,7076,3 +7077,35689302,-1.2630427923,7077,3 +7078,10308618,-0.1714535596,7078,3 +7079,12805231,-0.6144634311,7079,3 +7080,60303906,0.8492131717,7080,3 +7081,61366679,-0.1481549291,7081,3 +7082,10574600,-1.7154132291,7082,3 +7083,10468254,-0.7064855034,7083,3 +7084,82417729,-0.0550883544,7084,3 +7085,43287103,0.0276998903,7085,3 +7086,71432097,-0.5897793491,7086,3 +7087,83440116,-0.2529602399,7087,3 +7088,68057868,-0.3087877889,7088,3 +7089,66265642,-0.5257112041,7089,3 +7090,11917747,-1.402093634,7090,3 +7091,78065345,-1.8078923076,7091,3 +7092,89191521,-0.8131186731,7092,3 +7093,29619268,-0.1799804371,7093,3 +7094,87241520,-0.1539973308,7094,3 +7095,44550102,3.7518645719,7095,3 +7096,20234268,0.5378706166,7096,3 +7097,77890272,1.5590700378,7097,3 +7098,86000160,0.1478076941,7098,3 +7099,20750605,1.3331750744,7099,3 +7100,38958902,-0.4015706637,7100,3 +7101,17475739,-0.2668363176,7101,3 +7102,76507797,0.0070039105,7102,3 +7103,19504937,0.7113060792,7103,3 +7104,33921261,-0.2332073854,7104,3 +7105,31501563,-0.2738930024,7105,3 +7106,28938322,-1.4387123966,7106,3 +7107,60753801,1.5194296179,7107,3 +7108,52362136,-0.347287488,7108,3 +7109,72065363,0.0695825302,7109,3 +7110,79844429,-0.1462949255,7110,3 +7111,44842806,0.4668461056,7111,3 +7112,54174864,-0.093699894,7112,3 +7113,32834013,-0.0322187563,7113,3 +7114,34312079,-0.5969920599,7114,3 +7115,59362424,-0.0890193428,7115,3 +7116,22559946,0.0534364918,7116,3 +7117,66030726,-2.2565443202,7117,3 +7118,24347369,-0.2503425529,7118,3 +7119,20188482,-1.072545976,7119,3 +7120,86811436,-1.5668217121,7120,3 +7121,71431063,0.2929953394,7121,3 +7122,68020629,-0.8641852547,7122,3 +7123,62794042,0.22565301,7123,3 +7124,70631059,0.8004029411,7124,3 +7125,63027931,-1.001044717,7125,3 +7126,73082311,-0.5867724635,7126,3 +7127,57659518,-0.1098952531,7127,3 +7128,63898648,-1.0259839608,7128,3 +7129,28811971,0.4243935601,7129,3 +7130,39810904,1.2563568046,7130,3 +7131,35761831,-0.2929449303,7131,3 +7132,29094900,-1.0636585764,7132,3 +7133,83351042,-0.2063134978,7133,3 +7134,34131811,1.6353075288,7134,3 +7135,86687373,0.226256853,7135,3 +7136,26051058,-1.2308680594,7136,3 +7137,73961902,-0.5368139207,7137,3 +7138,31114977,1.1662099576,7138,3 +7139,56278136,0.2079370719,7139,3 +7140,53115175,0.442122724,7140,3 +7141,62596606,1.8290372723,7141,3 +7142,73039793,-0.9514951252,7142,3 +7143,41624009,-0.8897186184,7143,3 +7144,40961517,-0.6824433142,7144,3 +7145,75381908,0.3217077246,7145,3 +7146,61743354,0.5175271256,7146,3 +7147,70684973,-0.4971491858,7147,3 +7148,64427860,2.3120626815,7148,3 +7149,41084540,1.5882091357,7149,3 +7150,72489776,-0.276982431,7150,3 +7151,21347679,-0.0035396478,7151,3 +7152,74702452,0.0703406633,7152,3 +7153,60423571,-0.6680307897,7153,3 +7154,44903661,1.1616096925,7154,3 +7155,45639749,0.8900030783,7155,3 +7156,28911000,-0.2772839588,7156,3 +7157,25874607,-0.1963513554,7157,3 +7158,39467772,-0.8038605535,7158,3 +7159,59225844,-0.6874227999,7159,3 +7160,21744948,0.7978829025,7160,3 +7161,62934196,0.1114430485,7161,3 +7162,65182393,1.646794535,7162,3 +7163,79637434,-0.005162756,7163,3 +7164,75569596,1.2160648835,7164,3 +7165,72469806,-0.0709418817,7165,3 +7166,36637107,-0.6636185729,7166,3 +7167,72931282,1.5057572619,7167,3 +7168,31572307,2.6156324022,7168,3 +7169,48484200,-0.1818055838,7169,3 +7170,75180408,-0.253831511,7170,3 +7171,67090383,-0.253696723,7171,3 +7172,68630374,-0.3297654611,7172,3 +7173,61929948,0.4894998956,7173,3 +7174,45809254,0.6840313522,7174,3 +7175,32652847,0.438759576,7175,3 +7176,76425459,1.0152679749,7176,3 +7177,46520275,1.5638056678,7177,3 +7178,26252935,0.0827537247,7178,3 +7179,57575741,-0.7611390425,7179,3 +7180,58072522,-1.7722575539,7180,3 +7181,42903425,-0.1216440024,7181,3 +7182,50601528,-0.2423350195,7182,3 +7183,17837715,-0.2225308552,7183,3 +7184,32839810,-1.4401601961,7184,3 +7185,34458109,0.3738079945,7185,3 +7186,10003587,0.8903708007,7186,3 +7187,58538803,0.2621864562,7187,3 +7188,70759875,-3.1331056789,7188,3 +7189,88412541,-0.3801586724,7189,3 +7190,58808352,-0.4902609682,7190,3 +7191,58104812,-0.8276499292,7191,3 +7192,66331659,-1.0935141445,7192,3 +7193,78038077,1.4791245998,7193,3 +7194,71915034,0.4964209612,7194,3 +7195,64337150,0.6129501566,7195,3 +7196,64873690,-1.7948772655,7196,3 +7197,28156206,-1.5163647704,7197,3 +7198,14731307,-0.3063810234,7198,3 +7199,22745991,-0.3120895313,7199,3 +7200,23126962,1.0923798201,7200,3 +7201,89981463,-1.7787928996,7201,3 +7202,72501538,-0.0764193206,7202,3 +7203,32724721,0.3438520835,7203,3 +7204,27495663,1.0508759105,7204,3 +7205,42177805,-1.6099609289,7205,3 +7206,67991710,-0.9633665532,7206,3 +7207,65812664,-0.3201518888,7207,3 +7208,18194218,0.2381622254,7208,3 +7209,52805385,-0.6016958318,7209,3 +7210,78108752,-2.1378807678,7210,3 +7211,66957996,0.4083711567,7211,3 +7212,54565393,-0.5647762321,7212,3 +7213,13899157,-1.0239356542,7213,3 +7214,28125594,-0.8299741133,7214,3 +7215,38359100,0.736720875,7215,3 +7216,40339051,1.7320084248,7216,3 +7217,83183604,-0.4348624256,7217,3 +7218,89485326,0.9666185034,7218,3 +7219,25022145,-1.2591210889,7219,3 +7220,89005765,0.6781762286,7220,3 +7221,40126506,-1.2277316596,7221,3 +7222,20780136,-1.1832978623,7222,3 +7223,40162278,-1.0080977972,7223,3 +7224,23103969,-0.3770272549,7224,3 +7225,49247037,0.2405907993,7225,3 +7226,18637455,-1.7440971803,7226,3 +7227,20673164,1.6369329056,7227,3 +7228,28935370,-0.1614205932,7228,3 +7229,37760979,0.3255271429,7229,3 +7230,49310309,-0.3354585769,7230,3 +7231,19871166,-0.7121626246,7231,3 +7232,63502130,1.1460518822,7232,3 +7233,87631130,0.2726503031,7233,3 +7234,84538787,0.796385108,7234,3 +7235,70300432,0.3797078481,7235,3 +7236,31999477,0.2896977752,7236,3 +7237,36795749,0.3986477765,7237,3 +7238,16493106,-0.0753709356,7238,3 +7239,29883567,-0.2307283798,7239,3 +7240,11226835,-1.7560514776,7240,3 +7241,14441483,0.1681946554,7241,3 +7242,46089805,1.9425483938,7242,3 +7243,86761432,0.4617813062,7243,3 +7244,21016980,-1.2010319868,7244,3 +7245,85098823,-0.732821947,7245,3 +7246,15725068,-0.3917241063,7246,3 +7247,78379760,0.7373570835,7247,3 +7248,48885854,0.223883337,7248,3 +7249,34966964,-1.6942761513,7249,3 +7250,36360000,0.3633845894,7250,3 +7251,64886751,0.1541116375,7251,3 +7252,37213426,0.1460659052,7252,3 +7253,37276848,0.2377256613,7253,3 +7254,78813388,-0.684355928,7254,3 +7255,15957335,0.218523164,7255,3 +7256,85712711,0.4404408492,7256,3 +7257,44508540,0.4746039868,7257,3 +7258,12086327,0.225451285,7258,3 +7259,63017814,-0.4425614694,7259,3 +7260,32010486,2.1460863543,7260,3 +7261,42031120,-1.2154700434,7261,3 +7262,20652366,-0.6995027336,7262,3 +7263,74354895,-1.5469172284,7263,3 +7264,61446539,-1.436318132,7264,3 +7265,20392602,1.1446614492,7265,3 +7266,71073236,-0.3346494593,7266,3 +7267,73220454,1.422019585,7267,3 +7268,26971630,-0.4270542815,7268,3 +7269,24842645,-0.4038248026,7269,3 +7270,69523523,-1.1851136997,7270,3 +7271,36262501,0.7712992486,7271,3 +7272,70577010,1.6215467733,7272,3 +7273,35013051,0.8521906653,7273,3 +7274,87839135,0.6530281563,7274,3 +7275,32604033,0.2575483304,7275,3 +7276,55012226,-0.2170869415,7276,3 +7277,39128529,1.1648856671,7277,3 +7278,14616053,-1.4466978196,7278,3 +7279,44058260,-0.5000515007,7279,3 +7280,79373903,-0.6470369374,7280,3 +7281,35042385,-1.5307575668,7281,3 +7282,32047342,-1.020254426,7282,3 +7283,66202487,-0.1892236284,7283,3 +7284,25927626,-0.4236312883,7284,3 +7285,78303795,-1.1056650616,7285,3 +7286,60935430,0.2382136823,7286,3 +7287,60982589,0.241837994,7287,3 +7288,15375667,-1.1679652453,7288,3 +7289,19581007,1.7851552784,7289,3 +7290,27706053,-1.1861232347,7290,3 +7291,17501922,-1.2067152897,7291,3 +7292,72038178,-0.2825198504,7292,3 +7293,53445798,-0.411801489,7293,3 +7294,66733989,0.8804374614,7294,3 +7295,23893957,-0.3792815441,7295,3 +7296,36596492,-0.416872354,7296,3 +7297,28527036,-1.1644522345,7297,3 +7298,34061361,-2.0908658237,7298,3 +7299,67024648,0.7202590379,7299,3 +7300,40468614,-0.63576596,7300,3 +7301,45919423,-0.7927157812,7301,3 +7302,47499014,-0.7531120055,7302,3 +7303,29229167,2.3159266365,7303,3 +7304,12986145,0.4121170415,7304,3 +7305,28346943,-0.1029850669,7305,3 +7306,49976614,-0.441875768,7306,3 +7307,66585319,-0.6878555863,7307,3 +7308,82175411,-1.6968261631,7308,3 +7309,40987750,0.9512427635,7309,3 +7310,35409615,0.2326104225,7310,3 +7311,52301541,0.0091593526,7311,3 +7312,70419088,0.8902736987,7312,3 +7313,49240806,-1.0893717604,7313,3 +7314,84289081,0.1052741846,7314,3 +7315,72014221,-0.2034577349,7315,3 +7316,47816741,-0.5320004221,7316,3 +7317,44426168,0.2120955537,7317,3 +7318,21690672,0.1916847801,7318,3 +7319,11342695,-0.5012872838,7319,3 +7320,77748768,-2.6532589356,7320,3 +7321,12816323,0.4795330739,7321,3 +7322,74717825,-1.5172179365,7322,3 +7323,79211297,-1.1383527117,7323,3 +7324,79627522,-0.0695433139,7324,3 +7325,22033104,0.2557428279,7325,3 +7326,52361384,0.674829483,7326,3 +7327,29286506,1.1344649298,7327,3 +7328,34991855,-0.2566028214,7328,3 +7329,13251623,1.2131542128,7329,3 +7330,33855250,0.807751745,7330,3 +7331,50291279,0.1580267622,7331,3 +7332,73857677,1.4942996475,7332,3 +7333,69867675,0.7006118267,7333,3 +7334,30460747,-1.6842629014,7334,3 +7335,51526921,-0.6438996431,7335,3 +7336,81261742,1.6382882178,7336,3 +7337,82833695,1.0201582834,7337,3 +7338,41000284,-1.2122982307,7338,3 +7339,56779360,0.7464712865,7339,3 +7340,67437141,0.4902997333,7340,3 +7341,23168318,-1.9293048878,7341,3 +7342,30606716,-1.3195986279,7342,3 +7343,88356749,-0.5952782247,7343,3 +7344,44230712,-0.8279299513,7344,3 +7345,18271867,1.3964350675,7345,3 +7346,73688532,0.7423050902,7346,3 +7347,74802652,-0.4969087413,7347,3 +7348,76903861,-1.1424870621,7348,3 +7349,81612310,-0.2935135927,7349,3 +7350,23792020,-1.1043958953,7350,3 +7351,75743443,-0.621338518,7351,3 +7352,58315952,0.9400083589,7352,3 +7353,37686418,0.6302100566,7353,3 +7354,17874651,0.1379062865,7354,3 +7355,27634889,-1.0455538737,7355,3 +7356,67375421,0.7963849461,7356,3 +7357,34232304,0.8419829065,7357,3 +7358,31341306,2.347454513,7358,3 +7359,81526321,0.0175200337,7359,3 +7360,73004901,-1.2723341132,7360,3 +7361,66800682,0.298880469,7361,3 +7362,48248696,0.2185334805,7362,3 +7363,17241339,0.4575798219,7363,3 +7364,69373244,0.0108140346,7364,3 +7365,64095840,0.0331535711,7365,3 +7366,16129841,0.4208258297,7366,3 +7367,45866298,0.0443053021,7367,3 +7368,60726506,0.5322641198,7368,3 +7369,88367992,-0.2680393572,7369,3 +7370,26749837,-0.0184973481,7370,3 +7371,28048013,-0.5215271363,7371,3 +7372,24427409,-0.9460022144,7372,3 +7373,77886385,-0.8591465789,7373,3 +7374,57959762,1.4230627298,7374,3 +7375,43696216,-0.5953366077,7375,3 +7376,88951073,-0.3831647178,7376,3 +7377,22138917,0.982366645,7377,3 +7378,28281394,0.0365121644,7378,3 +7379,54957640,-0.0502783355,7379,3 +7380,60277717,-0.8544475581,7380,3 +7381,47923417,2.3890990462,7381,3 +7382,42861692,-0.3729629834,7382,3 +7383,65328695,-0.7580001921,7383,3 +7384,73257123,0.5272629416,7384,3 +7385,76819811,1.7399003679,7385,3 +7386,29612354,-0.2835017073,7386,3 +7387,36035316,0.0418767977,7387,3 +7388,77593191,0.0654561835,7388,3 +7389,46137584,-0.4633967736,7389,3 +7390,41480068,1.0104568549,7390,3 +7391,38303220,0.3486008602,7391,3 +7392,84800240,-1.4738289866,7392,3 +7393,85659623,-0.4923451011,7393,3 +7394,87117867,-0.0579031659,7394,3 +7395,80311147,-0.2697462643,7395,3 +7396,35922111,-0.6896447276,7396,3 +7397,30688879,0.5309649716,7397,3 +7398,52476256,0.7167189958,7398,3 +7399,63018046,-0.4508171111,7399,3 +7400,37323726,2.1167573851,7400,3 +7401,12816505,-0.7505279403,7401,3 +7402,79923378,1.1190530077,7402,3 +7403,46741323,1.4115294912,7403,3 +7404,82219721,-0.0455392813,7404,3 +7405,32737309,-1.3789601012,7405,3 +7406,80612702,1.0718982324,7406,3 +7407,89009678,-0.7110987961,7407,3 +7408,28465465,-0.2447947159,7408,3 +7409,59123673,1.2087255209,7409,3 +7410,40889882,-1.0014434931,7410,3 +7411,61383780,0.1607490557,7411,3 +7412,55181179,-0.9587659706,7412,3 +7413,82034147,2.939140399,7413,3 +7414,63972878,-1.434796958,7414,3 +7415,89312769,0.1084688932,7415,3 +7416,23140293,0.460904246,7416,3 +7417,67144088,0.1889435828,7417,3 +7418,60041396,1.6956635146,7418,3 +7419,30814013,1.560900203,7419,3 +7420,56719780,-0.2387978278,7420,3 +7421,12056104,-0.1410891549,7421,3 +7422,51347177,2.151826801,7422,3 +7423,84537034,1.7083806034,7423,3 +7424,53755886,-0.6855716709,7424,3 +7425,44961100,0.2332573384,7425,3 +7426,41686788,-1.1441683333,7426,3 +7427,64615855,-0.4458467162,7427,3 +7428,35029137,-0.9503707801,7428,3 +7429,63644694,-0.3829284357,7429,3 +7430,52935562,0.0047187743,7430,3 +7431,44047879,0.0750222791,7431,3 +7432,41431998,-0.2142627837,7432,3 +7433,62276744,-1.6730839892,7433,3 +7434,62610248,0.0105517556,7434,3 +7435,12885218,-1.3167940284,7435,3 +7436,14287327,0.3042971583,7436,3 +7437,63962874,-1.8435830627,7437,3 +7438,16542199,1.085841669,7438,3 +7439,88262342,-0.5276643382,7439,3 +7440,49946211,1.152601599,7440,3 +7441,43511659,0.0116503807,7441,3 +7442,72073395,-0.1937641063,7442,3 +7443,15183007,0.225715241,7443,3 +7444,39607727,-0.6813538981,7444,3 +7445,12366467,-0.0499962437,7445,3 +7446,19059406,0.646381422,7446,3 +7447,55706023,-0.3329311104,7447,3 +7448,75943626,-0.5464095185,7448,3 +7449,37761318,0.872197106,7449,3 +7450,89988458,-0.9232103166,7450,3 +7451,15625141,-1.2108788886,7451,3 +7452,36106058,0.4396556225,7452,3 +7453,18927681,0.9543947763,7453,3 +7454,71427514,-1.2025755377,7454,3 +7455,24963796,-0.7644385834,7455,3 +7456,44234934,0.2725900338,7456,3 +7457,47176199,0.0407251099,7457,3 +7458,58511510,0.3996895714,7458,3 +7459,10595857,0.5827653276,7459,3 +7460,37757877,-1.0430707419,7460,3 +7461,57284444,-0.4196937079,7461,3 +7462,19437139,0.9370653786,7462,3 +7463,86537629,0.3104562304,7463,3 +7464,82325777,-0.5007923127,7464,3 +7465,17491766,0.3594980161,7465,3 +7466,65026275,0.4515006181,7466,3 +7467,36613820,-0.3618654114,7467,3 +7468,45578380,0.0193484976,7468,3 +7469,46898576,0.0977302047,7469,3 +7470,65017902,0.2487149581,7470,3 +7471,43879952,-0.7060255678,7471,3 +7472,60962820,2.3248686792,7472,3 +7473,18198131,1.1377717294,7473,3 +7474,12985876,-0.6432532446,7474,3 +7475,45456933,-1.4485856542,7475,3 +7476,67009408,0.5828610609,7476,3 +7477,12162692,1.551781471,7477,3 +7478,61236225,1.4095713257,7478,3 +7479,18793206,1.5438138098,7479,3 +7480,89366400,0.7368182755,7480,3 +7481,35809419,0.0264864135,7481,3 +7482,18821118,-0.5199418204,7482,3 +7483,49852838,-0.9048605403,7483,3 +7484,87581437,-0.1141562382,7484,3 +7485,66307411,-0.8415350256,7485,3 +7486,15748917,0.0941248508,7486,3 +7487,48513080,1.418628147,7487,3 +7488,67751298,0.3689199807,7488,3 +7489,20702008,0.0614240158,7489,3 +7490,26303128,2.5416456588,7490,3 +7491,39614951,0.4429148002,7491,3 +7492,11141732,-1.0556510481,7492,3 +7493,55868735,-0.8720725828,7493,3 +7494,45229200,0.0437333652,7494,3 +7495,39122375,0.2833951006,7495,3 +7496,75066243,0.4759723222,7496,3 +7497,80551082,0.2457555373,7497,3 +7498,27684607,-1.1262897336,7498,3 +7499,51499266,0.4015132715,7499,3 +7500,61585118,-1.4615847959,7500,3 +7501,81796266,-1.418045702,7501,3 +7502,78422568,-0.2727369859,7502,3 +7503,76618828,-0.281101193,7503,3 +7504,61646554,1.3959410766,7504,3 +7505,15322665,-0.9346884223,7505,3 +7506,71715857,-1.7989271342,7506,3 +7507,15647826,1.2284593572,7507,3 +7508,53981657,-0.477831946,7508,3 +7509,31460252,0.7931997854,7509,3 +7510,74217625,1.3674767173,7510,3 +7511,59932986,-0.2136410181,7511,3 +7512,66704668,-0.9727344449,7512,3 +7513,74052631,-0.7738300716,7513,3 +7514,84154552,0.4483772955,7514,3 +7515,61806465,-2.6515391625,7515,3 +7516,12015869,2.0505820263,7516,3 +7517,50643744,-0.1625000295,7517,3 +7518,45063420,0.4064812532,7518,3 +7519,84502816,0.3467559926,7519,3 +7520,26830379,-0.1086735,7520,3 +7521,88075795,0.1919556087,7521,3 +7522,65747520,-1.3324484191,7522,3 +7523,82339050,1.5859925533,7523,3 +7524,34563903,0.2259422345,7524,3 +7525,88903666,0.0352647817,7525,3 +7526,83390753,1.6714296121,7526,3 +7527,81851998,-0.5888898842,7527,3 +7528,50235922,0.0792801325,7528,3 +7529,72223843,-1.2435669152,7529,3 +7530,48427363,1.8214431912,7530,3 +7531,23994763,-0.0906566988,7531,3 +7532,14292528,0.5597717609,7532,3 +7533,67901657,-0.5985938689,7533,3 +7534,43551018,-0.937202329,7534,3 +7535,41618066,-0.1736281051,7535,3 +7536,57762482,0.2858442494,7536,3 +7537,76294746,2.3554916982,7537,3 +7538,64274631,2.6787987926,7538,3 +7539,43148303,1.3015864388,7539,3 +7540,54847297,0.5738758038,7540,3 +7541,45670571,0.6339699973,7541,3 +7542,23937680,-0.610696915,7542,3 +7543,85062180,-0.5904530116,7543,3 +7544,28200244,-2.1023270076,7544,3 +7545,47812002,0.7693770245,7545,3 +7546,52516689,0.0525212124,7546,3 +7547,15022010,2.0631436953,7547,3 +7548,31010199,0.2173158569,7548,3 +7549,80206053,-0.9668285008,7549,3 +7550,48848820,-1.2217816443,7550,3 +7551,60945003,0.8545495754,7551,3 +7552,27537479,0.451502951,7552,3 +7553,57070183,-0.1646943452,7553,3 +7554,71593845,-0.5794196489,7554,3 +7555,35737232,1.3826823417,7555,3 +7556,85283812,1.2644492778,7556,3 +7557,59419825,-0.0897671056,7557,3 +7558,71856956,-0.3874950964,7558,3 +7559,74159045,-0.3469681938,7559,3 +7560,59700489,-0.3278649516,7560,3 +7561,45281124,-0.4617647118,7561,3 +7562,86611886,0.1367615617,7562,3 +7563,68418821,1.2356569019,7563,3 +7564,63240341,-0.1604649306,7564,3 +7565,70152044,-0.6317368716,7565,3 +7566,47586612,0.1432396722,7566,3 +7567,63970853,0.1909973549,7567,3 +7568,64198967,1.4686459817,7568,3 +7569,80663694,-0.724020951,7569,3 +7570,61082157,-0.5987981226,7570,3 +7571,12313722,1.1421461174,7571,3 +7572,55261403,0.1853368214,7572,3 +7573,45060062,-0.7279352901,7573,3 +7574,73054026,0.2365760007,7574,3 +7575,25826158,-0.7747084814,7575,3 +7576,74331097,-1.0783301868,7576,3 +7577,31411740,-1.726652714,7577,3 +7578,45540480,-0.7448723812,7578,3 +7579,19654292,-3.0052600396,7579,3 +7580,53711164,0.1744612265,7580,3 +7581,80227195,0.8182583299,7581,3 +7582,72165320,0.977251339,7582,3 +7583,54069855,-0.0988048883,7583,3 +7584,80768938,-1.2268111297,7584,3 +7585,19292408,-1.3473729361,7585,3 +7586,68154145,-1.3784077889,7586,3 +7587,46885594,2.3624785725,7587,3 +7588,33111736,0.225172475,7588,3 +7589,23788529,-0.8822190316,7589,3 +7590,57509191,-0.2659239723,7590,3 +7591,21037835,0.5686485085,7591,3 +7592,12947212,-0.3611714215,7592,3 +7593,36827372,-1.6016374973,7593,3 +7594,50169134,1.2294896744,7594,3 +7595,58424730,-1.2806922006,7595,3 +7596,26420473,-0.8156486948,7596,3 +7597,74690375,1.6808868719,7597,3 +7598,27440253,0.9862631817,7598,3 +7599,63353557,1.0075322592,7599,3 +7600,22916199,1.0463329435,7600,3 +7601,27849689,0.3776118298,7601,3 +7602,55643405,0.2760893187,7602,3 +7603,40370618,-0.7450190368,7603,3 +7604,40549838,1.329525748,7604,3 +7605,55575096,-1.4928991933,7605,3 +7606,14826873,0.5504288896,7606,3 +7607,83627016,-0.566646554,7607,3 +7608,39691701,0.913684871,7608,3 +7609,43671608,0.3706761474,7609,3 +7610,10364955,-2.8192585468,7610,3 +7611,74642963,0.4140971552,7611,3 +7612,27072010,0.3168056733,7612,3 +7613,51821593,-0.1275932175,7613,3 +7614,72596672,-0.5829816252,7614,3 +7615,13140181,1.2980478457,7615,3 +7616,62603362,1.9624764626,7616,3 +7617,73840077,-1.4788371601,7617,3 +7618,18206465,0.7991928902,7618,3 +7619,87171260,-1.4486912917,7619,3 +7620,84063530,-0.9400083145,7620,3 +7621,30290638,0.6931617643,7621,3 +7622,42365266,-0.3309843794,7622,3 +7623,62672123,-0.5597600721,7623,3 +7624,87153149,0.5814494355,7624,3 +7625,63098799,0.0115258205,7625,3 +7626,55666614,-0.3636380205,7626,3 +7627,22224852,0.2514645402,7627,3 +7628,89417505,1.6686544488,7628,3 +7629,11282082,-0.2100343995,7629,3 +7630,64021234,-0.4383958996,7630,3 +7631,29762532,-2.3941414769,7631,3 +7632,31309672,0.089131137,7632,3 +7633,77685350,1.5960703052,7633,3 +7634,15745747,0.496193696,7634,3 +7635,89928389,-0.2989180998,7635,3 +7636,54294521,1.0147715082,7636,3 +7637,30240845,1.8489534219,7637,3 +7638,45449086,0.4829816422,7638,3 +7639,89816926,-0.2796714131,7639,3 +7640,19726805,0.0017490655,7640,3 +7641,57457994,0.6547259726,7641,3 +7642,36245290,-0.2856879144,7642,3 +7643,36369988,-0.9521264196,7643,3 +7644,32223606,-0.6916069613,7644,3 +7645,51170506,0.9186211031,7645,3 +7646,29657683,1.0947353412,7646,3 +7647,87014664,-0.4641125829,7647,3 +7648,10255075,-0.8114067812,7648,3 +7649,88390314,-0.0815301127,7649,3 +7650,62502768,-0.6807283118,7650,3 +7651,28523693,0.8842781278,7651,3 +7652,86215859,-0.2013897292,7652,3 +7653,54465626,-0.171353998,7653,3 +7654,66326243,-2.2632064932,7654,3 +7655,22413729,0.0151007905,7655,3 +7656,41978470,-0.9180272936,7656,3 +7657,84291654,-2.5655797556,7657,3 +7658,77949770,-0.8909087328,7658,3 +7659,50643854,0.6116563315,7659,3 +7660,69733266,0.9385151851,7660,3 +7661,46559202,-0.4236513345,7661,3 +7662,61364163,-0.2391646532,7662,3 +7663,52053948,2.1411492471,7663,3 +7664,26043574,-0.7954518876,7664,3 +7665,68513260,1.9834959486,7665,3 +7666,72151937,0.1415112347,7666,3 +7667,83173743,0.169039527,7667,3 +7668,38420802,0.4303399885,7668,3 +7669,23632078,-0.2936640046,7669,3 +7670,87702073,1.0450493739,7670,3 +7671,82446000,-0.7388851869,7671,3 +7672,79479747,-0.2160371176,7672,3 +7673,41530803,-0.6233368039,7673,3 +7674,84508111,-0.3902962197,7674,3 +7675,26083589,-0.5417021751,7675,3 +7676,28010804,0.4575692012,7676,3 +7677,43144711,1.6440281497,7677,3 +7678,18171959,-0.109101709,7678,3 +7679,10742216,-1.2949734422,7679,3 +7680,15104316,0.2138847217,7680,3 +7681,33739464,0.0721763106,7681,3 +7682,15669555,-0.1544026715,7682,3 +7683,25103130,-0.0541592504,7683,3 +7684,13424735,-0.2699870577,7684,3 +7685,40073937,0.1183476947,7685,3 +7686,62392635,1.1889125409,7686,3 +7687,59420629,-0.9772094634,7687,3 +7688,68510608,-0.4766021933,7688,3 +7689,24832067,-0.5110848004,7689,3 +7690,10385302,-0.2844213235,7690,3 +7691,28390200,-0.0325308168,7691,3 +7692,74277943,-0.4904066159,7692,3 +7693,11007337,0.0430784504,7693,3 +7694,62101932,0.3777962159,7694,3 +7695,25787099,-0.1155436313,7695,3 +7696,87837924,1.4201846745,7696,3 +7697,83911672,-0.7498430571,7697,3 +7698,31410655,-0.7699670072,7698,3 +7699,12304933,-0.2034679831,7699,3 +7700,64244783,1.0511895893,7700,3 +7701,79474431,0.3442555522,7701,3 +7702,34667356,-0.2895942922,7702,3 +7703,70408350,0.2504147523,7703,3 +7704,13831654,-0.8546168723,7704,3 +7705,74936105,1.7868589075,7705,3 +7706,50666521,-1.8377078033,7706,3 +7707,85973611,0.4939194066,7707,3 +7708,66834017,-0.5093131347,7708,3 +7709,65446019,-0.0004271607,7709,3 +7710,62267965,0.3866970485,7710,3 +7711,56328135,-0.2668192279,7711,3 +7712,54002357,2.5274061546,7712,3 +7713,26450925,-1.060669281,7713,3 +7714,22515566,-0.6096160071,7714,3 +7715,12188645,-0.4121058714,7715,3 +7716,32473235,-0.5670255183,7716,3 +7717,47839532,-1.4610934109,7717,3 +7718,16840967,-1.2428012457,7718,3 +7719,89367912,0.5095282618,7719,3 +7720,14379841,-0.5873562955,7720,3 +7721,71896352,0.5126873213,7721,3 +7722,68535900,0.6458076629,7722,3 +7723,50361801,1.7122045376,7723,3 +7724,88385432,0.7014135747,7724,3 +7725,72671751,-0.5139379354,7725,3 +7726,42286437,1.1564353853,7726,3 +7727,27045173,-0.4783894033,7727,3 +7728,22481168,0.4529063518,7728,3 +7729,79102192,0.1717941344,7729,3 +7730,51711786,0.5113207273,7730,3 +7731,76168657,-1.0755998868,7731,3 +7732,38297958,-0.2982662385,7732,3 +7733,59276791,1.2143860629,7733,3 +7734,23320381,-1.0534929229,7734,3 +7735,54565936,1.7348200143,7735,3 +7736,63445657,-1.0674799639,7736,3 +7737,46363913,-1.7444737027,7737,3 +7738,25292140,-0.336650864,7738,3 +7739,68942656,0.1431918305,7739,3 +7740,24709012,-0.4096299607,7740,3 +7741,48776901,0.1196447228,7741,3 +7742,74186123,0.3178403699,7742,3 +7743,15463673,5.1127732816,7743,3 +7744,21053421,0.7679821573,7744,3 +7745,30052008,0.5696847916,7745,3 +7746,35033633,1.4926767468,7746,3 +7747,84037211,1.6630408845,7747,3 +7748,53784740,0.3488468528,7748,3 +7749,53527152,0.537264948,7749,3 +7750,42967179,-0.4848989813,7750,3 +7751,30620779,-0.7617370811,7751,3 +7752,30775730,0.6984854053,7752,3 +7753,84627294,0.0132239212,7753,3 +7754,35233511,0.0435420121,7754,3 +7755,45082358,1.4887909398,7755,3 +7756,37790657,0.6599045066,7756,3 +7757,89553329,-0.8888562968,7757,3 +7758,21115857,1.1571188419,7758,3 +7759,45746033,-0.228018018,7759,3 +7760,49697507,-1.289109937,7760,3 +7761,59382039,1.0154652606,7761,3 +7762,86299692,1.4597984472,7762,3 +7763,74699602,0.0388128204,7763,3 +7764,80789027,1.2323814223,7764,3 +7765,26714172,0.8647583921,7765,3 +7766,72661798,-0.1854948383,7766,3 +7767,83056003,-0.837368671,7767,3 +7768,63637611,0.9823711999,7768,3 +7769,56873509,-0.0594100908,7769,3 +7770,82693002,0.2947499485,7770,3 +7771,74656565,0.2120898677,7771,3 +7772,87985503,0.0632094116,7772,3 +7773,72237758,-1.0317105809,7773,3 +7774,13939608,-0.8077252215,7774,3 +7775,15770514,-1.8837185876,7775,3 +7776,37170344,0.3951373455,7776,3 +7777,33758515,-0.6593855183,7777,3 +7778,22620546,0.905466441,7778,3 +7779,14492815,-1.0851927917,7779,3 +7780,43429098,-0.2745675643,7780,3 +7781,81109488,-0.4399405138,7781,3 +7782,26462515,0.9883875182,7782,3 +7783,20409547,-0.7976654601,7783,3 +7784,82232058,0.7854146855,7784,3 +7785,55458704,-3.054543528,7785,3 +7786,76853148,0.1925559627,7786,3 +7787,71977852,-1.9223124067,7787,3 +7788,57629802,-1.2319864945,7788,3 +7789,20838600,-0.8870966785,7789,3 +7790,19595632,0.4352342816,7790,3 +7791,44359519,-0.227120986,7791,3 +7792,33122789,1.383134707,7792,3 +7793,57076421,2.5221596271,7793,3 +7794,69216851,1.2903393167,7794,3 +7795,48191746,1.7405836908,7795,3 +7796,48310308,-0.0481785416,7796,3 +7797,66296389,1.2326997466,7797,3 +7798,64359603,-0.9145331038,7798,3 +7799,15785058,-0.8574767854,7799,3 +7800,62560649,0.9257923853,7800,3 +7801,13940468,0.6002968134,7801,3 +7802,68412590,2.528229931,7802,3 +7803,32565682,1.011960363,7803,3 +7804,13476952,0.9730600415,7804,3 +7805,44826705,1.9440007892,7805,3 +7806,70105609,-0.4682895917,7806,3 +7807,33423502,-0.6634442812,7807,3 +7808,75074234,-0.7401025611,7808,3 +7809,40026229,-0.095676722,7809,3 +7810,69374001,-1.0890430497,7810,3 +7811,88821716,0.6151868837,7811,3 +7812,80888619,-0.6070319128,7812,3 +7813,22243291,-0.8180960144,7813,3 +7814,38075959,0.3988110548,7814,3 +7815,32673128,0.6617640456,7815,3 +7816,34924517,1.1530438414,7816,3 +7817,48503648,-0.0278302976,7817,3 +7818,26064939,-0.4619497043,7818,3 +7819,39058570,-0.8177471907,7819,3 +7820,61956785,0.0092033245,7820,3 +7821,35810427,-2.0294385184,7821,3 +7822,53699928,0.977545083,7822,3 +7823,71323138,1.8335022105,7823,3 +7824,51352694,1.2633200042,7824,3 +7825,61602363,-0.630857676,7825,3 +7826,82328638,0.6007442044,7826,3 +7827,71168303,1.5022008794,7827,3 +7828,55226106,-1.5728714159,7828,3 +7829,38549954,-0.5613215494,7829,3 +7830,53074089,-0.1842306779,7830,3 +7831,69378560,1.4492405951,7831,3 +7832,27108266,-0.5358165412,7832,3 +7833,44070469,-0.8975969832,7833,3 +7834,50341370,0.4043098254,7834,3 +7835,59304241,-1.6514266448,7835,3 +7836,23965771,-1.5396689228,7836,3 +7837,21661728,2.0309616812,7837,3 +7838,50432968,-0.9540797954,7838,3 +7839,84038471,0.6832486059,7839,3 +7840,71908043,-0.9956915283,7840,3 +7841,26265256,-0.6320778084,7841,3 +7842,10757534,0.0537456796,7842,3 +7843,72324880,1.4288042538,7843,3 +7844,48541679,-1.2525317434,7844,3 +7845,74678990,0.7117176163,7845,3 +7846,66124106,1.1988917666,7846,3 +7847,36756930,-1.602311246,7847,3 +7848,13824819,0.7009828747,7848,3 +7849,71676988,-0.9655825543,7849,3 +7850,82789075,-0.215474046,7850,3 +7851,16293621,0.9358150557,7851,3 +7852,51334506,-0.134453245,7852,3 +7853,27765194,0.6249768263,7853,3 +7854,76552752,2.3137321612,7854,3 +7855,79227074,0.3992783783,7855,3 +7856,62094918,-0.0629967921,7856,3 +7857,76256425,-0.5237911413,7857,3 +7858,68454296,0.076456168,7858,3 +7859,11404360,-0.8574998858,7859,3 +7860,33639321,-2.9246826668,7860,3 +7861,69441439,0.1270956279,7861,3 +7862,36044914,0.1233073201,7862,3 +7863,28889054,-2.5940841173,7863,3 +7864,83085313,0.0687808539,7864,3 +7865,89355914,-1.164213465,7865,3 +7866,10934238,-0.5728718883,7866,3 +7867,48802571,-0.9927405634,7867,3 +7868,59638883,-1.9467686458,7868,3 +7869,28894183,1.6567128189,7869,3 +7870,85250438,0.275970274,7870,3 +7871,42703121,1.3644381759,7871,3 +7872,10034328,0.137810618,7872,3 +7873,79883185,0.4271222139,7873,3 +7874,55085726,-0.8404155346,7874,3 +7875,36326675,0.1115979261,7875,3 +7876,39503294,1.0064098803,7876,3 +7877,64600178,-0.5109649777,7877,3 +7878,42227069,0.0528797462,7878,3 +7879,56724176,1.0230501446,7879,3 +7880,51935964,0.2667006192,7880,3 +7881,74392226,-0.1565943125,7881,3 +7882,32767040,-1.3278710393,7882,3 +7883,39709357,-1.4031772343,7883,3 +7884,33157663,0.2594658271,7884,3 +7885,17177334,0.4195858771,7885,3 +7886,68771744,0.1546509688,7886,3 +7887,25521702,0.0133476378,7887,3 +7888,15451764,2.3353418876,7888,3 +7889,24036760,-0.6416428699,7889,3 +7890,18040802,-0.1391256817,7890,3 +7891,28924136,-2.4078179622,7891,3 +7892,82051293,0.3804064922,7892,3 +7893,55636404,1.9416622662,7893,3 +7894,50332179,-0.4223379717,7894,3 +7895,46059754,-0.918169742,7895,3 +7896,39704970,0.2723170718,7896,3 +7897,15428254,-0.6108236494,7897,3 +7898,79772886,1.3786624511,7898,3 +7899,65355972,-0.5613190223,7899,3 +7900,80235691,0.0487537988,7900,3 +7901,47744269,-0.4909940749,7901,3 +7902,54958789,-0.5163112818,7902,3 +7903,10223023,1.2806642547,7903,3 +7904,42023357,-0.0501821182,7904,3 +7905,12581244,-1.0144203768,7905,3 +7906,86587230,-1.7054675019,7906,3 +7907,52803222,0.2619728032,7907,3 +7908,23838618,0.389318521,7908,3 +7909,88994979,-0.4321915192,7909,3 +7910,33032427,3.1821897435,7910,3 +7911,79614100,0.4205178141,7911,3 +7912,86342305,-0.953275446,7912,3 +7913,73144565,0.734645689,7913,3 +7914,88034697,1.2165035829,7914,3 +7915,56920603,-1.1314885295,7915,3 +7916,75377893,1.881946728,7916,3 +7917,88544489,-2.6541490829,7917,3 +7918,78611621,1.0289772178,7918,3 +7919,43882713,1.1051905707,7919,3 +7920,58971991,-2.2276787807,7920,3 +7921,85433192,-0.2031888372,7921,3 +7922,73989522,-1.8577871261,7922,3 +7923,52945273,-0.6569130133,7923,3 +7924,46343430,-0.0572016813,7924,3 +7925,30751864,-0.8682375665,7925,3 +7926,86459053,-1.0024872139,7926,3 +7927,80739443,-0.8695714465,7927,3 +7928,29693019,1.3447514634,7928,3 +7929,50186762,0.0177214594,7929,3 +7930,36190149,1.2859644586,7930,3 +7931,60922586,0.2060516364,7931,3 +7932,39115547,0.5793697052,7932,3 +7933,32535623,-0.519639804,7933,3 +7934,70836134,-0.377101576,7934,3 +7935,28129157,-0.1748874658,7935,3 +7936,37827606,-0.5659863561,7936,3 +7937,67794896,2.243200573,7937,3 +7938,87247093,0.8948527164,7938,3 +7939,74524622,1.0082267536,7939,3 +7940,35941369,-0.0049457166,7940,3 +7941,18037441,-1.5874689312,7941,3 +7942,35153167,-1.7843508978,7942,3 +7943,42698453,-0.9103037476,7943,3 +7944,67352861,-0.4418560865,7944,3 +7945,71074119,-1.4705731002,7945,3 +7946,51032705,-0.1359667494,7946,3 +7947,12044258,0.4388480071,7947,3 +7948,17680078,-0.1051938575,7948,3 +7949,73342109,-0.8657789584,7949,3 +7950,41319052,-0.3229655004,7950,3 +7951,36736191,-0.0722632815,7951,3 +7952,89640764,1.6499851139,7952,3 +7953,30522682,-0.0515375101,7953,3 +7954,11818287,1.2043507581,7954,3 +7955,14015849,-0.2083511895,7955,3 +7956,33237770,-1.0926279291,7956,3 +7957,72082485,-0.5694192423,7957,3 +7958,48892409,-0.3484748695,7958,3 +7959,55782137,1.2546912624,7959,3 +7960,68707027,-1.12755631,7960,3 +7961,62859802,-1.2232921791,7961,3 +7962,66367560,0.8543444968,7962,3 +7963,42174960,0.5475137287,7963,3 +7964,53233900,0.1027533153,7964,3 +7965,60083162,0.2321750931,7965,3 +7966,68616259,-0.5572404638,7966,3 +7967,28633186,-0.9775047227,7967,3 +7968,74632682,0.1948445086,7968,3 +7969,68062850,-0.451224175,7969,3 +7970,66546993,-1.4292393662,7970,3 +7971,31755251,0.3775364011,7971,3 +7972,43283983,-0.5665586328,7972,3 +7973,60209976,1.1451407168,7973,3 +7974,45690966,1.5746917186,7974,3 +7975,47568149,1.2339583145,7975,3 +7976,68819277,-1.2412153732,7976,3 +7977,47321707,1.096155861,7977,3 +7978,61117279,-0.6292455627,7978,3 +7979,87163505,-1.629093812,7979,3 +7980,60132522,-1.5516587935,7980,3 +7981,64199508,0.097016338,7981,3 +7982,78150459,0.3883037295,7982,3 +7983,31346703,-1.9479248386,7983,3 +7984,15497699,0.6582973826,7984,3 +7985,57844887,-1.6104507329,7985,3 +7986,50595872,-0.0490154646,7986,3 +7987,58000911,0.3682207463,7987,3 +7988,88701395,-0.8027998071,7988,3 +7989,75398623,-1.2403713559,7989,3 +7990,54548341,0.045871577,7990,3 +7991,30916051,0.8660608045,7991,3 +7992,13824643,0.3505199293,7992,3 +7993,39635886,0.3880916385,7993,3 +7994,18250566,0.4484035805,7994,3 +7995,86817456,0.5956976051,7995,3 +7996,68747746,-2.3035543476,7996,3 +7997,53630424,-0.7524543557,7997,3 +7998,75529450,-0.3477988072,7998,3 +7999,46587969,-0.5146281966,7999,3 +8000,16225453,0.4242935972,8000,3 +8001,65246157,1.1610952592,8001,3 +8002,79232649,-0.5457595729,8002,3 +8003,25469616,0.7292529314,8003,3 +8004,12458795,-0.0253257282,8004,3 +8005,66639321,0.1041687496,8005,3 +8006,22211824,1.1351796436,8006,3 +8007,53036796,0.7019416684,8007,3 +8008,76141806,0.3984798616,8008,3 +8009,69659553,-0.0650375754,8009,3 +8010,78374745,-0.5422469727,8010,3 +8011,45496190,0.6631993516,8011,3 +8012,81762503,1.9955709605,8012,3 +8013,35337011,-0.4570962248,8013,3 +8014,50177187,-1.0353051656,8014,3 +8015,63224336,-0.4268450883,8015,3 +8016,57508369,1.2974170624,8016,3 +8017,62119955,-0.5984011706,8017,3 +8018,77673188,0.0905292591,8018,3 +8019,77750652,-1.140736867,8019,3 +8020,89046807,1.4994090155,8020,3 +8021,13437921,1.3037567642,8021,3 +8022,17383620,-0.903160548,8022,3 +8023,51667855,-0.4811251896,8023,3 +8024,22180312,-0.1692335427,8024,3 +8025,21989816,0.8942443473,8025,3 +8026,74898535,-1.0968242884,8026,3 +8027,40607200,1.1805185578,8027,3 +8028,59164251,0.2301195745,8028,3 +8029,22743084,0.0547745501,8029,3 +8030,55666052,-1.0149909065,8030,3 +8031,35734610,-0.8582140967,8031,3 +8032,82839200,0.915309661,8032,3 +8033,25122830,0.564260568,8033,3 +8034,80686709,-0.6692903599,8034,3 +8035,15628680,-2.1081660029,8035,3 +8036,44946056,-0.5980123145,8036,3 +8037,78422048,0.2894777451,8037,3 +8038,55937522,0.2115292248,8038,3 +8039,59701950,0.9261798878,8039,3 +8040,43602014,-0.029789678,8040,3 +8041,24560820,-2.3984875337,8041,3 +8042,64483840,-1.1820618082,8042,3 +8043,35312815,1.5012350271,8043,3 +8044,27961515,-1.5926725531,8044,3 +8045,31268511,0.2327924502,8045,3 +8046,35760458,0.1404390985,8046,3 +8047,15032845,-1.9120995324,8047,3 +8048,65828274,2.087143334,8048,3 +8049,44835588,-0.2941352321,8049,3 +8050,85529156,-0.5845069957,8050,3 +8051,78071172,-0.8911155213,8051,3 +8052,31094924,1.3002927502,8052,3 +8053,68950042,0.5933196581,8053,3 +8054,27998706,-0.7615062221,8054,3 +8055,18957654,-0.7486174053,8055,3 +8056,18650597,1.6463935691,8056,3 +8057,19468719,0.2931352421,8057,3 +8058,47792530,0.4358265784,8058,3 +8059,28468422,-0.3531636571,8059,3 +8060,81353966,1.020285261,8060,3 +8061,37122435,-1.3309161437,8061,3 +8062,85773517,0.1328423018,8062,3 +8063,47241703,-0.500658531,8063,3 +8064,20838808,1.8235571102,8064,3 +8065,83067939,1.602513363,8065,3 +8066,81282823,-0.9744923805,8066,3 +8067,37463273,0.083382341,8067,3 +8068,48490424,-0.648398619,8068,3 +8069,11674362,0.6971498758,8069,3 +8070,44279966,1.9388796789,8070,3 +8071,59919104,-0.4257812653,8071,3 +8072,19015781,1.4979933226,8072,3 +8073,45174878,-0.8259945054,8073,3 +8074,82075881,-1.0781860596,8074,3 +8075,32457132,-0.1606083621,8075,3 +8076,26933519,0.5986125588,8076,3 +8077,59417532,-0.6045797421,8077,3 +8078,80073617,-0.1669658651,8078,3 +8079,55017940,1.80921478,8079,3 +8080,68794531,-0.824014394,8080,3 +8081,82947585,0.1121206712,8081,3 +8082,86377493,0.4754856516,8082,3 +8083,86662428,0.2492761073,8083,3 +8084,40441410,0.5672205476,8084,3 +8085,12836719,0.0916912127,8085,3 +8086,45719163,0.5111594473,8086,3 +8087,28334129,0.5914398332,8087,3 +8088,11219167,1.7029609597,8088,3 +8089,57625503,-2.0255928898,8089,3 +8090,33158799,0.3687246568,8090,3 +8091,22184272,0.6088224758,8091,3 +8092,38028107,0.4789730159,8092,3 +8093,58838480,3.0130648518,8093,3 +8094,48808241,-0.3949206153,8094,3 +8095,21076833,-0.4818042364,8095,3 +8096,28584627,-0.3946344207,8096,3 +8097,55582593,-1.4410824399,8097,3 +8098,36794000,-1.0746971451,8098,3 +8099,24741727,-0.0116260923,8099,3 +8100,61318764,-1.2789307571,8100,3 +8101,88969389,1.4584875202,8101,3 +8102,51742771,0.2020519337,8102,3 +8103,23967337,-0.5304910992,8103,3 +8104,82719511,-0.8778639657,8104,3 +8105,29434027,-0.4343923855,8105,3 +8106,64182782,-0.3048422964,8106,3 +8107,68136023,0.0704130626,8107,3 +8108,42210722,-0.4606523163,8108,3 +8109,42130912,0.45470419,8109,3 +8110,46860882,1.7388189894,8110,3 +8111,41332854,1.4719975054,8111,3 +8112,53479479,0.5092025212,8112,3 +8113,44354649,1.3324182742,8113,3 +8114,58793920,0.9047176363,8114,3 +8115,72285401,0.4441832229,8115,3 +8116,56000624,1.1548951209,8116,3 +8117,32323117,0.0446697876,8117,3 +8118,65269067,1.5455795688,8118,3 +8119,66965518,0.197565746,8119,3 +8120,35666959,-0.6057150771,8120,3 +8121,32799148,-0.9510330763,8121,3 +8122,30683632,-1.0742904931,8122,3 +8123,62803660,0.4765041085,8123,3 +8124,37962291,0.9855561945,8124,3 +8125,44483478,0.0058823078,8125,3 +8126,42259393,0.899851413,8126,3 +8127,15203925,-1.0221671156,8127,3 +8128,33298219,-0.4968549277,8128,3 +8129,18499612,-0.6134326262,8129,3 +8130,50424642,0.2788652737,8130,3 +8131,62229460,0.9042837505,8131,3 +8132,24620483,0.8742847953,8132,3 +8133,12030695,0.002162488,8133,3 +8134,88636868,1.1796434949,8134,3 +8135,54863745,1.1471756631,8135,3 +8136,24159760,0.3363795297,8136,3 +8137,85892006,-0.7207662032,8137,3 +8138,58676982,-0.7874269714,8138,3 +8139,12700621,0.4774252998,8139,3 +8140,23813937,-0.864107457,8140,3 +8141,39903289,1.3857129235,8141,3 +8142,36835270,-2.0063301,8142,3 +8143,37279195,0.0961578923,8143,3 +8144,63352488,-0.9419455601,8144,3 +8145,84604236,-0.7436568254,8145,3 +8146,78368387,-1.2955664424,8146,3 +8147,15530995,0.6763689454,8147,3 +8148,51868739,-0.7015073948,8148,3 +8149,86744444,-0.1773994229,8149,3 +8150,22123215,-1.4293322199,8150,3 +8151,65765494,-0.4295515292,8151,3 +8152,65695319,0.3802409476,8152,3 +8153,70892206,1.7305178695,8153,3 +8154,18709112,2.530517464,8154,3 +8155,48524316,-0.2948610531,8155,3 +8156,12390843,-0.8530960549,8156,3 +8157,29236458,1.1180638588,8157,3 +8158,89023688,0.5830767711,8158,3 +8159,79053156,-0.7622647925,8159,3 +8160,17249639,1.3201394468,8160,3 +8161,11938701,-0.6525473753,8161,3 +8162,71005488,-1.1515153661,8162,3 +8163,84065697,1.2214806073,8163,3 +8164,43327474,0.1124017591,8164,3 +8165,12706083,-2.3584386239,8165,3 +8166,13494142,0.6294195832,8166,3 +8167,39118956,-1.2262054944,8167,3 +8168,63357835,0.7265458073,8168,3 +8169,75762544,-0.0648371774,8169,3 +8170,20058394,0.0393493028,8170,3 +8171,28435473,-1.7062666219,8171,3 +8172,19256787,-1.3969545566,8172,3 +8173,55034601,0.9230336635,8173,3 +8174,54588502,-0.0193483932,8174,3 +8175,85526691,0.1877687439,8175,3 +8176,60072071,0.3589014746,8176,3 +8177,20813284,-0.6133523988,8177,3 +8178,50153433,-0.0195225438,8178,3 +8179,13293602,0.0140394185,8179,3 +8180,39059632,-0.4816025391,8180,3 +8181,10620657,-0.4839757049,8181,3 +8182,87719348,-1.6900341527,8182,3 +8183,78422300,-0.561183596,8183,3 +8184,34712532,-0.1151328142,8184,3 +8185,75498913,-0.1921746004,8185,3 +8186,63769413,-0.5301909762,8186,3 +8187,30994963,-0.4090479419,8187,3 +8188,54964774,0.6796374831,8188,3 +8189,27735748,0.4905215832,8189,3 +8190,56624518,2.1846477152,8190,3 +8191,26315651,0.5863602333,8191,3 +8192,40227701,0.6920358485,8192,3 +8193,23296199,-1.4089577074,8193,3 +8194,81082435,-0.8822222841,8194,3 +8195,88608719,-1.323191327,8195,3 +8196,20481378,-1.6280223435,8196,3 +8197,23586762,-2.1023578218,8197,3 +8198,44573644,0.9387961146,8198,3 +8199,26827070,-0.7838825173,8199,3 +8200,84995243,0.1810178955,8200,3 +8201,35686578,-0.9770034425,8201,3 +8202,54502617,1.3269996958,8202,3 +8203,66924087,-2.4760568292,8203,3 +8204,10941717,-0.5853376517,8204,3 +8205,38335839,-1.0362768112,8205,3 +8206,51276313,1.4715176211,8206,3 +8207,69850084,0.566177966,8207,3 +8208,64372444,-1.2381404744,8208,3 +8209,82112960,0.7209252314,8209,3 +8210,51831544,-0.2816452689,8210,3 +8211,70599708,-0.3463956826,8211,3 +8212,64128663,-1.6017545154,8212,3 +8213,39462982,0.4711029994,8213,3 +8214,38796503,1.2723105582,8214,3 +8215,46832321,1.4119894006,8215,3 +8216,37944946,-0.5327843445,8216,3 +8217,11835387,-0.1824365483,8217,3 +8218,21776851,0.4989079032,8218,3 +8219,28045001,-0.0023371674,8219,3 +8220,66050078,1.1724935306,8220,3 +8221,61685884,-1.3028755715,8221,3 +8222,19297849,1.3288407319,8222,3 +8223,68796208,2.7901968992,8223,3 +8224,45904569,2.4106373372,8224,3 +8225,69973553,0.4031539898,8225,3 +8226,52760105,1.4438763141,8226,3 +8227,56209006,0.5051346695,8227,3 +8228,32952341,-2.4131826395,8228,3 +8229,56613710,2.1586971697,8229,3 +8230,45134098,-0.8676185056,8230,3 +8231,20700827,-2.1359167326,8231,3 +8232,18970155,-1.1928109038,8232,3 +8233,56375147,-0.116025435,8233,3 +8234,31172927,0.3016009815,8234,3 +8235,73021373,-0.5352337609,8235,3 +8236,14242057,0.9690581879,8236,3 +8237,65560382,-1.3496894995,8237,3 +8238,16430296,0.3354611486,8238,3 +8239,36830249,-0.324898538,8239,3 +8240,37904620,-0.3170463167,8240,3 +8241,81121490,1.8020221075,8241,3 +8242,49770742,-2.2338179369,8242,3 +8243,70962240,-0.0117286165,8243,3 +8244,43926412,0.4319361876,8244,3 +8245,24747850,0.7267539397,8245,3 +8246,84949682,1.4004286596,8246,3 +8247,82504457,1.0976868479,8247,3 +8248,88141000,-0.387479739,8248,3 +8249,31025923,0.5254346751,8249,3 +8250,72461317,0.3509365479,8250,3 +8251,37006554,-0.1593685967,8251,3 +8252,28630583,0.5182059979,8252,3 +8253,55928036,-0.5488972208,8253,3 +8254,77184552,0.9000777558,8254,3 +8255,66314858,-1.0847092927,8255,3 +8256,89070172,1.1708492547,8256,3 +8257,13599935,1.1252729116,8257,3 +8258,59499945,0.1036654447,8258,3 +8259,57093991,-0.4627785318,8259,3 +8260,84720668,1.8581915298,8260,3 +8261,40095943,-1.2069678594,8261,3 +8262,71906720,-0.4252010148,8262,3 +8263,18482637,0.2494697976,8263,3 +8264,41499611,0.2618954783,8264,3 +8265,44867792,-0.3394836185,8265,3 +8266,79847102,1.0748806794,8266,3 +8267,23095898,-0.3450727062,8267,3 +8268,36874109,0.8354210331,8268,3 +8269,21031972,0.5483900246,8269,3 +8270,20581540,-1.2830734658,8270,3 +8271,56805400,0.3036190422,8271,3 +8272,34419801,0.1398580827,8272,3 +8273,65045475,-0.8832202361,8273,3 +8274,45122392,0.6557551941,8274,3 +8275,55660201,-0.7857394843,8275,3 +8276,61113455,-1.513061691,8276,3 +8277,70246699,-0.1109089756,8277,3 +8278,26146458,-1.2632125875,8278,3 +8279,77582625,-1.130101289,8279,3 +8280,42031848,1.3553277537,8280,3 +8281,89332761,0.2617066322,8281,3 +8282,50465031,-1.0994046435,8282,3 +8283,12443009,-1.0635432312,8283,3 +8284,83282509,-0.3353099981,8284,3 +8285,68051026,-0.3860605638,8285,3 +8286,31238226,-1.2244568726,8286,3 +8287,80919277,0.7347698972,8287,3 +8288,34139718,-2.0750861542,8288,3 +8289,51448495,0.3905113987,8289,3 +8290,77748138,-0.6882183084,8290,3 +8291,13211000,0.1764951667,8291,3 +8292,88861270,0.5826220583,8292,3 +8293,78594623,-1.268666605,8293,3 +8294,22341659,-2.988986074,8294,3 +8295,70870776,-0.6638623098,8295,3 +8296,88629159,-0.9107043763,8296,3 +8297,47305025,0.1758231049,8297,3 +8298,80666078,0.3654285897,8298,3 +8299,12301373,0.9469188531,8299,3 +8300,29014803,0.1454708859,8300,3 +8301,89359671,-0.996609355,8301,3 +8302,37236018,-1.7147954798,8302,3 +8303,13342259,-0.1575577619,8303,3 +8304,17100714,-1.285434684,8304,3 +8305,82047855,0.6438084401,8305,3 +8306,74516033,1.526454596,8306,3 +8307,60414741,0.869062558,8307,3 +8308,16294340,1.6315347235,8308,3 +8309,65059156,1.3496528766,8309,3 +8310,70596404,1.7908181629,8310,3 +8311,34360822,0.5521631164,8311,3 +8312,67029371,0.1262268634,8312,3 +8313,47524795,-0.0957526628,8313,3 +8314,33905686,1.7887742184,8314,3 +8315,56468642,-0.5575223988,8315,3 +8316,18740847,1.8007998079,8316,3 +8317,55063479,1.5236335546,8317,3 +8318,30108322,-0.6253598688,8318,3 +8319,29806598,-0.4582913356,8319,3 +8320,66560133,1.0321167067,8320,3 +8321,30544711,-1.3931128566,8321,3 +8322,19405214,0.1819152062,8322,3 +8323,56397071,-1.4609739912,8323,3 +8324,53278712,-0.6884878183,8324,3 +8325,62536012,-1.0108661186,8325,3 +8326,56591964,0.0014772383,8326,3 +8327,67071791,0.8703719527,8327,3 +8328,12168094,-1.1068974743,8328,3 +8329,84967469,0.1213688942,8329,3 +8330,28215706,-0.8554574517,8330,3 +8331,17273821,1.0785798225,8331,3 +8332,41567660,1.1662302587,8332,3 +8333,36662569,0.7087982498,8333,3 +8334,32536851,0.4103010888,8334,3 +8335,57810304,-1.3207078523,8335,3 +8336,15660764,0.8672331233,8336,3 +8337,49353194,1.6477207531,8337,3 +8338,13601131,-0.7088137061,8338,3 +8339,56499603,0.0174442924,8339,3 +8340,57160306,0.0182510506,8340,3 +8341,71846639,-0.8608711975,8341,3 +8342,89132189,1.235876924,8342,3 +8343,38949699,1.0255218557,8343,3 +8344,43590509,1.3305382546,8344,3 +8345,65843261,-0.9790157432,8345,3 +8346,36987098,-0.1972638391,8346,3 +8347,67856534,1.9681340022,8347,3 +8348,68257191,-0.3280339804,8348,3 +8349,12600871,-1.3709793189,8349,3 +8350,31559887,-0.3434850694,8350,3 +8351,79168626,-0.193502304,8351,3 +8352,11731518,-0.3715862868,8352,3 +8353,70188769,-0.8427852488,8353,3 +8354,42494058,-0.0867962855,8354,3 +8355,24236150,1.0290087667,8355,3 +8356,76499499,-1.3593429716,8356,3 +8357,29889501,-0.7257049713,8357,3 +8358,55844237,-0.606811086,8358,3 +8359,18246840,0.0451156159,8359,3 +8360,80288442,-0.6313592506,8360,3 +8361,45982988,0.3555446472,8361,3 +8362,13728711,-0.1616213359,8362,3 +8363,36925054,-0.3389726905,8363,3 +8364,29805078,-2.2731833453,8364,3 +8365,77559448,-0.1414709541,8365,3 +8366,26250058,0.5292054052,8366,3 +8367,69115519,1.0937958828,8367,3 +8368,18721570,0.6410819477,8368,3 +8369,34504196,-0.8607881956,8369,3 +8370,49607520,-0.3587754263,8370,3 +8371,89121418,-0.7466460332,8371,3 +8372,30306688,-1.3783679283,8372,3 +8373,21629797,0.1956915084,8373,3 +8374,63387859,-0.6693689634,8374,3 +8375,48904142,1.372855323,8375,3 +8376,40097651,0.194075628,8376,3 +8377,13270589,1.2774474873,8377,3 +8378,23065420,-0.3777013629,8378,3 +8379,89666673,-0.6647005331,8379,3 +8380,88050502,-1.8326394913,8380,3 +8381,41206378,-0.9594144994,8381,3 +8382,76711596,0.9844524563,8382,3 +8383,28605546,0.4828727032,8383,3 +8384,48649346,-0.9218790575,8384,3 +8385,14627586,1.3578292935,8385,3 +8386,13513234,1.7692070851,8386,3 +8387,15828875,-1.8397118066,8387,3 +8388,67863930,-0.1023130422,8388,3 +8389,64467805,0.1394895517,8389,3 +8390,22220051,-1.5302855936,8390,3 +8391,31212511,0.3163943156,8391,3 +8392,36596440,-1.7495671742,8392,3 +8393,44431708,-0.7008158063,8393,3 +8394,39760892,-0.6505308434,8394,3 +8395,30950343,-0.2500034584,8395,3 +8396,80060807,0.4328551103,8396,3 +8397,64092558,1.0605401561,8397,3 +8398,22119445,-0.7621419865,8398,3 +8399,42061506,-0.4686497398,8399,3 +8400,47731237,0.7088630933,8400,3 +8401,58764265,0.9278404411,8401,3 +8402,39196457,0.8046066312,8402,3 +8403,44422933,0.8825661233,8403,3 +8404,31908106,0.9092653804,8404,3 +8405,89647111,-0.4281924669,8405,3 +8406,73339254,2.6520213886,8406,3 +8407,84187313,-0.8606849028,8407,3 +8408,31250784,-0.3576213183,8408,3 +8409,79425960,-1.8876227439,8409,3 +8410,72957549,-1.4773196398,8410,3 +8411,65602662,-1.6739699744,8411,3 +8412,66218099,-0.3260837615,8412,3 +8413,33152705,-1.1243808379,8413,3 +8414,36395959,-0.3478807664,8414,3 +8415,16675640,0.2395246116,8415,3 +8416,68318007,-0.3296245854,8416,3 +8417,50826429,2.4805119603,8417,3 +8418,51272421,-1.5781851602,8418,3 +8419,77872060,0.0792984651,8419,3 +8420,72447454,0.3165624411,8420,3 +8421,29010034,1.4668682379,8421,3 +8422,22904488,0.1384279285,8422,3 +8423,26713789,2.5211406644,8423,3 +8424,77565163,1.4656602696,8424,3 +8425,28772150,-0.0813211485,8425,3 +8426,86745251,0.6569755097,8426,3 +8427,34494926,-1.484657006,8427,3 +8428,48085656,0.4028470048,8428,3 +8429,37269135,-0.994655511,8429,3 +8430,82203012,-0.2883983694,8430,3 +8431,25369764,-0.6629431357,8431,3 +8432,88841523,-0.214169623,8432,3 +8433,72087219,0.1290951447,8433,3 +8434,53515291,0.7813261772,8434,3 +8435,51171926,-0.8020033513,8435,3 +8436,34651700,-0.2522435837,8436,3 +8437,58670484,-0.964339,8437,3 +8438,81772677,-0.5283835415,8438,3 +8439,80840246,1.2010625964,8439,3 +8440,78282228,-0.5808339078,8440,3 +8441,24416775,0.3686185192,8441,3 +8442,19820734,1.5962110038,8442,3 +8443,83335529,-0.0243125402,8443,3 +8444,87538939,1.0248067304,8444,3 +8445,81087827,-0.5780891034,8445,3 +8446,53337289,-1.5345300184,8446,3 +8447,67177672,0.2461110198,8447,3 +8448,43012075,-1.3310938042,8448,3 +8449,41406959,-0.1706835728,8449,3 +8450,17469263,-1.1220056736,8450,3 +8451,68406345,0.2511478938,8451,3 +8452,57515842,-1.9733241805,8452,3 +8453,54131978,-0.4013123117,8453,3 +8454,43554836,0.02706753,8454,3 +8455,32680676,0.5124569626,8455,3 +8456,51137596,-0.9860778072,8456,3 +8457,13143272,0.7043248439,8457,3 +8458,30562671,0.8129763199,8458,3 +8459,42266168,-0.264875743,8459,3 +8460,32956845,0.1140066394,8460,3 +8461,77531988,0.5233352744,8461,3 +8462,22621110,-0.1814965287,8462,3 +8463,19428104,-2.0206690126,8463,3 +8464,29958194,0.0084854009,8464,3 +8465,80435417,1.1641431921,8465,3 +8466,65697397,-0.3931239845,8466,3 +8467,78692796,-1.1694426208,8467,3 +8468,63915551,-0.5538468557,8468,3 +8469,20652737,-1.5194810305,8469,3 +8470,13740307,0.5833890403,8470,3 +8471,87977421,-0.3868211583,8471,3 +8472,67433433,-0.8184187207,8472,3 +8473,30026842,-0.1160592485,8473,3 +8474,68045217,0.0134492597,8474,3 +8475,51535278,1.1749193827,8475,3 +8476,59659502,1.8941904753,8476,3 +8477,78472260,-1.5986537748,8477,3 +8478,21471191,0.5597200355,8478,3 +8479,34470135,0.3183734905,8479,3 +8480,53574329,1.7475382839,8480,3 +8481,11952346,1.6675579111,8481,3 +8482,61761294,0.9186314301,8482,3 +8483,32339502,-0.2008276528,8483,3 +8484,60761703,-0.3158734309,8484,3 +8485,89733204,0.7043369002,8485,3 +8486,51716507,0.5168972216,8486,3 +8487,28834052,-0.4629003243,8487,3 +8488,64807644,-1.1829852277,8488,3 +8489,18793905,-0.3753359116,8489,3 +8490,49366967,-0.4761556759,8490,3 +8491,33451246,0.0546304629,8491,3 +8492,50335315,0.7085054465,8492,3 +8493,21005989,0.3546525262,8493,3 +8494,53573559,-1.3271073585,8494,3 +8495,72067941,-0.2259194397,8495,3 +8496,39534011,-0.1434246373,8496,3 +8497,57141028,0.7938952767,8497,3 +8498,53075152,3.0479001908,8498,3 +8499,76971593,-0.3102248456,8499,3 +8500,75370151,0.8891858149,8500,3 +8501,19199443,-0.3051709818,8501,3 +8502,72940491,-0.4777285437,8502,3 +8503,33179007,0.5869027599,8503,3 +8504,71685693,-0.7815706113,8504,3 +8505,65169682,-0.7579438305,8505,3 +8506,31362962,1.4771941659,8506,3 +8507,82330680,2.3896875907,8507,3 +8508,10892634,-0.1107424084,8508,3 +8509,51596276,-1.2936387973,8509,3 +8510,34715786,0.244676795,8510,3 +8511,76523761,0.6282780256,8511,3 +8512,73574996,0.6720462133,8512,3 +8513,27197399,-0.2489065658,8513,3 +8514,88198831,0.6061902923,8514,3 +8515,10626912,0.0240374511,8515,3 +8516,62259352,-0.3357348482,8516,3 +8517,11384793,-0.0047539615,8517,3 +8518,66122619,-0.0239047643,8518,3 +8519,78136624,-1.4461840045,8519,3 +8520,51750994,-0.8976815181,8520,3 +8521,64516451,-0.8361895311,8521,3 +8522,40040146,-0.460522789,8522,3 +8523,16427473,-0.1279607127,8523,3 +8524,11670534,-0.2009958382,8524,3 +8525,73261041,2.4843289067,8525,3 +8526,23969958,-2.0958504568,8526,3 +8527,34701544,-0.3456523095,8527,3 +8528,81192555,-1.0488838099,8528,3 +8529,74064620,-0.5184696818,8529,3 +8530,19927397,-0.9928828044,8530,3 +8531,53078964,1.8071867311,8531,3 +8532,88595882,0.4455998834,8532,3 +8533,86683354,-0.5979941188,8533,3 +8534,68076726,0.0538194104,8534,3 +8535,68258501,-1.0998815699,8535,3 +8536,33220619,0.4272424861,8536,3 +8537,59446511,-0.7793869131,8537,3 +8538,46659581,-0.4672038412,8538,3 +8539,12736845,-0.2940876929,8539,3 +8540,18673244,-0.071960867,8540,3 +8541,36252065,-0.4679165037,8541,3 +8542,39914990,1.3737708101,8542,3 +8543,24377297,-0.3940247134,8543,3 +8544,85182278,2.6749542274,8544,3 +8545,46571453,0.373361548,8545,3 +8546,57579660,1.2590562769,8546,3 +8547,45786336,-2.0985033019,8547,3 +8548,22077441,0.9852252435,8548,3 +8549,26986391,0.724574825,8549,3 +8550,51988224,-0.3531635829,8550,3 +8551,77502409,1.7137236269,8551,3 +8552,39178513,-0.7689113675,8552,3 +8553,40214015,-1.5404333502,8553,3 +8554,57801851,-0.280388357,8554,3 +8555,66704521,-0.4100157829,8555,3 +8556,12570220,0.6167078654,8556,3 +8557,54853447,1.9904800701,8557,3 +8558,81623766,-0.342512376,8558,3 +8559,46969771,-1.0553332248,8559,3 +8560,14981800,0.2245436773,8560,3 +8561,47453732,-0.5065987712,8561,3 +8562,89360329,0.2869569448,8562,3 +8563,11265671,-0.2210909647,8563,3 +8564,32280153,-1.911131638,8564,3 +8565,73448933,0.4931666373,8565,3 +8566,76682910,0.8609591379,8566,3 +8567,56655113,-0.1528565099,8567,3 +8568,56810231,-0.4395573897,8568,3 +8569,54320898,0.1875952135,8569,3 +8570,75014109,-0.2412752212,8570,3 +8571,82398967,0.0078101652,8571,3 +8572,25489451,0.6769358908,8572,3 +8573,81008880,-0.9172150582,8573,3 +8574,22083513,0.9284859239,8574,3 +8575,16350791,-0.1769466602,8575,3 +8576,71556442,-1.1693525926,8576,3 +8577,74433914,-0.5025563355,8577,3 +8578,36115255,-0.815337447,8578,3 +8579,42409194,1.3305305809,8579,3 +8580,28055231,2.3066596413,8580,3 +8581,73181962,-2.3971690063,8581,3 +8582,35786389,-0.2767309204,8582,3 +8583,29293542,1.5575679259,8583,3 +8584,82767335,0.9300571559,8584,3 +8585,66789518,2.1150194895,8585,3 +8586,53596855,1.9195919556,8586,3 +8587,73389208,0.535040762,8587,3 +8588,25550576,-1.4259822151,8588,3 +8589,53994617,-1.0017235248,8589,3 +8590,78305561,-0.5345906776,8590,3 +8591,64338611,0.3804095222,8591,3 +8592,56785809,-0.4773401984,8592,3 +8593,34591381,-0.3195338055,8593,3 +8594,44874264,0.484319282,8594,3 +8595,10844523,0.1071322018,8595,3 +8596,82363720,0.72140708,8596,3 +8597,38291589,1.0077014341,8597,3 +8598,51412210,-0.2433126497,8598,3 +8599,38982709,1.0183334472,8599,3 +8600,41867425,0.9844740902,8600,3 +8601,74845752,1.5075886495,8601,3 +8602,55748709,-0.447859347,8602,3 +8603,71124690,0.310738803,8603,3 +8604,47643696,1.2659430735,8604,3 +8605,10977762,0.1326965796,8605,3 +8606,31123937,0.0900350532,8606,3 +8607,77522176,1.2003063976,8607,3 +8608,75913737,0.1871174003,8608,3 +8609,59950222,0.1501576895,8609,3 +8610,57940325,0.2287508483,8610,3 +8611,80772279,0.5577909261,8611,3 +8612,81616978,-0.5813783749,8612,3 +8613,38247686,1.5232653658,8613,3 +8614,19849870,-1.0321093488,8614,3 +8615,28067407,0.5706874681,8615,3 +8616,86675086,-0.0909837178,8616,3 +8617,58242630,0.1608504642,8617,3 +8618,45123861,-0.4076241574,8618,3 +8619,33392691,0.8268952569,8619,3 +8620,76598914,1.1285190622,8620,3 +8621,26104060,-1.7168046331,8621,3 +8622,58957393,-0.370338104,8622,3 +8623,28312627,-0.7933023364,8623,3 +8624,39537537,1.6815028528,8624,3 +8625,54885875,1.9223434068,8625,3 +8626,71077664,0.022391416,8626,3 +8627,29888633,1.0092362486,8627,3 +8628,87175206,-0.7378669867,8628,3 +8629,26349858,-1.283930997,8629,3 +8630,33262979,-0.3626778435,8630,3 +8631,31483453,0.0924144061,8631,3 +8632,35805866,-0.5962317081,8632,3 +8633,68354801,-1.5933458365,8633,3 +8634,74888099,-0.9115712934,8634,3 +8635,66259669,-0.5296053309,8635,3 +8636,48279202,-0.3891856838,8636,3 +8637,50921330,0.3739944227,8637,3 +8638,45962434,-0.0925322593,8638,3 +8639,53374480,-0.2571536083,8639,3 +8640,65899131,-2.1694719351,8640,3 +8641,68026901,0.2374431083,8641,3 +8642,44312568,-0.1487773464,8642,3 +8643,55196950,0.1074008696,8643,3 +8644,45763523,-0.6921283505,8644,3 +8645,61008484,1.3403904806,8645,3 +8646,55170431,1.6845744033,8646,3 +8647,29251534,0.0150392228,8647,3 +8648,70849528,-0.5939235163,8648,3 +8649,45144075,0.132145856,8649,3 +8650,51121844,-1.1944398952,8650,3 +8651,37495911,0.7197070884,8651,3 +8652,55895086,0.936525838,8652,3 +8653,73689086,1.4819855049,8653,3 +8654,71864540,0.2100673094,8654,3 +8655,54165127,0.4991150377,8655,3 +8656,70466962,0.9491255988,8656,3 +8657,64357652,0.6775714164,8657,3 +8658,29928592,-1.5412055188,8658,3 +8659,73014171,-0.020783286,8659,3 +8660,72556747,-0.2842897947,8660,3 +8661,30214534,-0.870583697,8661,3 +8662,21329410,0.6996053534,8662,3 +8663,21999050,2.0072870629,8663,3 +8664,66077157,1.1043589225,8664,3 +8665,66735320,0.1214655938,8665,3 +8666,38815341,0.255239589,8666,3 +8667,73609692,1.2996381341,8667,3 +8668,56342200,0.7924855346,8668,3 +8669,40207538,0.5279097097,8669,3 +8670,88176438,-0.6269906882,8670,3 +8671,33787823,1.2800743519,8671,3 +8672,63408209,-0.8705914084,8672,3 +8673,89746763,-0.1588636831,8673,3 +8674,31983543,0.7715311224,8674,3 +8675,41539662,0.1225712785,8675,3 +8676,60252920,-2.6160930429,8676,3 +8677,30780575,0.2149633923,8677,3 +8678,11311521,0.4122926278,8678,3 +8679,86496385,0.9198836271,8679,3 +8680,17480794,2.1293027715,8680,3 +8681,14126632,0.5304090295,8681,3 +8682,44074211,-0.2936246662,8682,3 +8683,26856720,0.7695687474,8683,3 +8684,18284989,1.5904850055,8684,3 +8685,19853346,0.1086909159,8685,3 +8686,54389138,-0.7812611976,8686,3 +8687,76669398,-0.2621125064,8687,3 +8688,42075327,-0.580920867,8688,3 +8689,53327364,-0.2842288957,8689,3 +8690,32993797,-0.5399972535,8690,3 +8691,86992106,-0.7325412687,8691,3 +8692,46276826,1.5705710055,8692,3 +8693,48497046,0.3245298903,8693,3 +8694,42383042,0.5536948021,8694,3 +8695,88914078,-1.2072043567,8695,3 +8696,53355500,1.1029465754,8696,3 +8697,33101728,-1.5425791686,8697,3 +8698,36776412,-0.4522689695,8698,3 +8699,63875453,-0.2260100055,8699,3 +8700,12803025,-0.3778896861,8700,3 +8701,11211247,1.0114219233,8701,3 +8702,27862379,1.0468307311,8702,3 +8703,29658436,0.4342833452,8703,3 +8704,71669424,0.855227636,8704,3 +8705,87784983,1.2144255975,8705,3 +8706,21552087,0.1486994685,8706,3 +8707,49750207,-0.6847296621,8707,3 +8708,85553456,-0.0858081087,8708,3 +8709,31633240,0.5363585396,8709,3 +8710,25229624,0.1685142196,8710,3 +8711,88654536,1.4831420171,8711,3 +8712,53407530,0.9692459213,8712,3 +8713,32404846,0.0843258003,8713,3 +8714,65503798,0.2694089465,8714,3 +8715,41609047,1.1408003921,8715,3 +8716,63887997,-0.2775151291,8716,3 +8717,27509148,-1.5160091883,8717,3 +8718,30237446,-0.6478679201,8718,3 +8719,86987156,-0.6423835748,8719,3 +8720,10926019,1.7894019033,8720,3 +8721,37766057,-0.6903833554,8721,3 +8722,75342907,-0.680297207,8722,3 +8723,39377169,-1.2864559403,8723,3 +8724,59391424,-0.1882495862,8724,3 +8725,81349730,0.3355494491,8725,3 +8726,67937386,-0.3336949979,8726,3 +8727,41142415,1.8424262372,8727,3 +8728,63283906,-0.7887821615,8728,3 +8729,35584114,-0.5125359814,8729,3 +8730,54982067,-2.0770366653,8730,3 +8731,19124952,-0.8008891709,8731,3 +8732,50463779,0.862000909,8732,3 +8733,15864138,0.5531242509,8733,3 +8734,66541313,0.4449662892,8734,3 +8735,24100312,0.824031718,8735,3 +8736,52912479,-1.8219297631,8736,3 +8737,48391768,-0.9075436239,8737,3 +8738,11844952,-0.4534118306,8738,3 +8739,86274715,-0.5467483017,8739,3 +8740,11562950,1.9885239829,8740,3 +8741,66769142,0.1263201269,8741,3 +8742,88134150,-1.5754837849,8742,3 +8743,84603615,0.3942567222,8743,3 +8744,82712794,1.8218371828,8744,3 +8745,58172967,-2.0127219876,8745,3 +8746,80619967,0.5592055903,8746,3 +8747,71120332,0.8802830362,8747,3 +8748,28546848,0.8747660412,8748,3 +8749,54985942,1.168858947,8749,3 +8750,50204338,-0.4766905508,8750,3 +8751,37216258,0.1385837364,8751,3 +8752,23263505,0.6749770548,8752,3 +8753,48701775,0.2176692262,8753,3 +8754,13439264,-1.4225077815,8754,3 +8755,37129290,-0.5098779636,8755,3 +8756,78319473,1.1837897135,8756,3 +8757,16679060,2.1876185357,8757,3 +8758,21607050,-0.5349565471,8758,3 +8759,88908291,0.9078567961,8759,3 +8760,51650226,-0.1714495076,8760,3 +8761,26837296,0.3367814274,8761,3 +8762,56959790,0.1171254706,8762,3 +8763,21283163,0.0650149189,8763,3 +8764,29117425,0.9051156119,8764,3 +8765,70590883,0.669713369,8765,3 +8766,83826580,0.173639129,8766,3 +8767,64955189,0.1920404614,8767,3 +8768,34382968,0.1980092276,8768,3 +8769,84486838,1.479152366,8769,3 +8770,38298124,-0.8864163941,8770,3 +8771,63946860,1.0400718449,8771,3 +8772,47231686,0.2872607481,8772,3 +8773,62041076,-0.1185719007,8773,3 +8774,54021799,-1.8082294565,8774,3 +8775,29116385,-0.2191898758,8775,3 +8776,89804816,1.6860900988,8776,3 +8777,80959888,-0.7445264111,8777,3 +8778,37063933,0.216238335,8778,3 +8779,36838647,-0.8054948427,8779,3 +8780,57377510,1.8074916892,8780,3 +8781,74583856,1.4857669591,8781,3 +8782,21803193,0.2562817851,8782,3 +8783,89258100,0.8547583464,8783,3 +8784,53079310,-1.5015792216,8784,3 +8785,62468542,-0.6822758561,8785,3 +8786,81785105,-0.3966190987,8786,3 +8787,69175123,0.2096049277,8787,3 +8788,69374174,0.2979727007,8788,3 +8789,19651990,-1.8423981012,8789,3 +8790,82311079,-0.6264069962,8790,3 +8791,33411876,1.5851214081,8791,3 +8792,56740118,-0.1626185563,8792,3 +8793,64204194,0.5330478259,8793,3 +8794,69980903,-0.0283007168,8794,3 +8795,30654866,-0.8081543379,8795,3 +8796,37737614,-2.3893951215,8796,3 +8797,73809772,0.3072132063,8797,3 +8798,30368742,-0.6075368077,8798,3 +8799,37452437,-0.4651069757,8799,3 +8800,17724494,0.3974664119,8800,3 +8801,40313919,0.6758052478,8801,3 +8802,72287403,0.4759789958,8802,3 +8803,43252932,1.1328523343,8803,3 +8804,66059481,-0.9724338224,8804,3 +8805,21368050,-0.8562031588,8805,3 +8806,68575642,-0.9655971857,8806,3 +8807,46164281,-2.0843191501,8807,3 +8808,13012168,1.4358598362,8808,3 +8809,43504319,-0.4042689759,8809,3 +8810,68142516,-1.6459487718,8810,3 +8811,63315097,-1.5328672544,8811,3 +8812,55894589,0.7320647436,8812,3 +8813,51696093,-0.320997544,8813,3 +8814,40434048,-0.7978973989,8814,3 +8815,48527298,-0.4538849642,8815,3 +8816,36393925,-1.0684005827,8816,3 +8817,13528565,0.4920657127,8817,3 +8818,11171263,-0.0735183915,8818,3 +8819,12955932,1.5105265961,8819,3 +8820,25673767,0.0889960566,8820,3 +8821,16875594,0.0500919588,8821,3 +8822,82117848,-0.2125196686,8822,3 +8823,26208163,2.0883636507,8823,3 +8824,49339269,-0.416703317,8824,3 +8825,10213891,-1.4833863865,8825,3 +8826,33049234,0.0622094862,8826,3 +8827,16293436,-2.2296062566,8827,3 +8828,78104177,1.3613718131,8828,3 +8829,39707530,1.017512979,8829,3 +8830,56751353,0.3703272711,8830,3 +8831,39928328,1.2383383618,8831,3 +8832,51156036,0.1102847106,8832,3 +8833,83349190,-0.0570421554,8833,3 +8834,37486786,0.9613661046,8834,3 +8835,67370220,-0.1028600659,8835,3 +8836,37079746,1.6330952542,8836,3 +8837,53725095,-0.4936419944,8837,3 +8838,87588366,0.9788739122,8838,3 +8839,45244666,-0.5408212576,8839,3 +8840,10266562,0.6936028569,8840,3 +8841,64056979,0.5510781125,8841,3 +8842,35340283,1.0109119621,8842,3 +8843,18807755,-0.6814324444,8843,3 +8844,59523909,0.4760601708,8844,3 +8845,21627948,-0.7942783454,8845,3 +8846,59552979,-0.004982729,8846,3 +8847,17606323,0.6234936227,8847,3 +8848,71301727,-0.3354171603,8848,3 +8849,29210631,-0.6904092744,8849,3 +8850,89565273,-0.8220047714,8850,3 +8851,26886674,-0.978959826,8851,3 +8852,82093633,1.8155918539,8852,3 +8853,35509839,0.5757938935,8853,3 +8854,69623365,1.3976176872,8854,3 +8855,52199301,-1.0252894337,8855,3 +8856,51247565,0.235549317,8856,3 +8857,31264422,-0.9631142268,8857,3 +8858,29363942,-0.0554619603,8858,3 +8859,17073308,0.5263207166,8859,3 +8860,87972709,-0.1240391647,8860,3 +8861,69793872,-1.9095226452,8861,3 +8862,37224297,2.4877591164,8862,3 +8863,87501272,-0.1251078417,8863,3 +8864,72371431,0.7017315782,8864,3 +8865,64103961,-0.952151786,8865,3 +8866,49532515,-0.0247237181,8866,3 +8867,31853851,1.5191687291,8867,3 +8868,47834865,-0.37297364,8868,3 +8869,21489764,-0.2414409766,8869,3 +8870,44199156,-0.7416151359,8870,3 +8871,38145751,0.1116304794,8871,3 +8872,42526266,0.9157843641,8872,3 +8873,85908254,-0.7176388915,8873,3 +8874,23998805,0.1451715968,8874,3 +8875,46425210,-1.123720718,8875,3 +8876,33523745,1.0135866218,8876,3 +8877,21617498,-0.8928675586,8877,3 +8878,46863248,0.7803268162,8878,3 +8879,63628503,0.3598505294,8879,3 +8880,47013389,-0.928491985,8880,3 +8881,62779878,1.6461292391,8881,3 +8882,26706609,-0.8438639524,8882,3 +8883,31405484,0.4804369852,8883,3 +8884,86506375,0.0379543638,8884,3 +8885,55683931,0.0669293803,8885,3 +8886,79318031,0.0941996788,8886,3 +8887,60157777,0.6276900767,8887,3 +8888,85280326,-0.4133234796,8888,3 +8889,29288850,-1.1470216071,8889,3 +8890,58549911,0.2553923186,8890,3 +8891,22675041,-0.4904093123,8891,3 +8892,49346094,-0.0413797465,8892,3 +8893,62594351,0.7301836919,8893,3 +8894,69038049,0.5333067645,8894,3 +8895,75718317,0.1033730888,8895,3 +8896,31493431,-1.2085810395,8896,3 +8897,70594513,-0.5422487008,8897,3 +8898,65707335,-1.2790965147,8898,3 +8899,46367099,-1.0138384736,8899,3 +8900,55396761,-0.7352980478,8900,3 +8901,40472147,-0.2702033396,8901,3 +8902,43063652,-0.1010939549,8902,3 +8903,79659826,1.1963784584,8903,3 +8904,13387625,-1.9655719801,8904,3 +8905,17467862,-0.1715700306,8905,3 +8906,81939209,0.9483822094,8906,3 +8907,44374857,0.0563257953,8907,3 +8908,70350760,1.1441281601,8908,3 +8909,38281308,0.3172462211,8909,3 +8910,52540203,0.5285290897,8910,3 +8911,35653240,0.7001100314,8911,3 +8912,13192012,0.5465952495,8912,3 +8913,54532634,0.1871654836,8913,3 +8914,62392019,-0.6298416664,8914,3 +8915,47853149,0.0391954755,8915,3 +8916,47585073,1.5994770092,8916,3 +8917,82334444,0.4384979543,8917,3 +8918,71256261,0.1095011389,8918,3 +8919,20286674,-0.9682222339,8919,3 +8920,35302176,-0.8550404176,8920,3 +8921,78776352,0.3403671923,8921,3 +8922,21566762,0.2486263328,8922,3 +8923,35775013,-1.1753528415,8923,3 +8924,82255661,0.4343350082,8924,3 +8925,80661317,0.0471917119,8925,3 +8926,88856259,0.294562366,8926,3 +8927,22283389,2.2742023891,8927,3 +8928,31488017,0.8632626978,8928,3 +8929,61195828,-0.2415973887,8929,3 +8930,51807021,0.9326294184,8930,3 +8931,24799792,-1.4699090801,8931,3 +8932,36366546,1.972078918,8932,3 +8933,18136231,-1.6790704946,8933,3 +8934,16579387,0.505275025,8934,3 +8935,60990626,-0.2659018881,8935,3 +8936,38515021,-0.1836761592,8936,3 +8937,31888426,-0.2677305884,8937,3 +8938,30925381,-0.6886880282,8938,3 +8939,78902763,-2.1469928445,8939,3 +8940,47385550,-0.4541335017,8940,3 +8941,49859440,1.2846998493,8941,3 +8942,21546636,-0.3650971778,8942,3 +8943,70312700,-1.3144929944,8943,3 +8944,68286829,0.6936137902,8944,3 +8945,42589462,-1.3614389386,8945,3 +8946,14251645,-0.341481079,8946,3 +8947,63972095,0.8145093447,8947,3 +8948,55926743,-0.9762940789,8948,3 +8949,66364433,0.0992151229,8949,3 +8950,25728768,0.0814815232,8950,3 +8951,20440789,-0.7459954697,8951,3 +8952,16424483,-0.1148235438,8952,3 +8953,77318499,-0.2330787148,8953,3 +8954,37303349,-0.0204232119,8954,3 +8955,48594946,-1.0087859257,8955,3 +8956,30363163,-0.7029827046,8956,3 +8957,24447974,0.3035188167,8957,3 +8958,22903359,0.6275341974,8958,3 +8959,71243517,0.6459985705,8959,3 +8960,51124501,-0.0579137112,8960,3 +8961,36074447,-0.3602591058,8961,3 +8962,27823501,-0.1799592196,8962,3 +8963,70528693,-0.3494188845,8963,3 +8964,80440014,-0.0638720381,8964,3 +8965,28839156,1.2127408901,8965,3 +8966,71061481,1.2704564441,8966,3 +8967,63795383,0.8186540474,8967,3 +8968,13539453,0.4245455345,8968,3 +8969,54247322,-0.2188410154,8969,3 +8970,73300004,1.0569334679,8970,3 +8971,65099947,0.4194603258,8971,3 +8972,86491765,-0.5753221376,8972,3 +8973,61295229,-0.2351856847,8973,3 +8974,72227668,-0.2580751895,8974,3 +8975,87871922,-0.5017359582,8975,3 +8976,43000078,-0.5313460737,8976,3 +8977,58671261,2.5657063808,8977,3 +8978,11989902,0.9173225801,8978,3 +8979,39326684,-0.9891552004,8979,3 +8980,12038708,0.1675948109,8980,3 +8981,52367772,1.3674047956,8981,3 +8982,21858398,-0.8880007917,8982,3 +8983,61987273,0.3557878966,8983,3 +8984,68148382,0.4571282585,8984,3 +8985,59729068,0.7543749836,8985,3 +8986,46293776,-1.5172272444,8986,3 +8987,49956563,-0.0140532106,8987,3 +8988,27608853,0.3438734125,8988,3 +8989,43417772,-0.3377071587,8989,3 +8990,40159717,1.0132531582,8990,3 +8991,17775708,-0.142514859,8991,3 +8992,47366422,0.3945731103,8992,3 +8993,89937970,-0.4440325797,8993,3 +8994,28822757,-0.9036461012,8994,3 +8995,54746333,0.7020313559,8995,3 +8996,53720772,-0.2189937259,8996,3 +8997,52424466,-2.0525792718,8997,3 +8998,24309472,0.4604483039,8998,3 +8999,16815132,-0.3388351471,8999,3 +9000,64513125,0.525933461,9000,3 +9001,75784991,1.7706178654,9001,3 +9002,86277736,-1.6088773312,9002,3 +9003,48739849,0.0515905208,9003,3 +9004,55443624,-0.7751203438,9004,3 +9005,79382107,1.1862427916,9005,3 +9006,34910789,-1.4188208749,9006,3 +9007,39606056,-0.3485053792,9007,3 +9008,84445665,0.4035786416,9008,3 +9009,61973753,-0.9993102352,9009,3 +9010,66598373,-0.1996349402,9010,3 +9011,15920471,1.3256323951,9011,3 +9012,46632721,1.0267296392,9012,3 +9013,22046559,1.1771842421,9013,3 +9014,13619348,-1.2858184436,9014,3 +9015,32794024,1.2485062167,9015,3 +9016,78615934,-1.3207184792,9016,3 +9017,13988026,0.3160997622,9017,3 +9018,75585849,-0.4008493612,9018,3 +9019,58756032,0.7459842107,9019,3 +9020,51126768,-1.244345917,9020,3 +9021,77924893,0.8841190535,9021,3 +9022,66031134,-2.066241111,9022,3 +9023,40411607,0.329352161,9023,3 +9024,28683384,-0.2296868478,9024,3 +9025,79472713,0.5112540668,9025,3 +9026,82040411,-1.0149504897,9026,3 +9027,27958869,-0.22768206,9027,3 +9028,13217542,1.2695817751,9028,3 +9029,73374446,-0.720540646,9029,3 +9030,86866225,-0.6957687221,9030,3 +9031,35757799,1.2526373225,9031,3 +9032,33980365,-1.2905841062,9032,3 +9033,32573702,0.288850217,9033,3 +9034,66973151,3.0345799315,9034,3 +9035,15559084,0.8727947797,9035,3 +9036,72756944,-0.1096950152,9036,3 +9037,37332517,0.2186877128,9037,3 +9038,60923801,0.1774705288,9038,3 +9039,81634533,0.1530634043,9039,3 +9040,16163906,-0.3503800852,9040,3 +9041,83315060,-1.0980205253,9041,3 +9042,25402009,-1.9629688333,9042,3 +9043,76341648,0.2753794484,9043,3 +9044,16955801,-0.2579428484,9044,3 +9045,54724098,0.554326964,9045,3 +9046,75505879,-0.7675668048,9046,3 +9047,13475607,2.349341294,9047,3 +9048,41376277,-1.0632926015,9048,3 +9049,39597744,-0.9059434845,9049,3 +9050,11477240,-0.6834879808,9050,3 +9051,76331301,1.5589119887,9051,3 +9052,71946707,0.0498322181,9052,3 +9053,80696418,-0.741131305,9053,3 +9054,83305571,0.2017857698,9054,3 +9055,57176816,1.9693537208,9055,3 +9056,52598295,0.8297100017,9056,3 +9057,41370965,1.1062003808,9057,3 +9058,12390435,0.0074525717,9058,3 +9059,18325274,-0.3249676082,9059,3 +9060,37528935,-1.3936477846,9060,3 +9061,11598079,0.9725760021,9061,3 +9062,44603614,-0.0765260681,9062,3 +9063,79839745,0.0286624718,9063,3 +9064,27420416,0.9587014288,9064,3 +9065,50038224,-1.3144243985,9065,3 +9066,87789485,-2.838425049,9066,3 +9067,74859494,0.784942389,9067,3 +9068,30241011,0.2030505515,9068,3 +9069,47041135,-0.0432224426,9069,3 +9070,88518168,-1.0431849928,9070,3 +9071,69647435,-3.8362553786,9071,3 +9072,33080024,-1.0697226981,9072,3 +9073,17769944,1.6684357704,9073,3 +9074,66893021,0.1521629527,9074,3 +9075,54105161,0.1686807884,9075,3 +9076,12481936,1.605156868,9076,3 +9077,56231021,-0.4606058469,9077,3 +9078,21697409,-0.8047202188,9078,3 +9079,41722519,0.6499934664,9079,3 +9080,42926302,-0.162778107,9080,3 +9081,64777966,1.2190343458,9081,3 +9082,54037827,-0.1207459451,9082,3 +9083,63360126,0.2001850321,9083,3 +9084,79455012,0.9133722327,9084,3 +9085,75267451,-1.4474263187,9085,3 +9086,29263964,0.8824335949,9086,3 +9087,71292373,0.3093920343,9087,3 +9088,43182315,-0.3903707025,9088,3 +9089,45830926,-0.1877404341,9089,3 +9090,53529018,-0.7807094448,9090,3 +9091,19314389,0.0098302674,9091,3 +9092,50214321,0.2079791872,9092,3 +9093,52751206,-0.4620448289,9093,3 +9094,24878137,0.2940086195,9094,3 +9095,15851833,1.4914893191,9095,3 +9096,48762068,-1.4417321247,9096,3 +9097,60736545,-0.3755927606,9097,3 +9098,38896442,-2.3632989428,9098,3 +9099,32905583,-0.2216078106,9099,3 +9100,15434883,-1.1077012688,9100,3 +9101,63916432,0.2701678933,9101,3 +9102,33358014,0.2926803706,9102,3 +9103,12420040,0.5184846195,9103,3 +9104,77844042,-1.8837895218,9104,3 +9105,31986862,0.299997196,9105,3 +9106,56145183,-0.4804809824,9106,3 +9107,46178248,-1.1746861674,9107,3 +9108,82645612,-0.2422174784,9108,3 +9109,44025951,-0.6978658025,9109,3 +9110,73240478,1.9663942778,9110,3 +9111,26291051,0.8928807574,9111,3 +9112,17532989,-1.5012412498,9112,3 +9113,64241758,-0.8933375461,9113,3 +9114,53100404,2.7182617931,9114,3 +9115,69699764,-0.336036139,9115,3 +9116,40753437,1.9308530017,9116,3 +9117,75402749,-0.2306636904,9117,3 +9118,50221777,-0.8045300328,9118,3 +9119,82300531,0.2430742261,9119,3 +9120,47475473,-0.4631617858,9120,3 +9121,43232829,0.4844400841,9121,3 +9122,64434447,-0.542462083,9122,3 +9123,37109966,1.1092942899,9123,3 +9124,89619482,0.3716774038,9124,3 +9125,35201119,-0.4856807095,9125,3 +9126,49804208,0.8547899627,9126,3 +9127,86564745,0.7832836634,9127,3 +9128,64827221,-0.5418735665,9128,3 +9129,82947706,0.1759234365,9129,3 +9130,40022344,1.1253422448,9130,3 +9131,81954593,0.1560556154,9131,3 +9132,31374356,-0.9206675156,9132,3 +9133,63187994,1.9725969044,9133,3 +9134,83732290,-1.4592962022,9134,3 +9135,22965623,0.1198416999,9135,3 +9136,64966806,-0.9478335189,9136,3 +9137,38595716,-1.723900596,9137,3 +9138,59599708,-1.0238389704,9138,3 +9139,35051044,0.2132110775,9139,3 +9140,19607911,-1.8825483245,9140,3 +9141,32831761,1.7085367226,9141,3 +9142,27971045,1.8649139503,9142,3 +9143,71849828,-1.1538210618,9143,3 +9144,28426325,0.7654782042,9144,3 +9145,42422361,-0.9558200801,9145,3 +9146,20033455,1.5074905199,9146,3 +9147,50308065,1.4185256907,9147,3 +9148,11041232,-1.1286085399,9148,3 +9149,55746512,-0.449573952,9149,3 +9150,75766056,2.1314228436,9150,3 +9151,37380370,0.9917410709,9151,3 +9152,32347846,1.5621782094,9152,3 +9153,66186305,0.0169614509,9153,3 +9154,24268100,-0.1363001653,9154,3 +9155,22179682,-0.1889033883,9155,3 +9156,38181678,-0.6182545277,9156,3 +9157,40337084,-0.307473596,9157,3 +9158,23410697,-0.8133683714,9158,3 +9159,30359279,-0.5897807569,9159,3 +9160,75232328,-0.2999649087,9160,3 +9161,78198611,0.8164926737,9161,3 +9162,26014226,-0.0118195902,9162,3 +9163,76549385,-2.56437907,9163,3 +9164,71798702,0.1947225334,9164,3 +9165,11644918,-0.6004130102,9165,3 +9166,83161586,0.2671411233,9166,3 +9167,19349253,-0.0361768778,9167,3 +9168,29265977,-0.0410754318,9168,3 +9169,37220468,0.114415238,9169,3 +9170,68495981,0.475069862,9170,3 +9171,12660066,-1.2397120428,9171,3 +9172,62314867,1.1124720081,9172,3 +9173,40453083,-0.9638502376,9173,3 +9174,82737040,0.8286582999,9174,3 +9175,62881983,-0.5339047825,9175,3 +9176,50965355,-2.3932175833,9176,3 +9177,45249368,-0.1503112206,9177,3 +9178,36049939,-1.1176909791,9178,3 +9179,57963573,0.9731623917,9179,3 +9180,72410577,0.7273108696,9180,3 +9181,29781577,-0.0260910373,9181,3 +9182,23922438,1.009663731,9182,3 +9183,55386897,1.4832647915,9183,3 +9184,75616707,-0.6836089102,9184,3 +9185,43537963,-0.5792233017,9185,3 +9186,88448878,0.8571822572,9186,3 +9187,30323224,-0.3669794048,9187,3 +9188,70805662,-0.5647808444,9188,3 +9189,21771116,-1.0680826736,9189,3 +9190,20496679,-0.4405567907,9190,3 +9191,22797586,-0.650354301,9191,3 +9192,46591241,-0.4128627899,9192,3 +9193,14041026,0.2801648368,9193,3 +9194,88748875,2.0451639425,9194,3 +9195,80500706,0.204198409,9195,3 +9196,55229446,-1.5672560343,9196,3 +9197,83006536,-0.2208599171,9197,3 +9198,60621823,-0.9440556761,9198,3 +9199,67555508,0.2525945558,9199,3 +9200,64382929,0.3556221093,9200,3 +9201,40964072,-0.1421103965,9201,3 +9202,33667046,0.8213008619,9202,3 +9203,68025446,-0.8045605129,9203,3 +9204,59352701,0.1319565316,9204,3 +9205,60534643,0.4106651992,9205,3 +9206,72676201,2.0691866788,9206,3 +9207,69195132,-0.2621968974,9207,3 +9208,73427280,-0.5304239241,9208,3 +9209,58714945,1.0049550689,9209,3 +9210,54735731,-0.8150137387,9210,3 +9211,85794114,0.828387167,9211,3 +9212,14985989,-1.3966997951,9212,3 +9213,86082868,1.1303511905,9213,3 +9214,38571023,0.6769568338,9214,3 +9215,76291864,-0.134729459,9215,3 +9216,48964886,-1.281249962,9216,3 +9217,29702511,-1.1382410667,9217,3 +9218,80570717,-0.083005534,9218,3 +9219,11832786,-0.1749578893,9219,3 +9220,54099800,-0.4741457237,9220,3 +9221,86876592,-1.2648859831,9221,3 +9222,73299393,0.2204996739,9222,3 +9223,67491906,-0.2614933336,9223,3 +9224,47357110,-0.2124051862,9224,3 +9225,18432084,1.2541308368,9225,3 +9226,85765065,-0.0066656702,9226,3 +9227,40699249,1.4900478538,9227,3 +9228,82291596,-1.1040387421,9228,3 +9229,63472053,0.1193448469,9229,3 +9230,85731659,-0.4013711277,9230,3 +9231,78539371,-1.4587338614,9231,3 +9232,48884879,-2.0411837263,9232,3 +9233,28752154,-0.9803187055,9233,3 +9234,10051761,0.1566154839,9234,3 +9235,60633031,0.1336253571,9235,3 +9236,32906725,-0.8789187185,9236,3 +9237,84037349,-1.2439769488,9237,3 +9238,54027456,-0.6897317756,9238,3 +9239,53940250,-1.4141713643,9239,3 +9240,59239810,2.1377150127,9240,3 +9241,17158471,-0.0275004234,9241,3 +9242,39367303,-0.8205787664,9242,3 +9243,86642945,-1.8471985747,9243,3 +9244,66484451,-0.644306629,9244,3 +9245,13919340,0.2594709802,9245,3 +9246,61484565,0.8808293489,9246,3 +9247,73433461,-0.7670756464,9247,3 +9248,45039791,0.967729472,9248,3 +9249,10133201,-0.7984830516,9249,3 +9250,44107352,1.8544014151,9250,3 +9251,75572897,1.0810830774,9251,3 +9252,82017701,0.2831980062,9252,3 +9253,25267401,0.1789320679,9253,3 +9254,45316150,0.1089499487,9254,3 +9255,67925403,-0.6521822996,9255,3 +9256,40110635,-1.2504496319,9256,3 +9257,31241336,-0.6213945935,9257,3 +9258,75007720,0.1767672139,9258,3 +9259,25636101,-0.1574580481,9259,3 +9260,86540857,0.5744612915,9260,3 +9261,72804966,-0.2044282897,9261,3 +9262,82282691,0.2914492434,9262,3 +9263,52266805,2.0906913564,9263,3 +9264,20234005,0.7769954586,9264,3 +9265,30979180,0.9013312445,9265,3 +9266,57399156,-0.5188132423,9266,3 +9267,68135328,-0.1513845393,9267,3 +9268,43830306,-3.1057529611,9268,3 +9269,70174095,0.4498357306,9269,3 +9270,59372687,-0.2699251158,9270,3 +9271,83573668,-0.6422133277,9271,3 +9272,37269577,0.7861100687,9272,3 +9273,59870423,-0.100848331,9273,3 +9274,56217766,-0.6633130015,9274,3 +9275,67538396,-0.6988655816,9275,3 +9276,89854914,0.843723548,9276,3 +9277,29879783,0.1450058635,9277,3 +9278,77666488,-0.677970053,9278,3 +9279,46546996,1.5745376424,9279,3 +9280,32227723,-0.5050109783,9280,3 +9281,35913519,-1.0576568978,9281,3 +9282,52594914,-1.17462979,9282,3 +9283,50339579,-1.1952026127,9283,3 +9284,87101144,-0.3923650223,9284,3 +9285,79644654,-0.7148435219,9285,3 +9286,85565582,2.9745918913,9286,3 +9287,84863919,0.5718637848,9287,3 +9288,41095866,-1.4164932851,9288,3 +9289,18045312,0.9029841196,9289,3 +9290,25745705,-0.0488994339,9290,3 +9291,48739558,1.2257327184,9291,3 +9292,37495127,2.0669570327,9292,3 +9293,25879371,1.0127704844,9293,3 +9294,23233889,-0.4751151917,9294,3 +9295,71099964,-0.6499053952,9295,3 +9296,76589826,-0.301534806,9296,3 +9297,32883278,-1.336459163,9297,3 +9298,13060996,-1.5987561064,9298,3 +9299,61076696,-0.1794593111,9299,3 +9300,13054824,-1.2754386553,9300,3 +9301,66541243,1.2654245195,9301,3 +9302,63687309,0.5844717205,9302,3 +9303,26638865,1.6216508432,9303,3 +9304,64727279,2.2331052529,9304,3 +9305,70256988,-1.3127673483,9305,3 +9306,43899809,-0.3296070028,9306,3 +9307,26364398,0.8883539756,9307,3 +9308,22635975,-0.5731316794,9308,3 +9309,41293079,0.3145238482,9309,3 +9310,81356534,0.4025239639,9310,3 +9311,55439962,0.7934708805,9311,3 +9312,89315951,-1.8047689822,9312,3 +9313,48791381,1.4012338562,9313,3 +9314,52331039,0.4527044515,9314,3 +9315,18200010,-0.2629232252,9315,3 +9316,60795793,0.6018335558,9316,3 +9317,29593268,0.4233714607,9317,3 +9318,23446330,-1.0866404541,9318,3 +9319,67498736,-1.3376611189,9319,3 +9320,75343092,1.4353764164,9320,3 +9321,78593423,0.4482411708,9321,3 +9322,83413884,-1.7988818012,9322,3 +9323,27262005,-0.0018040664,9323,3 +9324,62983236,3.4898272142,9324,3 +9325,23641902,0.5998193338,9325,3 +9326,57898046,-0.1040879529,9326,3 +9327,49832177,-0.4726558594,9327,3 +9328,21686227,0.2301610303,9328,3 +9329,46066231,-0.3600903543,9329,3 +9330,66180229,1.210029978,9330,3 +9331,11704200,-0.2188156541,9331,3 +9332,56103137,0.3266965096,9332,3 +9333,18705686,-4.0934728253,9333,3 +9334,66625056,1.0424947379,9334,3 +9335,32635298,0.9425635857,9335,3 +9336,56712511,-0.4179349536,9336,3 +9337,78819380,0.19554343,9337,3 +9338,43322388,-0.8095878798,9338,3 +9339,69682817,-1.5761812903,9339,3 +9340,70610216,-0.6671076068,9340,3 +9341,49785562,1.0652090189,9341,3 +9342,23507381,0.25355492,9342,3 +9343,30187492,-2.9391217134,9343,3 +9344,65582322,0.0882540833,9344,3 +9345,83785885,-1.7954210622,9345,3 +9346,66874128,-1.3362259259,9346,3 +9347,20542930,-1.9832532599,9347,3 +9348,21854314,-0.3313606891,9348,3 +9349,27903007,-0.5408788684,9349,3 +9350,35606060,0.4995952803,9350,3 +9351,80554833,0.0016591063,9351,3 +9352,15274516,-1.9738071829,9352,3 +9353,14176119,-1.2086234456,9353,3 +9354,18163231,-1.155798668,9354,3 +9355,74241054,-1.8304255708,9355,3 +9356,70001907,1.4925299045,9356,3 +9357,35333384,0.4035227599,9357,3 +9358,71149483,-0.6104182284,9358,3 +9359,68957839,1.4512663656,9359,3 +9360,88386974,2.4669447455,9360,3 +9361,26409319,-2.6293524959,9361,3 +9362,63071020,0.5111045751,9362,3 +9363,87948859,-0.3195803694,9363,3 +9364,89386536,-0.147723499,9364,3 +9365,53941825,0.6615078586,9365,3 +9366,44354350,-0.6872936332,9366,3 +9367,50622106,-0.7101328692,9367,3 +9368,18994429,0.8941733632,9368,3 +9369,34266124,-0.0837276182,9369,3 +9370,35100591,0.8428262419,9370,3 +9371,73004263,0.9632711055,9371,3 +9372,66915263,-0.6387786042,9372,3 +9373,76146603,-0.8720145202,9373,3 +9374,56909735,0.1767245229,9374,3 +9375,54700154,0.5184595285,9375,3 +9376,65306527,2.1510541338,9376,3 +9377,87384517,-0.485545626,9377,3 +9378,17438356,-0.3227781101,9378,3 +9379,70773277,0.3321280924,9379,3 +9380,41946984,0.4599076779,9380,3 +9381,22443472,1.0652784453,9381,3 +9382,66240284,0.1627293918,9382,3 +9383,60933479,0.0943215384,9383,3 +9384,82179251,0.0742577604,9384,3 +9385,70970880,0.7121233985,9385,3 +9386,48290077,-0.4682045577,9386,3 +9387,54847870,-1.6820717343,9387,3 +9388,43665179,-0.5611733511,9388,3 +9389,67833139,-0.0269611847,9389,3 +9390,21739648,-0.5201857162,9390,3 +9391,75833380,-1.0252664597,9391,3 +9392,83513877,1.6818374557,9392,3 +9393,56067711,-1.2231371985,9393,3 +9394,15686778,-0.2011044682,9394,3 +9395,51354246,0.778621609,9395,3 +9396,16741289,-0.543972883,9396,3 +9397,44834194,-0.2132513742,9397,3 +9398,89650591,0.4758713199,9398,3 +9399,64660438,1.4140489363,9399,3 +9400,13066835,0.2158529223,9400,3 +9401,80842038,-1.1529505339,9401,3 +9402,24851948,-1.2956959178,9402,3 +9403,80022637,-0.3862724145,9403,3 +9404,87387553,2.0446311294,9404,3 +9405,87770148,1.7437045889,9405,3 +9406,41444710,-1.0939830246,9406,3 +9407,37652951,-1.4857696556,9407,3 +9408,75916343,1.1440969473,9408,3 +9409,89811260,-0.9111892549,9409,3 +9410,72730647,0.2695572927,9410,3 +9411,60101767,-0.255634837,9411,3 +9412,17992470,-0.1468844787,9412,3 +9413,34261909,1.7322758437,9413,3 +9414,71785690,1.4809501635,9414,3 +9415,62718859,0.6418152828,9415,3 +9416,35025564,1.3262681822,9416,3 +9417,86762460,0.9868808465,9417,3 +9418,23153138,-1.2918574853,9418,3 +9419,42838818,-0.2923943405,9419,3 +9420,56933603,-0.5153946837,9420,3 +9421,73384142,1.328105393,9421,3 +9422,70045786,1.1143033226,9422,3 +9423,53930490,-1.2196591413,9423,3 +9424,81510082,0.1499683462,9424,3 +9425,14005255,-0.0074433989,9425,3 +9426,65975475,0.2765345865,9426,3 +9427,71140603,-0.5316575783,9427,3 +9428,50535086,0.4795661741,9428,3 +9429,65131466,-0.9119449551,9429,3 +9430,78578673,1.7696962768,9430,3 +9431,50310359,-0.8790375688,9431,3 +9432,43493921,-0.3755153689,9432,3 +9433,29465132,0.8997160092,9433,3 +9434,65847180,-0.6592112465,9434,3 +9435,68584569,-0.3706051559,9435,3 +9436,48027167,0.4794440886,9436,3 +9437,55764836,-0.7367276812,9437,3 +9438,73379527,0.5803953637,9438,3 +9439,29745574,0.618529455,9439,3 +9440,87968264,0.3558633395,9440,3 +9441,38625596,2.2070253833,9441,3 +9442,16452792,-0.3089034041,9442,3 +9443,17636291,0.2959615713,9443,3 +9444,67140120,-0.8154624815,9444,3 +9445,87889473,1.1813548785,9445,3 +9446,42560561,0.2534001592,9446,3 +9447,47620170,-0.8405645496,9447,3 +9448,14947595,0.0180358673,9448,3 +9449,38578559,2.1940172647,9449,3 +9450,88181267,1.1453139175,9450,3 +9451,26407182,-0.2251930478,9451,3 +9452,64870155,0.7081611203,9452,3 +9453,13761137,-0.3877340951,9453,3 +9454,33641106,-0.0327313841,9454,3 +9455,69820722,0.4761879423,9455,3 +9456,67324224,0.8938674234,9456,3 +9457,15343396,-0.0009238863,9457,3 +9458,32642459,1.3108932031,9458,3 +9459,16393815,0.3660938092,9459,3 +9460,55524870,0.6762907217,9460,3 +9461,48922302,-0.6267107996,9461,3 +9462,73386922,1.0685528805,9462,3 +9463,56845469,-0.3687537467,9463,3 +9464,49496798,-0.6731880612,9464,3 +9465,16888192,0.3555415857,9465,3 +9466,57430288,0.772276802,9466,3 +9467,52253306,-0.0801691436,9467,3 +9468,60670592,0.1062633802,9468,3 +9469,35912552,-0.7604513089,9469,3 +9470,64856761,0.6582070847,9470,3 +9471,67051438,-0.2070498904,9471,3 +9472,57527915,-0.0710183,9472,3 +9473,56972885,-0.289025154,9473,3 +9474,78570075,1.8525566205,9474,3 +9475,71172688,1.1221811628,9475,3 +9476,37031621,0.6319604103,9476,3 +9477,23705627,0.8626791357,9477,3 +9478,73117367,-0.6451224808,9478,3 +9479,11154277,-0.9791994589,9479,3 +9480,44818262,-1.1510721024,9480,3 +9481,83700565,1.3123989594,9481,3 +9482,11033191,-0.7327348278,9482,3 +9483,53030375,1.7264765836,9483,3 +9484,84395391,0.7458212619,9484,3 +9485,79906651,-0.2593773902,9485,3 +9486,52054492,1.0342821553,9486,3 +9487,21122665,0.7880769856,9487,3 +9488,64819400,-0.7103510611,9488,3 +9489,60632444,0.0261182897,9489,3 +9490,85894842,-0.1626043377,9490,3 +9491,40369566,-0.9901170883,9491,3 +9492,48804807,0.508298473,9492,3 +9493,57812778,0.6900749411,9493,3 +9494,20751160,-0.6819776075,9494,3 +9495,44892204,-0.4414340119,9495,3 +9496,26275746,-1.1092100821,9496,3 +9497,82906180,1.2172686726,9497,3 +9498,43846508,-0.4509974987,9498,3 +9499,39291157,-0.068536102,9499,3 +9500,33146158,-0.4368589166,9500,3 +9501,64078148,-0.6600813781,9501,3 +9502,25271604,-0.1902992841,9502,3 +9503,60213593,0.1586744887,9503,3 +9504,43039788,-0.9338475729,9504,3 +9505,52194369,-1.2026762489,9505,3 +9506,57666551,0.4829493975,9506,3 +9507,72129208,0.6791022959,9507,3 +9508,74069582,0.2865201782,9508,3 +9509,23705755,0.3907121247,9509,3 +9510,34474299,-0.4581060722,9510,3 +9511,76374379,0.8474716103,9511,3 +9512,23385509,-0.0711724742,9512,3 +9513,50072445,0.9660018066,9513,3 +9514,29317266,-0.34741382,9514,3 +9515,17092528,0.8695141346,9515,3 +9516,68233175,0.3716081423,9516,3 +9517,51729975,0.8253246796,9517,3 +9518,63989766,0.2356142062,9518,3 +9519,68691139,-0.994882047,9519,3 +9520,75635725,0.5912188355,9520,3 +9521,45752475,-0.6854555209,9521,3 +9522,25836229,-2.1355745653,9522,3 +9523,50158469,-0.5990495857,9523,3 +9524,17677109,0.0171355867,9524,3 +9525,46652103,3.1585328469,9525,3 +9526,78277439,-0.2456048692,9526,3 +9527,69490807,0.953513784,9527,3 +9528,86502950,1.0211538375,9528,3 +9529,77509717,0.157273798,9529,3 +9530,10013079,-1.0654817938,9530,3 +9531,29526674,0.3184804866,9531,3 +9532,81985957,0.2197383588,9532,3 +9533,10619685,-1.8524277888,9533,3 +9534,82974178,0.6405095155,9534,3 +9535,37305102,0.9714930221,9535,3 +9536,33109243,-0.7147759422,9536,3 +9537,79654158,-1.0062676427,9537,3 +9538,32136922,-0.6235593286,9538,3 +9539,51705105,-0.30218043,9539,3 +9540,30494353,1.0675787391,9540,3 +9541,72647433,-0.7399429237,9541,3 +9542,24008654,1.1753722717,9542,3 +9543,61147560,-1.6355071557,9543,3 +9544,84843313,-0.5390399793,9544,3 +9545,72310300,0.2400318264,9545,3 +9546,87912785,-0.5945302911,9546,3 +9547,56130549,0.5259835818,9547,3 +9548,31655114,1.0718537551,9548,3 +9549,45114423,-0.2651524051,9549,3 +9550,24415339,0.134429483,9550,3 +9551,24188725,1.1256239568,9551,3 +9552,27622906,-0.0951275415,9552,3 +9553,35432601,0.6788393102,9553,3 +9554,17157457,-2.0719118665,9554,3 +9555,12063790,-0.5459752839,9555,3 +9556,17958157,-1.1662604322,9556,3 +9557,22163375,-1.2522618291,9557,3 +9558,54632258,-2.08833399,9558,3 +9559,60828893,-0.2261803434,9559,3 +9560,54902419,-2.8175509766,9560,3 +9561,47548243,-1.1794731888,9561,3 +9562,48067226,1.8015865749,9562,3 +9563,42628361,-0.0860977713,9563,3 +9564,12469307,1.9855004122,9564,3 +9565,67666459,-1.5988004747,9565,3 +9566,58748814,-0.9220784449,9566,3 +9567,84691356,1.1336944062,9567,3 +9568,26127470,-0.0413107519,9568,3 +9569,33990195,1.6242441972,9569,3 +9570,12679165,0.981452281,9570,3 +9571,69709500,0.6028135286,9571,3 +9572,31569160,0.28480111,9572,3 +9573,52436969,0.0699831165,9573,3 +9574,12514095,0.7053021621,9574,3 +9575,55537130,0.1342891351,9575,3 +9576,19804644,0.3016059084,9576,3 +9577,39706288,0.470049856,9577,3 +9578,54972976,0.2797897733,9578,3 +9579,51889497,0.2163022655,9579,3 +9580,51213196,0.4154686052,9580,3 +9581,19218318,0.3673541535,9581,3 +9582,56377842,-0.6601794309,9582,3 +9583,30852992,2.0546788718,9583,3 +9584,42729873,0.3546484656,9584,3 +9585,45672930,-0.904488736,9585,3 +9586,26391093,-0.6211913947,9586,3 +9587,78260469,-0.2604942536,9587,3 +9588,69646008,-1.0052823833,9588,3 +9589,73377951,0.3208506238,9589,3 +9590,42359009,-0.5181242473,9590,3 +9591,52363670,0.8964845039,9591,3 +9592,15354846,1.0917338474,9592,3 +9593,29582315,2.4183682407,9593,3 +9594,67356005,-0.3361889243,9594,3 +9595,35189839,1.4851112847,9595,3 +9596,74927417,0.7078830157,9596,3 +9597,36997641,-0.0447464287,9597,3 +9598,20643595,0.3263779516,9598,3 +9599,64938418,0.9663697238,9599,3 +9600,41276415,1.2004597009,9600,3 +9601,80892395,-0.496413393,9601,3 +9602,73637658,2.639187139,9602,3 +9603,78410317,1.1249494546,9603,3 +9604,27585867,0.2411478616,9604,3 +9605,20968531,-0.7764707884,9605,3 +9606,66187202,0.3481088072,9606,3 +9607,61001220,0.6539108928,9607,3 +9608,75681797,-0.1807116065,9608,3 +9609,44436122,-1.5164600924,9609,3 +9610,57837321,0.1812955365,9610,3 +9611,66741773,-0.4686250031,9611,3 +9612,66732946,-1.6946749975,9612,3 +9613,88019712,-0.9908032127,9613,3 +9614,86778252,-0.4444910476,9614,3 +9615,44949339,0.5998374521,9615,3 +9616,31963489,-1.1319076467,9616,3 +9617,58011606,0.0684698905,9617,3 +9618,73035281,-0.8799223461,9618,3 +9619,71504812,-0.4179881122,9619,3 +9620,42185092,-1.3935419592,9620,3 +9621,73242385,-0.3002686402,9621,3 +9622,20235701,-0.7061713504,9622,3 +9623,47648001,1.1327703434,9623,3 +9624,23015790,-0.8603236738,9624,3 +9625,17824147,2.8104929576,9625,3 +9626,52816288,0.0423932817,9626,3 +9627,20974591,0.5503520076,9627,3 +9628,84619785,0.2928388498,9628,3 +9629,54524610,-1.6469649616,9629,3 +9630,54796186,1.7334125753,9630,3 +9631,86460408,0.1654108788,9631,3 +9632,89446373,-0.5638307207,9632,3 +9633,42697851,-0.9051154904,9633,3 +9634,83430801,-1.1609835305,9634,3 +9635,15632343,0.3374227683,9635,3 +9636,58201741,-0.6777057761,9636,3 +9637,79903647,0.7080465729,9637,3 +9638,24696546,-1.1845360123,9638,3 +9639,68455969,-0.0618165025,9639,3 +9640,53949727,-0.8671520822,9640,3 +9641,75496953,0.1435952996,9641,3 +9642,61307903,-0.4467824688,9642,3 +9643,20927492,-0.8148562597,9643,3 +9644,25497362,1.0255323934,9644,3 +9645,53857709,-0.6776198069,9645,3 +9646,41899602,0.0022535552,9646,3 +9647,81109391,-0.6728386038,9647,3 +9648,61665638,0.1983993426,9648,3 +9649,74873074,0.5797921647,9649,3 +9650,76684403,1.8638451603,9650,3 +9651,56280714,0.5075076204,9651,3 +9652,12345944,-0.7932795355,9652,3 +9653,87523582,1.8203114067,9653,3 +9654,65916181,-0.270168846,9654,3 +9655,39538623,-0.1309301803,9655,3 +9656,47190805,-0.4735773866,9656,3 +9657,16450708,0.9874003446,9657,3 +9658,62939092,0.2183525169,9658,3 +9659,52286913,-0.3029181105,9659,3 +9660,20993739,0.5937134312,9660,3 +9661,68102070,-0.5741567701,9661,3 +9662,49268817,-1.0134570342,9662,3 +9663,46080340,-0.625000344,9663,3 +9664,81584424,0.2417200912,9664,3 +9665,69239628,-1.83803748,9665,3 +9666,16713405,-1.4601558391,9666,3 +9667,49399010,-0.1882001589,9667,3 +9668,59494928,1.256119224,9668,3 +9669,59120322,-0.1170690636,9669,3 +9670,75584653,0.2417986784,9670,3 +9671,50378279,-0.620242455,9671,3 +9672,79017026,-0.460886691,9672,3 +9673,18938159,-1.0647698776,9673,3 +9674,69843370,-0.0874405301,9674,3 +9675,55409031,-1.0021445003,9675,3 +9676,17265375,-0.5099622691,9676,3 +9677,10817076,0.4884039969,9677,3 +9678,32578038,0.886378822,9678,3 +9679,56290937,0.1319412069,9679,3 +9680,15130557,-0.543665319,9680,3 +9681,34697839,-0.1892119468,9681,3 +9682,44457263,0.4203272742,9682,3 +9683,43529691,-0.9760426001,9683,3 +9684,20947523,-1.2605765625,9684,3 +9685,34347444,0.6236523605,9685,3 +9686,13104711,-0.9521757606,9686,3 +9687,28322383,-0.6927642491,9687,3 +9688,60148984,0.1154355544,9688,3 +9689,54276273,2.0442531523,9689,3 +9690,69991425,0.4058484537,9690,3 +9691,88189366,-1.1906927407,9691,3 +9692,33241776,1.7797846843,9692,3 +9693,76928233,2.001382325,9693,3 +9694,64326133,-1.0752891395,9694,3 +9695,12398414,0.4049415538,9695,3 +9696,20429365,0.8956971115,9696,3 +9697,16751182,0.807797596,9697,3 +9698,81046864,1.0881461934,9698,3 +9699,71951596,-0.4056916449,9699,3 +9700,39453450,0.8760313558,9700,3 +9701,12758374,-0.9601980859,9701,3 +9702,82657108,0.4295238738,9702,3 +9703,66935413,0.3407919882,9703,3 +9704,50249564,0.3066093339,9704,3 +9705,15254620,0.7036593254,9705,3 +9706,58893470,-2.3976246558,9706,3 +9707,55537679,0.6318236453,9707,3 +9708,48219923,0.6350238422,9708,3 +9709,55107149,1.2284545992,9709,3 +9710,14447059,0.5691180945,9710,3 +9711,26173634,-0.0314546589,9711,3 +9712,73076857,0.8877290276,9712,3 +9713,10412519,0.9261656574,9713,3 +9714,89054779,0.079715867,9714,3 +9715,12868469,-0.2092952297,9715,3 +9716,19254343,0.7226128002,9716,3 +9717,11246586,0.0467511408,9717,3 +9718,41770651,0.1039803665,9718,3 +9719,21724217,0.7328082588,9719,3 +9720,67803872,0.7012562329,9720,3 +9721,16800012,1.1762266078,9721,3 +9722,52126786,0.9824157912,9722,3 +9723,20269747,0.0228119237,9723,3 +9724,23473544,-0.5468439668,9724,3 +9725,65241286,-0.6870046138,9725,3 +9726,89630562,-1.3715848412,9726,3 +9727,43662472,-1.0312457028,9727,3 +9728,83096156,0.8806835972,9728,3 +9729,58062584,0.3486085384,9729,3 +9730,29157734,0.7205178701,9730,3 +9731,36212172,0.0064373025,9731,3 +9732,20868468,-0.4810893219,9732,3 +9733,49183127,-0.7972691879,9733,3 +9734,78272977,0.0866884129,9734,3 +9735,71064731,0.5839707026,9735,3 +9736,17059311,-1.3441007469,9736,3 +9737,53625655,0.1203893993,9737,3 +9738,65226247,0.7254493824,9738,3 +9739,61199706,0.1011791912,9739,3 +9740,60040468,0.7855139022,9740,3 +9741,43051844,-0.4960204233,9741,3 +9742,50201939,0.9590343058,9742,3 +9743,75814003,1.8886171978,9743,3 +9744,23470014,-0.9861606474,9744,3 +9745,52158505,0.1743038613,9745,3 +9746,61659144,-0.0459113681,9746,3 +9747,23853483,-0.2365450394,9747,3 +9748,14892458,0.4604764481,9748,3 +9749,58032825,0.8077775514,9749,3 +9750,60074197,0.0169448326,9750,3 +9751,88951567,2.1365113608,9751,3 +9752,62132956,-0.321665611,9752,3 +9753,43827046,-0.0517610109,9753,3 +9754,70512143,1.1445965346,9754,3 +9755,72451745,0.6636277148,9755,3 +9756,16975387,0.2066638566,9756,3 +9757,42830807,-0.4169792186,9757,3 +9758,26295576,-2.2603072291,9758,3 +9759,72912376,1.7458005746,9759,3 +9760,76505731,-1.2714335033,9760,3 +9761,75774364,0.2567144285,9761,3 +9762,25957325,0.8618997059,9762,3 +9763,81885445,-0.3470136392,9763,3 +9764,87766862,0.0728408482,9764,3 +9765,19688177,1.6210378099,9765,3 +9766,75192156,-0.9399429594,9766,3 +9767,20953568,-1.0777047744,9767,3 +9768,78665588,-0.840366656,9768,3 +9769,12238354,-0.6727424494,9769,3 +9770,53971574,0.6492950382,9770,3 +9771,55301428,0.4112243073,9771,3 +9772,19484452,0.9853545136,9772,3 +9773,60074601,0.383685453,9773,3 +9774,84345880,-0.9037416284,9774,3 +9775,71851445,0.4380784516,9775,3 +9776,58844262,-0.9688298294,9776,3 +9777,68299943,0.8691276074,9777,3 +9778,37522372,-0.3385856944,9778,3 +9779,64435312,1.1437769956,9779,3 +9780,79899620,-0.4933135657,9780,3 +9781,73758801,-0.4446982694,9781,3 +9782,42196053,0.8203299299,9782,3 +9783,30204765,0.2176374183,9783,3 +9784,82267191,-0.3540836634,9784,3 +9785,46944743,-0.2498817823,9785,3 +9786,20117151,-1.5434433126,9786,3 +9787,56025698,0.3818164183,9787,3 +9788,45610848,0.7209227537,9788,3 +9789,67596345,2.7985111036,9789,3 +9790,68358020,0.1618485291,9790,3 +9791,86413889,-0.7382342883,9791,3 +9792,65546582,-2.3059619037,9792,3 +9793,47987027,-0.2357042548,9793,3 +9794,43336214,0.1326497714,9794,3 +9795,35305909,-0.2594145195,9795,3 +9796,18456359,-0.992498755,9796,3 +9797,38171527,0.1398747643,9797,3 +9798,20262021,-0.6275345544,9798,3 +9799,34134014,0.736953812,9799,3 +9800,58758123,0.3498091149,9800,3 +9801,15343021,-0.7170557261,9801,3 +9802,27308941,1.1908872396,9802,3 +9803,57735334,-2.8301066972,9803,3 +9804,64037328,-1.5216608956,9804,3 +9805,53268780,1.0737675301,9805,3 +9806,52446415,0.7827646272,9806,3 +9807,73469791,-1.0482747763,9807,3 +9808,41299997,1.2490135864,9808,3 +9809,70425398,-0.6506951296,9809,3 +9810,71371792,-0.6437846593,9810,3 +9811,43466721,0.240416016,9811,3 +9812,43722443,0.7007212817,9812,3 +9813,75685293,-0.0989038798,9813,3 +9814,38714718,1.0020620586,9814,3 +9815,60747051,-0.5565993136,9815,3 +9816,62147171,-0.2877272602,9816,3 +9817,65788714,-1.9879927971,9817,3 +9818,83712089,0.6584065507,9818,3 +9819,80745471,1.1751199249,9819,3 +9820,47013346,0.1080485817,9820,3 +9821,74285080,-0.2018261802,9821,3 +9822,83016346,0.4676059054,9822,3 +9823,68790650,1.068249481,9823,3 +9824,12054622,-1.0092648635,9824,3 +9825,55820723,-0.4717654487,9825,3 +9826,18738169,-0.952708564,9826,3 +9827,83008997,-0.3076010037,9827,3 +9828,73662135,-0.5617537458,9828,3 +9829,42115784,-2.6246457645,9829,3 +9830,38221680,-0.6417249046,9830,3 +9831,16960534,-0.3304573324,9831,3 +9832,58186265,0.3553515299,9832,3 +9833,77767768,-0.4903290665,9833,3 +9834,51939436,0.3362054205,9834,3 +9835,50281560,-1.2159948287,9835,3 +9836,37985693,1.203860023,9836,3 +9837,30555146,-0.3002011167,9837,3 +9838,42833873,0.9199821022,9838,3 +9839,27954280,0.7932515907,9839,3 +9840,84687371,-0.3462195467,9840,3 +9841,55133122,-0.8636079196,9841,3 +9842,67280113,-0.8202780984,9842,3 +9843,60880890,0.5911662844,9843,3 +9844,33943393,0.7641445034,9844,3 +9845,65520380,1.2258808822,9845,3 +9846,39064382,0.4249114353,9846,3 +9847,49850085,-0.0675604588,9847,3 +9848,51963865,0.8041070438,9848,3 +9849,13124154,-0.0060531636,9849,3 +9850,43009227,-0.727232213,9850,3 +9851,37585050,-0.4115090066,9851,3 +9852,36264424,0.8211882916,9852,3 +9853,80103001,0.4444740066,9853,3 +9854,16125144,0.3652662047,9854,3 +9855,86248315,-0.144237008,9855,3 +9856,87665671,0.7760173674,9856,3 +9857,51987360,-0.020544297,9857,3 +9858,48664283,0.2905419729,9858,3 +9859,30676031,0.0773410718,9859,3 +9860,55293320,-0.0770355022,9860,3 +9861,54268375,-0.2251024426,9861,3 +9862,18059082,-0.309197312,9862,3 +9863,44105487,-0.9512353526,9863,3 +9864,41454560,0.0208863771,9864,3 +9865,65863904,-0.0907332809,9865,3 +9866,71603396,-1.7443505575,9866,3 +9867,70342831,-1.5350500344,9867,3 +9868,47690163,-0.6213535158,9868,3 +9869,23061926,-0.608485221,9869,3 +9870,51824198,1.0730991295,9870,3 +9871,42458796,-0.8728562935,9871,3 +9872,44906906,-0.3137504898,9872,3 +9873,27170920,-0.8149118823,9873,3 +9874,45049798,-1.1784087158,9874,3 +9875,33677355,-0.3464627777,9875,3 +9876,61694290,0.5074063187,9876,3 +9877,15673989,2.065785453,9877,3 +9878,81308255,0.9772803441,9878,3 +9879,41339960,-0.8994765397,9879,3 +9880,54280860,-0.0851370589,9880,3 +9881,44010037,0.590337792,9881,3 +9882,13057585,-0.0386480684,9882,3 +9883,83258062,0.1592833579,9883,3 +9884,33794654,-0.0770123378,9884,3 +9885,23598374,-0.622198892,9885,3 +9886,46880037,-1.2828767689,9886,3 +9887,79614850,-1.4570366969,9887,3 +9888,16050089,-0.917487226,9888,3 +9889,35408931,1.9881032031,9889,3 +9890,63308076,-0.0823755377,9890,3 +9891,85870710,0.2555411282,9891,3 +9892,58684540,-0.3761512699,9892,3 +9893,57343687,1.7368843856,9893,3 +9894,87038515,0.3361166896,9894,3 +9895,37883542,0.3931313855,9895,3 +9896,19077159,-0.4168478763,9896,3 +9897,27319777,-0.7561936617,9897,3 +9898,22701107,0.7174573414,9898,3 +9899,23215858,0.444890556,9899,3 +9900,83790747,1.3297567642,9900,3 +9901,67988552,-0.0997194138,9901,3 +9902,17153845,0.0478540297,9902,3 +9903,68308705,0.8968582896,9903,3 +9904,63314833,-0.4066718112,9904,3 +9905,27991336,0.1273544836,9905,3 +9906,62436501,-0.1688077398,9906,3 +9907,27019857,1.1425190128,9907,3 +9908,12362056,0.8219807714,9908,3 +9909,54582663,0.5498557986,9909,3 +9910,82154073,-0.8730502087,9910,3 +9911,84378999,-1.1358677195,9911,3 +9912,22737877,-1.9534466116,9912,3 +9913,41521661,-0.9390248029,9913,3 +9914,20999679,-1.7969302065,9914,3 +9915,85627727,-0.9295031571,9915,3 +9916,52352516,-0.9965863668,9916,3 +9917,11338229,-1.7144782944,9917,3 +9918,34909159,-0.6442664544,9918,3 +9919,77031025,0.7650234027,9919,3 +9920,43782341,-0.4027304996,9920,3 +9921,40658019,0.0883482352,9921,3 +9922,42100678,1.0393794067,9922,3 +9923,66001034,-0.310232275,9923,3 +9924,77274114,-1.4016483421,9924,3 +9925,76371024,-0.6828661104,9925,3 +9926,38706297,0.3609155751,9926,3 +9927,64790487,-0.6723583397,9927,3 +9928,30151701,0.1847390688,9928,3 +9929,50520283,0.8032895154,9929,3 +9930,53220378,0.490111073,9930,3 +9931,70510645,-0.1426060879,9931,3 +9932,73383993,-0.876136002,9932,3 +9933,12342896,1.8127606409,9933,3 +9934,49609179,-0.1516024683,9934,3 +9935,59347871,0.4387496603,9935,3 +9936,29311061,0.0553079883,9936,3 +9937,79884988,0.1177945589,9937,3 +9938,81753834,2.3603818192,9938,3 +9939,11491409,-0.1573149063,9939,3 +9940,19860373,-1.6559605022,9940,3 +9941,85936749,0.1343199033,9941,3 +9942,12294204,-0.8514398699,9942,3 +9943,12794601,1.2886842292,9943,3 +9944,45004420,0.8547532397,9944,3 +9945,67307913,-0.3546108796,9945,3 +9946,60969644,-1.6425993573,9946,3 +9947,66758436,-1.8229880641,9947,3 +9948,82054354,-0.7367322629,9948,3 +9949,71862176,0.2105520817,9949,3 +9950,86049621,0.4397417839,9950,3 +9951,35957642,-0.9931575561,9951,3 +9952,75740391,-1.0171956962,9952,3 +9953,15769893,0.6261829621,9953,3 +9954,18498154,-0.9792569917,9954,3 +9955,27618976,-0.8730888523,9955,3 +9956,77544231,0.0438542388,9956,3 +9957,78755135,-0.8830224925,9957,3 +9958,42617121,1.3247774627,9958,3 +9959,47208564,0.4468391413,9959,3 +9960,74482549,1.3289061873,9960,3 +9961,16351061,0.6750481562,9961,3 +9962,78317064,1.315560424,9962,3 +9963,61650318,-0.5061703942,9963,3 +9964,15817700,1.1997420374,9964,3 +9965,14866622,0.4929282257,9965,3 +9966,48363925,0.0145699056,9966,3 +9967,63433067,-0.8597944403,9967,3 +9968,76495792,0.185140409,9968,3 +9969,84555144,1.0862480922,9969,3 +9970,63185280,1.1675823363,9970,3 +9971,10714924,-0.6058067612,9971,3 +9972,11009097,-0.1553942294,9972,3 +9973,49904631,-0.2647241922,9973,3 +9974,15053015,-1.1116012282,9974,3 +9975,14595386,-0.0508249588,9975,3 +9976,70854456,-0.6253811381,9976,3 +9977,42092192,0.2568787012,9977,3 +9978,63766185,-0.194754849,9978,3 +9979,11929566,-0.2128379531,9979,3 +9980,16326509,0.5227275461,9980,3 +9981,86475441,0.8034987229,9981,3 +9982,89836282,0.4275448887,9982,3 +9983,56520598,2.7845111839,9983,3 +9984,57233881,1.5216397616,9984,3 +9985,14066499,0.0866740582,9985,3 +9986,19817493,0.6858018906,9986,3 +9987,81927259,-0.0813793057,9987,3 +9988,45200690,-1.2268158164,9988,3 +9989,23951094,0.199655582,9989,3 +9990,85711924,-0.9946999773,9990,3 +9991,37609852,-0.0492618039,9991,3 +9992,89944972,0.6493299674,9992,3 +9993,67826682,-0.6496128503,9993,3 +9994,62860524,1.6078135586,9994,3 +9995,47566144,0.4936442455,9995,3 +9996,43056497,0.1331025316,9996,3 +9997,65304745,0.2555988819,9997,3 +9998,39305970,-0.5012836276,9998,3 +9999,88860828,-0.7482033461,9999,3 diff --git a/examples/example_regression/topology.csv b/examples/example_regression/topology.csv index 728c36a..866daa0 100644 --- a/examples/example_regression/topology.csv +++ b/examples/example_regression/topology.csv @@ -1,101 +1,101 @@ layer0_node,layer0_name,layer1_node,layer1_name,layer2_node,layer2_name -0,SNP0,0,HERC2,0,Path1 -1,SNP1,0,HERC2,0,Path1 -2,SNP2,0,HERC2,0,Path1 -3,SNP3,0,HERC2,0,Path1 -4,SNP4,0,HERC2,0,Path1 -5,SNP5,1,BRCA2,0,Path1 -6,SNP6,1,BRCA2,0,Path1 -7,SNP7,1,BRCA2,0,Path1 -8,SNP8,1,BRCA2,0,Path1 -9,SNP9,1,BRCA2,0,Path1 -10,SNP10,2,ApoE ,0,Path1 -11,SNP11,2,ApoE ,0,Path1 -12,SNP12,2,ApoE ,0,Path1 -13,SNP13,2,ApoE ,0,Path1 -14,SNP14,2,ApoE ,0,Path1 -15,SNP15,2,ApoE ,0,Path1 -16,SNP16,2,ApoE ,0,Path1 -17,SNP17,2,ApoE ,0,Path1 -18,SNP18,2,ApoE ,0,Path1 -19,SNP19,2,ApoE ,0,Path1 -20,SNP20,3,NRG,0,Path1 -21,SNP21,3,NRG,0,Path1 -22,SNP22,3,NRG,0,Path1 -23,SNP23,3,NRG,0,Path1 -24,SNP24,3,NRG,0,Path1 -25,SNP25,3,NRG,0,Path1 -26,SNP26,3,NRG,0,Path1 -27,SNP27,3,NRG,0,Path1 -28,SNP28,3,NRG,0,Path1 -29,SNP29,3,NRG,0,Path1 -30,SNP30,4,RGS-4,0,Path1 -31,SNP31,4,RGS-4,0,Path1 -32,SNP32,4,RGS-4,0,Path1 -33,SNP33,4,RGS-4,0,Path1 -34,SNP34,4,RGS-4,0,Path1 -35,SNP35,4,RGS-4,0,Path1 -36,SNP36,4,RGS-4,0,Path1 -37,SNP37,4,RGS-4,0,Path1 -38,SNP38,4,RGS-4,0,Path1 -39,SNP39,4,RGS-4,0,Path1 -40,SNP40,4,RGS-4,0,Path1 -41,SNP41,4,RGS-4,0,Path1 -42,SNP42,4,RGS-4,0,Path1 -43,SNP43,4,RGS-4,0,Path1 -44,SNP44,4,RGS-4,0,Path1 -45,SNP45,4,RGS-4,0,Path1 -46,SNP46,4,RGS-4,0,Path1 -47,SNP47,4,RGS-4,0,Path1 -48,SNP48,4,RGS-4,0,Path1 -49,SNP49,4,RGS-4,0,Path1 -50,SNP50,5,VEGFA,1,Control_path -51,SNP51,5,VEGFA,1,Control_path -52,SNP52,5,VEGFA,1,Control_path -53,SNP53,5,VEGFA,1,Control_path -54,SNP54,5,VEGFA,1,Control_path -55,SNP55,5,VEGFA,1,Control_path -56,SNP56,5,VEGFA,1,Control_path -57,SNP57,5,VEGFA,1,Control_path -58,SNP58,5,VEGFA,1,Control_path -59,SNP59,5,VEGFA,1,Control_path -60,SNP60,5,VEGFA,1,Control_path -61,SNP61,5,VEGFA,1,Control_path -62,SNP62,5,VEGFA,1,Control_path -63,SNP63,5,VEGFA,1,Control_path -64,SNP64,5,VEGFA,1,Control_path -65,SNP65,5,VEGFA,1,Control_path -66,SNP66,5,VEGFA,1,Control_path -67,SNP67,5,VEGFA,1,Control_path -68,SNP68,5,VEGFA,1,Control_path -69,SNP69,5,VEGFA,1,Control_path -70,SNP70,6,EGFR,1,Control_path -71,SNP71,6,EGFR,1,Control_path -72,SNP72,6,EGFR,1,Control_path -73,SNP73,6,EGFR,1,Control_path -74,SNP74,6,EGFR,1,Control_path -75,SNP75,6,EGFR,1,Control_path -76,SNP76,6,EGFR,1,Control_path -77,SNP77,6,EGFR,1,Control_path -78,SNP78,6,EGFR,1,Control_path -79,SNP79,6,EGFR,1,Control_path -80,SNP80,7,TGFBI,1,Control_path -81,SNP81,7,TGFBI,1,Control_path -82,SNP82,7,TGFBI,1,Control_path -83,SNP83,7,TGFBI,1,Control_path -84,SNP84,7,TGFBI,1,Control_path -85,SNP85,7,TGFBI,1,Control_path -86,SNP86,7,TGFBI,1,Control_path -87,SNP87,7,TGFBI,1,Control_path -88,SNP88,7,TGFBI,1,Control_path -89,SNP89,7,TGFBI,1,Control_path -90,SNP90,8,TNF,1,Control_path -91,SNP91,8,TNF,1,Control_path -92,SNP92,8,TNF,1,Control_path -93,SNP93,8,TNF,1,Control_path -94,SNP94,8,TNF,1,Control_path -95,SNP95,9,IL6,1,Control_path -96,SNP96,9,IL6,1,Control_path -97,SNP97,9,IL6,1,Control_path -98,SNP98,9,IL6,1,Control_path -99,SNP99,9,IL6,1,Control_path +0 ,SNP0 ,0 ,HERC2 ,0 ,Path1 +1 ,SNP1 ,0 ,HERC2 ,0 ,Path1 +2 ,SNP2 ,0 ,HERC2 ,0 ,Path1 +3 ,SNP3 ,0 ,HERC2 ,0 ,Path1 +4 ,SNP4 ,0 ,HERC2 ,0 ,Path1 +5 ,SNP5 ,1 ,BRCA2 ,0 ,Path1 +6 ,SNP6 ,1 ,BRCA2 ,0 ,Path1 +7 ,SNP7 ,1 ,BRCA2 ,0 ,Path1 +8 ,SNP8 ,1 ,BRCA2 ,0 ,Path1 +9 ,SNP9 ,1 ,BRCA2 ,0 ,Path1 +10 ,SNP10 ,2 ,ApoE ,0 ,Path1 +11 ,SNP11 ,2 ,ApoE ,0 ,Path1 +12 ,SNP12 ,2 ,ApoE ,0 ,Path1 +13 ,SNP13 ,2 ,ApoE ,0 ,Path1 +14 ,SNP14 ,2 ,ApoE ,0 ,Path1 +15 ,SNP15 ,2 ,ApoE ,0 ,Path1 +16 ,SNP16 ,2 ,ApoE ,0 ,Path1 +17 ,SNP17 ,2 ,ApoE ,0 ,Path1 +18 ,SNP18 ,2 ,ApoE ,0 ,Path1 +19 ,SNP19 ,2 ,ApoE ,0 ,Path1 +20 ,SNP20 ,3 ,NRG ,0 ,Path1 +21 ,SNP21 ,3 ,NRG ,0 ,Path1 +22 ,SNP22 ,3 ,NRG ,0 ,Path1 +23 ,SNP23 ,3 ,NRG ,0 ,Path1 +24 ,SNP24 ,3 ,NRG ,0 ,Path1 +25 ,SNP25 ,3 ,NRG ,0 ,Path1 +26 ,SNP26 ,3 ,NRG ,0 ,Path1 +27 ,SNP27 ,3 ,NRG ,0 ,Path1 +28 ,SNP28 ,3 ,NRG ,0 ,Path1 +29 ,SNP29 ,3 ,NRG ,0 ,Path1 +30 ,SNP30 ,4 ,RGS-4 ,0 ,Path1 +31 ,SNP31 ,4 ,RGS-4 ,0 ,Path1 +32 ,SNP32 ,4 ,RGS-4 ,0 ,Path1 +33 ,SNP33 ,4 ,RGS-4 ,0 ,Path1 +34 ,SNP34 ,4 ,RGS-4 ,0 ,Path1 +35 ,SNP35 ,4 ,RGS-4 ,0 ,Path1 +36 ,SNP36 ,4 ,RGS-4 ,0 ,Path1 +37 ,SNP37 ,4 ,RGS-4 ,0 ,Path1 +38 ,SNP38 ,4 ,RGS-4 ,0 ,Path1 +39 ,SNP39 ,4 ,RGS-4 ,0 ,Path1 +40 ,SNP40 ,4 ,RGS-4 ,0 ,Path1 +41 ,SNP41 ,4 ,RGS-4 ,0 ,Path1 +42 ,SNP42 ,4 ,RGS-4 ,0 ,Path1 +43 ,SNP43 ,4 ,RGS-4 ,0 ,Path1 +44 ,SNP44 ,4 ,RGS-4 ,0 ,Path1 +45 ,SNP45 ,4 ,RGS-4 ,0 ,Path1 +46 ,SNP46 ,4 ,RGS-4 ,0 ,Path1 +47 ,SNP47 ,4 ,RGS-4 ,0 ,Path1 +48 ,SNP48 ,4 ,RGS-4 ,0 ,Path1 +49 ,SNP49 ,4 ,RGS-4 ,0 ,Path1 +50 ,SNP50 ,5 ,VEGFA ,1 ,Control_path +51 ,SNP51 ,5 ,VEGFA ,1 ,Control_path +52 ,SNP52 ,5 ,VEGFA ,1 ,Control_path +53 ,SNP53 ,5 ,VEGFA ,1 ,Control_path +54 ,SNP54 ,5 ,VEGFA ,1 ,Control_path +55 ,SNP55 ,5 ,VEGFA ,1 ,Control_path +56 ,SNP56 ,5 ,VEGFA ,1 ,Control_path +57 ,SNP57 ,5 ,VEGFA ,1 ,Control_path +58 ,SNP58 ,5 ,VEGFA ,1 ,Control_path +59 ,SNP59 ,5 ,VEGFA ,1 ,Control_path +60 ,SNP60 ,5 ,VEGFA ,1 ,Control_path +61 ,SNP61 ,5 ,VEGFA ,1 ,Control_path +62 ,SNP62 ,5 ,VEGFA ,1 ,Control_path +63 ,SNP63 ,5 ,VEGFA ,1 ,Control_path +64 ,SNP64 ,5 ,VEGFA ,1 ,Control_path +65 ,SNP65 ,5 ,VEGFA ,1 ,Control_path +66 ,SNP66 ,5 ,VEGFA ,1 ,Control_path +67 ,SNP67 ,5 ,VEGFA ,1 ,Control_path +68 ,SNP68 ,5 ,VEGFA ,1 ,Control_path +69 ,SNP69 ,5 ,VEGFA ,1 ,Control_path +70 ,SNP70 ,6 ,EGFR ,1 ,Control_path +71 ,SNP71 ,6 ,EGFR ,1 ,Control_path +72 ,SNP72 ,6 ,EGFR ,1 ,Control_path +73 ,SNP73 ,6 ,EGFR ,1 ,Control_path +74 ,SNP74 ,6 ,EGFR ,1 ,Control_path +75 ,SNP75 ,6 ,EGFR ,1 ,Control_path +76 ,SNP76 ,6 ,EGFR ,1 ,Control_path +77 ,SNP77 ,6 ,EGFR ,1 ,Control_path +78 ,SNP78 ,6 ,EGFR ,1 ,Control_path +79 ,SNP79 ,6 ,EGFR ,1 ,Control_path +80 ,SNP80 ,7 ,TGFBI ,1 ,Control_path +81 ,SNP81 ,7 ,TGFBI ,1 ,Control_path +82 ,SNP82 ,7 ,TGFBI ,1 ,Control_path +83 ,SNP83 ,7 ,TGFBI ,1 ,Control_path +84 ,SNP84 ,7 ,TGFBI ,1 ,Control_path +85 ,SNP85 ,7 ,TGFBI ,1 ,Control_path +86 ,SNP86 ,7 ,TGFBI ,1 ,Control_path +87 ,SNP87 ,7 ,TGFBI ,1 ,Control_path +88 ,SNP88 ,7 ,TGFBI ,1 ,Control_path +89 ,SNP89 ,7 ,TGFBI ,1 ,Control_path +90 ,SNP90 ,8 ,TNF ,1 ,Control_path +91 ,SNP91 ,8 ,TNF ,1 ,Control_path +92 ,SNP92 ,8 ,TNF ,1 ,Control_path +93 ,SNP93 ,8 ,TNF ,1 ,Control_path +94 ,SNP94 ,8 ,TNF ,1 ,Control_path +95 ,SNP95 ,9 ,IL6 ,1 ,Control_path +96 ,SNP96 ,9 ,IL6 ,1 ,Control_path +97 ,SNP97 ,9 ,IL6 ,1 ,Control_path +98 ,SNP98 ,9 ,IL6 ,1 ,Control_path +99 ,SNP99 ,9 ,IL6 ,1 ,Control_path diff --git a/examples/example_study/subjects.csv b/examples/example_study/subjects.csv index fdf27c8..953a33a 100644 --- a/examples/example_study/subjects.csv +++ b/examples/example_study/subjects.csv @@ -1,8001 +1,8001 @@ -,patient_id,labels,genotype_row,set -0,12410,1,0,1 -1,89718,1,1,1 -2,30592,0,2,1 -3,85934,0,3,1 -4,88604,0,4,1 -5,79409,0,5,1 -6,56761,1,6,1 -7,19105,0,7,1 -8,61400,0,8,1 -9,72245,0,9,1 -10,49204,0,10,1 -11,84420,0,11,1 -12,19248,0,12,1 -13,22737,0,13,1 -14,32622,0,14,1 -15,72026,0,15,1 -16,86416,0,16,1 -17,62803,0,17,1 -18,66416,0,18,1 -19,60594,0,19,1 -20,47633,0,20,1 -21,51328,0,21,1 -22,10678,0,22,1 -23,11884,1,23,1 -24,34677,1,24,1 -25,89343,0,25,1 -26,78898,0,26,1 -27,16105,0,27,1 -28,12725,0,28,1 -29,52325,1,29,1 -30,42106,0,30,1 -31,73266,0,31,1 -32,18310,0,32,1 -33,22914,1,33,1 -34,61361,0,34,1 -35,70172,0,35,1 -36,52631,0,36,1 -37,37269,0,37,1 -38,17845,0,38,1 -39,51406,0,39,1 -40,84172,1,40,1 -41,30739,0,41,1 -42,31718,0,42,1 -43,64294,0,43,1 -44,66951,0,44,1 -45,80172,0,45,1 -46,67918,0,46,1 -47,29400,0,47,1 -48,30975,0,48,1 -49,88512,0,49,1 -50,16989,0,50,1 -51,83925,0,51,1 -52,30936,1,52,1 -53,41580,0,53,1 -54,15421,0,54,1 -55,42389,1,55,1 -56,19457,0,56,1 -57,25469,0,57,1 -58,88323,1,58,1 -59,28550,0,59,1 -60,75241,1,60,1 -61,86669,0,61,1 -62,75364,0,62,1 -63,32383,0,63,1 -64,30685,1,64,1 -65,54852,0,65,1 -66,15197,0,66,1 -67,30585,1,67,1 -68,10105,0,68,1 -69,39592,0,69,1 -70,40400,0,70,1 -71,83712,0,71,1 -72,10459,0,72,1 -73,13141,0,73,1 -74,84971,1,74,1 -75,39878,0,75,1 -76,86797,0,76,1 -77,23465,1,77,1 -78,28305,0,78,1 -79,22426,0,79,1 -80,39458,1,80,1 -81,65912,0,81,1 -82,50344,0,82,1 -83,21829,0,83,1 -84,20488,0,84,1 -85,47718,0,85,1 -86,86140,0,86,1 -87,26451,0,87,1 -88,23756,0,88,1 -89,77621,0,89,1 -90,27984,0,90,1 -91,28925,1,91,1 -92,77168,1,92,1 -93,11174,0,93,1 -94,60617,1,94,1 -95,65668,1,95,1 -96,43940,0,96,1 -97,84251,0,97,1 -98,44046,0,98,1 -99,22848,0,99,1 -100,55974,1,100,1 -101,67596,0,101,1 -102,53963,0,102,1 -103,61467,0,103,1 -104,19106,0,104,1 -105,38908,0,105,1 -106,78354,0,106,1 -107,21894,0,107,1 -108,88355,0,108,1 -109,70322,1,109,1 -110,18334,0,110,1 -111,42076,0,111,1 -112,29856,0,112,1 -113,65004,0,113,1 -114,57389,0,114,1 -115,27604,1,115,1 -116,80639,0,116,1 -117,45111,0,117,1 -118,40294,1,118,1 -119,30461,1,119,1 -120,66144,0,120,1 -121,23204,0,121,1 -122,59322,0,122,1 -123,42601,0,123,1 -124,74276,0,124,1 -125,38779,0,125,1 -126,42106,0,126,1 -127,38161,0,127,1 -128,40466,0,128,1 -129,67348,1,129,1 -130,22812,0,130,1 -131,78556,1,131,1 -132,71451,0,132,1 -133,77003,0,133,1 -134,25402,1,134,1 -135,14202,0,135,1 -136,36151,0,136,1 -137,22693,0,137,1 -138,30410,0,138,1 -139,73793,0,139,1 -140,65055,0,140,1 -141,55657,1,141,1 -142,41272,0,142,1 -143,37976,0,143,1 -144,17392,0,144,1 -145,56994,0,145,1 -146,46701,0,146,1 -147,62410,0,147,1 -148,57051,1,148,1 -149,67420,0,149,1 -150,30008,0,150,1 -151,75190,0,151,1 -152,15058,0,152,1 -153,88865,0,153,1 -154,16269,0,154,1 -155,17818,1,155,1 -156,77265,0,156,1 -157,11204,0,157,1 -158,29213,0,158,1 -159,39875,0,159,1 -160,55991,0,160,1 -161,57699,0,161,1 -162,79680,0,162,1 -163,22109,0,163,1 -164,21205,0,164,1 -165,56397,0,165,1 -166,84877,0,166,1 -167,21814,1,167,1 -168,83345,0,168,1 -169,20720,0,169,1 -170,38024,0,170,1 -171,40750,0,171,1 -172,43127,0,172,1 -173,84871,0,173,1 -174,39519,0,174,1 -175,85370,1,175,1 -176,67286,0,176,1 -177,48700,1,177,1 -178,63016,0,178,1 -179,20329,0,179,1 -180,61326,0,180,1 -181,53527,1,181,1 -182,10191,0,182,1 -183,89564,1,183,1 -184,28366,0,184,1 -185,33390,0,185,1 -186,75084,0,186,1 -187,85533,0,187,1 -188,47004,0,188,1 -189,71356,0,189,1 -190,19137,0,190,1 -191,76006,1,191,1 -192,49852,0,192,1 -193,80027,0,193,1 -194,26010,0,194,1 -195,58871,0,195,1 -196,47974,0,196,1 -197,46427,0,197,1 -198,21059,0,198,1 -199,24380,0,199,1 -200,27218,0,200,1 -201,29644,1,201,1 -202,11324,0,202,1 -203,44592,0,203,1 -204,16265,0,204,1 -205,84027,0,205,1 -206,46105,0,206,1 -207,66464,0,207,1 -208,63992,0,208,1 -209,11737,0,209,1 -210,76399,0,210,1 -211,62097,1,211,1 -212,80630,0,212,1 -213,26807,0,213,1 -214,49807,0,214,1 -215,74600,0,215,1 -216,67114,0,216,1 -217,27538,1,217,1 -218,63896,0,218,1 -219,44662,0,219,1 -220,82824,0,220,1 -221,22309,1,221,1 -222,81630,0,222,1 -223,79031,0,223,1 -224,38299,1,224,1 -225,65252,0,225,1 -226,39073,0,226,1 -227,34004,0,227,1 -228,51642,0,228,1 -229,67480,0,229,1 -230,84251,0,230,1 -231,66656,0,231,1 -232,42974,0,232,1 -233,58305,0,233,1 -234,26415,0,234,1 -235,46960,0,235,1 -236,44567,0,236,1 -237,69859,0,237,1 -238,20858,0,238,1 -239,41568,1,239,1 -240,61417,0,240,1 -241,47613,0,241,1 -242,57952,0,242,1 -243,40751,0,243,1 -244,43750,0,244,1 -245,39686,0,245,1 -246,39830,0,246,1 -247,45149,0,247,1 -248,58865,0,248,1 -249,14994,0,249,1 -250,49498,1,250,1 -251,21640,0,251,1 -252,17915,0,252,1 -253,33777,0,253,1 -254,31453,1,254,1 -255,29029,0,255,1 -256,29276,0,256,1 -257,15579,1,257,1 -258,72122,1,258,1 -259,76022,0,259,1 -260,22202,0,260,1 -261,12833,0,261,1 -262,55253,0,262,1 -263,14525,0,263,1 -264,49087,1,264,1 -265,73839,0,265,1 -266,33584,0,266,1 -267,36548,0,267,1 -268,71697,0,268,1 -269,87686,0,269,1 -270,85305,1,270,1 -271,73222,1,271,1 -272,89333,0,272,1 -273,26809,0,273,1 -274,27200,0,274,1 -275,50404,0,275,1 -276,26545,0,276,1 -277,69972,0,277,1 -278,25919,0,278,1 -279,56514,0,279,1 -280,57575,0,280,1 -281,67247,0,281,1 -282,35871,0,282,1 -283,18581,0,283,1 -284,22552,1,284,1 -285,78530,0,285,1 -286,42804,0,286,1 -287,35063,0,287,1 -288,26026,0,288,1 -289,55916,0,289,1 -290,22859,0,290,1 -291,43747,0,291,1 -292,69803,0,292,1 -293,84426,0,293,1 -294,15744,0,294,1 -295,50556,0,295,1 -296,71119,1,296,1 -297,24279,0,297,1 -298,48493,0,298,1 -299,76116,0,299,1 -300,32761,0,300,1 -301,65740,0,301,1 -302,26087,0,302,1 -303,32269,1,303,1 -304,50338,0,304,1 -305,21068,0,305,1 -306,65524,0,306,1 -307,59328,0,307,1 -308,84399,0,308,1 -309,46043,0,309,1 -310,54994,0,310,1 -311,29765,0,311,1 -312,21170,0,312,1 -313,81973,0,313,1 -314,45041,0,314,1 -315,70678,0,315,1 -316,77984,0,316,1 -317,29667,0,317,1 -318,80573,0,318,1 -319,22794,0,319,1 -320,77080,1,320,1 -321,11343,1,321,1 -322,83628,1,322,1 -323,23569,0,323,1 -324,45224,0,324,1 -325,44069,0,325,1 -326,21759,0,326,1 -327,16862,0,327,1 -328,84400,0,328,1 -329,27762,0,329,1 -330,64677,0,330,1 -331,85942,1,331,1 -332,44966,0,332,1 -333,28767,0,333,1 -334,34222,0,334,1 -335,71599,0,335,1 -336,67287,0,336,1 -337,43181,0,337,1 -338,57795,0,338,1 -339,79956,0,339,1 -340,77360,0,340,1 -341,86125,1,341,1 -342,27513,0,342,1 -343,27923,0,343,1 -344,54306,0,344,1 -345,26687,0,345,1 -346,35403,1,346,1 -347,19099,1,347,1 -348,36284,0,348,1 -349,79680,0,349,1 -350,86113,0,350,1 -351,74702,0,351,1 -352,71983,0,352,1 -353,87209,0,353,1 -354,23853,0,354,1 -355,70576,1,355,1 -356,24685,0,356,1 -357,61095,1,357,1 -358,57149,1,358,1 -359,13642,0,359,1 -360,35126,1,360,1 -361,39825,0,361,1 -362,31726,0,362,1 -363,22836,0,363,1 -364,26554,0,364,1 -365,89043,1,365,1 -366,68211,1,366,1 -367,43021,0,367,1 -368,29098,0,368,1 -369,44588,0,369,1 -370,56018,0,370,1 -371,31071,0,371,1 -372,45439,0,372,1 -373,37364,0,373,1 -374,10835,0,374,1 -375,86251,0,375,1 -376,65644,0,376,1 -377,87887,0,377,1 -378,32799,0,378,1 -379,41692,0,379,1 -380,80173,0,380,1 -381,36591,0,381,1 -382,32590,0,382,1 -383,39203,0,383,1 -384,68769,0,384,1 -385,10343,0,385,1 -386,45811,0,386,1 -387,78521,0,387,1 -388,62543,0,388,1 -389,14454,0,389,1 -390,32225,1,390,1 -391,63255,0,391,1 -392,67806,0,392,1 -393,88635,0,393,1 -394,68935,1,394,1 -395,65712,0,395,1 -396,58124,1,396,1 -397,52418,0,397,1 -398,11761,0,398,1 -399,40932,0,399,1 -400,10343,0,400,1 -401,88778,1,401,1 -402,60336,0,402,1 -403,12756,0,403,1 -404,84013,0,404,1 -405,48256,0,405,1 -406,14888,0,406,1 -407,33632,0,407,1 -408,86150,0,408,1 -409,71984,0,409,1 -410,43915,1,410,1 -411,71454,0,411,1 -412,69803,0,412,1 -413,48020,0,413,1 -414,30000,0,414,1 -415,66536,0,415,1 -416,48105,0,416,1 -417,32474,1,417,1 -418,51185,0,418,1 -419,52278,0,419,1 -420,32945,0,420,1 -421,29619,0,421,1 -422,46927,0,422,1 -423,74522,0,423,1 -424,37960,1,424,1 -425,40023,0,425,1 -426,85195,0,426,1 -427,71857,0,427,1 -428,66564,1,428,1 -429,76273,0,429,1 -430,43487,0,430,1 -431,84952,0,431,1 -432,76182,0,432,1 -433,68577,0,433,1 -434,49181,0,434,1 -435,37403,0,435,1 -436,79615,0,436,1 -437,15011,0,437,1 -438,42376,0,438,1 -439,86687,0,439,1 -440,23756,0,440,1 -441,33730,0,441,1 -442,58324,0,442,1 -443,68222,0,443,1 -444,45732,0,444,1 -445,65726,1,445,1 -446,26267,0,446,1 -447,87051,0,447,1 -448,45630,0,448,1 -449,61843,1,449,1 -450,69889,0,450,1 -451,43731,1,451,1 -452,50625,0,452,1 -453,87530,0,453,1 -454,29553,0,454,1 -455,38991,0,455,1 -456,38306,1,456,1 -457,81442,0,457,1 -458,21332,0,458,1 -459,53891,0,459,1 -460,60183,1,460,1 -461,82852,0,461,1 -462,58595,0,462,1 -463,41912,0,463,1 -464,74512,0,464,1 -465,42488,0,465,1 -466,59535,1,466,1 -467,15671,0,467,1 -468,73536,0,468,1 -469,32396,0,469,1 -470,74251,0,470,1 -471,50877,0,471,1 -472,85134,1,472,1 -473,82361,0,473,1 -474,43149,0,474,1 -475,89549,0,475,1 -476,31301,0,476,1 -477,37078,1,477,1 -478,40211,0,478,1 -479,36204,0,479,1 -480,69172,0,480,1 -481,63478,0,481,1 -482,30011,0,482,1 -483,38316,0,483,1 -484,81363,0,484,1 -485,56160,0,485,1 -486,43442,1,486,1 -487,87204,0,487,1 -488,63534,0,488,1 -489,55830,0,489,1 -490,13830,0,490,1 -491,73193,0,491,1 -492,24030,1,492,1 -493,11420,0,493,1 -494,29515,0,494,1 -495,55342,1,495,1 -496,88974,1,496,1 -497,55472,0,497,1 -498,68162,0,498,1 -499,33626,0,499,1 -500,79441,0,500,1 -501,25019,1,501,1 -502,85109,0,502,1 -503,34824,0,503,1 -504,50542,0,504,1 -505,43168,0,505,1 -506,54688,0,506,1 -507,66481,0,507,1 -508,65544,0,508,1 -509,63668,0,509,1 -510,65027,0,510,1 -511,62321,0,511,1 -512,49720,0,512,1 -513,39672,0,513,1 -514,33535,0,514,1 -515,14662,0,515,1 -516,89507,0,516,1 -517,46865,0,517,1 -518,17521,1,518,1 -519,27246,0,519,1 -520,46583,0,520,1 -521,21749,0,521,1 -522,58263,0,522,1 -523,38439,0,523,1 -524,30205,0,524,1 -525,41672,0,525,1 -526,38706,0,526,1 -527,64426,0,527,1 -528,47915,0,528,1 -529,54384,0,529,1 -530,88917,0,530,1 -531,44145,0,531,1 -532,66296,0,532,1 -533,10644,0,533,1 -534,82467,1,534,1 -535,22516,0,535,1 -536,16535,0,536,1 -537,55939,0,537,1 -538,42270,0,538,1 -539,59380,1,539,1 -540,48714,1,540,1 -541,32862,1,541,1 -542,52298,0,542,1 -543,31057,0,543,1 -544,25904,0,544,1 -545,84092,0,545,1 -546,31464,1,546,1 -547,42055,0,547,1 -548,83780,0,548,1 -549,79165,0,549,1 -550,21476,0,550,1 -551,66185,1,551,1 -552,59818,0,552,1 -553,39373,0,553,1 -554,39640,0,554,1 -555,83413,0,555,1 -556,43633,0,556,1 -557,67608,0,557,1 -558,55521,0,558,1 -559,79632,0,559,1 -560,40163,1,560,1 -561,43369,1,561,1 -562,66110,1,562,1 -563,77912,1,563,1 -564,35334,1,564,1 -565,20192,0,565,1 -566,84399,1,566,1 -567,64605,1,567,1 -568,55977,0,568,1 -569,65553,0,569,1 -570,24210,0,570,1 -571,22561,0,571,1 -572,88799,1,572,1 -573,77806,0,573,1 -574,49312,0,574,1 -575,27888,0,575,1 -576,68403,0,576,1 -577,62098,0,577,1 -578,75083,0,578,1 -579,26393,1,579,1 -580,25957,1,580,1 -581,54378,0,581,1 -582,71824,1,582,1 -583,44285,0,583,1 -584,50537,0,584,1 -585,74589,1,585,1 -586,89899,0,586,1 -587,13229,0,587,1 -588,80339,1,588,1 -589,44251,0,589,1 -590,85519,0,590,1 -591,77566,0,591,1 -592,32035,0,592,1 -593,39001,0,593,1 -594,82762,0,594,1 -595,79935,0,595,1 -596,36442,0,596,1 -597,51342,0,597,1 -598,63765,0,598,1 -599,73095,0,599,1 -600,19002,0,600,1 -601,10927,0,601,1 -602,64126,0,602,1 -603,87314,0,603,1 -604,17754,1,604,1 -605,73861,0,605,1 -606,36415,0,606,1 -607,43222,0,607,1 -608,69387,0,608,1 -609,53492,0,609,1 -610,34951,0,610,1 -611,75554,1,611,1 -612,24275,0,612,1 -613,11347,0,613,1 -614,71395,0,614,1 -615,47492,0,615,1 -616,24776,0,616,1 -617,14493,0,617,1 -618,34611,0,618,1 -619,71782,0,619,1 -620,12296,0,620,1 -621,26243,0,621,1 -622,15477,1,622,1 -623,52230,1,623,1 -624,56641,0,624,1 -625,36104,0,625,1 -626,66023,0,626,1 -627,53469,0,627,1 -628,37004,0,628,1 -629,39448,0,629,1 -630,28633,0,630,1 -631,16753,1,631,1 -632,16837,1,632,1 -633,33575,0,633,1 -634,32561,0,634,1 -635,85806,0,635,1 -636,86654,1,636,1 -637,39809,0,637,1 -638,29800,1,638,1 -639,80618,0,639,1 -640,48952,0,640,1 -641,71058,0,641,1 -642,23866,0,642,1 -643,78743,0,643,1 -644,20669,0,644,1 -645,39866,0,645,1 -646,77810,0,646,1 -647,40492,0,647,1 -648,68460,0,648,1 -649,87583,1,649,1 -650,38390,0,650,1 -651,22383,0,651,1 -652,58269,0,652,1 -653,67106,1,653,1 -654,67959,0,654,1 -655,10161,0,655,1 -656,40174,0,656,1 -657,47108,0,657,1 -658,54465,0,658,1 -659,71518,0,659,1 -660,33069,0,660,1 -661,26192,1,661,1 -662,28053,0,662,1 -663,60498,0,663,1 -664,86208,0,664,1 -665,83054,0,665,1 -666,54923,0,666,1 -667,24478,0,667,1 -668,68172,0,668,1 -669,64015,1,669,1 -670,58824,0,670,1 -671,87769,0,671,1 -672,82982,0,672,1 -673,57389,0,673,1 -674,32850,0,674,1 -675,58191,1,675,1 -676,57329,0,676,1 -677,71038,0,677,1 -678,32696,0,678,1 -679,89180,0,679,1 -680,81212,0,680,1 -681,21259,0,681,1 -682,42401,0,682,1 -683,62140,0,683,1 -684,64920,1,684,1 -685,50455,0,685,1 -686,77842,0,686,1 -687,22845,0,687,1 -688,41656,0,688,1 -689,67072,0,689,1 -690,82979,0,690,1 -691,70637,0,691,1 -692,54872,0,692,1 -693,60038,0,693,1 -694,45781,0,694,1 -695,32551,1,695,1 -696,40279,0,696,1 -697,82670,0,697,1 -698,46792,0,698,1 -699,31392,0,699,1 -700,39209,0,700,1 -701,18767,0,701,1 -702,78050,0,702,1 -703,10649,0,703,1 -704,89387,1,704,1 -705,29512,0,705,1 -706,83786,0,706,1 -707,88338,0,707,1 -708,40763,1,708,1 -709,24573,0,709,1 -710,25194,0,710,1 -711,62334,0,711,1 -712,82192,0,712,1 -713,40708,1,713,1 -714,53689,0,714,1 -715,75355,1,715,1 -716,55294,0,716,1 -717,58078,1,717,1 -718,23283,0,718,1 -719,32518,0,719,1 -720,11640,0,720,1 -721,77915,0,721,1 -722,16928,0,722,1 -723,39240,0,723,1 -724,24668,0,724,1 -725,83339,0,725,1 -726,85777,1,726,1 -727,87845,1,727,1 -728,51331,0,728,1 -729,22878,0,729,1 -730,14187,0,730,1 -731,42993,0,731,1 -732,20938,0,732,1 -733,64910,0,733,1 -734,24672,0,734,1 -735,28280,0,735,1 -736,61802,0,736,1 -737,73771,0,737,1 -738,11263,0,738,1 -739,54188,1,739,1 -740,60453,1,740,1 -741,86907,0,741,1 -742,45778,0,742,1 -743,76940,0,743,1 -744,45422,1,744,1 -745,57140,0,745,1 -746,85278,0,746,1 -747,19265,0,747,1 -748,79892,0,748,1 -749,10938,0,749,1 -750,53991,0,750,1 -751,79443,1,751,1 -752,55344,0,752,1 -753,25485,0,753,1 -754,56728,0,754,1 -755,57491,0,755,1 -756,28863,1,756,1 -757,41022,0,757,1 -758,44604,0,758,1 -759,76047,0,759,1 -760,80007,0,760,1 -761,74711,0,761,1 -762,77447,0,762,1 -763,28390,0,763,1 -764,29576,0,764,1 -765,40622,1,765,1 -766,55755,0,766,1 -767,48564,0,767,1 -768,50984,0,768,1 -769,84795,0,769,1 -770,28309,0,770,1 -771,70760,0,771,1 -772,78038,0,772,1 -773,81859,0,773,1 -774,69919,0,774,1 -775,30846,0,775,1 -776,61133,0,776,1 -777,40766,0,777,1 -778,29412,0,778,1 -779,27317,0,779,1 -780,79663,0,780,1 -781,22409,1,781,1 -782,55924,0,782,1 -783,83047,0,783,1 -784,64987,0,784,1 -785,42386,0,785,1 -786,18527,1,786,1 -787,29305,1,787,1 -788,20465,1,788,1 -789,48374,0,789,1 -790,83511,0,790,1 -791,39265,0,791,1 -792,89240,1,792,1 -793,49020,1,793,1 -794,84248,0,794,1 -795,70714,1,795,1 -796,68990,0,796,1 -797,42861,0,797,1 -798,72491,1,798,1 -799,49572,1,799,1 -800,11250,0,800,1 -801,47042,1,801,1 -802,44067,0,802,1 -803,39525,0,803,1 -804,43890,0,804,1 -805,47347,1,805,1 -806,42812,0,806,1 -807,88998,0,807,1 -808,78239,0,808,1 -809,30826,0,809,1 -810,68380,0,810,1 -811,45443,0,811,1 -812,79167,0,812,1 -813,77943,0,813,1 -814,14132,0,814,1 -815,89583,0,815,1 -816,77911,0,816,1 -817,22310,0,817,1 -818,33849,1,818,1 -819,70126,1,819,1 -820,85495,0,820,1 -821,18564,0,821,1 -822,68970,0,822,1 -823,34311,1,823,1 -824,32618,0,824,1 -825,77304,0,825,1 -826,22365,0,826,1 -827,32955,0,827,1 -828,46356,0,828,1 -829,74583,0,829,1 -830,36218,0,830,1 -831,78591,0,831,1 -832,47404,0,832,1 -833,87385,0,833,1 -834,76460,0,834,1 -835,61729,0,835,1 -836,39980,1,836,1 -837,33082,0,837,1 -838,13958,0,838,1 -839,75315,0,839,1 -840,12474,0,840,1 -841,54193,1,841,1 -842,83802,0,842,1 -843,56700,0,843,1 -844,69954,0,844,1 -845,83478,0,845,1 -846,55921,0,846,1 -847,66059,0,847,1 -848,55099,0,848,1 -849,37626,0,849,1 -850,49160,0,850,1 -851,40261,0,851,1 -852,55929,0,852,1 -853,64898,0,853,1 -854,23736,0,854,1 -855,69514,0,855,1 -856,87191,1,856,1 -857,64290,0,857,1 -858,21613,0,858,1 -859,18281,0,859,1 -860,88901,0,860,1 -861,62787,0,861,1 -862,21615,0,862,1 -863,68444,0,863,1 -864,56163,0,864,1 -865,30055,0,865,1 -866,37520,0,866,1 -867,47082,0,867,1 -868,12881,0,868,1 -869,17115,1,869,1 -870,44548,0,870,1 -871,83976,0,871,1 -872,20624,1,872,1 -873,82681,0,873,1 -874,81188,1,874,1 -875,44216,0,875,1 -876,40227,0,876,1 -877,10815,0,877,1 -878,19599,0,878,1 -879,79435,0,879,1 -880,77496,0,880,1 -881,73535,0,881,1 -882,76249,0,882,1 -883,28591,0,883,1 -884,63313,0,884,1 -885,34696,1,885,1 -886,15059,0,886,1 -887,58950,0,887,1 -888,85084,0,888,1 -889,89316,1,889,1 -890,83568,0,890,1 -891,89295,0,891,1 -892,69012,1,892,1 -893,33777,0,893,1 -894,35050,0,894,1 -895,88957,0,895,1 -896,41355,0,896,1 -897,25806,1,897,1 -898,71753,0,898,1 -899,71229,0,899,1 -900,40337,0,900,1 -901,47490,0,901,1 -902,78895,0,902,1 -903,41265,1,903,1 -904,87821,0,904,1 -905,86456,1,905,1 -906,87412,0,906,1 -907,86539,0,907,1 -908,67767,0,908,1 -909,52683,0,909,1 -910,73747,0,910,1 -911,71909,1,911,1 -912,79623,1,912,1 -913,48677,0,913,1 -914,59494,0,914,1 -915,34200,0,915,1 -916,24929,0,916,1 -917,19231,0,917,1 -918,56144,0,918,1 -919,61930,0,919,1 -920,66652,1,920,1 -921,14682,0,921,1 -922,40195,0,922,1 -923,27641,1,923,1 -924,14866,0,924,1 -925,76239,0,925,1 -926,45177,0,926,1 -927,87642,0,927,1 -928,34776,0,928,1 -929,48654,0,929,1 -930,73189,0,930,1 -931,71303,1,931,1 -932,74833,0,932,1 -933,54507,0,933,1 -934,18002,0,934,1 -935,52557,0,935,1 -936,41399,0,936,1 -937,46182,1,937,1 -938,71664,0,938,1 -939,69577,0,939,1 -940,28859,0,940,1 -941,17750,0,941,1 -942,66172,0,942,1 -943,89533,0,943,1 -944,29189,0,944,1 -945,78129,0,945,1 -946,60815,0,946,1 -947,80791,0,947,1 -948,27666,0,948,1 -949,34581,0,949,1 -950,33807,0,950,1 -951,70526,0,951,1 -952,59701,0,952,1 -953,60701,0,953,1 -954,29562,0,954,1 -955,89217,0,955,1 -956,74854,0,956,1 -957,15049,0,957,1 -958,82088,0,958,1 -959,85382,0,959,1 -960,44048,1,960,1 -961,77945,0,961,1 -962,35699,1,962,1 -963,16425,0,963,1 -964,75106,0,964,1 -965,59211,0,965,1 -966,69715,0,966,1 -967,17391,0,967,1 -968,82217,0,968,1 -969,25414,1,969,1 -970,12746,0,970,1 -971,25234,0,971,1 -972,72539,0,972,1 -973,79619,0,973,1 -974,20389,0,974,1 -975,17703,0,975,1 -976,79959,0,976,1 -977,44566,1,977,1 -978,38677,1,978,1 -979,77850,0,979,1 -980,10421,0,980,1 -981,34996,0,981,1 -982,40594,1,982,1 -983,25692,0,983,1 -984,85533,0,984,1 -985,21869,0,985,1 -986,75563,0,986,1 -987,29604,0,987,1 -988,72104,0,988,1 -989,74177,1,989,1 -990,60611,0,990,1 -991,72917,0,991,1 -992,62458,0,992,1 -993,85022,0,993,1 -994,71187,0,994,1 -995,34275,0,995,1 -996,22073,0,996,1 -997,12652,0,997,1 -998,63724,0,998,1 -999,37072,0,999,1 -1000,17202,0,1000,1 -1001,79594,0,1001,1 -1002,68074,0,1002,1 -1003,44206,0,1003,1 -1004,43108,0,1004,1 -1005,70907,0,1005,1 -1006,68448,0,1006,1 -1007,79183,0,1007,1 -1008,83089,0,1008,1 -1009,50936,0,1009,1 -1010,38819,0,1010,1 -1011,53810,0,1011,1 -1012,82792,0,1012,1 -1013,13912,0,1013,1 -1014,86496,0,1014,1 -1015,56784,0,1015,1 -1016,43211,0,1016,1 -1017,82274,0,1017,1 -1018,10260,1,1018,1 -1019,75641,0,1019,1 -1020,20614,0,1020,1 -1021,87355,0,1021,1 -1022,36665,0,1022,1 -1023,68104,0,1023,1 -1024,73561,0,1024,1 -1025,87563,0,1025,1 -1026,66852,0,1026,1 -1027,52446,0,1027,1 -1028,56313,0,1028,1 -1029,85039,0,1029,1 -1030,71056,0,1030,1 -1031,62282,1,1031,1 -1032,77086,1,1032,1 -1033,86155,0,1033,1 -1034,22817,0,1034,1 -1035,73555,0,1035,1 -1036,76971,0,1036,1 -1037,53750,0,1037,1 -1038,72574,0,1038,1 -1039,67535,0,1039,1 -1040,22368,0,1040,1 -1041,49543,1,1041,1 -1042,50060,0,1042,1 -1043,16042,0,1043,1 -1044,43447,0,1044,1 -1045,80253,0,1045,1 -1046,13645,0,1046,1 -1047,19935,1,1047,1 -1048,19069,0,1048,1 -1049,77158,0,1049,1 -1050,89715,1,1050,1 -1051,60740,0,1051,1 -1052,45553,0,1052,1 -1053,23084,0,1053,1 -1054,79801,0,1054,1 -1055,35304,0,1055,1 -1056,48574,1,1056,1 -1057,71803,0,1057,1 -1058,13399,0,1058,1 -1059,50018,0,1059,1 -1060,56538,1,1060,1 -1061,62703,0,1061,1 -1062,29672,0,1062,1 -1063,69638,0,1063,1 -1064,37837,0,1064,1 -1065,69644,0,1065,1 -1066,74989,0,1066,1 -1067,83652,0,1067,1 -1068,79993,0,1068,1 -1069,24839,0,1069,1 -1070,18004,0,1070,1 -1071,37945,0,1071,1 -1072,78990,0,1072,1 -1073,87352,0,1073,1 -1074,82760,0,1074,1 -1075,87396,1,1075,1 -1076,25549,1,1076,1 -1077,81272,1,1077,1 -1078,26021,0,1078,1 -1079,66287,1,1079,1 -1080,43767,0,1080,1 -1081,14323,0,1081,1 -1082,30798,0,1082,1 -1083,57552,1,1083,1 -1084,46481,0,1084,1 -1085,83938,0,1085,1 -1086,42644,0,1086,1 -1087,27688,0,1087,1 -1088,37838,0,1088,1 -1089,76264,1,1089,1 -1090,74144,0,1090,1 -1091,85078,0,1091,1 -1092,83147,0,1092,1 -1093,57728,0,1093,1 -1094,14042,0,1094,1 -1095,47363,0,1095,1 -1096,63448,0,1096,1 -1097,48484,0,1097,1 -1098,73982,0,1098,1 -1099,75448,0,1099,1 -1100,84335,0,1100,1 -1101,24188,0,1101,1 -1102,54869,0,1102,1 -1103,28645,0,1103,1 -1104,38076,0,1104,1 -1105,46064,0,1105,1 -1106,23788,0,1106,1 -1107,71422,1,1107,1 -1108,11074,0,1108,1 -1109,56235,0,1109,1 -1110,12274,0,1110,1 -1111,75744,1,1111,1 -1112,58591,0,1112,1 -1113,21762,0,1113,1 -1114,60916,0,1114,1 -1115,24644,0,1115,1 -1116,35596,0,1116,1 -1117,13435,0,1117,1 -1118,71191,0,1118,1 -1119,37776,0,1119,1 -1120,89987,0,1120,1 -1121,74866,0,1121,1 -1122,22128,0,1122,1 -1123,83660,0,1123,1 -1124,55740,1,1124,1 -1125,65237,0,1125,1 -1126,64457,0,1126,1 -1127,88295,0,1127,1 -1128,55159,0,1128,1 -1129,37141,0,1129,1 -1130,61540,0,1130,1 -1131,43991,0,1131,1 -1132,38921,0,1132,1 -1133,13688,0,1133,1 -1134,68303,0,1134,1 -1135,69226,0,1135,1 -1136,46334,0,1136,1 -1137,39562,0,1137,1 -1138,10509,0,1138,1 -1139,38745,0,1139,1 -1140,47757,0,1140,1 -1141,89543,0,1141,1 -1142,87556,0,1142,1 -1143,39678,0,1143,1 -1144,61240,0,1144,1 -1145,37116,0,1145,1 -1146,59106,0,1146,1 -1147,30081,0,1147,1 -1148,44911,0,1148,1 -1149,70283,0,1149,1 -1150,34450,0,1150,1 -1151,52810,0,1151,1 -1152,62374,0,1152,1 -1153,54094,0,1153,1 -1154,82551,0,1154,1 -1155,84249,0,1155,1 -1156,22395,0,1156,1 -1157,81189,1,1157,1 -1158,74265,0,1158,1 -1159,78008,0,1159,1 -1160,27628,0,1160,1 -1161,73653,0,1161,1 -1162,88269,0,1162,1 -1163,33655,0,1163,1 -1164,66569,0,1164,1 -1165,65428,0,1165,1 -1166,75529,0,1166,1 -1167,36946,1,1167,1 -1168,28761,0,1168,1 -1169,47032,0,1169,1 -1170,55270,0,1170,1 -1171,40065,0,1171,1 -1172,47420,1,1172,1 -1173,51039,0,1173,1 -1174,47663,0,1174,1 -1175,55365,0,1175,1 -1176,12061,0,1176,1 -1177,66535,0,1177,1 -1178,84743,0,1178,1 -1179,42529,0,1179,1 -1180,75748,0,1180,1 -1181,17291,1,1181,1 -1182,42242,0,1182,1 -1183,74535,0,1183,1 -1184,27180,1,1184,1 -1185,71920,0,1185,1 -1186,18955,0,1186,1 -1187,18134,0,1187,1 -1188,56194,0,1188,1 -1189,80015,0,1189,1 -1190,11140,0,1190,1 -1191,63177,1,1191,1 -1192,54585,0,1192,1 -1193,68186,0,1193,1 -1194,12347,0,1194,1 -1195,42685,1,1195,1 -1196,71380,0,1196,1 -1197,17152,1,1197,1 -1198,19771,1,1198,1 -1199,57566,1,1199,1 -1200,26729,1,1200,1 -1201,43059,0,1201,1 -1202,13678,0,1202,1 -1203,18446,0,1203,1 -1204,58762,0,1204,1 -1205,17965,0,1205,1 -1206,31756,1,1206,1 -1207,75530,1,1207,1 -1208,89041,1,1208,1 -1209,68654,0,1209,1 -1210,34026,1,1210,1 -1211,47388,0,1211,1 -1212,79305,0,1212,1 -1213,19432,0,1213,1 -1214,78065,1,1214,1 -1215,38953,0,1215,1 -1216,58120,0,1216,1 -1217,59874,0,1217,1 -1218,76514,1,1218,1 -1219,19577,0,1219,1 -1220,21574,1,1220,1 -1221,13201,0,1221,1 -1222,65048,0,1222,1 -1223,32306,0,1223,1 -1224,14211,1,1224,1 -1225,47914,0,1225,1 -1226,25301,0,1226,1 -1227,16459,0,1227,1 -1228,30507,0,1228,1 -1229,42674,0,1229,1 -1230,53990,0,1230,1 -1231,64567,0,1231,1 -1232,48264,0,1232,1 -1233,41654,0,1233,1 -1234,25245,0,1234,1 -1235,26851,0,1235,1 -1236,57735,0,1236,1 -1237,69182,0,1237,1 -1238,42483,0,1238,1 -1239,63079,1,1239,1 -1240,17931,0,1240,1 -1241,71979,1,1241,1 -1242,34515,0,1242,1 -1243,14501,0,1243,1 -1244,72012,0,1244,1 -1245,23763,0,1245,1 -1246,54877,0,1246,1 -1247,71506,0,1247,1 -1248,89009,0,1248,1 -1249,15008,1,1249,1 -1250,54517,0,1250,1 -1251,34963,0,1251,1 -1252,82036,0,1252,1 -1253,58916,0,1253,1 -1254,20120,0,1254,1 -1255,86838,0,1255,1 -1256,74580,0,1256,1 -1257,82788,0,1257,1 -1258,10060,0,1258,1 -1259,28286,0,1259,1 -1260,54370,0,1260,1 -1261,27806,0,1261,1 -1262,43136,0,1262,1 -1263,24444,0,1263,1 -1264,23596,1,1264,1 -1265,54645,1,1265,1 -1266,63052,0,1266,1 -1267,51907,1,1267,1 -1268,21948,0,1268,1 -1269,49475,0,1269,1 -1270,75097,0,1270,1 -1271,81302,1,1271,1 -1272,20369,1,1272,1 -1273,27062,0,1273,1 -1274,37784,0,1274,1 -1275,58510,1,1275,1 -1276,67333,0,1276,1 -1277,59353,0,1277,1 -1278,47296,1,1278,1 -1279,11821,0,1279,1 -1280,20587,0,1280,1 -1281,15184,0,1281,1 -1282,88234,1,1282,1 -1283,33018,1,1283,1 -1284,58395,0,1284,1 -1285,19788,1,1285,1 -1286,46196,1,1286,1 -1287,72397,0,1287,1 -1288,26382,0,1288,1 -1289,69304,0,1289,1 -1290,17793,1,1290,1 -1291,41441,0,1291,1 -1292,67080,0,1292,1 -1293,42306,0,1293,1 -1294,36060,0,1294,1 -1295,84220,0,1295,1 -1296,64704,0,1296,1 -1297,82673,0,1297,1 -1298,65181,0,1298,1 -1299,41816,0,1299,1 -1300,20810,1,1300,1 -1301,82052,0,1301,1 -1302,13662,0,1302,1 -1303,20959,0,1303,1 -1304,27960,0,1304,1 -1305,57098,0,1305,1 -1306,61287,0,1306,1 -1307,70683,0,1307,1 -1308,34316,0,1308,1 -1309,30117,0,1309,1 -1310,43304,0,1310,1 -1311,27761,0,1311,1 -1312,49183,0,1312,1 -1313,61716,1,1313,1 -1314,53667,0,1314,1 -1315,61166,0,1315,1 -1316,13986,0,1316,1 -1317,25411,0,1317,1 -1318,24376,0,1318,1 -1319,89875,0,1319,1 -1320,87629,0,1320,1 -1321,12318,0,1321,1 -1322,78782,0,1322,1 -1323,85624,1,1323,1 -1324,62426,0,1324,1 -1325,67918,0,1325,1 -1326,68100,0,1326,1 -1327,67723,0,1327,1 -1328,35288,0,1328,1 -1329,37147,0,1329,1 -1330,16491,1,1330,1 -1331,31123,1,1331,1 -1332,13732,0,1332,1 -1333,59590,0,1333,1 -1334,11786,0,1334,1 -1335,74555,0,1335,1 -1336,71523,0,1336,1 -1337,82199,0,1337,1 -1338,20611,1,1338,1 -1339,56668,0,1339,1 -1340,60139,0,1340,1 -1341,65438,0,1341,1 -1342,45986,1,1342,1 -1343,71976,0,1343,1 -1344,28825,0,1344,1 -1345,60119,0,1345,1 -1346,47469,0,1346,1 -1347,20453,0,1347,1 -1348,22311,0,1348,1 -1349,48912,0,1349,1 -1350,33974,0,1350,1 -1351,20554,0,1351,1 -1352,34631,0,1352,1 -1353,27623,1,1353,1 -1354,26364,0,1354,1 -1355,83617,0,1355,1 -1356,18004,0,1356,1 -1357,45005,0,1357,1 -1358,61309,0,1358,1 -1359,53321,1,1359,1 -1360,86546,0,1360,1 -1361,32248,0,1361,1 -1362,46419,0,1362,1 -1363,22470,1,1363,1 -1364,89228,1,1364,1 -1365,49894,0,1365,1 -1366,77234,0,1366,1 -1367,31141,1,1367,1 -1368,17221,0,1368,1 -1369,28656,0,1369,1 -1370,39060,0,1370,1 -1371,20267,0,1371,1 -1372,19160,0,1372,1 -1373,12845,0,1373,1 -1374,44413,0,1374,1 -1375,52553,0,1375,1 -1376,89843,0,1376,1 -1377,32376,0,1377,1 -1378,77166,0,1378,1 -1379,25551,0,1379,1 -1380,61738,0,1380,1 -1381,24871,0,1381,1 -1382,79594,0,1382,1 -1383,35851,0,1383,1 -1384,19930,0,1384,1 -1385,37306,0,1385,1 -1386,10085,1,1386,1 -1387,89175,0,1387,1 -1388,86966,0,1388,1 -1389,56734,0,1389,1 -1390,21525,0,1390,1 -1391,42214,1,1391,1 -1392,56782,0,1392,1 -1393,11729,1,1393,1 -1394,83558,0,1394,1 -1395,89893,0,1395,1 -1396,49926,0,1396,1 -1397,23347,0,1397,1 -1398,55455,1,1398,1 -1399,14490,1,1399,1 -1400,89241,0,1400,1 -1401,18652,0,1401,1 -1402,54673,0,1402,1 -1403,37036,0,1403,1 -1404,41148,0,1404,1 -1405,67693,0,1405,1 -1406,57425,1,1406,1 -1407,54464,0,1407,1 -1408,35052,0,1408,1 -1409,12471,0,1409,1 -1410,30578,0,1410,1 -1411,59354,0,1411,1 -1412,89861,0,1412,1 -1413,65940,0,1413,1 -1414,24370,0,1414,1 -1415,49688,0,1415,1 -1416,84609,1,1416,1 -1417,56657,0,1417,1 -1418,13642,0,1418,1 -1419,71530,0,1419,1 -1420,47343,0,1420,1 -1421,26059,0,1421,1 -1422,19203,1,1422,1 -1423,13367,0,1423,1 -1424,69131,1,1424,1 -1425,52174,0,1425,1 -1426,33046,1,1426,1 -1427,63832,0,1427,1 -1428,61358,1,1428,1 -1429,81707,0,1429,1 -1430,86678,0,1430,1 -1431,20731,0,1431,1 -1432,78476,0,1432,1 -1433,82280,0,1433,1 -1434,48315,0,1434,1 -1435,86049,0,1435,1 -1436,73253,0,1436,1 -1437,23570,0,1437,1 -1438,44918,0,1438,1 -1439,48715,0,1439,1 -1440,66370,1,1440,1 -1441,22330,0,1441,1 -1442,51728,1,1442,1 -1443,79109,0,1443,1 -1444,39747,0,1444,1 -1445,10023,0,1445,1 -1446,75675,0,1446,1 -1447,72707,1,1447,1 -1448,78163,0,1448,1 -1449,71281,0,1449,1 -1450,89334,0,1450,1 -1451,39819,0,1451,1 -1452,55295,0,1452,1 -1453,13292,0,1453,1 -1454,22319,1,1454,1 -1455,80818,0,1455,1 -1456,40749,0,1456,1 -1457,80400,0,1457,1 -1458,11102,0,1458,1 -1459,63160,1,1459,1 -1460,50772,0,1460,1 -1461,70766,1,1461,1 -1462,62469,0,1462,1 -1463,64397,1,1463,1 -1464,68429,0,1464,1 -1465,34051,1,1465,1 -1466,78373,0,1466,1 -1467,17073,0,1467,1 -1468,53346,0,1468,1 -1469,59622,0,1469,1 -1470,80782,0,1470,1 -1471,28041,0,1471,1 -1472,51233,0,1472,1 -1473,88638,0,1473,1 -1474,86854,0,1474,1 -1475,81493,0,1475,1 -1476,38687,0,1476,1 -1477,25176,0,1477,1 -1478,55299,0,1478,1 -1479,39818,0,1479,1 -1480,52770,0,1480,1 -1481,56331,0,1481,1 -1482,82445,0,1482,1 -1483,53109,0,1483,1 -1484,54637,0,1484,1 -1485,76070,0,1485,1 -1486,21726,0,1486,1 -1487,72962,0,1487,1 -1488,47950,0,1488,1 -1489,77143,0,1489,1 -1490,82462,0,1490,1 -1491,59958,0,1491,1 -1492,39054,0,1492,1 -1493,56115,0,1493,1 -1494,35042,0,1494,1 -1495,28672,1,1495,1 -1496,71908,0,1496,1 -1497,47421,0,1497,1 -1498,49376,0,1498,1 -1499,23157,1,1499,1 -1500,56097,0,1500,1 -1501,88508,0,1501,1 -1502,10746,0,1502,1 -1503,56899,1,1503,1 -1504,56538,0,1504,1 -1505,38203,0,1505,1 -1506,86283,0,1506,1 -1507,55146,0,1507,1 -1508,84347,0,1508,1 -1509,85897,0,1509,1 -1510,78114,0,1510,1 -1511,11565,0,1511,1 -1512,10299,0,1512,1 -1513,10988,1,1513,1 -1514,39731,0,1514,1 -1515,60939,1,1515,1 -1516,40161,1,1516,1 -1517,47917,0,1517,1 -1518,50427,1,1518,1 -1519,25944,0,1519,1 -1520,15910,0,1520,1 -1521,76546,0,1521,1 -1522,46651,0,1522,1 -1523,18578,0,1523,1 -1524,81944,0,1524,1 -1525,13439,1,1525,1 -1526,36173,1,1526,1 -1527,56755,0,1527,1 -1528,87320,0,1528,1 -1529,81822,0,1529,1 -1530,79279,0,1530,1 -1531,48171,0,1531,1 -1532,22285,1,1532,1 -1533,54065,0,1533,1 -1534,56056,1,1534,1 -1535,49142,1,1535,1 -1536,80585,0,1536,1 -1537,71985,0,1537,1 -1538,68031,0,1538,1 -1539,56213,0,1539,1 -1540,60399,0,1540,1 -1541,80248,0,1541,1 -1542,71171,0,1542,1 -1543,20173,0,1543,1 -1544,73752,0,1544,1 -1545,77159,0,1545,1 -1546,61288,0,1546,1 -1547,56658,0,1547,1 -1548,65515,0,1548,1 -1549,46512,0,1549,1 -1550,87128,0,1550,1 -1551,57589,0,1551,1 -1552,40592,0,1552,1 -1553,36182,0,1553,1 -1554,80773,0,1554,1 -1555,20381,1,1555,1 -1556,50778,0,1556,1 -1557,63702,0,1557,1 -1558,63200,0,1558,1 -1559,30233,0,1559,1 -1560,62260,0,1560,1 -1561,37785,0,1561,1 -1562,17740,0,1562,1 -1563,17811,1,1563,1 -1564,11818,1,1564,1 -1565,24257,0,1565,1 -1566,68272,0,1566,1 -1567,42351,0,1567,1 -1568,45056,0,1568,1 -1569,60414,0,1569,1 -1570,72911,0,1570,1 -1571,81950,0,1571,1 -1572,24011,0,1572,1 -1573,15440,1,1573,1 -1574,64307,1,1574,1 -1575,78972,1,1575,1 -1576,17422,0,1576,1 -1577,40914,0,1577,1 -1578,12277,0,1578,1 -1579,68662,0,1579,1 -1580,29006,1,1580,1 -1581,86819,0,1581,1 -1582,69564,0,1582,1 -1583,80413,0,1583,1 -1584,84513,0,1584,1 -1585,65308,0,1585,1 -1586,71241,0,1586,1 -1587,31553,0,1587,1 -1588,28694,0,1588,1 -1589,33391,0,1589,1 -1590,42299,0,1590,1 -1591,89925,0,1591,1 -1592,32053,0,1592,1 -1593,74976,0,1593,1 -1594,53809,0,1594,1 -1595,82144,0,1595,1 -1596,74354,0,1596,1 -1597,73300,0,1597,1 -1598,41682,0,1598,1 -1599,36682,0,1599,1 -1600,49256,0,1600,1 -1601,56461,1,1601,1 -1602,11914,0,1602,1 -1603,48665,0,1603,1 -1604,32264,1,1604,1 -1605,13035,0,1605,1 -1606,73035,0,1606,1 -1607,11999,0,1607,1 -1608,12454,0,1608,1 -1609,68899,0,1609,1 -1610,44762,1,1610,1 -1611,47770,0,1611,1 -1612,45222,0,1612,1 -1613,60796,0,1613,1 -1614,42795,0,1614,1 -1615,51563,1,1615,1 -1616,11425,0,1616,1 -1617,57387,1,1617,1 -1618,87597,0,1618,1 -1619,15252,1,1619,1 -1620,81274,0,1620,1 -1621,40129,0,1621,1 -1622,35319,0,1622,1 -1623,60494,0,1623,1 -1624,19886,1,1624,1 -1625,43254,0,1625,1 -1626,25709,1,1626,1 -1627,84342,0,1627,1 -1628,37611,0,1628,1 -1629,48359,0,1629,1 -1630,60192,1,1630,1 -1631,21155,0,1631,1 -1632,39697,0,1632,1 -1633,41997,0,1633,1 -1634,73143,0,1634,1 -1635,75443,0,1635,1 -1636,62200,0,1636,1 -1637,17669,1,1637,1 -1638,54884,0,1638,1 -1639,10894,0,1639,1 -1640,67282,0,1640,1 -1641,40446,0,1641,1 -1642,82180,0,1642,1 -1643,85713,0,1643,1 -1644,12905,0,1644,1 -1645,57222,0,1645,1 -1646,43672,0,1646,1 -1647,26119,0,1647,1 -1648,48684,0,1648,1 -1649,28039,0,1649,1 -1650,83574,0,1650,1 -1651,24558,0,1651,1 -1652,67141,0,1652,1 -1653,44961,0,1653,1 -1654,41153,0,1654,1 -1655,53581,0,1655,1 -1656,14813,0,1656,1 -1657,65390,0,1657,1 -1658,23978,0,1658,1 -1659,63751,0,1659,1 -1660,31395,0,1660,1 -1661,20926,1,1661,1 -1662,50606,0,1662,1 -1663,46953,0,1663,1 -1664,89985,0,1664,1 -1665,67108,0,1665,1 -1666,52205,0,1666,1 -1667,88627,0,1667,1 -1668,52277,0,1668,1 -1669,21680,0,1669,1 -1670,70001,0,1670,1 -1671,85290,0,1671,1 -1672,27706,0,1672,1 -1673,68382,0,1673,1 -1674,33440,0,1674,1 -1675,12055,0,1675,1 -1676,83235,1,1676,1 -1677,24574,0,1677,1 -1678,37195,0,1678,1 -1679,25495,0,1679,1 -1680,49801,0,1680,1 -1681,36072,0,1681,1 -1682,77935,0,1682,1 -1683,57611,1,1683,1 -1684,71404,0,1684,1 -1685,70160,0,1685,1 -1686,34582,0,1686,1 -1687,72055,1,1687,1 -1688,22104,0,1688,1 -1689,24738,0,1689,1 -1690,73618,0,1690,1 -1691,51981,0,1691,1 -1692,71346,1,1692,1 -1693,83575,0,1693,1 -1694,83256,0,1694,1 -1695,22706,0,1695,1 -1696,45337,0,1696,1 -1697,24509,0,1697,1 -1698,63777,0,1698,1 -1699,50065,0,1699,1 -1700,45597,0,1700,1 -1701,56961,0,1701,1 -1702,19982,0,1702,1 -1703,41816,1,1703,1 -1704,20139,0,1704,1 -1705,45123,0,1705,1 -1706,15133,0,1706,1 -1707,24763,0,1707,1 -1708,25887,0,1708,1 -1709,41825,0,1709,1 -1710,86573,0,1710,1 -1711,46795,1,1711,1 -1712,15672,0,1712,1 -1713,46433,0,1713,1 -1714,85008,1,1714,1 -1715,46202,0,1715,1 -1716,24393,0,1716,1 -1717,85334,0,1717,1 -1718,48071,0,1718,1 -1719,10755,0,1719,1 -1720,37480,0,1720,1 -1721,66751,0,1721,1 -1722,33869,0,1722,1 -1723,28560,1,1723,1 -1724,77244,0,1724,1 -1725,63105,0,1725,1 -1726,45476,0,1726,1 -1727,35535,0,1727,1 -1728,55912,1,1728,1 -1729,76934,0,1729,1 -1730,78338,1,1730,1 -1731,19355,0,1731,1 -1732,49192,0,1732,1 -1733,12022,0,1733,1 -1734,45600,0,1734,1 -1735,58196,0,1735,1 -1736,42207,0,1736,1 -1737,39996,0,1737,1 -1738,64018,0,1738,1 -1739,16370,0,1739,1 -1740,89617,0,1740,1 -1741,38297,0,1741,1 -1742,77892,0,1742,1 -1743,45543,0,1743,1 -1744,60231,0,1744,1 -1745,71584,1,1745,1 -1746,32191,0,1746,1 -1747,80179,0,1747,1 -1748,69596,0,1748,1 -1749,18410,0,1749,1 -1750,86835,0,1750,1 -1751,56607,0,1751,1 -1752,44885,0,1752,1 -1753,59136,1,1753,1 -1754,25864,0,1754,1 -1755,32600,1,1755,1 -1756,55726,0,1756,1 -1757,85261,0,1757,1 -1758,70871,0,1758,1 -1759,66330,0,1759,1 -1760,21515,0,1760,1 -1761,25248,0,1761,1 -1762,38460,0,1762,1 -1763,31070,0,1763,1 -1764,71704,0,1764,1 -1765,61655,0,1765,1 -1766,77379,1,1766,1 -1767,44277,0,1767,1 -1768,39205,0,1768,1 -1769,16966,1,1769,1 -1770,65282,1,1770,1 -1771,47327,1,1771,1 -1772,82728,0,1772,1 -1773,29346,0,1773,1 -1774,60896,1,1774,1 -1775,89379,0,1775,1 -1776,68805,0,1776,1 -1777,64790,0,1777,1 -1778,14760,0,1778,1 -1779,41247,0,1779,1 -1780,15496,1,1780,1 -1781,30149,0,1781,1 -1782,83597,1,1782,1 -1783,23810,1,1783,1 -1784,51822,0,1784,1 -1785,18041,1,1785,1 -1786,38007,0,1786,1 -1787,85628,0,1787,1 -1788,54857,0,1788,1 -1789,23847,0,1789,1 -1790,54196,0,1790,1 -1791,29802,0,1791,1 -1792,53290,0,1792,1 -1793,48187,0,1793,1 -1794,23192,0,1794,1 -1795,84502,0,1795,1 -1796,25759,0,1796,1 -1797,38454,0,1797,1 -1798,33678,1,1798,1 -1799,71323,0,1799,1 -1800,20937,0,1800,1 -1801,67173,0,1801,1 -1802,12332,0,1802,1 -1803,55470,0,1803,1 -1804,71354,0,1804,1 -1805,37803,0,1805,1 -1806,40425,0,1806,1 -1807,13134,0,1807,1 -1808,72863,0,1808,1 -1809,42836,0,1809,1 -1810,17355,0,1810,1 -1811,34838,0,1811,1 -1812,32606,0,1812,1 -1813,79231,0,1813,1 -1814,26947,1,1814,1 -1815,64885,0,1815,1 -1816,35518,1,1816,1 -1817,70964,0,1817,1 -1818,33351,0,1818,1 -1819,67058,0,1819,1 -1820,64173,1,1820,1 -1821,43564,1,1821,1 -1822,13478,0,1822,1 -1823,35680,0,1823,1 -1824,43555,0,1824,1 -1825,89339,0,1825,1 -1826,48739,0,1826,1 -1827,76985,1,1827,1 -1828,57902,0,1828,1 -1829,88534,0,1829,1 -1830,42132,1,1830,1 -1831,43004,0,1831,1 -1832,15775,0,1832,1 -1833,64517,0,1833,1 -1834,76381,0,1834,1 -1835,69318,0,1835,1 -1836,10612,1,1836,1 -1837,12872,0,1837,1 -1838,15823,0,1838,1 -1839,10191,0,1839,1 -1840,11544,0,1840,1 -1841,48068,0,1841,1 -1842,69495,0,1842,1 -1843,23027,0,1843,1 -1844,67015,0,1844,1 -1845,39489,0,1845,1 -1846,10177,0,1846,1 -1847,53197,0,1847,1 -1848,12925,0,1848,1 -1849,20887,1,1849,1 -1850,17135,0,1850,1 -1851,32812,0,1851,1 -1852,29011,0,1852,1 -1853,26013,0,1853,1 -1854,72401,1,1854,1 -1855,55911,1,1855,1 -1856,73228,0,1856,1 -1857,77433,1,1857,1 -1858,14053,0,1858,1 -1859,62709,0,1859,1 -1860,65222,0,1860,1 -1861,75661,0,1861,1 -1862,83662,1,1862,1 -1863,89027,0,1863,1 -1864,39614,0,1864,1 -1865,31432,1,1865,1 -1866,49378,0,1866,1 -1867,18985,0,1867,1 -1868,46071,0,1868,1 -1869,39805,0,1869,1 -1870,47496,0,1870,1 -1871,28024,0,1871,1 -1872,85245,1,1872,1 -1873,46699,0,1873,1 -1874,62216,1,1874,1 -1875,67418,0,1875,1 -1876,22775,0,1876,1 -1877,25002,0,1877,1 -1878,40151,0,1878,1 -1879,24279,1,1879,1 -1880,80573,1,1880,1 -1881,28039,0,1881,1 -1882,42415,0,1882,1 -1883,31309,0,1883,1 -1884,13306,1,1884,1 -1885,24729,0,1885,1 -1886,64075,0,1886,1 -1887,64304,1,1887,1 -1888,71972,0,1888,1 -1889,83919,0,1889,1 -1890,12103,0,1890,1 -1891,43380,0,1891,1 -1892,41237,0,1892,1 -1893,86099,0,1893,1 -1894,15307,0,1894,1 -1895,54658,0,1895,1 -1896,10741,0,1896,1 -1897,85916,0,1897,1 -1898,22228,0,1898,1 -1899,47285,0,1899,1 -1900,76761,1,1900,1 -1901,66175,0,1901,1 -1902,35762,0,1902,1 -1903,43689,0,1903,1 -1904,28876,0,1904,1 -1905,35441,0,1905,1 -1906,62543,0,1906,1 -1907,36515,0,1907,1 -1908,74916,1,1908,1 -1909,83718,0,1909,1 -1910,65162,0,1910,1 -1911,55776,0,1911,1 -1912,19791,0,1912,1 -1913,33548,0,1913,1 -1914,64093,0,1914,1 -1915,77023,1,1915,1 -1916,80501,0,1916,1 -1917,72879,1,1917,1 -1918,66849,1,1918,1 -1919,11928,0,1919,1 -1920,10411,0,1920,1 -1921,51803,0,1921,1 -1922,11653,0,1922,1 -1923,84703,0,1923,1 -1924,83818,0,1924,1 -1925,73949,0,1925,1 -1926,57107,0,1926,1 -1927,40492,1,1927,1 -1928,18715,0,1928,1 -1929,71477,0,1929,1 -1930,36752,0,1930,1 -1931,57768,0,1931,1 -1932,70167,0,1932,1 -1933,43357,0,1933,1 -1934,81239,1,1934,1 -1935,85479,1,1935,1 -1936,45909,0,1936,1 -1937,48877,0,1937,1 -1938,46218,1,1938,1 -1939,47381,0,1939,1 -1940,44559,0,1940,1 -1941,74532,0,1941,1 -1942,57889,1,1942,1 -1943,15546,0,1943,1 -1944,75218,1,1944,1 -1945,11121,0,1945,1 -1946,40771,0,1946,1 -1947,72191,1,1947,1 -1948,55745,1,1948,1 -1949,76673,0,1949,1 -1950,17340,0,1950,1 -1951,53244,0,1951,1 -1952,59674,0,1952,1 -1953,14983,0,1953,1 -1954,49136,1,1954,1 -1955,64262,0,1955,1 -1956,34770,0,1956,1 -1957,36336,1,1957,1 -1958,15969,0,1958,1 -1959,47830,0,1959,1 -1960,15006,0,1960,1 -1961,24998,1,1961,1 -1962,68855,1,1962,1 -1963,39726,1,1963,1 -1964,69095,0,1964,1 -1965,74393,0,1965,1 -1966,55283,1,1966,1 -1967,63019,0,1967,1 -1968,60826,0,1968,1 -1969,83731,0,1969,1 -1970,58747,1,1970,1 -1971,15176,0,1971,1 -1972,19730,0,1972,1 -1973,78378,0,1973,1 -1974,21494,0,1974,1 -1975,38469,0,1975,1 -1976,57962,0,1976,1 -1977,14557,0,1977,1 -1978,50272,0,1978,1 -1979,23593,0,1979,1 -1980,22694,0,1980,1 -1981,11227,0,1981,1 -1982,44910,0,1982,1 -1983,32881,0,1983,1 -1984,45516,0,1984,1 -1985,69623,0,1985,1 -1986,41871,1,1986,1 -1987,33484,0,1987,1 -1988,76745,0,1988,1 -1989,59976,0,1989,1 -1990,40787,0,1990,1 -1991,27844,1,1991,1 -1992,10161,0,1992,1 -1993,41325,0,1993,1 -1994,84148,0,1994,1 -1995,78468,0,1995,1 -1996,78271,1,1996,1 -1997,75445,0,1997,1 -1998,54942,0,1998,1 -1999,79177,0,1999,1 -2000,41411,0,2000,1 -2001,14096,0,2001,1 -2002,26366,1,2002,1 -2003,55872,0,2003,1 -2004,23379,0,2004,1 -2005,47019,1,2005,1 -2006,65147,1,2006,1 -2007,32042,0,2007,1 -2008,39489,0,2008,1 -2009,42638,0,2009,1 -2010,15558,0,2010,1 -2011,66385,1,2011,1 -2012,72801,0,2012,1 -2013,73739,0,2013,1 -2014,83777,0,2014,1 -2015,39163,1,2015,1 -2016,38684,0,2016,1 -2017,29788,0,2017,1 -2018,69211,0,2018,1 -2019,31462,0,2019,1 -2020,37101,0,2020,1 -2021,77881,1,2021,1 -2022,24612,0,2022,1 -2023,65012,1,2023,1 -2024,10114,0,2024,1 -2025,43442,1,2025,1 -2026,43753,0,2026,1 -2027,74430,0,2027,1 -2028,83668,0,2028,1 -2029,34386,0,2029,1 -2030,24483,0,2030,1 -2031,23307,0,2031,1 -2032,69474,0,2032,1 -2033,11239,0,2033,1 -2034,59360,0,2034,1 -2035,85201,0,2035,1 -2036,21837,0,2036,1 -2037,84828,1,2037,1 -2038,26207,0,2038,1 -2039,85193,0,2039,1 -2040,85187,0,2040,1 -2041,70029,0,2041,1 -2042,23574,0,2042,1 -2043,88233,0,2043,1 -2044,81547,1,2044,1 -2045,48418,0,2045,1 -2046,28177,0,2046,1 -2047,65853,0,2047,1 -2048,43849,1,2048,1 -2049,33734,0,2049,1 -2050,23614,0,2050,1 -2051,44259,0,2051,1 -2052,66042,0,2052,1 -2053,76016,0,2053,1 -2054,48141,0,2054,1 -2055,44515,1,2055,1 -2056,63696,0,2056,1 -2057,74271,0,2057,1 -2058,58175,0,2058,1 -2059,37406,0,2059,1 -2060,49109,0,2060,1 -2061,60365,0,2061,1 -2062,30336,1,2062,1 -2063,51503,0,2063,1 -2064,74975,0,2064,1 -2065,67691,1,2065,1 -2066,55864,1,2066,1 -2067,10178,0,2067,1 -2068,82862,0,2068,1 -2069,82136,0,2069,1 -2070,30976,0,2070,1 -2071,61920,0,2071,1 -2072,84482,0,2072,1 -2073,59654,0,2073,1 -2074,74168,0,2074,1 -2075,31408,0,2075,1 -2076,64624,0,2076,1 -2077,41472,0,2077,1 -2078,38863,0,2078,1 -2079,40703,0,2079,1 -2080,69669,0,2080,1 -2081,83229,0,2081,1 -2082,54260,1,2082,1 -2083,34035,0,2083,1 -2084,73319,1,2084,1 -2085,30352,1,2085,1 -2086,36877,1,2086,1 -2087,77378,0,2087,1 -2088,56038,0,2088,1 -2089,64440,0,2089,1 -2090,72773,0,2090,1 -2091,85299,0,2091,1 -2092,28650,0,2092,1 -2093,72275,0,2093,1 -2094,18586,0,2094,1 -2095,89544,1,2095,1 -2096,76243,0,2096,1 -2097,67765,0,2097,1 -2098,40569,0,2098,1 -2099,72668,1,2099,1 -2100,12872,0,2100,1 -2101,49835,0,2101,1 -2102,76234,0,2102,1 -2103,81569,0,2103,1 -2104,26882,0,2104,1 -2105,18189,0,2105,1 -2106,10600,1,2106,1 -2107,79637,0,2107,1 -2108,21892,0,2108,1 -2109,44712,0,2109,1 -2110,20905,0,2110,1 -2111,55890,0,2111,1 -2112,42687,0,2112,1 -2113,81414,0,2113,1 -2114,60215,0,2114,1 -2115,47150,1,2115,1 -2116,50436,0,2116,1 -2117,35723,0,2117,1 -2118,78529,0,2118,1 -2119,21069,0,2119,1 -2120,76686,0,2120,1 -2121,72418,1,2121,1 -2122,44756,0,2122,1 -2123,58716,0,2123,1 -2124,64529,0,2124,1 -2125,87844,0,2125,1 -2126,53549,0,2126,1 -2127,79402,0,2127,1 -2128,14966,0,2128,1 -2129,89030,0,2129,1 -2130,69945,0,2130,1 -2131,15998,0,2131,1 -2132,55246,0,2132,1 -2133,34730,0,2133,1 -2134,89350,0,2134,1 -2135,79294,1,2135,1 -2136,82832,0,2136,1 -2137,21631,1,2137,1 -2138,51837,0,2138,1 -2139,45766,0,2139,1 -2140,15223,0,2140,1 -2141,89670,1,2141,1 -2142,24042,0,2142,1 -2143,50143,1,2143,1 -2144,12910,0,2144,1 -2145,30628,1,2145,1 -2146,24757,0,2146,1 -2147,24910,0,2147,1 -2148,17005,0,2148,1 -2149,81085,0,2149,1 -2150,43027,0,2150,1 -2151,46031,0,2151,1 -2152,63470,0,2152,1 -2153,27915,0,2153,1 -2154,43081,0,2154,1 -2155,44697,0,2155,1 -2156,30745,1,2156,1 -2157,26785,1,2157,1 -2158,20188,0,2158,1 -2159,24705,0,2159,1 -2160,43172,0,2160,1 -2161,23913,0,2161,1 -2162,32324,1,2162,1 -2163,76552,0,2163,1 -2164,36804,0,2164,1 -2165,70013,0,2165,1 -2166,34843,0,2166,1 -2167,16472,0,2167,1 -2168,10379,0,2168,1 -2169,64275,0,2169,1 -2170,65281,0,2170,1 -2171,55985,0,2171,1 -2172,35554,0,2172,1 -2173,69868,0,2173,1 -2174,71629,0,2174,1 -2175,29244,1,2175,1 -2176,44467,0,2176,1 -2177,55018,1,2177,1 -2178,69510,0,2178,1 -2179,32782,0,2179,1 -2180,85292,0,2180,1 -2181,15505,0,2181,1 -2182,54712,0,2182,1 -2183,86986,0,2183,1 -2184,30042,0,2184,1 -2185,28012,1,2185,1 -2186,24708,0,2186,1 -2187,57119,0,2187,1 -2188,21989,0,2188,1 -2189,23613,1,2189,1 -2190,82957,0,2190,1 -2191,48337,0,2191,1 -2192,74663,0,2192,1 -2193,44251,0,2193,1 -2194,53231,0,2194,1 -2195,42195,0,2195,1 -2196,77868,1,2196,1 -2197,15357,0,2197,1 -2198,48614,0,2198,1 -2199,28807,1,2199,1 -2200,28063,0,2200,1 -2201,88284,0,2201,1 -2202,84395,0,2202,1 -2203,55672,0,2203,1 -2204,69243,0,2204,1 -2205,40820,0,2205,1 -2206,68818,0,2206,1 -2207,42820,0,2207,1 -2208,64170,0,2208,1 -2209,29810,1,2209,1 -2210,71174,0,2210,1 -2211,88890,0,2211,1 -2212,52538,0,2212,1 -2213,70977,1,2213,1 -2214,35693,1,2214,1 -2215,64042,0,2215,1 -2216,26396,0,2216,1 -2217,46508,0,2217,1 -2218,57623,0,2218,1 -2219,11951,1,2219,1 -2220,28470,0,2220,1 -2221,54432,1,2221,1 -2222,84675,0,2222,1 -2223,73859,0,2223,1 -2224,30708,0,2224,1 -2225,55246,0,2225,1 -2226,19040,0,2226,1 -2227,70118,0,2227,1 -2228,26993,0,2228,1 -2229,29891,1,2229,1 -2230,82048,0,2230,1 -2231,73417,1,2231,1 -2232,85990,0,2232,1 -2233,65597,0,2233,1 -2234,18682,0,2234,1 -2235,86634,0,2235,1 -2236,65813,0,2236,1 -2237,49139,0,2237,1 -2238,75277,0,2238,1 -2239,50409,0,2239,1 -2240,49523,0,2240,1 -2241,43955,0,2241,1 -2242,53427,0,2242,1 -2243,42798,1,2243,1 -2244,46738,0,2244,1 -2245,38367,0,2245,1 -2246,34563,0,2246,1 -2247,39888,0,2247,1 -2248,33645,0,2248,1 -2249,21655,0,2249,1 -2250,63476,0,2250,1 -2251,78864,0,2251,1 -2252,88304,0,2252,1 -2253,43068,0,2253,1 -2254,23054,0,2254,1 -2255,53134,0,2255,1 -2256,33594,0,2256,1 -2257,69364,0,2257,1 -2258,62459,0,2258,1 -2259,75543,0,2259,1 -2260,39796,0,2260,1 -2261,74121,0,2261,1 -2262,81926,0,2262,1 -2263,38365,0,2263,1 -2264,52571,0,2264,1 -2265,21799,0,2265,1 -2266,86194,0,2266,1 -2267,30919,0,2267,1 -2268,25042,0,2268,1 -2269,33134,0,2269,1 -2270,49419,0,2270,1 -2271,24619,0,2271,1 -2272,34000,1,2272,1 -2273,63545,0,2273,1 -2274,64982,0,2274,1 -2275,29119,1,2275,1 -2276,66553,0,2276,1 -2277,22586,0,2277,1 -2278,30617,1,2278,1 -2279,38066,0,2279,1 -2280,58851,0,2280,1 -2281,23487,0,2281,1 -2282,89204,0,2282,1 -2283,38907,0,2283,1 -2284,79722,0,2284,1 -2285,17114,0,2285,1 -2286,39574,0,2286,1 -2287,22015,0,2287,1 -2288,34064,0,2288,1 -2289,89530,0,2289,1 -2290,22783,1,2290,1 -2291,54807,1,2291,1 -2292,10577,0,2292,1 -2293,44551,0,2293,1 -2294,59931,0,2294,1 -2295,38217,0,2295,1 -2296,36091,0,2296,1 -2297,68586,0,2297,1 -2298,13631,0,2298,1 -2299,63636,0,2299,1 -2300,80595,1,2300,1 -2301,61839,0,2301,1 -2302,81633,0,2302,1 -2303,71482,0,2303,1 -2304,78026,0,2304,1 -2305,14408,0,2305,1 -2306,49978,0,2306,1 -2307,67816,1,2307,1 -2308,70096,0,2308,1 -2309,70523,0,2309,1 -2310,14685,0,2310,1 -2311,22609,0,2311,1 -2312,22963,0,2312,1 -2313,15121,0,2313,1 -2314,19504,0,2314,1 -2315,32505,0,2315,1 -2316,12971,0,2316,1 -2317,42247,0,2317,1 -2318,67272,0,2318,1 -2319,38540,0,2319,1 -2320,71420,0,2320,1 -2321,72416,0,2321,1 -2322,72072,0,2322,1 -2323,88481,0,2323,1 -2324,36981,0,2324,1 -2325,33582,1,2325,1 -2326,29981,1,2326,1 -2327,37376,1,2327,1 -2328,89881,0,2328,1 -2329,41215,0,2329,1 -2330,27300,0,2330,1 -2331,81973,0,2331,1 -2332,69916,0,2332,1 -2333,72944,0,2333,1 -2334,57439,1,2334,1 -2335,15206,0,2335,1 -2336,42417,0,2336,1 -2337,82211,0,2337,1 -2338,88102,0,2338,1 -2339,54152,0,2339,1 -2340,82860,0,2340,1 -2341,43241,0,2341,1 -2342,42410,0,2342,1 -2343,63573,0,2343,1 -2344,71491,0,2344,1 -2345,85959,0,2345,1 -2346,45222,0,2346,1 -2347,51056,1,2347,1 -2348,83015,0,2348,1 -2349,45306,0,2349,1 -2350,29036,0,2350,1 -2351,81719,0,2351,1 -2352,66765,0,2352,1 -2353,43948,0,2353,1 -2354,35808,0,2354,1 -2355,73766,0,2355,1 -2356,77355,1,2356,1 -2357,84762,1,2357,1 -2358,20002,0,2358,1 -2359,76532,0,2359,1 -2360,21594,0,2360,1 -2361,51290,0,2361,1 -2362,27020,0,2362,1 -2363,52206,0,2363,1 -2364,29007,0,2364,1 -2365,77526,0,2365,1 -2366,42977,1,2366,1 -2367,74295,0,2367,1 -2368,24418,0,2368,1 -2369,10795,1,2369,1 -2370,17522,0,2370,1 -2371,81533,0,2371,1 -2372,25068,1,2372,1 -2373,26760,1,2373,1 -2374,25609,0,2374,1 -2375,84652,1,2375,1 -2376,11098,0,2376,1 -2377,29161,0,2377,1 -2378,70743,0,2378,1 -2379,83980,0,2379,1 -2380,47544,0,2380,1 -2381,37822,0,2381,1 -2382,88440,0,2382,1 -2383,70246,0,2383,1 -2384,70759,0,2384,1 -2385,46247,0,2385,1 -2386,86779,0,2386,1 -2387,17345,1,2387,1 -2388,63959,0,2388,1 -2389,38716,0,2389,1 -2390,88817,0,2390,1 -2391,57144,0,2391,1 -2392,46674,0,2392,1 -2393,21136,0,2393,1 -2394,53503,1,2394,1 -2395,17959,0,2395,1 -2396,33914,0,2396,1 -2397,85676,0,2397,1 -2398,72542,1,2398,1 -2399,70082,0,2399,1 -2400,77693,0,2400,1 -2401,22571,1,2401,1 -2402,69415,0,2402,1 -2403,26972,1,2403,1 -2404,23142,0,2404,1 -2405,68281,1,2405,1 -2406,64512,1,2406,1 -2407,47185,0,2407,1 -2408,56798,0,2408,1 -2409,51473,0,2409,1 -2410,19538,0,2410,1 -2411,56554,1,2411,1 -2412,74632,0,2412,1 -2413,60035,0,2413,1 -2414,10382,0,2414,1 -2415,74965,0,2415,1 -2416,31512,0,2416,1 -2417,46280,0,2417,1 -2418,13452,0,2418,1 -2419,76814,0,2419,1 -2420,62959,0,2420,1 -2421,47281,0,2421,1 -2422,77200,0,2422,1 -2423,44931,0,2423,1 -2424,58760,0,2424,1 -2425,56578,1,2425,1 -2426,18055,0,2426,1 -2427,82361,0,2427,1 -2428,49396,0,2428,1 -2429,77303,0,2429,1 -2430,85261,0,2430,1 -2431,32912,0,2431,1 -2432,12762,0,2432,1 -2433,24503,0,2433,1 -2434,31281,0,2434,1 -2435,47428,0,2435,1 -2436,48580,0,2436,1 -2437,57356,0,2437,1 -2438,82498,0,2438,1 -2439,15548,0,2439,1 -2440,41177,0,2440,1 -2441,25397,1,2441,1 -2442,22258,0,2442,1 -2443,79525,0,2443,1 -2444,41313,0,2444,1 -2445,31894,0,2445,1 -2446,81465,0,2446,1 -2447,19932,0,2447,1 -2448,33026,1,2448,1 -2449,79450,0,2449,1 -2450,73012,0,2450,1 -2451,25357,0,2451,1 -2452,83531,0,2452,1 -2453,31592,0,2453,1 -2454,28187,0,2454,1 -2455,66702,0,2455,1 -2456,23269,0,2456,1 -2457,82346,0,2457,1 -2458,29613,0,2458,1 -2459,43288,1,2459,1 -2460,25160,0,2460,1 -2461,56339,0,2461,1 -2462,55112,0,2462,1 -2463,73043,0,2463,1 -2464,76794,0,2464,1 -2465,32076,0,2465,1 -2466,25544,0,2466,1 -2467,57407,0,2467,1 -2468,24196,0,2468,1 -2469,72409,0,2469,1 -2470,73470,0,2470,1 -2471,80757,1,2471,1 -2472,82926,0,2472,1 -2473,66775,1,2473,1 -2474,48453,0,2474,1 -2475,85451,0,2475,1 -2476,60334,0,2476,1 -2477,72564,0,2477,1 -2478,61096,0,2478,1 -2479,47857,1,2479,1 -2480,63044,0,2480,1 -2481,53373,0,2481,1 -2482,10454,1,2482,1 -2483,58332,0,2483,1 -2484,52374,0,2484,1 -2485,27283,0,2485,1 -2486,82387,1,2486,1 -2487,78889,0,2487,1 -2488,43212,0,2488,1 -2489,14150,0,2489,1 -2490,88201,0,2490,1 -2491,80724,0,2491,1 -2492,35155,1,2492,1 -2493,21555,0,2493,1 -2494,23760,0,2494,1 -2495,21515,0,2495,1 -2496,37470,0,2496,1 -2497,27015,0,2497,1 -2498,21459,1,2498,1 -2499,25239,0,2499,1 -2500,41938,1,2500,1 -2501,50056,0,2501,1 -2502,19949,0,2502,1 -2503,80518,0,2503,1 -2504,61449,1,2504,1 -2505,27310,0,2505,1 -2506,48717,0,2506,1 -2507,63701,0,2507,1 -2508,37126,0,2508,1 -2509,87041,0,2509,1 -2510,43904,0,2510,1 -2511,19162,0,2511,1 -2512,87835,0,2512,1 -2513,80166,0,2513,1 -2514,51402,0,2514,1 -2515,48017,0,2515,1 -2516,68922,0,2516,1 -2517,64894,0,2517,1 -2518,43800,0,2518,1 -2519,66243,1,2519,1 -2520,14686,0,2520,1 -2521,26030,0,2521,1 -2522,39295,0,2522,1 -2523,41656,0,2523,1 -2524,64907,0,2524,1 -2525,75366,0,2525,1 -2526,51904,0,2526,1 -2527,76624,1,2527,1 -2528,71960,0,2528,1 -2529,71323,0,2529,1 -2530,85585,0,2530,1 -2531,56062,0,2531,1 -2532,39973,1,2532,1 -2533,78776,1,2533,1 -2534,37510,0,2534,1 -2535,85485,0,2535,1 -2536,39157,1,2536,1 -2537,52736,0,2537,1 -2538,22639,0,2538,1 -2539,43200,0,2539,1 -2540,26673,0,2540,1 -2541,47964,0,2541,1 -2542,25708,0,2542,1 -2543,26840,0,2543,1 -2544,40420,1,2544,1 -2545,25917,1,2545,1 -2546,68048,1,2546,1 -2547,48453,0,2547,1 -2548,20285,0,2548,1 -2549,11865,0,2549,1 -2550,45665,0,2550,1 -2551,30913,0,2551,1 -2552,38811,0,2552,1 -2553,15820,1,2553,1 -2554,39715,0,2554,1 -2555,38959,0,2555,1 -2556,54896,0,2556,1 -2557,62107,0,2557,1 -2558,86113,0,2558,1 -2559,25434,1,2559,1 -2560,43418,0,2560,1 -2561,79117,0,2561,1 -2562,57494,0,2562,1 -2563,65957,0,2563,1 -2564,51864,0,2564,1 -2565,53522,0,2565,1 -2566,87449,0,2566,1 -2567,71665,0,2567,1 -2568,65040,0,2568,1 -2569,87474,0,2569,1 -2570,33283,1,2570,1 -2571,17733,0,2571,1 -2572,66663,0,2572,1 -2573,25985,0,2573,1 -2574,80275,0,2574,1 -2575,37197,1,2575,1 -2576,31471,0,2576,1 -2577,37027,0,2577,1 -2578,44464,1,2578,1 -2579,45008,0,2579,1 -2580,30595,0,2580,1 -2581,58512,1,2581,1 -2582,56427,1,2582,1 -2583,80738,0,2583,1 -2584,87947,0,2584,1 -2585,77886,0,2585,1 -2586,81157,0,2586,1 -2587,85251,0,2587,1 -2588,84592,0,2588,1 -2589,63858,0,2589,1 -2590,47190,0,2590,1 -2591,69419,0,2591,1 -2592,64097,1,2592,1 -2593,47991,0,2593,1 -2594,10857,0,2594,1 -2595,57733,0,2595,1 -2596,64696,0,2596,1 -2597,32096,1,2597,1 -2598,89730,0,2598,1 -2599,79100,0,2599,1 -2600,69366,0,2600,1 -2601,26943,0,2601,1 -2602,42512,1,2602,1 -2603,80723,0,2603,1 -2604,28380,0,2604,1 -2605,47356,0,2605,1 -2606,30207,0,2606,1 -2607,80065,0,2607,1 -2608,79131,0,2608,1 -2609,51167,0,2609,1 -2610,65361,0,2610,1 -2611,76401,0,2611,1 -2612,45894,0,2612,1 -2613,43330,0,2613,1 -2614,47675,0,2614,1 -2615,79943,0,2615,1 -2616,18916,1,2616,1 -2617,42202,0,2617,1 -2618,31536,0,2618,1 -2619,31735,0,2619,1 -2620,57562,0,2620,1 -2621,59641,0,2621,1 -2622,51379,1,2622,1 -2623,19476,0,2623,1 -2624,31777,1,2624,1 -2625,29746,0,2625,1 -2626,63923,0,2626,1 -2627,20233,0,2627,1 -2628,37973,0,2628,1 -2629,13955,0,2629,1 -2630,44664,1,2630,1 -2631,86754,0,2631,1 -2632,68126,0,2632,1 -2633,83706,0,2633,1 -2634,50176,0,2634,1 -2635,80807,0,2635,1 -2636,28723,0,2636,1 -2637,55124,0,2637,1 -2638,64864,1,2638,1 -2639,39992,0,2639,1 -2640,29494,0,2640,1 -2641,19501,0,2641,1 -2642,59436,1,2642,1 -2643,64450,0,2643,1 -2644,56822,0,2644,1 -2645,39549,0,2645,1 -2646,50958,0,2646,1 -2647,27073,0,2647,1 -2648,52824,0,2648,1 -2649,36621,0,2649,1 -2650,35489,1,2650,1 -2651,18727,1,2651,1 -2652,77199,1,2652,1 -2653,51352,0,2653,1 -2654,32341,0,2654,1 -2655,76790,0,2655,1 -2656,87761,0,2656,1 -2657,64157,0,2657,1 -2658,23361,0,2658,1 -2659,70543,0,2659,1 -2660,77820,0,2660,1 -2661,41819,1,2661,1 -2662,24387,0,2662,1 -2663,37516,1,2663,1 -2664,21355,0,2664,1 -2665,78083,0,2665,1 -2666,75121,0,2666,1 -2667,57201,0,2667,1 -2668,68676,1,2668,1 -2669,52570,0,2669,1 -2670,32394,0,2670,1 -2671,68072,1,2671,1 -2672,19215,0,2672,1 -2673,32987,0,2673,1 -2674,16100,0,2674,1 -2675,68224,0,2675,1 -2676,39766,0,2676,1 -2677,74163,0,2677,1 -2678,75755,0,2678,1 -2679,44290,1,2679,1 -2680,30115,0,2680,1 -2681,35150,0,2681,1 -2682,72225,1,2682,1 -2683,70212,0,2683,1 -2684,82316,0,2684,1 -2685,73109,0,2685,1 -2686,12189,0,2686,1 -2687,64922,0,2687,1 -2688,46762,0,2688,1 -2689,72681,0,2689,1 -2690,87664,1,2690,1 -2691,57350,0,2691,1 -2692,20418,1,2692,1 -2693,89177,0,2693,1 -2694,64372,0,2694,1 -2695,20921,0,2695,1 -2696,68010,1,2696,1 -2697,64156,1,2697,1 -2698,43004,0,2698,1 -2699,76679,0,2699,1 -2700,52880,0,2700,1 -2701,64007,0,2701,1 -2702,16810,1,2702,1 -2703,17832,0,2703,1 -2704,23647,1,2704,1 -2705,56893,0,2705,1 -2706,87373,0,2706,1 -2707,61213,1,2707,1 -2708,80620,0,2708,1 -2709,81331,0,2709,1 -2710,30163,0,2710,1 -2711,44479,1,2711,1 -2712,73539,0,2712,1 -2713,66765,0,2713,1 -2714,66784,0,2714,1 -2715,40996,0,2715,1 -2716,76694,0,2716,1 -2717,43662,1,2717,1 -2718,58010,0,2718,1 -2719,75148,0,2719,1 -2720,89484,0,2720,1 -2721,13788,0,2721,1 -2722,62864,1,2722,1 -2723,88132,0,2723,1 -2724,39429,0,2724,1 -2725,69772,0,2725,1 -2726,18465,0,2726,1 -2727,66698,0,2727,1 -2728,75837,0,2728,1 -2729,70164,0,2729,1 -2730,74240,0,2730,1 -2731,80854,0,2731,1 -2732,83221,0,2732,1 -2733,43425,0,2733,1 -2734,68485,0,2734,1 -2735,82395,0,2735,1 -2736,27407,0,2736,1 -2737,58156,0,2737,1 -2738,76873,0,2738,1 -2739,51556,0,2739,1 -2740,72985,0,2740,1 -2741,70403,0,2741,1 -2742,83606,0,2742,1 -2743,43655,0,2743,1 -2744,23924,0,2744,1 -2745,53814,0,2745,1 -2746,46647,0,2746,1 -2747,68056,0,2747,1 -2748,27267,1,2748,1 -2749,19109,0,2749,1 -2750,47268,1,2750,1 -2751,61686,0,2751,1 -2752,23770,0,2752,1 -2753,67938,0,2753,1 -2754,68796,0,2754,1 -2755,78140,0,2755,1 -2756,64287,0,2756,1 -2757,48995,0,2757,1 -2758,64526,0,2758,1 -2759,49184,0,2759,1 -2760,46651,0,2760,1 -2761,38481,0,2761,1 -2762,45317,0,2762,1 -2763,61885,0,2763,1 -2764,15075,0,2764,1 -2765,63067,0,2765,1 -2766,10540,0,2766,1 -2767,45815,0,2767,1 -2768,64831,0,2768,1 -2769,66080,0,2769,1 -2770,67702,0,2770,1 -2771,11263,0,2771,1 -2772,77542,0,2772,1 -2773,45900,0,2773,1 -2774,79874,0,2774,1 -2775,67459,0,2775,1 -2776,62094,0,2776,1 -2777,66834,0,2777,1 -2778,39363,1,2778,1 -2779,76953,0,2779,1 -2780,88202,0,2780,1 -2781,43635,1,2781,1 -2782,78702,0,2782,1 -2783,81519,0,2783,1 -2784,22250,0,2784,1 -2785,13220,1,2785,1 -2786,12556,0,2786,1 -2787,56089,0,2787,1 -2788,84635,0,2788,1 -2789,53226,0,2789,1 -2790,55727,0,2790,1 -2791,42887,0,2791,1 -2792,10243,0,2792,1 -2793,85964,0,2793,1 -2794,84000,0,2794,1 -2795,26323,0,2795,1 -2796,85101,0,2796,1 -2797,83235,0,2797,1 -2798,55743,0,2798,1 -2799,27817,1,2799,1 -2800,23712,1,2800,1 -2801,16285,0,2801,1 -2802,25824,0,2802,1 -2803,42263,0,2803,1 -2804,15206,0,2804,1 -2805,51126,0,2805,1 -2806,36800,1,2806,1 -2807,23876,0,2807,1 -2808,25390,0,2808,1 -2809,23814,0,2809,1 -2810,19727,1,2810,1 -2811,85214,0,2811,1 -2812,71688,0,2812,1 -2813,59723,0,2813,1 -2814,60729,0,2814,1 -2815,42343,0,2815,1 -2816,43986,0,2816,1 -2817,74122,0,2817,1 -2818,24519,0,2818,1 -2819,44451,0,2819,1 -2820,86627,0,2820,1 -2821,87599,0,2821,1 -2822,53192,0,2822,1 -2823,38866,0,2823,1 -2824,84558,0,2824,1 -2825,42242,0,2825,1 -2826,84286,0,2826,1 -2827,59184,0,2827,1 -2828,37951,1,2828,1 -2829,49397,1,2829,1 -2830,72700,0,2830,1 -2831,25603,1,2831,1 -2832,17955,0,2832,1 -2833,64556,0,2833,1 -2834,89016,0,2834,1 -2835,11475,1,2835,1 -2836,25356,1,2836,1 -2837,66647,0,2837,1 -2838,75613,0,2838,1 -2839,27513,0,2839,1 -2840,36249,0,2840,1 -2841,86822,1,2841,1 -2842,74318,0,2842,1 -2843,23536,0,2843,1 -2844,37689,0,2844,1 -2845,13273,0,2845,1 -2846,15197,0,2846,1 -2847,12540,0,2847,1 -2848,87811,0,2848,1 -2849,18833,1,2849,1 -2850,52874,1,2850,1 -2851,64730,0,2851,1 -2852,51564,0,2852,1 -2853,44872,0,2853,1 -2854,62401,0,2854,1 -2855,10487,0,2855,1 -2856,13190,0,2856,1 -2857,34938,0,2857,1 -2858,47239,0,2858,1 -2859,46661,0,2859,1 -2860,55843,0,2860,1 -2861,35135,0,2861,1 -2862,73468,0,2862,1 -2863,79322,0,2863,1 -2864,67084,0,2864,1 -2865,70116,0,2865,1 -2866,86607,0,2866,1 -2867,20174,1,2867,1 -2868,43030,0,2868,1 -2869,21559,0,2869,1 -2870,57342,0,2870,1 -2871,21536,0,2871,1 -2872,11928,1,2872,1 -2873,39684,0,2873,1 -2874,31308,0,2874,1 -2875,65819,0,2875,1 -2876,24193,0,2876,1 -2877,46781,0,2877,1 -2878,83093,0,2878,1 -2879,31972,0,2879,1 -2880,30094,0,2880,1 -2881,81754,0,2881,1 -2882,32787,0,2882,1 -2883,87444,0,2883,1 -2884,34204,0,2884,1 -2885,82120,0,2885,1 -2886,80531,0,2886,1 -2887,13461,0,2887,1 -2888,25345,0,2888,1 -2889,22278,0,2889,1 -2890,81787,0,2890,1 -2891,17638,0,2891,1 -2892,60531,0,2892,1 -2893,34666,1,2893,1 -2894,39020,1,2894,1 -2895,88728,0,2895,1 -2896,18704,0,2896,1 -2897,23977,1,2897,1 -2898,14835,0,2898,1 -2899,12382,0,2899,1 -2900,20532,0,2900,1 -2901,49752,0,2901,1 -2902,51052,0,2902,1 -2903,31845,0,2903,1 -2904,20300,0,2904,1 -2905,28034,0,2905,1 -2906,83873,1,2906,1 -2907,50074,0,2907,1 -2908,60478,0,2908,1 -2909,56006,0,2909,1 -2910,20980,0,2910,1 -2911,59677,0,2911,1 -2912,65886,0,2912,1 -2913,15610,0,2913,1 -2914,89667,0,2914,1 -2915,18874,0,2915,1 -2916,88513,0,2916,1 -2917,29050,1,2917,1 -2918,87292,0,2918,1 -2919,72763,1,2919,1 -2920,56005,1,2920,1 -2921,26052,0,2921,1 -2922,60557,0,2922,1 -2923,70627,1,2923,1 -2924,16658,0,2924,1 -2925,12021,0,2925,1 -2926,71640,0,2926,1 -2927,73331,0,2927,1 -2928,26984,1,2928,1 -2929,32130,0,2929,1 -2930,51195,0,2930,1 -2931,18256,0,2931,1 -2932,45545,0,2932,1 -2933,30194,0,2933,1 -2934,58790,0,2934,1 -2935,61186,0,2935,1 -2936,34900,0,2936,1 -2937,32830,0,2937,1 -2938,25964,0,2938,1 -2939,13260,0,2939,1 -2940,83271,0,2940,1 -2941,16402,0,2941,1 -2942,48797,0,2942,1 -2943,68497,0,2943,1 -2944,47197,0,2944,1 -2945,48780,0,2945,1 -2946,65353,0,2946,1 -2947,81915,0,2947,1 -2948,20299,1,2948,1 -2949,20451,0,2949,1 -2950,79617,1,2950,1 -2951,12303,0,2951,1 -2952,65657,0,2952,1 -2953,50496,0,2953,1 -2954,86497,0,2954,1 -2955,31527,1,2955,1 -2956,88787,0,2956,1 -2957,30175,0,2957,1 -2958,42519,1,2958,1 -2959,63788,0,2959,1 -2960,25467,0,2960,1 -2961,76003,0,2961,1 -2962,54633,0,2962,1 -2963,47956,0,2963,1 -2964,26048,0,2964,1 -2965,11639,0,2965,1 -2966,58137,0,2966,1 -2967,50224,0,2967,1 -2968,68888,0,2968,1 -2969,39184,0,2969,1 -2970,12216,0,2970,1 -2971,85656,0,2971,1 -2972,87024,0,2972,1 -2973,22172,0,2973,1 -2974,46385,1,2974,1 -2975,30443,0,2975,1 -2976,60902,0,2976,1 -2977,32550,0,2977,1 -2978,57233,0,2978,1 -2979,30486,0,2979,1 -2980,31616,1,2980,1 -2981,67760,1,2981,1 -2982,41382,1,2982,1 -2983,46070,0,2983,1 -2984,67535,0,2984,1 -2985,18946,0,2985,1 -2986,38887,0,2986,1 -2987,42050,0,2987,1 -2988,17065,0,2988,1 -2989,86956,0,2989,1 -2990,50546,0,2990,1 -2991,40671,0,2991,1 -2992,67397,0,2992,1 -2993,20712,0,2993,1 -2994,40930,0,2994,1 -2995,28970,0,2995,1 -2996,53623,0,2996,1 -2997,15390,0,2997,1 -2998,32845,0,2998,1 -2999,59972,0,2999,1 -3000,23291,0,3000,1 -3001,19386,0,3001,1 -3002,69214,0,3002,1 -3003,24376,0,3003,1 -3004,16770,0,3004,1 -3005,70097,0,3005,1 -3006,28812,0,3006,1 -3007,34114,0,3007,1 -3008,22433,1,3008,1 -3009,82062,0,3009,1 -3010,48767,0,3010,1 -3011,45210,0,3011,1 -3012,51222,0,3012,1 -3013,36430,0,3013,1 -3014,42103,0,3014,1 -3015,43184,0,3015,1 -3016,64727,0,3016,1 -3017,66298,1,3017,1 -3018,47114,0,3018,1 -3019,34799,0,3019,1 -3020,20042,1,3020,1 -3021,61628,0,3021,1 -3022,45874,0,3022,1 -3023,63978,0,3023,1 -3024,61227,0,3024,1 -3025,21577,0,3025,1 -3026,34148,1,3026,1 -3027,17451,0,3027,1 -3028,67272,0,3028,1 -3029,42764,0,3029,1 -3030,44695,0,3030,1 -3031,20660,0,3031,1 -3032,83552,0,3032,1 -3033,62620,0,3033,1 -3034,52607,0,3034,1 -3035,42620,1,3035,1 -3036,51202,0,3036,1 -3037,85128,1,3037,1 -3038,64236,0,3038,1 -3039,47124,0,3039,1 -3040,34352,0,3040,1 -3041,85618,0,3041,1 -3042,52546,1,3042,1 -3043,52392,0,3043,1 -3044,67133,0,3044,1 -3045,66945,0,3045,1 -3046,48609,1,3046,1 -3047,18492,0,3047,1 -3048,80422,0,3048,1 -3049,64768,0,3049,1 -3050,82462,0,3050,1 -3051,52077,0,3051,1 -3052,70856,1,3052,1 -3053,12866,0,3053,1 -3054,42928,1,3054,1 -3055,64103,0,3055,1 -3056,40646,0,3056,1 -3057,37195,1,3057,1 -3058,82306,1,3058,1 -3059,13859,0,3059,1 -3060,27947,0,3060,1 -3061,31188,0,3061,1 -3062,57997,0,3062,1 -3063,56513,0,3063,1 -3064,77448,0,3064,1 -3065,73209,0,3065,1 -3066,84411,0,3066,1 -3067,83354,0,3067,1 -3068,19766,0,3068,1 -3069,76579,0,3069,1 -3070,54032,0,3070,1 -3071,56149,1,3071,1 -3072,42492,0,3072,1 -3073,69862,0,3073,1 -3074,30356,0,3074,1 -3075,78172,0,3075,1 -3076,42857,0,3076,1 -3077,37230,0,3077,1 -3078,17332,0,3078,1 -3079,49238,0,3079,1 -3080,76766,0,3080,1 -3081,75683,0,3081,1 -3082,19459,1,3082,1 -3083,35872,1,3083,1 -3084,51689,0,3084,1 -3085,41797,0,3085,1 -3086,58433,0,3086,1 -3087,23823,1,3087,1 -3088,21595,0,3088,1 -3089,20765,1,3089,1 -3090,43148,0,3090,1 -3091,34043,0,3091,1 -3092,66622,1,3092,1 -3093,24480,1,3093,1 -3094,73946,0,3094,1 -3095,74787,0,3095,1 -3096,42932,0,3096,1 -3097,15804,0,3097,1 -3098,80824,0,3098,1 -3099,75412,0,3099,1 -3100,16054,1,3100,1 -3101,86103,0,3101,1 -3102,12687,0,3102,1 -3103,88925,0,3103,1 -3104,50711,0,3104,1 -3105,56923,1,3105,1 -3106,33596,0,3106,1 -3107,60418,1,3107,1 -3108,36933,0,3108,1 -3109,87740,0,3109,1 -3110,82326,1,3110,1 -3111,25425,0,3111,1 -3112,48361,0,3112,1 -3113,32194,0,3113,1 -3114,30738,0,3114,1 -3115,89871,0,3115,1 -3116,20384,0,3116,1 -3117,21748,0,3117,1 -3118,39170,0,3118,1 -3119,32518,0,3119,1 -3120,65527,0,3120,1 -3121,13834,0,3121,1 -3122,61179,0,3122,1 -3123,75413,0,3123,1 -3124,68164,0,3124,1 -3125,78730,0,3125,1 -3126,34750,1,3126,1 -3127,32709,0,3127,1 -3128,49218,1,3128,1 -3129,65201,0,3129,1 -3130,56976,0,3130,1 -3131,81870,0,3131,1 -3132,19446,0,3132,1 -3133,22402,0,3133,1 -3134,47867,0,3134,1 -3135,87802,1,3135,1 -3136,18194,0,3136,1 -3137,70953,0,3137,1 -3138,41848,0,3138,1 -3139,85075,0,3139,1 -3140,43934,0,3140,1 -3141,61217,0,3141,1 -3142,43066,0,3142,1 -3143,36217,0,3143,1 -3144,56357,0,3144,1 -3145,29958,0,3145,1 -3146,57603,0,3146,1 -3147,32583,0,3147,1 -3148,59667,0,3148,1 -3149,73350,0,3149,1 -3150,52876,0,3150,1 -3151,52879,0,3151,1 -3152,76759,0,3152,1 -3153,58174,0,3153,1 -3154,11403,0,3154,1 -3155,27733,0,3155,1 -3156,60505,0,3156,1 -3157,42036,0,3157,1 -3158,84718,0,3158,1 -3159,65599,0,3159,1 -3160,66838,0,3160,1 -3161,45799,0,3161,1 -3162,12626,0,3162,1 -3163,20657,0,3163,1 -3164,17316,0,3164,1 -3165,26775,0,3165,1 -3166,49978,0,3166,1 -3167,77777,0,3167,1 -3168,46348,0,3168,1 -3169,42074,0,3169,1 -3170,48435,0,3170,1 -3171,35626,0,3171,1 -3172,48339,0,3172,1 -3173,79588,0,3173,1 -3174,58136,0,3174,1 -3175,35850,0,3175,1 -3176,17162,0,3176,1 -3177,21787,1,3177,1 -3178,15971,0,3178,1 -3179,72976,0,3179,1 -3180,13518,0,3180,1 -3181,28633,0,3181,1 -3182,40205,0,3182,1 -3183,41636,0,3183,1 -3184,78680,0,3184,1 -3185,42504,1,3185,1 -3186,89080,0,3186,1 -3187,50396,1,3187,1 -3188,80911,0,3188,1 -3189,48860,0,3189,1 -3190,24212,0,3190,1 -3191,20626,1,3191,1 -3192,29871,0,3192,1 -3193,57465,0,3193,1 -3194,54521,1,3194,1 -3195,15196,1,3195,1 -3196,20547,0,3196,1 -3197,28456,0,3197,1 -3198,66050,0,3198,1 -3199,11924,0,3199,1 -3200,67509,0,3200,1 -3201,10690,0,3201,1 -3202,84319,0,3202,1 -3203,24616,0,3203,1 -3204,41911,0,3204,1 -3205,20618,1,3205,1 -3206,75072,1,3206,1 -3207,59220,0,3207,1 -3208,76028,0,3208,1 -3209,17982,0,3209,1 -3210,38037,0,3210,1 -3211,61780,1,3211,1 -3212,43916,0,3212,1 -3213,39803,1,3213,1 -3214,15519,1,3214,1 -3215,11248,0,3215,1 -3216,42006,0,3216,1 -3217,39221,0,3217,1 -3218,15621,0,3218,1 -3219,75920,0,3219,1 -3220,82626,0,3220,1 -3221,18722,0,3221,1 -3222,69445,0,3222,1 -3223,67975,0,3223,1 -3224,23338,0,3224,1 -3225,24453,0,3225,1 -3226,17296,0,3226,1 -3227,26556,1,3227,1 -3228,25137,1,3228,1 -3229,31118,1,3229,1 -3230,43287,0,3230,1 -3231,45160,0,3231,1 -3232,80653,0,3232,1 -3233,52989,0,3233,1 -3234,30968,0,3234,1 -3235,82643,0,3235,1 -3236,64980,0,3236,1 -3237,55440,0,3237,1 -3238,26414,0,3238,1 -3239,64401,0,3239,1 -3240,84826,0,3240,1 -3241,33065,0,3241,1 -3242,58900,1,3242,1 -3243,31326,0,3243,1 -3244,16069,0,3244,1 -3245,77220,0,3245,1 -3246,75770,0,3246,1 -3247,82265,0,3247,1 -3248,50728,0,3248,1 -3249,35096,0,3249,1 -3250,17634,0,3250,1 -3251,60436,1,3251,1 -3252,25165,0,3252,1 -3253,71226,0,3253,1 -3254,56842,0,3254,1 -3255,74611,1,3255,1 -3256,76349,0,3256,1 -3257,51875,0,3257,1 -3258,54576,0,3258,1 -3259,73671,0,3259,1 -3260,64649,0,3260,1 -3261,83813,0,3261,1 -3262,23614,0,3262,1 -3263,41216,1,3263,1 -3264,19150,0,3264,1 -3265,44818,0,3265,1 -3266,50899,0,3266,1 -3267,78203,0,3267,1 -3268,26761,1,3268,1 -3269,16933,0,3269,1 -3270,26882,1,3270,1 -3271,65847,0,3271,1 -3272,52196,0,3272,1 -3273,55822,0,3273,1 -3274,41801,0,3274,1 -3275,55937,0,3275,1 -3276,33274,0,3276,1 -3277,26889,0,3277,1 -3278,51972,1,3278,1 -3279,11683,0,3279,1 -3280,81280,0,3280,1 -3281,43869,0,3281,1 -3282,39187,0,3282,1 -3283,31093,1,3283,1 -3284,88865,1,3284,1 -3285,18938,1,3285,1 -3286,39469,0,3286,1 -3287,69332,0,3287,1 -3288,48247,0,3288,1 -3289,44590,0,3289,1 -3290,81729,0,3290,1 -3291,34503,0,3291,1 -3292,54164,0,3292,1 -3293,20168,0,3293,1 -3294,76481,0,3294,1 -3295,84976,0,3295,1 -3296,50387,0,3296,1 -3297,41898,0,3297,1 -3298,24355,0,3298,1 -3299,16708,0,3299,1 -3300,13531,1,3300,1 -3301,87070,1,3301,1 -3302,84312,0,3302,1 -3303,72444,0,3303,1 -3304,56337,0,3304,1 -3305,59402,0,3305,1 -3306,33637,0,3306,1 -3307,35026,0,3307,1 -3308,49162,0,3308,1 -3309,89006,0,3309,1 -3310,58455,0,3310,1 -3311,83864,0,3311,1 -3312,46514,0,3312,1 -3313,41014,0,3313,1 -3314,21590,0,3314,1 -3315,53370,0,3315,1 -3316,24971,0,3316,1 -3317,61442,1,3317,1 -3318,38162,1,3318,1 -3319,37078,0,3319,1 -3320,25480,0,3320,1 -3321,60253,0,3321,1 -3322,83835,0,3322,1 -3323,89607,0,3323,1 -3324,20286,0,3324,1 -3325,78543,0,3325,1 -3326,24963,0,3326,1 -3327,19250,0,3327,1 -3328,75741,0,3328,1 -3329,84763,0,3329,1 -3330,22680,1,3330,1 -3331,46626,0,3331,1 -3332,21451,1,3332,1 -3333,40280,0,3333,1 -3334,50824,0,3334,1 -3335,55475,0,3335,1 -3336,15412,0,3336,1 -3337,70849,0,3337,1 -3338,30309,0,3338,1 -3339,54048,0,3339,1 -3340,68930,0,3340,1 -3341,37381,0,3341,1 -3342,12684,0,3342,1 -3343,14799,0,3343,1 -3344,41529,0,3344,1 -3345,20440,1,3345,1 -3346,55802,0,3346,1 -3347,76010,0,3347,1 -3348,25709,0,3348,1 -3349,39513,0,3349,1 -3350,54956,0,3350,1 -3351,75829,0,3351,1 -3352,31392,0,3352,1 -3353,30930,0,3353,1 -3354,51606,0,3354,1 -3355,22743,0,3355,1 -3356,42948,0,3356,1 -3357,21293,0,3357,1 -3358,47000,0,3358,1 -3359,56267,0,3359,1 -3360,36940,0,3360,1 -3361,87816,0,3361,1 -3362,22882,0,3362,1 -3363,76950,1,3363,1 -3364,42430,1,3364,1 -3365,80277,0,3365,1 -3366,55853,0,3366,1 -3367,26238,0,3367,1 -3368,75694,0,3368,1 -3369,37705,0,3369,1 -3370,60133,0,3370,1 -3371,48476,0,3371,1 -3372,60189,0,3372,1 -3373,74782,0,3373,1 -3374,73989,0,3374,1 -3375,62554,0,3375,1 -3376,28146,0,3376,1 -3377,83084,0,3377,1 -3378,18550,0,3378,1 -3379,71210,0,3379,1 -3380,88841,0,3380,1 -3381,75848,0,3381,1 -3382,61326,1,3382,1 -3383,17546,0,3383,1 -3384,70205,0,3384,1 -3385,12322,0,3385,1 -3386,37313,0,3386,1 -3387,84358,0,3387,1 -3388,13272,0,3388,1 -3389,87729,0,3389,1 -3390,21445,0,3390,1 -3391,87579,0,3391,1 -3392,69718,0,3392,1 -3393,71341,0,3393,1 -3394,60664,0,3394,1 -3395,74240,0,3395,1 -3396,87645,0,3396,1 -3397,50282,0,3397,1 -3398,51188,1,3398,1 -3399,58319,0,3399,1 -3400,30889,0,3400,1 -3401,59250,0,3401,1 -3402,66487,0,3402,1 -3403,87019,1,3403,1 -3404,30499,0,3404,1 -3405,61552,0,3405,1 -3406,38134,1,3406,1 -3407,86868,0,3407,1 -3408,22053,0,3408,1 -3409,33258,0,3409,1 -3410,55539,0,3410,1 -3411,25538,0,3411,1 -3412,86818,0,3412,1 -3413,14126,0,3413,1 -3414,64352,1,3414,1 -3415,66788,0,3415,1 -3416,87532,0,3416,1 -3417,85927,0,3417,1 -3418,10634,1,3418,1 -3419,29518,0,3419,1 -3420,73982,0,3420,1 -3421,49485,0,3421,1 -3422,74514,0,3422,1 -3423,86206,0,3423,1 -3424,29313,0,3424,1 -3425,66852,0,3425,1 -3426,52643,0,3426,1 -3427,26133,1,3427,1 -3428,55298,0,3428,1 -3429,24184,0,3429,1 -3430,23449,0,3430,1 -3431,85546,0,3431,1 -3432,80313,0,3432,1 -3433,87356,0,3433,1 -3434,32630,0,3434,1 -3435,10153,0,3435,1 -3436,56344,0,3436,1 -3437,56715,0,3437,1 -3438,21355,0,3438,1 -3439,14153,0,3439,1 -3440,29423,0,3440,1 -3441,38648,0,3441,1 -3442,81690,0,3442,1 -3443,73994,0,3443,1 -3444,20575,0,3444,1 -3445,60536,0,3445,1 -3446,11787,0,3446,1 -3447,11016,0,3447,1 -3448,51634,0,3448,1 -3449,49261,0,3449,1 -3450,51680,0,3450,1 -3451,88014,0,3451,1 -3452,80820,0,3452,1 -3453,76090,0,3453,1 -3454,30860,0,3454,1 -3455,28547,0,3455,1 -3456,31873,0,3456,1 -3457,22852,0,3457,1 -3458,40474,0,3458,1 -3459,49119,0,3459,1 -3460,78498,0,3460,1 -3461,88801,0,3461,1 -3462,39446,0,3462,1 -3463,56472,0,3463,1 -3464,36092,0,3464,1 -3465,79995,0,3465,1 -3466,64756,0,3466,1 -3467,26671,0,3467,1 -3468,64262,1,3468,1 -3469,45724,0,3469,1 -3470,27066,0,3470,1 -3471,21995,1,3471,1 -3472,39463,1,3472,1 -3473,80660,0,3473,1 -3474,59822,0,3474,1 -3475,55499,0,3475,1 -3476,64467,0,3476,1 -3477,69921,0,3477,1 -3478,12681,0,3478,1 -3479,69610,0,3479,1 -3480,30637,0,3480,1 -3481,37851,0,3481,1 -3482,24405,0,3482,1 -3483,57339,0,3483,1 -3484,86470,0,3484,1 -3485,65120,1,3485,1 -3486,66188,0,3486,1 -3487,67082,0,3487,1 -3488,42778,1,3488,1 -3489,35512,0,3489,1 -3490,69639,0,3490,1 -3491,18850,0,3491,1 -3492,59417,0,3492,1 -3493,38035,0,3493,1 -3494,25886,0,3494,1 -3495,88455,0,3495,1 -3496,76445,0,3496,1 -3497,87975,1,3497,1 -3498,33895,0,3498,1 -3499,30038,0,3499,1 -3500,54740,0,3500,1 -3501,11514,0,3501,1 -3502,73975,0,3502,1 -3503,25734,0,3503,1 -3504,17362,0,3504,1 -3505,26262,0,3505,1 -3506,62605,0,3506,1 -3507,29632,1,3507,1 -3508,88764,0,3508,1 -3509,21632,0,3509,1 -3510,35272,0,3510,1 -3511,80608,1,3511,1 -3512,55210,0,3512,1 -3513,64012,0,3513,1 -3514,54633,0,3514,1 -3515,86353,0,3515,1 -3516,25751,1,3516,1 -3517,38919,0,3517,1 -3518,36853,0,3518,1 -3519,26666,0,3519,1 -3520,64267,1,3520,1 -3521,72293,0,3521,1 -3522,37794,0,3522,1 -3523,59856,1,3523,1 -3524,80894,0,3524,1 -3525,32938,0,3525,1 -3526,29167,0,3526,1 -3527,42261,0,3527,1 -3528,17260,0,3528,1 -3529,85532,0,3529,1 -3530,51093,0,3530,1 -3531,41708,1,3531,1 -3532,64249,0,3532,1 -3533,65478,0,3533,1 -3534,24391,0,3534,1 -3535,23135,0,3535,1 -3536,25788,0,3536,1 -3537,76901,0,3537,1 -3538,83076,1,3538,1 -3539,42440,1,3539,1 -3540,40725,0,3540,1 -3541,20726,0,3541,1 -3542,10424,0,3542,1 -3543,50643,1,3543,1 -3544,68793,0,3544,1 -3545,57999,0,3545,1 -3546,31235,0,3546,1 -3547,11777,0,3547,1 -3548,50948,0,3548,1 -3549,80758,0,3549,1 -3550,21596,0,3550,1 -3551,45490,1,3551,1 -3552,71803,0,3552,1 -3553,35453,0,3553,1 -3554,67951,0,3554,1 -3555,20494,0,3555,1 -3556,48311,1,3556,1 -3557,52068,0,3557,1 -3558,59975,0,3558,1 -3559,53925,0,3559,1 -3560,57171,0,3560,1 -3561,52956,0,3561,1 -3562,26656,0,3562,1 -3563,26299,0,3563,1 -3564,11748,0,3564,1 -3565,25187,0,3565,1 -3566,43511,0,3566,1 -3567,61208,0,3567,1 -3568,41917,0,3568,1 -3569,68295,0,3569,1 -3570,13994,1,3570,1 -3571,36545,0,3571,1 -3572,41401,0,3572,1 -3573,12970,0,3573,1 -3574,59794,0,3574,1 -3575,24168,0,3575,1 -3576,33350,0,3576,1 -3577,53962,0,3577,1 -3578,69743,1,3578,1 -3579,53879,0,3579,1 -3580,53058,0,3580,1 -3581,88022,0,3581,1 -3582,37578,0,3582,1 -3583,49826,0,3583,1 -3584,74422,0,3584,1 -3585,35373,1,3585,1 -3586,53487,0,3586,1 -3587,70994,1,3587,1 -3588,69394,0,3588,1 -3589,11427,0,3589,1 -3590,34303,0,3590,1 -3591,37539,0,3591,1 -3592,51194,0,3592,1 -3593,42562,0,3593,1 -3594,36978,0,3594,1 -3595,50846,0,3595,1 -3596,69649,0,3596,1 -3597,87004,0,3597,1 -3598,37835,0,3598,1 -3599,42181,0,3599,1 -3600,19078,0,3600,1 -3601,17778,0,3601,1 -3602,56649,0,3602,1 -3603,89155,1,3603,1 -3604,81817,0,3604,1 -3605,78041,0,3605,1 -3606,37701,1,3606,1 -3607,60690,0,3607,1 -3608,77544,0,3608,1 -3609,69645,0,3609,1 -3610,89078,0,3610,1 -3611,66666,0,3611,1 -3612,43493,1,3612,1 -3613,33417,0,3613,1 -3614,39978,0,3614,1 -3615,13541,0,3615,1 -3616,34645,0,3616,1 -3617,49493,0,3617,1 -3618,14983,0,3618,1 -3619,40426,0,3619,1 -3620,77966,1,3620,1 -3621,75290,0,3621,1 -3622,78035,0,3622,1 -3623,89070,1,3623,1 -3624,26528,0,3624,1 -3625,68294,0,3625,1 -3626,32698,0,3626,1 -3627,25995,0,3627,1 -3628,81450,0,3628,1 -3629,78230,0,3629,1 -3630,77407,0,3630,1 -3631,27392,0,3631,1 -3632,39723,0,3632,1 -3633,47049,1,3633,1 -3634,41953,0,3634,1 -3635,30377,0,3635,1 -3636,34703,0,3636,1 -3637,10324,0,3637,1 -3638,55252,0,3638,1 -3639,37545,1,3639,1 -3640,17645,1,3640,1 -3641,85648,0,3641,1 -3642,38658,0,3642,1 -3643,52271,1,3643,1 -3644,67439,0,3644,1 -3645,45277,0,3645,1 -3646,17604,0,3646,1 -3647,57044,0,3647,1 -3648,43440,0,3648,1 -3649,33010,0,3649,1 -3650,15152,0,3650,1 -3651,18647,0,3651,1 -3652,25872,0,3652,1 -3653,49568,0,3653,1 -3654,17988,1,3654,1 -3655,38209,0,3655,1 -3656,63389,0,3656,1 -3657,37465,0,3657,1 -3658,74892,0,3658,1 -3659,22717,0,3659,1 -3660,56793,1,3660,1 -3661,13552,0,3661,1 -3662,20638,0,3662,1 -3663,22534,0,3663,1 -3664,78212,0,3664,1 -3665,29792,1,3665,1 -3666,80518,0,3666,1 -3667,71678,0,3667,1 -3668,23595,0,3668,1 -3669,43275,1,3669,1 -3670,39661,0,3670,1 -3671,36398,0,3671,1 -3672,47643,1,3672,1 -3673,87284,0,3673,1 -3674,12856,0,3674,1 -3675,83429,0,3675,1 -3676,37563,0,3676,1 -3677,32270,0,3677,1 -3678,33793,0,3678,1 -3679,30129,0,3679,1 -3680,82177,0,3680,1 -3681,47472,0,3681,1 -3682,70396,0,3682,1 -3683,62579,0,3683,1 -3684,83658,0,3684,1 -3685,32754,1,3685,1 -3686,45627,0,3686,1 -3687,74666,1,3687,1 -3688,67360,0,3688,1 -3689,85360,0,3689,1 -3690,53134,1,3690,1 -3691,36165,0,3691,1 -3692,81126,0,3692,1 -3693,36494,1,3693,1 -3694,89704,1,3694,1 -3695,23340,0,3695,1 -3696,70705,1,3696,1 -3697,42863,0,3697,1 -3698,32812,0,3698,1 -3699,52609,0,3699,1 -3700,32942,0,3700,1 -3701,61323,0,3701,1 -3702,15397,0,3702,1 -3703,57532,0,3703,1 -3704,11720,0,3704,1 -3705,59761,0,3705,1 -3706,23671,0,3706,1 -3707,30585,0,3707,1 -3708,59890,0,3708,1 -3709,65841,0,3709,1 -3710,88506,0,3710,1 -3711,83979,1,3711,1 -3712,34111,0,3712,1 -3713,31474,0,3713,1 -3714,59667,1,3714,1 -3715,84174,0,3715,1 -3716,38115,0,3716,1 -3717,45004,0,3717,1 -3718,38414,0,3718,1 -3719,14357,0,3719,1 -3720,35926,0,3720,1 -3721,69736,0,3721,1 -3722,80012,0,3722,1 -3723,81243,0,3723,1 -3724,24147,0,3724,1 -3725,66562,0,3725,1 -3726,46065,1,3726,1 -3727,65381,0,3727,1 -3728,89131,0,3728,1 -3729,38105,0,3729,1 -3730,27695,0,3730,1 -3731,49317,0,3731,1 -3732,16886,0,3732,1 -3733,20903,1,3733,1 -3734,84236,0,3734,1 -3735,11811,1,3735,1 -3736,78293,0,3736,1 -3737,74777,0,3737,1 -3738,22905,0,3738,1 -3739,61500,0,3739,1 -3740,28471,0,3740,1 -3741,44516,0,3741,1 -3742,77998,0,3742,1 -3743,30386,0,3743,1 -3744,87072,0,3744,1 -3745,11069,0,3745,1 -3746,27285,0,3746,1 -3747,82803,1,3747,1 -3748,18967,1,3748,1 -3749,66784,0,3749,1 -3750,49159,0,3750,1 -3751,36211,0,3751,1 -3752,21910,0,3752,1 -3753,48369,0,3753,1 -3754,12717,0,3754,1 -3755,44968,0,3755,1 -3756,55582,0,3756,1 -3757,61717,0,3757,1 -3758,75835,1,3758,1 -3759,18537,0,3759,1 -3760,18781,0,3760,1 -3761,36134,1,3761,1 -3762,43306,0,3762,1 -3763,27896,1,3763,1 -3764,87309,0,3764,1 -3765,52516,1,3765,1 -3766,50013,1,3766,1 -3767,56856,0,3767,1 -3768,20620,1,3768,1 -3769,29201,0,3769,1 -3770,43907,1,3770,1 -3771,53767,0,3771,1 -3772,12315,1,3772,1 -3773,52034,0,3773,1 -3774,83155,0,3774,1 -3775,34937,0,3775,1 -3776,12987,1,3776,1 -3777,53495,0,3777,1 -3778,79560,0,3778,1 -3779,35606,1,3779,1 -3780,12581,0,3780,1 -3781,65459,0,3781,1 -3782,27066,0,3782,1 -3783,52267,0,3783,1 -3784,25722,0,3784,1 -3785,79599,0,3785,1 -3786,60012,0,3786,1 -3787,60307,0,3787,1 -3788,71887,0,3788,1 -3789,17909,0,3789,1 -3790,10018,0,3790,1 -3791,20017,0,3791,1 -3792,10721,0,3792,1 -3793,10942,1,3793,1 -3794,75345,0,3794,1 -3795,76762,0,3795,1 -3796,45405,0,3796,1 -3797,39290,0,3797,1 -3798,63442,0,3798,1 -3799,14541,1,3799,1 -3800,10835,0,3800,1 -3801,19225,0,3801,1 -3802,20199,0,3802,1 -3803,59174,0,3803,1 -3804,66938,1,3804,1 -3805,29159,1,3805,1 -3806,37609,0,3806,1 -3807,20016,0,3807,1 -3808,72302,0,3808,1 -3809,10201,0,3809,1 -3810,70580,0,3810,1 -3811,19777,1,3811,1 -3812,16806,0,3812,1 -3813,38427,0,3813,1 -3814,75314,0,3814,1 -3815,46287,0,3815,1 -3816,43772,0,3816,1 -3817,52839,0,3817,1 -3818,80706,0,3818,1 -3819,44809,1,3819,1 -3820,32509,0,3820,1 -3821,59471,0,3821,1 -3822,18560,1,3822,1 -3823,43969,0,3823,1 -3824,28946,1,3824,1 -3825,76711,0,3825,1 -3826,72553,0,3826,1 -3827,21520,1,3827,1 -3828,58259,0,3828,1 -3829,65166,0,3829,1 -3830,85032,0,3830,1 -3831,79683,1,3831,1 -3832,11297,0,3832,1 -3833,68107,0,3833,1 -3834,63214,0,3834,1 -3835,73955,0,3835,1 -3836,32990,0,3836,1 -3837,44412,1,3837,1 -3838,83130,0,3838,1 -3839,12342,0,3839,1 -3840,47772,0,3840,1 -3841,36517,0,3841,1 -3842,44490,1,3842,1 -3843,31170,0,3843,1 -3844,25630,1,3844,1 -3845,32713,0,3845,1 -3846,31664,0,3846,1 -3847,59308,0,3847,1 -3848,66417,0,3848,1 -3849,22246,0,3849,1 -3850,16116,0,3850,1 -3851,19196,0,3851,1 -3852,89616,0,3852,1 -3853,28479,0,3853,1 -3854,11174,0,3854,1 -3855,83722,0,3855,1 -3856,42751,0,3856,1 -3857,32356,0,3857,1 -3858,43510,0,3858,1 -3859,20286,1,3859,1 -3860,19773,1,3860,1 -3861,24385,1,3861,1 -3862,82479,0,3862,1 -3863,51799,0,3863,1 -3864,27593,0,3864,1 -3865,72486,0,3865,1 -3866,56261,1,3866,1 -3867,42844,0,3867,1 -3868,76004,0,3868,1 -3869,59994,0,3869,1 -3870,34538,0,3870,1 -3871,59618,1,3871,1 -3872,83563,1,3872,1 -3873,50201,0,3873,1 -3874,35523,0,3874,1 -3875,61494,1,3875,1 -3876,39027,0,3876,1 -3877,14984,0,3877,1 -3878,34267,0,3878,1 -3879,35421,0,3879,1 -3880,87679,0,3880,1 -3881,73335,1,3881,1 -3882,46446,1,3882,1 -3883,29072,0,3883,1 -3884,40916,0,3884,1 -3885,24350,0,3885,1 -3886,45899,0,3886,1 -3887,85409,0,3887,1 -3888,11329,1,3888,1 -3889,16437,0,3889,1 -3890,43492,0,3890,1 -3891,21900,0,3891,1 -3892,17342,0,3892,1 -3893,10546,1,3893,1 -3894,66893,0,3894,1 -3895,20246,0,3895,1 -3896,64268,0,3896,1 -3897,19039,0,3897,1 -3898,51577,0,3898,1 -3899,63422,0,3899,1 -3900,87175,0,3900,1 -3901,81651,0,3901,1 -3902,12401,0,3902,1 -3903,21001,0,3903,1 -3904,55592,0,3904,1 -3905,30952,0,3905,1 -3906,63668,0,3906,1 -3907,87866,0,3907,1 -3908,10871,1,3908,1 -3909,41483,0,3909,1 -3910,81358,0,3910,1 -3911,71649,1,3911,1 -3912,80720,0,3912,1 -3913,88259,1,3913,1 -3914,18501,0,3914,1 -3915,17521,1,3915,1 -3916,35197,0,3916,1 -3917,35847,0,3917,1 -3918,63769,0,3918,1 -3919,66942,0,3919,1 -3920,62347,0,3920,1 -3921,25733,0,3921,1 -3922,60983,0,3922,1 -3923,40398,0,3923,1 -3924,28434,0,3924,1 -3925,38688,0,3925,1 -3926,73021,0,3926,1 -3927,60499,0,3927,1 -3928,79078,0,3928,1 -3929,41637,0,3929,1 -3930,67485,0,3930,1 -3931,54197,0,3931,1 -3932,69833,1,3932,1 -3933,53456,0,3933,1 -3934,39162,1,3934,1 -3935,88839,0,3935,1 -3936,52972,0,3936,1 -3937,11473,0,3937,1 -3938,39673,0,3938,1 -3939,78097,0,3939,1 -3940,30077,0,3940,1 -3941,33350,0,3941,1 -3942,29541,0,3942,1 -3943,51749,0,3943,1 -3944,48038,0,3944,1 -3945,62173,0,3945,1 -3946,86441,0,3946,1 -3947,53944,0,3947,1 -3948,30224,1,3948,1 -3949,23189,0,3949,1 -3950,64331,0,3950,1 -3951,54422,0,3951,1 -3952,43313,1,3952,1 -3953,37029,0,3953,1 -3954,13263,0,3954,1 -3955,32282,1,3955,1 -3956,71874,0,3956,1 -3957,50460,0,3957,1 -3958,27226,0,3958,1 -3959,78694,0,3959,1 -3960,60922,0,3960,1 -3961,20206,0,3961,1 -3962,49391,0,3962,1 -3963,55070,0,3963,1 -3964,46151,0,3964,1 -3965,61095,0,3965,1 -3966,62274,0,3966,1 -3967,25901,0,3967,1 -3968,88500,0,3968,1 -3969,20075,0,3969,1 -3970,49932,0,3970,1 -3971,60300,0,3971,1 -3972,24627,1,3972,1 -3973,22559,1,3973,1 -3974,61224,0,3974,1 -3975,34950,0,3975,1 -3976,32193,0,3976,1 -3977,18972,0,3977,1 -3978,22472,0,3978,1 -3979,86248,0,3979,1 -3980,23496,0,3980,1 -3981,52971,0,3981,1 -3982,88522,0,3982,1 -3983,62290,0,3983,1 -3984,52355,0,3984,1 -3985,14545,0,3985,1 -3986,19318,0,3986,1 -3987,86806,1,3987,1 -3988,30897,1,3988,1 -3989,56623,1,3989,1 -3990,30430,0,3990,1 -3991,53432,1,3991,1 -3992,13378,0,3992,1 -3993,37606,0,3993,1 -3994,46263,0,3994,1 -3995,38044,1,3995,1 -3996,51260,0,3996,1 -3997,84243,0,3997,1 -3998,32939,1,3998,1 -3999,82985,0,3999,1 -4000,51103,0,4000,2 -4001,85933,0,4001,2 -4002,89583,1,4002,2 -4003,77587,0,4003,2 -4004,33381,0,4004,2 -4005,53799,0,4005,2 -4006,77618,0,4006,2 -4007,73521,0,4007,2 -4008,41862,0,4008,2 -4009,12702,1,4009,2 -4010,48332,0,4010,2 -4011,59135,0,4011,2 -4012,69354,0,4012,2 -4013,85854,0,4013,2 -4014,40165,0,4014,2 -4015,73098,0,4015,2 -4016,22306,0,4016,2 -4017,19548,0,4017,2 -4018,57091,0,4018,2 -4019,80208,0,4019,2 -4020,75344,1,4020,2 -4021,81599,0,4021,2 -4022,29406,1,4022,2 -4023,64473,0,4023,2 -4024,38076,0,4024,2 -4025,21371,0,4025,2 -4026,88794,0,4026,2 -4027,82338,1,4027,2 -4028,83221,0,4028,2 -4029,34322,0,4029,2 -4030,39801,0,4030,2 -4031,82488,0,4031,2 -4032,30777,0,4032,2 -4033,69948,1,4033,2 -4034,19068,0,4034,2 -4035,10882,0,4035,2 -4036,89117,0,4036,2 -4037,12387,0,4037,2 -4038,33678,0,4038,2 -4039,86751,0,4039,2 -4040,26351,1,4040,2 -4041,34254,0,4041,2 -4042,15988,0,4042,2 -4043,38576,0,4043,2 -4044,37100,0,4044,2 -4045,66850,0,4045,2 -4046,24967,0,4046,2 -4047,62559,1,4047,2 -4048,44199,0,4048,2 -4049,60192,1,4049,2 -4050,53345,0,4050,2 -4051,36054,0,4051,2 -4052,44165,1,4052,2 -4053,18416,0,4053,2 -4054,18297,0,4054,2 -4055,65616,0,4055,2 -4056,67673,0,4056,2 -4057,75828,0,4057,2 -4058,74711,0,4058,2 -4059,44515,0,4059,2 -4060,40650,0,4060,2 -4061,10240,0,4061,2 -4062,38434,0,4062,2 -4063,40563,0,4063,2 -4064,46047,0,4064,2 -4065,20454,0,4065,2 -4066,83919,0,4066,2 -4067,74191,1,4067,2 -4068,27319,0,4068,2 -4069,75408,1,4069,2 -4070,61975,0,4070,2 -4071,76384,0,4071,2 -4072,18977,0,4072,2 -4073,36623,1,4073,2 -4074,88219,0,4074,2 -4075,65760,0,4075,2 -4076,47529,0,4076,2 -4077,49644,0,4077,2 -4078,85278,0,4078,2 -4079,59130,0,4079,2 -4080,45858,0,4080,2 -4081,74875,0,4081,2 -4082,24077,0,4082,2 -4083,26827,0,4083,2 -4084,78676,1,4084,2 -4085,50381,1,4085,2 -4086,22687,0,4086,2 -4087,19153,1,4087,2 -4088,39150,0,4088,2 -4089,50758,0,4089,2 -4090,53114,0,4090,2 -4091,57662,0,4091,2 -4092,36509,0,4092,2 -4093,61855,0,4093,2 -4094,72369,0,4094,2 -4095,63246,0,4095,2 -4096,55370,0,4096,2 -4097,84717,0,4097,2 -4098,68968,0,4098,2 -4099,56309,0,4099,2 -4100,10260,0,4100,2 -4101,76511,0,4101,2 -4102,61670,0,4102,2 -4103,88487,1,4103,2 -4104,12187,0,4104,2 -4105,86446,0,4105,2 -4106,35316,0,4106,2 -4107,70613,1,4107,2 -4108,40869,1,4108,2 -4109,43596,0,4109,2 -4110,64302,0,4110,2 -4111,88270,0,4111,2 -4112,45520,0,4112,2 -4113,16593,0,4113,2 -4114,27690,0,4114,2 -4115,13436,0,4115,2 -4116,45428,0,4116,2 -4117,19446,0,4117,2 -4118,44280,0,4118,2 -4119,51036,0,4119,2 -4120,49955,0,4120,2 -4121,72582,0,4121,2 -4122,53440,0,4122,2 -4123,41429,0,4123,2 -4124,33215,0,4124,2 -4125,25444,0,4125,2 -4126,89946,0,4126,2 -4127,84541,0,4127,2 -4128,63448,0,4128,2 -4129,29597,0,4129,2 -4130,43882,0,4130,2 -4131,74165,1,4131,2 -4132,68676,0,4132,2 -4133,65066,0,4133,2 -4134,16290,0,4134,2 -4135,19603,0,4135,2 -4136,43210,0,4136,2 -4137,81605,0,4137,2 -4138,24343,0,4138,2 -4139,14892,0,4139,2 -4140,78052,1,4140,2 -4141,31228,0,4141,2 -4142,25790,0,4142,2 -4143,36375,0,4143,2 -4144,29808,0,4144,2 -4145,37271,0,4145,2 -4146,47607,0,4146,2 -4147,49959,1,4147,2 -4148,62431,0,4148,2 -4149,39167,0,4149,2 -4150,33940,0,4150,2 -4151,84898,0,4151,2 -4152,11976,0,4152,2 -4153,37306,0,4153,2 -4154,21700,1,4154,2 -4155,56305,0,4155,2 -4156,38244,0,4156,2 -4157,27300,0,4157,2 -4158,89678,0,4158,2 -4159,63219,0,4159,2 -4160,64587,1,4160,2 -4161,45795,0,4161,2 -4162,13838,0,4162,2 -4163,66129,0,4163,2 -4164,55991,1,4164,2 -4165,64189,0,4165,2 -4166,47741,0,4166,2 -4167,75627,1,4167,2 -4168,63345,0,4168,2 -4169,74177,1,4169,2 -4170,38932,0,4170,2 -4171,60715,1,4171,2 -4172,55203,1,4172,2 -4173,25533,0,4173,2 -4174,61151,0,4174,2 -4175,20618,0,4175,2 -4176,46242,0,4176,2 -4177,44308,1,4177,2 -4178,29022,0,4178,2 -4179,59114,0,4179,2 -4180,79246,0,4180,2 -4181,26549,0,4181,2 -4182,26611,0,4182,2 -4183,13425,0,4183,2 -4184,46036,0,4184,2 -4185,45170,0,4185,2 -4186,74662,0,4186,2 -4187,66556,0,4187,2 -4188,65084,0,4188,2 -4189,76358,0,4189,2 -4190,13237,0,4190,2 -4191,16908,1,4191,2 -4192,34599,0,4192,2 -4193,50736,0,4193,2 -4194,61257,1,4194,2 -4195,79141,0,4195,2 -4196,21518,1,4196,2 -4197,87841,0,4197,2 -4198,37985,0,4198,2 -4199,82118,0,4199,2 -4200,70124,1,4200,2 -4201,14004,0,4201,2 -4202,54553,0,4202,2 -4203,21113,0,4203,2 -4204,55830,0,4204,2 -4205,36280,1,4205,2 -4206,76855,1,4206,2 -4207,43839,0,4207,2 -4208,17066,0,4208,2 -4209,35315,0,4209,2 -4210,51450,0,4210,2 -4211,40856,0,4211,2 -4212,40118,0,4212,2 -4213,84804,0,4213,2 -4214,72091,0,4214,2 -4215,36252,1,4215,2 -4216,11100,0,4216,2 -4217,88904,0,4217,2 -4218,36814,0,4218,2 -4219,51988,0,4219,2 -4220,44767,0,4220,2 -4221,72686,1,4221,2 -4222,33000,0,4222,2 -4223,68681,0,4223,2 -4224,53511,0,4224,2 -4225,18790,0,4225,2 -4226,28761,0,4226,2 -4227,16545,1,4227,2 -4228,25681,1,4228,2 -4229,80892,0,4229,2 -4230,48928,1,4230,2 -4231,86890,0,4231,2 -4232,64187,0,4232,2 -4233,12504,0,4233,2 -4234,26872,1,4234,2 -4235,39421,0,4235,2 -4236,23788,0,4236,2 -4237,29576,0,4237,2 -4238,87332,0,4238,2 -4239,38670,1,4239,2 -4240,63209,0,4240,2 -4241,76575,0,4241,2 -4242,34589,1,4242,2 -4243,46345,0,4243,2 -4244,82474,0,4244,2 -4245,89818,0,4245,2 -4246,22542,0,4246,2 -4247,65088,0,4247,2 -4248,60524,0,4248,2 -4249,29498,0,4249,2 -4250,49856,0,4250,2 -4251,83265,0,4251,2 -4252,49753,0,4252,2 -4253,65203,0,4253,2 -4254,35791,1,4254,2 -4255,31752,0,4255,2 -4256,21112,0,4256,2 -4257,67666,0,4257,2 -4258,85119,0,4258,2 -4259,10650,0,4259,2 -4260,86053,1,4260,2 -4261,60609,1,4261,2 -4262,44224,0,4262,2 -4263,30900,0,4263,2 -4264,16962,0,4264,2 -4265,33885,0,4265,2 -4266,19644,0,4266,2 -4267,56982,0,4267,2 -4268,36021,0,4268,2 -4269,54606,0,4269,2 -4270,85988,0,4270,2 -4271,73283,0,4271,2 -4272,86578,0,4272,2 -4273,73529,0,4273,2 -4274,36542,0,4274,2 -4275,27917,1,4275,2 -4276,86003,0,4276,2 -4277,45056,0,4277,2 -4278,82731,0,4278,2 -4279,75302,1,4279,2 -4280,85190,0,4280,2 -4281,60341,0,4281,2 -4282,86055,0,4282,2 -4283,17463,0,4283,2 -4284,56618,0,4284,2 -4285,73998,0,4285,2 -4286,88697,0,4286,2 -4287,74965,0,4287,2 -4288,25394,0,4288,2 -4289,15204,1,4289,2 -4290,20669,0,4290,2 -4291,13395,0,4291,2 -4292,36280,1,4292,2 -4293,68810,0,4293,2 -4294,48332,0,4294,2 -4295,81348,0,4295,2 -4296,82955,0,4296,2 -4297,28065,0,4297,2 -4298,15070,0,4298,2 -4299,30629,0,4299,2 -4300,89909,0,4300,2 -4301,21780,0,4301,2 -4302,79630,0,4302,2 -4303,89177,0,4303,2 -4304,85833,0,4304,2 -4305,27512,0,4305,2 -4306,10590,1,4306,2 -4307,65753,0,4307,2 -4308,62699,0,4308,2 -4309,56974,0,4309,2 -4310,89909,0,4310,2 -4311,23606,0,4311,2 -4312,84300,1,4312,2 -4313,43773,0,4313,2 -4314,42117,0,4314,2 -4315,47010,1,4315,2 -4316,81347,0,4316,2 -4317,10071,0,4317,2 -4318,32618,0,4318,2 -4319,19477,0,4319,2 -4320,74921,0,4320,2 -4321,28211,0,4321,2 -4322,17620,1,4322,2 -4323,48978,0,4323,2 -4324,13856,0,4324,2 -4325,66336,0,4325,2 -4326,86884,0,4326,2 -4327,46176,0,4327,2 -4328,79111,0,4328,2 -4329,60441,0,4329,2 -4330,11696,0,4330,2 -4331,68178,1,4331,2 -4332,75009,0,4332,2 -4333,27698,0,4333,2 -4334,79474,0,4334,2 -4335,60638,0,4335,2 -4336,87392,0,4336,2 -4337,82082,1,4337,2 -4338,40864,0,4338,2 -4339,87206,0,4339,2 -4340,22991,0,4340,2 -4341,85469,0,4341,2 -4342,13147,0,4342,2 -4343,72121,0,4343,2 -4344,32866,1,4344,2 -4345,68483,0,4345,2 -4346,27175,0,4346,2 -4347,74928,0,4347,2 -4348,20478,0,4348,2 -4349,52166,0,4349,2 -4350,41389,0,4350,2 -4351,22222,1,4351,2 -4352,67568,0,4352,2 -4353,79731,0,4353,2 -4354,88476,1,4354,2 -4355,28511,0,4355,2 -4356,15065,0,4356,2 -4357,88827,0,4357,2 -4358,29447,1,4358,2 -4359,74120,0,4359,2 -4360,74529,0,4360,2 -4361,69501,0,4361,2 -4362,64842,0,4362,2 -4363,48986,1,4363,2 -4364,31265,0,4364,2 -4365,15864,1,4365,2 -4366,41444,0,4366,2 -4367,46701,0,4367,2 -4368,66006,0,4368,2 -4369,45911,1,4369,2 -4370,28088,0,4370,2 -4371,63891,1,4371,2 -4372,19993,0,4372,2 -4373,64522,0,4373,2 -4374,82184,0,4374,2 -4375,31157,0,4375,2 -4376,55472,0,4376,2 -4377,43211,1,4377,2 -4378,26033,0,4378,2 -4379,55262,1,4379,2 -4380,87501,0,4380,2 -4381,49617,1,4381,2 -4382,14042,0,4382,2 -4383,19852,0,4383,2 -4384,45706,0,4384,2 -4385,88577,0,4385,2 -4386,50955,0,4386,2 -4387,36362,0,4387,2 -4388,64571,0,4388,2 -4389,85014,0,4389,2 -4390,31108,0,4390,2 -4391,44669,0,4391,2 -4392,72615,0,4392,2 -4393,16901,1,4393,2 -4394,70482,0,4394,2 -4395,58578,0,4395,2 -4396,66220,0,4396,2 -4397,43312,0,4397,2 -4398,15775,0,4398,2 -4399,21116,0,4399,2 -4400,66973,0,4400,2 -4401,36818,1,4401,2 -4402,86453,0,4402,2 -4403,44935,0,4403,2 -4404,22457,0,4404,2 -4405,21449,0,4405,2 -4406,87862,0,4406,2 -4407,42181,0,4407,2 -4408,17019,0,4408,2 -4409,45837,0,4409,2 -4410,33834,0,4410,2 -4411,89841,0,4411,2 -4412,19524,0,4412,2 -4413,16651,0,4413,2 -4414,73133,1,4414,2 -4415,68926,0,4415,2 -4416,19757,0,4416,2 -4417,80412,1,4417,2 -4418,89920,0,4418,2 -4419,89778,1,4419,2 -4420,52771,1,4420,2 -4421,59879,0,4421,2 -4422,34025,0,4422,2 -4423,10058,0,4423,2 -4424,26519,0,4424,2 -4425,66333,0,4425,2 -4426,22575,0,4426,2 -4427,85949,0,4427,2 -4428,34925,0,4428,2 -4429,10010,0,4429,2 -4430,38072,1,4430,2 -4431,51411,0,4431,2 -4432,24123,1,4432,2 -4433,88046,0,4433,2 -4434,84117,0,4434,2 -4435,48186,0,4435,2 -4436,37634,0,4436,2 -4437,30203,0,4437,2 -4438,13216,0,4438,2 -4439,11314,0,4439,2 -4440,83487,0,4440,2 -4441,81537,0,4441,2 -4442,73922,0,4442,2 -4443,24972,1,4443,2 -4444,31081,0,4444,2 -4445,17613,0,4445,2 -4446,64058,0,4446,2 -4447,53186,0,4447,2 -4448,44515,0,4448,2 -4449,43410,0,4449,2 -4450,26533,0,4450,2 -4451,23374,0,4451,2 -4452,13002,1,4452,2 -4453,87619,0,4453,2 -4454,62101,0,4454,2 -4455,57879,0,4455,2 -4456,32384,0,4456,2 -4457,81566,1,4457,2 -4458,60633,0,4458,2 -4459,26918,0,4459,2 -4460,88464,0,4460,2 -4461,25835,0,4461,2 -4462,20150,0,4462,2 -4463,55526,0,4463,2 -4464,84977,0,4464,2 -4465,77770,0,4465,2 -4466,42991,0,4466,2 -4467,47789,0,4467,2 -4468,87015,0,4468,2 -4469,46468,0,4469,2 -4470,81291,1,4470,2 -4471,23195,0,4471,2 -4472,29315,0,4472,2 -4473,40365,0,4473,2 -4474,40195,0,4474,2 -4475,11880,0,4475,2 -4476,60854,0,4476,2 -4477,24577,0,4477,2 -4478,52745,1,4478,2 -4479,19537,0,4479,2 -4480,47269,0,4480,2 -4481,80831,0,4481,2 -4482,33425,0,4482,2 -4483,24339,0,4483,2 -4484,35097,0,4484,2 -4485,52368,0,4485,2 -4486,63412,0,4486,2 -4487,20022,1,4487,2 -4488,41967,0,4488,2 -4489,87907,0,4489,2 -4490,25100,1,4490,2 -4491,87746,0,4491,2 -4492,40227,1,4492,2 -4493,53552,0,4493,2 -4494,23100,0,4494,2 -4495,36880,0,4495,2 -4496,86029,0,4496,2 -4497,87864,1,4497,2 -4498,61964,0,4498,2 -4499,10666,0,4499,2 -4500,40291,0,4500,2 -4501,40426,0,4501,2 -4502,33782,1,4502,2 -4503,56085,1,4503,2 -4504,79103,0,4504,2 -4505,30458,0,4505,2 -4506,73215,0,4506,2 -4507,54259,0,4507,2 -4508,82547,0,4508,2 -4509,26011,0,4509,2 -4510,51748,1,4510,2 -4511,37840,0,4511,2 -4512,16739,0,4512,2 -4513,58131,0,4513,2 -4514,21597,0,4514,2 -4515,17244,0,4515,2 -4516,10155,0,4516,2 -4517,63835,0,4517,2 -4518,14946,0,4518,2 -4519,54444,0,4519,2 -4520,68837,0,4520,2 -4521,55217,0,4521,2 -4522,85619,0,4522,2 -4523,75847,0,4523,2 -4524,43987,0,4524,2 -4525,57358,0,4525,2 -4526,47515,0,4526,2 -4527,52393,0,4527,2 -4528,62067,0,4528,2 -4529,13480,0,4529,2 -4530,17903,1,4530,2 -4531,10318,0,4531,2 -4532,86722,0,4532,2 -4533,10271,0,4533,2 -4534,75459,0,4534,2 -4535,69098,0,4535,2 -4536,70568,0,4536,2 -4537,27992,0,4537,2 -4538,36775,0,4538,2 -4539,28628,0,4539,2 -4540,66650,0,4540,2 -4541,84572,0,4541,2 -4542,82083,0,4542,2 -4543,64667,1,4543,2 -4544,40461,0,4544,2 -4545,69065,0,4545,2 -4546,68432,0,4546,2 -4547,87564,0,4547,2 -4548,45505,0,4548,2 -4549,32240,0,4549,2 -4550,18172,0,4550,2 -4551,84394,0,4551,2 -4552,67096,1,4552,2 -4553,79246,0,4553,2 -4554,51498,1,4554,2 -4555,88634,0,4555,2 -4556,33507,0,4556,2 -4557,59906,0,4557,2 -4558,70067,0,4558,2 -4559,30235,0,4559,2 -4560,52121,0,4560,2 -4561,67478,0,4561,2 -4562,67170,0,4562,2 -4563,38951,0,4563,2 -4564,42291,1,4564,2 -4565,49550,0,4565,2 -4566,47677,0,4566,2 -4567,45923,0,4567,2 -4568,84583,1,4568,2 -4569,77376,0,4569,2 -4570,63239,0,4570,2 -4571,22414,0,4571,2 -4572,84807,0,4572,2 -4573,44080,0,4573,2 -4574,44638,0,4574,2 -4575,51112,0,4575,2 -4576,60735,0,4576,2 -4577,32018,1,4577,2 -4578,66420,0,4578,2 -4579,37158,0,4579,2 -4580,28973,1,4580,2 -4581,83291,0,4581,2 -4582,63828,0,4582,2 -4583,71149,1,4583,2 -4584,55400,1,4584,2 -4585,17760,0,4585,2 -4586,49748,0,4586,2 -4587,14176,0,4587,2 -4588,65427,0,4588,2 -4589,67018,0,4589,2 -4590,85663,1,4590,2 -4591,47717,0,4591,2 -4592,56728,1,4592,2 -4593,65168,0,4593,2 -4594,80022,0,4594,2 -4595,57114,0,4595,2 -4596,81041,0,4596,2 -4597,87910,1,4597,2 -4598,87877,0,4598,2 -4599,14925,0,4599,2 -4600,19006,0,4600,2 -4601,39766,0,4601,2 -4602,87979,0,4602,2 -4603,36392,1,4603,2 -4604,73549,0,4604,2 -4605,69363,0,4605,2 -4606,25011,0,4606,2 -4607,64929,0,4607,2 -4608,10531,0,4608,2 -4609,52327,0,4609,2 -4610,86152,0,4610,2 -4611,51177,0,4611,2 -4612,19598,0,4612,2 -4613,71573,0,4613,2 -4614,60342,0,4614,2 -4615,21657,0,4615,2 -4616,68793,0,4616,2 -4617,17125,1,4617,2 -4618,42753,0,4618,2 -4619,63906,0,4619,2 -4620,59209,0,4620,2 -4621,16634,1,4621,2 -4622,59785,1,4622,2 -4623,57127,0,4623,2 -4624,18145,0,4624,2 -4625,61718,0,4625,2 -4626,53005,0,4626,2 -4627,33809,0,4627,2 -4628,55334,0,4628,2 -4629,61310,0,4629,2 -4630,78938,0,4630,2 -4631,72312,0,4631,2 -4632,10974,0,4632,2 -4633,13808,0,4633,2 -4634,86830,0,4634,2 -4635,18443,0,4635,2 -4636,51918,0,4636,2 -4637,84206,0,4637,2 -4638,45482,0,4638,2 -4639,77396,0,4639,2 -4640,46286,0,4640,2 -4641,50059,0,4641,2 -4642,74125,0,4642,2 -4643,66010,1,4643,2 -4644,88074,1,4644,2 -4645,43089,0,4645,2 -4646,71600,0,4646,2 -4647,62110,0,4647,2 -4648,66190,0,4648,2 -4649,50346,0,4649,2 -4650,31482,0,4650,2 -4651,35193,0,4651,2 -4652,87491,0,4652,2 -4653,61111,1,4653,2 -4654,22436,0,4654,2 -4655,55977,0,4655,2 -4656,12028,0,4656,2 -4657,39986,0,4657,2 -4658,77112,0,4658,2 -4659,24794,0,4659,2 -4660,48259,1,4660,2 -4661,59609,1,4661,2 -4662,70876,0,4662,2 -4663,34839,0,4663,2 -4664,74986,1,4664,2 -4665,61098,0,4665,2 -4666,51291,0,4666,2 -4667,46289,0,4667,2 -4668,25681,0,4668,2 -4669,60404,0,4669,2 -4670,69933,1,4670,2 -4671,44097,1,4671,2 -4672,16284,0,4672,2 -4673,50327,0,4673,2 -4674,31324,1,4674,2 -4675,63187,0,4675,2 -4676,31458,0,4676,2 -4677,35409,0,4677,2 -4678,14715,0,4678,2 -4679,68622,0,4679,2 -4680,51790,0,4680,2 -4681,72601,0,4681,2 -4682,21601,0,4682,2 -4683,66281,0,4683,2 -4684,87722,0,4684,2 -4685,65283,0,4685,2 -4686,62918,0,4686,2 -4687,73237,0,4687,2 -4688,20030,1,4688,2 -4689,79553,0,4689,2 -4690,82909,0,4690,2 -4691,51077,0,4691,2 -4692,75054,0,4692,2 -4693,73174,0,4693,2 -4694,73568,0,4694,2 -4695,19126,0,4695,2 -4696,61516,1,4696,2 -4697,88652,1,4697,2 -4698,13634,1,4698,2 -4699,13837,0,4699,2 -4700,76772,1,4700,2 -4701,79319,0,4701,2 -4702,65898,0,4702,2 -4703,67561,0,4703,2 -4704,29825,0,4704,2 -4705,12994,0,4705,2 -4706,28728,0,4706,2 -4707,67297,0,4707,2 -4708,49978,0,4708,2 -4709,19660,0,4709,2 -4710,57407,0,4710,2 -4711,25788,0,4711,2 -4712,62128,0,4712,2 -4713,71857,0,4713,2 -4714,76390,0,4714,2 -4715,64525,1,4715,2 -4716,25748,0,4716,2 -4717,57451,0,4717,2 -4718,62892,1,4718,2 -4719,52095,0,4719,2 -4720,37251,1,4720,2 -4721,18738,0,4721,2 -4722,11869,0,4722,2 -4723,42083,0,4723,2 -4724,20036,0,4724,2 -4725,63184,0,4725,2 -4726,40392,0,4726,2 -4727,68047,0,4727,2 -4728,16858,0,4728,2 -4729,16047,0,4729,2 -4730,11734,0,4730,2 -4731,59087,0,4731,2 -4732,60432,0,4732,2 -4733,49285,0,4733,2 -4734,10082,1,4734,2 -4735,35059,0,4735,2 -4736,31351,0,4736,2 -4737,61316,0,4737,2 -4738,54277,0,4738,2 -4739,64001,0,4739,2 -4740,69266,0,4740,2 -4741,40532,0,4741,2 -4742,58107,0,4742,2 -4743,53020,0,4743,2 -4744,29434,0,4744,2 -4745,29257,0,4745,2 -4746,11708,0,4746,2 -4747,40889,0,4747,2 -4748,42137,1,4748,2 -4749,41964,0,4749,2 -4750,32548,0,4750,2 -4751,64423,0,4751,2 -4752,26162,0,4752,2 -4753,52699,0,4753,2 -4754,19448,1,4754,2 -4755,33227,0,4755,2 -4756,80033,1,4756,2 -4757,58687,0,4757,2 -4758,39593,0,4758,2 -4759,21651,0,4759,2 -4760,47262,0,4760,2 -4761,57513,0,4761,2 -4762,84888,0,4762,2 -4763,42223,0,4763,2 -4764,80140,0,4764,2 -4765,51649,1,4765,2 -4766,21576,0,4766,2 -4767,71997,0,4767,2 -4768,72153,0,4768,2 -4769,61179,0,4769,2 -4770,41435,0,4770,2 -4771,80025,1,4771,2 -4772,12099,0,4772,2 -4773,33568,0,4773,2 -4774,81481,1,4774,2 -4775,32459,0,4775,2 -4776,62530,1,4776,2 -4777,47286,0,4777,2 -4778,69680,0,4778,2 -4779,17256,0,4779,2 -4780,22718,0,4780,2 -4781,62864,0,4781,2 -4782,75498,0,4782,2 -4783,18680,1,4783,2 -4784,77069,0,4784,2 -4785,49011,0,4785,2 -4786,27934,0,4786,2 -4787,55267,1,4787,2 -4788,41775,0,4788,2 -4789,30432,0,4789,2 -4790,78274,1,4790,2 -4791,49037,1,4791,2 -4792,36808,1,4792,2 -4793,33491,1,4793,2 -4794,30803,0,4794,2 -4795,74925,1,4795,2 -4796,45662,1,4796,2 -4797,28459,0,4797,2 -4798,89013,0,4798,2 -4799,42809,0,4799,2 -4800,86244,1,4800,2 -4801,10718,1,4801,2 -4802,36564,0,4802,2 -4803,87803,0,4803,2 -4804,35821,0,4804,2 -4805,33526,0,4805,2 -4806,19141,0,4806,2 -4807,73336,0,4807,2 -4808,84351,0,4808,2 -4809,85020,1,4809,2 -4810,62883,0,4810,2 -4811,19491,0,4811,2 -4812,47694,1,4812,2 -4813,40378,0,4813,2 -4814,34748,1,4814,2 -4815,22807,0,4815,2 -4816,58400,0,4816,2 -4817,23052,0,4817,2 -4818,52363,0,4818,2 -4819,60443,0,4819,2 -4820,64572,1,4820,2 -4821,17792,0,4821,2 -4822,45637,0,4822,2 -4823,17669,0,4823,2 -4824,19305,1,4824,2 -4825,69122,0,4825,2 -4826,15413,1,4826,2 -4827,73154,0,4827,2 -4828,18783,0,4828,2 -4829,26134,0,4829,2 -4830,83444,0,4830,2 -4831,75434,0,4831,2 -4832,12680,0,4832,2 -4833,23087,1,4833,2 -4834,75291,0,4834,2 -4835,33873,0,4835,2 -4836,34918,0,4836,2 -4837,65038,0,4837,2 -4838,40669,0,4838,2 -4839,51289,0,4839,2 -4840,40956,0,4840,2 -4841,74746,1,4841,2 -4842,79206,0,4842,2 -4843,72021,0,4843,2 -4844,15202,0,4844,2 -4845,42599,0,4845,2 -4846,61947,1,4846,2 -4847,62203,0,4847,2 -4848,50966,1,4848,2 -4849,33065,1,4849,2 -4850,58099,0,4850,2 -4851,58642,0,4851,2 -4852,84085,0,4852,2 -4853,21657,0,4853,2 -4854,15700,0,4854,2 -4855,14297,0,4855,2 -4856,64214,0,4856,2 -4857,43783,0,4857,2 -4858,69754,1,4858,2 -4859,16167,0,4859,2 -4860,89576,0,4860,2 -4861,72040,0,4861,2 -4862,58002,1,4862,2 -4863,33814,0,4863,2 -4864,88754,0,4864,2 -4865,63726,0,4865,2 -4866,14655,0,4866,2 -4867,34487,0,4867,2 -4868,64695,0,4868,2 -4869,24483,0,4869,2 -4870,21357,0,4870,2 -4871,59751,0,4871,2 -4872,37389,0,4872,2 -4873,41817,1,4873,2 -4874,21605,0,4874,2 -4875,50947,1,4875,2 -4876,71258,0,4876,2 -4877,72745,0,4877,2 -4878,37680,0,4878,2 -4879,10460,1,4879,2 -4880,84025,0,4880,2 -4881,64695,1,4881,2 -4882,66734,0,4882,2 -4883,16537,0,4883,2 -4884,38222,1,4884,2 -4885,34199,1,4885,2 -4886,22481,0,4886,2 -4887,73649,0,4887,2 -4888,88903,0,4888,2 -4889,64170,0,4889,2 -4890,25713,0,4890,2 -4891,47539,0,4891,2 -4892,65560,0,4892,2 -4893,18742,0,4893,2 -4894,13073,0,4894,2 -4895,31382,0,4895,2 -4896,34677,0,4896,2 -4897,29053,0,4897,2 -4898,14572,1,4898,2 -4899,75864,0,4899,2 -4900,80367,0,4900,2 -4901,51985,0,4901,2 -4902,34397,0,4902,2 -4903,67465,0,4903,2 -4904,66143,0,4904,2 -4905,89643,0,4905,2 -4906,83004,0,4906,2 -4907,27113,1,4907,2 -4908,81781,1,4908,2 -4909,50266,0,4909,2 -4910,49350,0,4910,2 -4911,27327,0,4911,2 -4912,53694,0,4912,2 -4913,52848,0,4913,2 -4914,61733,0,4914,2 -4915,49010,0,4915,2 -4916,37866,0,4916,2 -4917,56333,0,4917,2 -4918,57504,0,4918,2 -4919,24427,0,4919,2 -4920,13585,0,4920,2 -4921,63790,0,4921,2 -4922,27960,0,4922,2 -4923,45309,0,4923,2 -4924,76273,1,4924,2 -4925,55587,0,4925,2 -4926,83527,0,4926,2 -4927,50731,0,4927,2 -4928,48487,1,4928,2 -4929,19015,0,4929,2 -4930,14614,0,4930,2 -4931,47920,0,4931,2 -4932,59358,0,4932,2 -4933,80610,0,4933,2 -4934,82075,1,4934,2 -4935,12027,0,4935,2 -4936,79776,0,4936,2 -4937,56801,0,4937,2 -4938,40768,1,4938,2 -4939,85882,0,4939,2 -4940,83029,0,4940,2 -4941,53255,0,4941,2 -4942,74317,0,4942,2 -4943,75599,0,4943,2 -4944,70828,0,4944,2 -4945,85481,0,4945,2 -4946,26723,0,4946,2 -4947,47886,0,4947,2 -4948,17245,0,4948,2 -4949,39137,0,4949,2 -4950,37332,0,4950,2 -4951,52179,0,4951,2 -4952,45299,0,4952,2 -4953,86381,0,4953,2 -4954,89557,0,4954,2 -4955,48910,0,4955,2 -4956,47474,0,4956,2 -4957,25661,0,4957,2 -4958,64315,0,4958,2 -4959,72262,0,4959,2 -4960,86396,0,4960,2 -4961,87380,0,4961,2 -4962,34301,0,4962,2 -4963,15191,0,4963,2 -4964,49126,0,4964,2 -4965,77385,0,4965,2 -4966,33307,1,4966,2 -4967,46237,0,4967,2 -4968,38509,0,4968,2 -4969,58596,0,4969,2 -4970,75513,0,4970,2 -4971,11092,0,4971,2 -4972,64468,0,4972,2 -4973,37609,0,4973,2 -4974,72394,0,4974,2 -4975,86958,0,4975,2 -4976,69554,0,4976,2 -4977,35646,0,4977,2 -4978,40417,0,4978,2 -4979,42303,1,4979,2 -4980,79738,1,4980,2 -4981,11318,0,4981,2 -4982,78897,0,4982,2 -4983,24746,0,4983,2 -4984,11070,0,4984,2 -4985,73055,0,4985,2 -4986,26340,1,4986,2 -4987,37266,1,4987,2 -4988,18223,0,4988,2 -4989,82459,1,4989,2 -4990,35102,0,4990,2 -4991,79015,0,4991,2 -4992,72969,0,4992,2 -4993,37722,1,4993,2 -4994,55478,0,4994,2 -4995,89229,1,4995,2 -4996,59299,1,4996,2 -4997,35122,0,4997,2 -4998,74052,1,4998,2 -4999,23278,0,4999,2 -5000,38902,0,5000,2 -5001,78814,0,5001,2 -5002,40692,1,5002,2 -5003,45146,0,5003,2 -5004,73773,0,5004,2 -5005,64471,0,5005,2 -5006,76782,1,5006,2 -5007,19803,0,5007,2 -5008,14865,0,5008,2 -5009,58771,0,5009,2 -5010,35114,0,5010,2 -5011,11356,0,5011,2 -5012,30775,0,5012,2 -5013,26130,0,5013,2 -5014,19925,0,5014,2 -5015,35210,0,5015,2 -5016,67738,0,5016,2 -5017,59697,0,5017,2 -5018,45947,0,5018,2 -5019,41053,0,5019,2 -5020,10826,0,5020,2 -5021,62920,0,5021,2 -5022,88129,0,5022,2 -5023,61156,0,5023,2 -5024,71674,1,5024,2 -5025,14550,0,5025,2 -5026,86980,0,5026,2 -5027,72950,0,5027,2 -5028,18920,0,5028,2 -5029,78685,0,5029,2 -5030,81974,0,5030,2 -5031,69204,0,5031,2 -5032,31132,0,5032,2 -5033,45956,0,5033,2 -5034,74002,1,5034,2 -5035,22528,0,5035,2 -5036,40736,0,5036,2 -5037,48960,0,5037,2 -5038,49918,0,5038,2 -5039,50806,0,5039,2 -5040,53465,0,5040,2 -5041,20155,0,5041,2 -5042,87771,0,5042,2 -5043,83145,0,5043,2 -5044,45209,0,5044,2 -5045,26839,0,5045,2 -5046,86523,0,5046,2 -5047,52683,0,5047,2 -5048,57240,1,5048,2 -5049,82491,0,5049,2 -5050,13754,0,5050,2 -5051,75963,0,5051,2 -5052,78249,0,5052,2 -5053,87598,0,5053,2 -5054,88165,1,5054,2 -5055,40927,0,5055,2 -5056,47835,0,5056,2 -5057,32365,0,5057,2 -5058,11507,0,5058,2 -5059,20690,0,5059,2 -5060,21047,0,5060,2 -5061,38481,0,5061,2 -5062,81554,0,5062,2 -5063,52851,1,5063,2 -5064,25321,0,5064,2 -5065,66374,1,5065,2 -5066,30352,1,5066,2 -5067,63546,0,5067,2 -5068,21280,1,5068,2 -5069,18031,1,5069,2 -5070,45781,0,5070,2 -5071,89710,0,5071,2 -5072,82841,0,5072,2 -5073,35156,0,5073,2 -5074,39106,0,5074,2 -5075,49575,0,5075,2 -5076,41842,0,5076,2 -5077,52837,0,5077,2 -5078,29529,0,5078,2 -5079,64973,0,5079,2 -5080,39883,0,5080,2 -5081,74356,0,5081,2 -5082,75146,0,5082,2 -5083,47127,0,5083,2 -5084,17976,0,5084,2 -5085,49043,0,5085,2 -5086,28787,0,5086,2 -5087,13199,1,5087,2 -5088,69181,0,5088,2 -5089,67363,0,5089,2 -5090,86655,0,5090,2 -5091,23198,0,5091,2 -5092,76676,0,5092,2 -5093,87403,0,5093,2 -5094,89611,0,5094,2 -5095,57200,0,5095,2 -5096,46051,0,5096,2 -5097,47623,0,5097,2 -5098,50978,0,5098,2 -5099,36224,0,5099,2 -5100,27025,0,5100,2 -5101,35446,0,5101,2 -5102,55204,0,5102,2 -5103,39683,0,5103,2 -5104,62165,0,5104,2 -5105,54127,0,5105,2 -5106,42644,1,5106,2 -5107,82506,0,5107,2 -5108,80570,1,5108,2 -5109,30717,0,5109,2 -5110,36451,0,5110,2 -5111,85669,0,5111,2 -5112,25693,0,5112,2 -5113,12280,0,5113,2 -5114,59471,0,5114,2 -5115,15798,0,5115,2 -5116,52533,0,5116,2 -5117,55877,0,5117,2 -5118,27791,0,5118,2 -5119,34832,0,5119,2 -5120,27248,0,5120,2 -5121,76163,0,5121,2 -5122,82034,0,5122,2 -5123,21829,1,5123,2 -5124,19202,0,5124,2 -5125,19426,0,5125,2 -5126,29648,0,5126,2 -5127,62021,1,5127,2 -5128,89173,0,5128,2 -5129,80916,1,5129,2 -5130,71274,1,5130,2 -5131,24600,0,5131,2 -5132,69890,0,5132,2 -5133,21273,1,5133,2 -5134,67466,0,5134,2 -5135,82343,1,5135,2 -5136,35340,0,5136,2 -5137,43188,0,5137,2 -5138,26512,0,5138,2 -5139,73569,0,5139,2 -5140,74402,0,5140,2 -5141,63381,0,5141,2 -5142,41436,0,5142,2 -5143,54618,1,5143,2 -5144,51161,0,5144,2 -5145,47163,1,5145,2 -5146,88373,0,5146,2 -5147,77722,1,5147,2 -5148,13490,0,5148,2 -5149,28570,0,5149,2 -5150,55737,0,5150,2 -5151,79990,0,5151,2 -5152,89993,0,5152,2 -5153,49096,0,5153,2 -5154,71012,1,5154,2 -5155,27728,0,5155,2 -5156,18773,0,5156,2 -5157,18454,0,5157,2 -5158,43590,0,5158,2 -5159,27340,0,5159,2 -5160,76123,1,5160,2 -5161,22365,0,5161,2 -5162,11243,1,5162,2 -5163,69769,0,5163,2 -5164,51232,0,5164,2 -5165,62680,0,5165,2 -5166,75238,0,5166,2 -5167,87323,0,5167,2 -5168,40149,0,5168,2 -5169,33740,0,5169,2 -5170,26555,0,5170,2 -5171,81794,0,5171,2 -5172,37958,1,5172,2 -5173,27669,0,5173,2 -5174,36166,0,5174,2 -5175,13490,0,5175,2 -5176,89510,0,5176,2 -5177,82086,0,5177,2 -5178,19916,0,5178,2 -5179,19282,0,5179,2 -5180,68674,0,5180,2 -5181,21925,0,5181,2 -5182,37607,1,5182,2 -5183,71117,0,5183,2 -5184,71639,0,5184,2 -5185,64382,0,5185,2 -5186,65149,0,5186,2 -5187,21060,1,5187,2 -5188,80146,0,5188,2 -5189,25698,1,5189,2 -5190,72869,0,5190,2 -5191,50552,0,5191,2 -5192,43613,0,5192,2 -5193,46147,0,5193,2 -5194,35681,0,5194,2 -5195,63185,0,5195,2 -5196,82187,1,5196,2 -5197,17235,0,5197,2 -5198,16876,0,5198,2 -5199,74280,0,5199,2 -5200,32941,0,5200,2 -5201,68035,0,5201,2 -5202,44415,0,5202,2 -5203,82519,0,5203,2 -5204,12895,0,5204,2 -5205,10052,0,5205,2 -5206,81763,0,5206,2 -5207,70613,0,5207,2 -5208,17355,0,5208,2 -5209,78981,0,5209,2 -5210,21348,1,5210,2 -5211,29980,0,5211,2 -5212,39726,0,5212,2 -5213,19873,0,5213,2 -5214,83807,0,5214,2 -5215,49339,0,5215,2 -5216,63613,0,5216,2 -5217,31865,0,5217,2 -5218,39398,1,5218,2 -5219,10749,0,5219,2 -5220,47771,0,5220,2 -5221,35188,0,5221,2 -5222,30240,1,5222,2 -5223,36751,0,5223,2 -5224,43783,0,5224,2 -5225,70058,0,5225,2 -5226,45296,0,5226,2 -5227,79839,0,5227,2 -5228,49164,0,5228,2 -5229,39926,0,5229,2 -5230,17986,0,5230,2 -5231,82482,1,5231,2 -5232,43730,0,5232,2 -5233,78298,0,5233,2 -5234,20773,0,5234,2 -5235,45215,0,5235,2 -5236,81431,0,5236,2 -5237,40121,0,5237,2 -5238,79259,0,5238,2 -5239,43155,0,5239,2 -5240,38361,0,5240,2 -5241,25974,0,5241,2 -5242,64115,0,5242,2 -5243,47480,1,5243,2 -5244,30106,0,5244,2 -5245,69926,0,5245,2 -5246,30653,0,5246,2 -5247,37798,0,5247,2 -5248,22983,0,5248,2 -5249,79409,1,5249,2 -5250,44022,0,5250,2 -5251,72301,1,5251,2 -5252,25665,0,5252,2 -5253,27525,0,5253,2 -5254,80073,0,5254,2 -5255,61325,0,5255,2 -5256,37431,0,5256,2 -5257,34259,0,5257,2 -5258,69615,0,5258,2 -5259,26473,0,5259,2 -5260,59574,0,5260,2 -5261,87172,0,5261,2 -5262,88165,0,5262,2 -5263,45053,0,5263,2 -5264,39733,0,5264,2 -5265,81003,0,5265,2 -5266,40949,0,5266,2 -5267,61152,0,5267,2 -5268,60765,0,5268,2 -5269,64524,1,5269,2 -5270,46634,0,5270,2 -5271,15203,0,5271,2 -5272,75085,1,5272,2 -5273,80884,0,5273,2 -5274,85648,0,5274,2 -5275,82193,1,5275,2 -5276,77935,0,5276,2 -5277,44254,0,5277,2 -5278,44664,0,5278,2 -5279,20103,0,5279,2 -5280,52168,0,5280,2 -5281,57918,0,5281,2 -5282,79152,1,5282,2 -5283,84648,0,5283,2 -5284,30346,0,5284,2 -5285,61451,0,5285,2 -5286,74780,0,5286,2 -5287,57745,0,5287,2 -5288,78264,0,5288,2 -5289,32509,1,5289,2 -5290,39133,1,5290,2 -5291,81209,0,5291,2 -5292,39757,0,5292,2 -5293,50990,0,5293,2 -5294,62179,0,5294,2 -5295,48649,1,5295,2 -5296,60760,0,5296,2 -5297,20598,1,5297,2 -5298,69846,0,5298,2 -5299,53579,0,5299,2 -5300,27579,0,5300,2 -5301,74211,0,5301,2 -5302,64821,1,5302,2 -5303,46823,0,5303,2 -5304,56346,0,5304,2 -5305,29903,0,5305,2 -5306,26231,0,5306,2 -5307,55417,0,5307,2 -5308,61046,0,5308,2 -5309,51957,1,5309,2 -5310,73207,1,5310,2 -5311,40208,0,5311,2 -5312,37432,0,5312,2 -5313,45729,0,5313,2 -5314,31083,0,5314,2 -5315,79468,0,5315,2 -5316,22119,0,5316,2 -5317,85537,0,5317,2 -5318,71053,0,5318,2 -5319,39782,0,5319,2 -5320,86355,0,5320,2 -5321,58148,0,5321,2 -5322,64507,0,5322,2 -5323,46162,0,5323,2 -5324,30919,0,5324,2 -5325,43250,0,5325,2 -5326,80703,0,5326,2 -5327,14224,0,5327,2 -5328,55140,1,5328,2 -5329,38091,0,5329,2 -5330,42224,0,5330,2 -5331,45491,0,5331,2 -5332,23118,1,5332,2 -5333,14262,0,5333,2 -5334,77816,0,5334,2 -5335,67653,0,5335,2 -5336,67800,1,5336,2 -5337,21680,1,5337,2 -5338,11229,1,5338,2 -5339,71336,0,5339,2 -5340,33187,0,5340,2 -5341,83332,0,5341,2 -5342,29828,0,5342,2 -5343,88876,0,5343,2 -5344,85802,0,5344,2 -5345,84128,0,5345,2 -5346,51778,0,5346,2 -5347,10451,0,5347,2 -5348,33088,0,5348,2 -5349,31518,0,5349,2 -5350,43083,0,5350,2 -5351,70143,1,5351,2 -5352,41877,1,5352,2 -5353,30893,0,5353,2 -5354,48175,0,5354,2 -5355,10178,1,5355,2 -5356,59880,0,5356,2 -5357,75755,0,5357,2 -5358,48756,0,5358,2 -5359,88839,1,5359,2 -5360,50009,0,5360,2 -5361,79011,1,5361,2 -5362,82765,0,5362,2 -5363,11976,0,5363,2 -5364,25238,0,5364,2 -5365,60159,0,5365,2 -5366,32764,0,5366,2 -5367,76164,0,5367,2 -5368,20128,1,5368,2 -5369,38574,0,5369,2 -5370,78988,0,5370,2 -5371,39963,1,5371,2 -5372,62659,0,5372,2 -5373,71273,0,5373,2 -5374,77134,0,5374,2 -5375,63340,0,5375,2 -5376,44256,0,5376,2 -5377,50445,0,5377,2 -5378,45557,0,5378,2 -5379,33902,0,5379,2 -5380,71184,0,5380,2 -5381,46685,0,5381,2 -5382,80968,0,5382,2 -5383,75204,0,5383,2 -5384,67674,1,5384,2 -5385,35132,0,5385,2 -5386,17301,0,5386,2 -5387,66880,1,5387,2 -5388,10738,0,5388,2 -5389,19859,0,5389,2 -5390,42559,0,5390,2 -5391,75924,0,5391,2 -5392,15523,1,5392,2 -5393,88788,0,5393,2 -5394,64555,0,5394,2 -5395,49405,0,5395,2 -5396,34388,1,5396,2 -5397,65227,0,5397,2 -5398,30882,0,5398,2 -5399,45572,0,5399,2 -5400,48663,0,5400,2 -5401,49422,0,5401,2 -5402,77132,1,5402,2 -5403,60630,0,5403,2 -5404,83691,0,5404,2 -5405,49443,0,5405,2 -5406,37881,0,5406,2 -5407,77205,0,5407,2 -5408,84812,1,5408,2 -5409,73843,0,5409,2 -5410,23984,1,5410,2 -5411,42345,0,5411,2 -5412,41755,0,5412,2 -5413,50165,0,5413,2 -5414,81696,1,5414,2 -5415,38551,0,5415,2 -5416,14629,0,5416,2 -5417,39390,1,5417,2 -5418,16457,0,5418,2 -5419,44103,0,5419,2 -5420,51440,0,5420,2 -5421,34022,0,5421,2 -5422,34234,0,5422,2 -5423,82273,0,5423,2 -5424,46222,0,5424,2 -5425,18438,0,5425,2 -5426,18281,0,5426,2 -5427,39431,0,5427,2 -5428,18411,0,5428,2 -5429,67855,0,5429,2 -5430,36058,1,5430,2 -5431,57046,0,5431,2 -5432,31427,0,5432,2 -5433,18179,0,5433,2 -5434,16295,0,5434,2 -5435,68067,0,5435,2 -5436,57655,0,5436,2 -5437,87725,0,5437,2 -5438,18248,1,5438,2 -5439,39299,0,5439,2 -5440,56691,1,5440,2 -5441,15234,0,5441,2 -5442,37649,0,5442,2 -5443,64614,0,5443,2 -5444,73372,0,5444,2 -5445,55963,0,5445,2 -5446,86397,0,5446,2 -5447,39348,1,5447,2 -5448,71265,0,5448,2 -5449,46219,0,5449,2 -5450,83482,0,5450,2 -5451,75598,0,5451,2 -5452,89497,0,5452,2 -5453,29694,0,5453,2 -5454,75084,0,5454,2 -5455,45597,0,5455,2 -5456,60389,0,5456,2 -5457,65005,0,5457,2 -5458,73744,0,5458,2 -5459,27017,0,5459,2 -5460,65680,0,5460,2 -5461,83684,0,5461,2 -5462,15881,0,5462,2 -5463,16058,1,5463,2 -5464,42693,0,5464,2 -5465,20786,0,5465,2 -5466,27942,0,5466,2 -5467,83127,0,5467,2 -5468,17136,0,5468,2 -5469,60545,0,5469,2 -5470,35319,0,5470,2 -5471,13386,0,5471,2 -5472,29369,0,5472,2 -5473,50676,0,5473,2 -5474,31283,0,5474,2 -5475,12956,0,5475,2 -5476,11323,1,5476,2 -5477,48044,0,5477,2 -5478,89453,0,5478,2 -5479,31145,0,5479,2 -5480,21937,0,5480,2 -5481,78690,1,5481,2 -5482,69730,0,5482,2 -5483,24473,0,5483,2 -5484,75522,0,5484,2 -5485,74879,0,5485,2 -5486,83813,0,5486,2 -5487,47269,0,5487,2 -5488,64005,0,5488,2 -5489,16845,1,5489,2 -5490,65962,0,5490,2 -5491,38281,0,5491,2 -5492,26048,0,5492,2 -5493,54138,0,5493,2 -5494,15307,0,5494,2 -5495,57848,1,5495,2 -5496,76541,0,5496,2 -5497,75082,0,5497,2 -5498,37499,0,5498,2 -5499,88359,0,5499,2 -5500,11386,0,5500,2 -5501,29993,0,5501,2 -5502,47229,0,5502,2 -5503,83102,0,5503,2 -5504,63953,0,5504,2 -5505,76739,0,5505,2 -5506,83976,0,5506,2 -5507,58746,0,5507,2 -5508,39321,1,5508,2 -5509,70271,0,5509,2 -5510,73752,0,5510,2 -5511,22815,0,5511,2 -5512,76640,0,5512,2 -5513,68029,0,5513,2 -5514,12128,0,5514,2 -5515,12737,0,5515,2 -5516,25457,0,5516,2 -5517,28761,0,5517,2 -5518,46088,1,5518,2 -5519,84886,0,5519,2 -5520,14069,0,5520,2 -5521,62014,0,5521,2 -5522,46665,0,5522,2 -5523,73079,0,5523,2 -5524,64901,0,5524,2 -5525,65471,0,5525,2 -5526,75655,0,5526,2 -5527,44789,0,5527,2 -5528,86660,0,5528,2 -5529,36205,0,5529,2 -5530,57242,0,5530,2 -5531,65431,0,5531,2 -5532,57046,1,5532,2 -5533,60685,0,5533,2 -5534,57012,1,5534,2 -5535,73789,0,5535,2 -5536,47797,0,5536,2 -5537,63695,0,5537,2 -5538,30313,0,5538,2 -5539,16803,0,5539,2 -5540,30573,1,5540,2 -5541,80761,0,5541,2 -5542,30498,0,5542,2 -5543,52009,0,5543,2 -5544,56945,0,5544,2 -5545,35483,1,5545,2 -5546,66447,0,5546,2 -5547,45278,1,5547,2 -5548,15744,1,5548,2 -5549,74598,0,5549,2 -5550,61919,0,5550,2 -5551,83640,1,5551,2 -5552,39135,0,5552,2 -5553,53906,1,5553,2 -5554,57392,0,5554,2 -5555,18763,0,5555,2 -5556,53135,0,5556,2 -5557,57439,1,5557,2 -5558,88262,0,5558,2 -5559,48245,1,5559,2 -5560,78383,0,5560,2 -5561,24398,0,5561,2 -5562,28051,0,5562,2 -5563,43895,0,5563,2 -5564,13056,0,5564,2 -5565,57366,1,5565,2 -5566,41652,0,5566,2 -5567,79516,0,5567,2 -5568,35568,1,5568,2 -5569,33603,0,5569,2 -5570,56156,0,5570,2 -5571,17412,0,5571,2 -5572,48611,0,5572,2 -5573,73013,0,5573,2 -5574,13051,0,5574,2 -5575,46671,0,5575,2 -5576,16414,1,5576,2 -5577,41066,0,5577,2 -5578,31539,1,5578,2 -5579,26768,0,5579,2 -5580,40202,0,5580,2 -5581,81263,0,5581,2 -5582,23225,0,5582,2 -5583,83662,0,5583,2 -5584,79598,0,5584,2 -5585,66914,0,5585,2 -5586,61236,0,5586,2 -5587,84561,1,5587,2 -5588,21955,0,5588,2 -5589,11880,0,5589,2 -5590,83279,0,5590,2 -5591,38966,0,5591,2 -5592,30279,1,5592,2 -5593,12403,1,5593,2 -5594,31053,0,5594,2 -5595,68922,1,5595,2 -5596,20129,1,5596,2 -5597,54116,0,5597,2 -5598,80408,0,5598,2 -5599,28641,0,5599,2 -5600,48831,0,5600,2 -5601,71126,0,5601,2 -5602,37794,0,5602,2 -5603,31360,0,5603,2 -5604,48917,0,5604,2 -5605,54190,1,5605,2 -5606,13417,0,5606,2 -5607,71139,0,5607,2 -5608,62744,1,5608,2 -5609,10484,0,5609,2 -5610,40567,0,5610,2 -5611,36204,1,5611,2 -5612,39026,0,5612,2 -5613,22429,1,5613,2 -5614,30882,0,5614,2 -5615,73960,0,5615,2 -5616,64889,0,5616,2 -5617,61399,1,5617,2 -5618,67636,1,5618,2 -5619,31178,1,5619,2 -5620,66248,0,5620,2 -5621,27764,0,5621,2 -5622,21752,0,5622,2 -5623,71937,0,5623,2 -5624,50875,0,5624,2 -5625,13847,0,5625,2 -5626,32907,0,5626,2 -5627,85045,0,5627,2 -5628,73246,0,5628,2 -5629,14130,0,5629,2 -5630,78937,0,5630,2 -5631,46644,1,5631,2 -5632,52763,0,5632,2 -5633,77486,1,5633,2 -5634,14287,0,5634,2 -5635,76149,0,5635,2 -5636,31478,0,5636,2 -5637,43958,0,5637,2 -5638,42383,0,5638,2 -5639,26745,1,5639,2 -5640,47546,1,5640,2 -5641,68866,0,5641,2 -5642,34180,0,5642,2 -5643,83599,0,5643,2 -5644,62956,0,5644,2 -5645,13871,0,5645,2 -5646,41283,1,5646,2 -5647,75408,0,5647,2 -5648,43035,0,5648,2 -5649,19391,0,5649,2 -5650,47978,0,5650,2 -5651,22255,0,5651,2 -5652,23158,0,5652,2 -5653,83892,1,5653,2 -5654,84699,0,5654,2 -5655,18602,0,5655,2 -5656,23338,0,5656,2 -5657,51795,0,5657,2 -5658,65215,0,5658,2 -5659,13610,0,5659,2 -5660,24396,0,5660,2 -5661,16150,0,5661,2 -5662,52098,0,5662,2 -5663,45962,0,5663,2 -5664,17321,0,5664,2 -5665,45557,1,5665,2 -5666,33719,0,5666,2 -5667,66128,0,5667,2 -5668,54420,0,5668,2 -5669,40299,1,5669,2 -5670,37631,0,5670,2 -5671,25117,0,5671,2 -5672,51169,0,5672,2 -5673,41396,0,5673,2 -5674,79935,0,5674,2 -5675,56879,0,5675,2 -5676,27458,0,5676,2 -5677,35472,0,5677,2 -5678,72173,0,5678,2 -5679,48655,0,5679,2 -5680,24195,0,5680,2 -5681,15026,0,5681,2 -5682,76149,0,5682,2 -5683,85684,0,5683,2 -5684,30415,0,5684,2 -5685,56894,0,5685,2 -5686,62810,0,5686,2 -5687,65574,1,5687,2 -5688,64124,1,5688,2 -5689,87979,0,5689,2 -5690,16204,0,5690,2 -5691,84304,0,5691,2 -5692,78096,0,5692,2 -5693,78879,1,5693,2 -5694,31070,0,5694,2 -5695,25094,0,5695,2 -5696,82818,0,5696,2 -5697,13945,1,5697,2 -5698,34911,0,5698,2 -5699,10878,0,5699,2 -5700,86592,0,5700,2 -5701,13081,0,5701,2 -5702,24000,0,5702,2 -5703,54071,0,5703,2 -5704,35711,0,5704,2 -5705,34021,0,5705,2 -5706,19013,0,5706,2 -5707,80172,0,5707,2 -5708,56174,1,5708,2 -5709,34380,0,5709,2 -5710,38935,0,5710,2 -5711,45580,0,5711,2 -5712,56849,0,5712,2 -5713,38425,0,5713,2 -5714,67063,0,5714,2 -5715,66078,0,5715,2 -5716,71849,0,5716,2 -5717,12226,0,5717,2 -5718,34959,0,5718,2 -5719,25817,0,5719,2 -5720,67322,0,5720,2 -5721,80417,1,5721,2 -5722,11169,0,5722,2 -5723,83224,0,5723,2 -5724,49154,0,5724,2 -5725,52877,0,5725,2 -5726,67478,0,5726,2 -5727,74722,0,5727,2 -5728,35734,1,5728,2 -5729,26224,0,5729,2 -5730,82256,0,5730,2 -5731,15546,0,5731,2 -5732,21971,0,5732,2 -5733,44671,1,5733,2 -5734,51752,0,5734,2 -5735,65365,1,5735,2 -5736,22128,0,5736,2 -5737,66197,1,5737,2 -5738,71400,1,5738,2 -5739,29170,0,5739,2 -5740,71288,1,5740,2 -5741,69980,0,5741,2 -5742,25436,0,5742,2 -5743,89745,0,5743,2 -5744,61163,0,5744,2 -5745,69994,0,5745,2 -5746,33117,0,5746,2 -5747,41166,0,5747,2 -5748,88149,0,5748,2 -5749,31565,0,5749,2 -5750,76293,0,5750,2 -5751,71891,0,5751,2 -5752,27041,0,5752,2 -5753,39100,1,5753,2 -5754,42752,1,5754,2 -5755,48287,0,5755,2 -5756,31694,0,5756,2 -5757,31589,0,5757,2 -5758,78681,0,5758,2 -5759,32287,0,5759,2 -5760,88512,0,5760,2 -5761,27740,1,5761,2 -5762,79451,0,5762,2 -5763,30766,0,5763,2 -5764,77388,0,5764,2 -5765,38037,0,5765,2 -5766,27173,1,5766,2 -5767,76025,0,5767,2 -5768,31219,0,5768,2 -5769,16537,1,5769,2 -5770,80857,0,5770,2 -5771,12144,0,5771,2 -5772,41030,0,5772,2 -5773,60122,0,5773,2 -5774,12382,0,5774,2 -5775,80028,0,5775,2 -5776,36447,0,5776,2 -5777,25795,1,5777,2 -5778,20484,0,5778,2 -5779,14922,0,5779,2 -5780,68325,0,5780,2 -5781,48100,0,5781,2 -5782,47256,0,5782,2 -5783,75892,0,5783,2 -5784,43588,0,5784,2 -5785,45706,1,5785,2 -5786,48123,0,5786,2 -5787,49555,0,5787,2 -5788,31040,0,5788,2 -5789,78371,0,5789,2 -5790,61457,0,5790,2 -5791,60840,0,5791,2 -5792,78946,0,5792,2 -5793,75442,0,5793,2 -5794,52562,0,5794,2 -5795,73942,0,5795,2 -5796,51170,0,5796,2 -5797,81628,1,5797,2 -5798,26678,0,5798,2 -5799,71698,0,5799,2 -5800,24582,0,5800,2 -5801,82462,0,5801,2 -5802,40951,1,5802,2 -5803,57659,0,5803,2 -5804,51908,0,5804,2 -5805,33800,0,5805,2 -5806,47526,0,5806,2 -5807,49392,0,5807,2 -5808,36659,0,5808,2 -5809,67255,0,5809,2 -5810,32523,0,5810,2 -5811,78824,1,5811,2 -5812,53690,0,5812,2 -5813,61781,0,5813,2 -5814,61574,0,5814,2 -5815,61484,1,5815,2 -5816,70237,1,5816,2 -5817,78044,1,5817,2 -5818,56470,1,5818,2 -5819,63166,0,5819,2 -5820,67291,1,5820,2 -5821,20588,0,5821,2 -5822,43599,0,5822,2 -5823,80442,0,5823,2 -5824,35596,0,5824,2 -5825,29436,0,5825,2 -5826,70748,0,5826,2 -5827,52743,0,5827,2 -5828,36108,0,5828,2 -5829,60089,1,5829,2 -5830,63257,0,5830,2 -5831,68310,0,5831,2 -5832,15811,0,5832,2 -5833,32056,1,5833,2 -5834,43243,1,5834,2 -5835,73585,0,5835,2 -5836,23917,0,5836,2 -5837,73706,0,5837,2 -5838,33370,0,5838,2 -5839,58453,0,5839,2 -5840,68160,0,5840,2 -5841,87621,0,5841,2 -5842,17039,0,5842,2 -5843,30401,0,5843,2 -5844,55025,0,5844,2 -5845,38836,0,5845,2 -5846,49217,1,5846,2 -5847,54462,0,5847,2 -5848,73254,0,5848,2 -5849,11833,0,5849,2 -5850,30511,1,5850,2 -5851,55783,0,5851,2 -5852,74694,0,5852,2 -5853,15241,0,5853,2 -5854,82450,0,5854,2 -5855,85553,0,5855,2 -5856,76261,1,5856,2 -5857,60839,0,5857,2 -5858,69695,0,5858,2 -5859,11542,0,5859,2 -5860,80127,0,5860,2 -5861,35042,0,5861,2 -5862,34329,0,5862,2 -5863,34340,1,5863,2 -5864,35703,0,5864,2 -5865,47442,1,5865,2 -5866,87458,0,5866,2 -5867,23022,1,5867,2 -5868,19584,1,5868,2 -5869,21403,0,5869,2 -5870,88282,0,5870,2 -5871,58862,1,5871,2 -5872,50251,0,5872,2 -5873,36884,1,5873,2 -5874,65484,0,5874,2 -5875,55852,0,5875,2 -5876,59519,0,5876,2 -5877,24785,1,5877,2 -5878,53916,0,5878,2 -5879,75045,0,5879,2 -5880,10499,0,5880,2 -5881,45530,0,5881,2 -5882,24840,0,5882,2 -5883,20932,0,5883,2 -5884,26092,0,5884,2 -5885,33625,0,5885,2 -5886,89611,0,5886,2 -5887,56440,0,5887,2 -5888,39692,1,5888,2 -5889,26771,0,5889,2 -5890,18426,0,5890,2 -5891,15302,0,5891,2 -5892,88538,0,5892,2 -5893,88445,0,5893,2 -5894,32475,1,5894,2 -5895,15320,0,5895,2 -5896,33355,0,5896,2 -5897,87541,0,5897,2 -5898,80052,0,5898,2 -5899,81834,0,5899,2 -5900,53288,0,5900,2 -5901,55365,0,5901,2 -5902,71552,0,5902,2 -5903,11896,0,5903,2 -5904,61207,0,5904,2 -5905,46888,0,5905,2 -5906,75615,0,5906,2 -5907,84684,0,5907,2 -5908,60033,0,5908,2 -5909,38067,0,5909,2 -5910,79281,0,5910,2 -5911,27165,0,5911,2 -5912,78489,1,5912,2 -5913,26155,0,5913,2 -5914,17523,1,5914,2 -5915,54819,0,5915,2 -5916,17291,0,5916,2 -5917,81795,0,5917,2 -5918,29605,0,5918,2 -5919,10524,0,5919,2 -5920,32893,0,5920,2 -5921,76662,1,5921,2 -5922,52596,0,5922,2 -5923,83694,0,5923,2 -5924,66351,0,5924,2 -5925,51159,0,5925,2 -5926,77559,0,5926,2 -5927,18351,1,5927,2 -5928,44968,1,5928,2 -5929,88806,0,5929,2 -5930,82797,0,5930,2 -5931,57069,0,5931,2 -5932,72652,1,5932,2 -5933,55202,0,5933,2 -5934,32247,0,5934,2 -5935,55834,0,5935,2 -5936,24593,0,5936,2 -5937,47109,0,5937,2 -5938,12031,0,5938,2 -5939,74595,1,5939,2 -5940,54475,0,5940,2 -5941,24186,0,5941,2 -5942,44583,0,5942,2 -5943,86786,0,5943,2 -5944,88073,1,5944,2 -5945,16193,0,5945,2 -5946,83594,1,5946,2 -5947,64053,0,5947,2 -5948,34717,0,5948,2 -5949,64148,0,5949,2 -5950,65393,0,5950,2 -5951,43049,0,5951,2 -5952,70946,0,5952,2 -5953,65386,0,5953,2 -5954,24342,0,5954,2 -5955,64527,0,5955,2 -5956,26359,0,5956,2 -5957,16817,1,5957,2 -5958,46403,0,5958,2 -5959,84627,0,5959,2 -5960,15575,0,5960,2 -5961,70128,0,5961,2 -5962,84865,0,5962,2 -5963,85428,0,5963,2 -5964,85533,1,5964,2 -5965,31440,0,5965,2 -5966,27415,0,5966,2 -5967,45083,0,5967,2 -5968,38349,1,5968,2 -5969,39385,0,5969,2 -5970,59925,0,5970,2 -5971,66225,0,5971,2 -5972,61865,0,5972,2 -5973,46654,0,5973,2 -5974,23444,1,5974,2 -5975,15990,0,5975,2 -5976,59990,0,5976,2 -5977,21625,0,5977,2 -5978,23168,0,5978,2 -5979,28634,0,5979,2 -5980,64199,0,5980,2 -5981,39506,0,5981,2 -5982,54194,0,5982,2 -5983,85067,0,5983,2 -5984,14288,0,5984,2 -5985,65805,0,5985,2 -5986,67140,0,5986,2 -5987,82720,0,5987,2 -5988,16476,1,5988,2 -5989,44152,1,5989,2 -5990,89674,1,5990,2 -5991,62966,1,5991,2 -5992,10388,0,5992,2 -5993,58415,0,5993,2 -5994,16291,0,5994,2 -5995,73598,0,5995,2 -5996,58188,0,5996,2 -5997,38772,0,5997,2 -5998,35650,0,5998,2 -5999,88974,0,5999,2 -6000,40422,0,6000,3 -6001,54184,0,6001,3 -6002,40379,0,6002,3 -6003,88298,0,6003,3 -6004,83442,0,6004,3 -6005,73373,0,6005,3 -6006,86232,0,6006,3 -6007,15570,0,6007,3 -6008,21951,0,6008,3 -6009,26679,0,6009,3 -6010,33623,0,6010,3 -6011,14545,0,6011,3 -6012,76924,1,6012,3 -6013,48111,0,6013,3 -6014,19621,0,6014,3 -6015,36201,0,6015,3 -6016,12854,0,6016,3 -6017,65728,0,6017,3 -6018,88378,0,6018,3 -6019,49610,0,6019,3 -6020,54390,0,6020,3 -6021,22706,0,6021,3 -6022,11076,0,6022,3 -6023,28554,0,6023,3 -6024,84395,0,6024,3 -6025,60192,1,6025,3 -6026,82772,0,6026,3 -6027,15117,0,6027,3 -6028,29349,0,6028,3 -6029,63426,0,6029,3 -6030,42681,0,6030,3 -6031,17396,0,6031,3 -6032,49981,1,6032,3 -6033,74143,0,6033,3 -6034,25418,0,6034,3 -6035,67020,0,6035,3 -6036,40382,0,6036,3 -6037,43906,0,6037,3 -6038,47830,0,6038,3 -6039,37389,1,6039,3 -6040,70410,0,6040,3 -6041,28925,0,6041,3 -6042,49497,1,6042,3 -6043,12250,0,6043,3 -6044,36939,0,6044,3 -6045,73105,0,6045,3 -6046,82207,0,6046,3 -6047,28700,0,6047,3 -6048,70504,0,6048,3 -6049,15460,0,6049,3 -6050,37416,0,6050,3 -6051,10068,0,6051,3 -6052,36079,0,6052,3 -6053,49197,1,6053,3 -6054,78144,1,6054,3 -6055,13950,1,6055,3 -6056,83239,0,6056,3 -6057,72978,0,6057,3 -6058,11972,0,6058,3 -6059,19527,0,6059,3 -6060,35924,1,6060,3 -6061,57088,0,6061,3 -6062,29480,1,6062,3 -6063,72829,1,6063,3 -6064,29946,0,6064,3 -6065,75592,0,6065,3 -6066,68497,0,6066,3 -6067,73763,0,6067,3 -6068,40480,0,6068,3 -6069,26389,0,6069,3 -6070,35910,1,6070,3 -6071,79192,0,6071,3 -6072,82713,0,6072,3 -6073,34648,1,6073,3 -6074,49122,0,6074,3 -6075,62648,0,6075,3 -6076,28983,0,6076,3 -6077,20132,0,6077,3 -6078,44511,0,6078,3 -6079,77772,0,6079,3 -6080,26831,1,6080,3 -6081,17581,0,6081,3 -6082,48532,0,6082,3 -6083,25013,0,6083,3 -6084,67443,0,6084,3 -6085,19399,0,6085,3 -6086,74964,0,6086,3 -6087,50382,0,6087,3 -6088,43606,0,6088,3 -6089,74068,0,6089,3 -6090,49408,1,6090,3 -6091,76136,0,6091,3 -6092,77452,0,6092,3 -6093,86741,0,6093,3 -6094,57484,0,6094,3 -6095,12958,0,6095,3 -6096,70479,0,6096,3 -6097,43023,0,6097,3 -6098,65357,0,6098,3 -6099,38969,0,6099,3 -6100,56006,0,6100,3 -6101,68926,0,6101,3 -6102,50165,0,6102,3 -6103,49558,0,6103,3 -6104,83220,0,6104,3 -6105,14624,0,6105,3 -6106,47536,0,6106,3 -6107,27252,0,6107,3 -6108,54535,1,6108,3 -6109,67112,0,6109,3 -6110,26536,0,6110,3 -6111,73540,0,6111,3 -6112,11263,0,6112,3 -6113,21322,1,6113,3 -6114,13453,0,6114,3 -6115,45145,0,6115,3 -6116,59185,0,6116,3 -6117,58882,0,6117,3 -6118,64774,0,6118,3 -6119,85835,0,6119,3 -6120,40378,0,6120,3 -6121,74165,0,6121,3 -6122,37331,0,6122,3 -6123,38990,0,6123,3 -6124,28576,1,6124,3 -6125,34939,0,6125,3 -6126,13753,0,6126,3 -6127,73942,0,6127,3 -6128,67830,0,6128,3 -6129,86190,0,6129,3 -6130,40549,0,6130,3 -6131,79757,0,6131,3 -6132,53049,0,6132,3 -6133,22866,1,6133,3 -6134,37718,0,6134,3 -6135,60393,0,6135,3 -6136,71580,0,6136,3 -6137,73185,0,6137,3 -6138,50308,0,6138,3 -6139,26979,0,6139,3 -6140,40169,0,6140,3 -6141,55685,1,6141,3 -6142,65211,0,6142,3 -6143,70303,0,6143,3 -6144,42026,0,6144,3 -6145,30591,0,6145,3 -6146,77195,0,6146,3 -6147,89796,0,6147,3 -6148,41653,0,6148,3 -6149,89586,0,6149,3 -6150,41700,0,6150,3 -6151,38339,0,6151,3 -6152,50951,0,6152,3 -6153,10304,0,6153,3 -6154,19829,0,6154,3 -6155,15935,1,6155,3 -6156,45193,0,6156,3 -6157,37422,0,6157,3 -6158,87162,1,6158,3 -6159,31662,0,6159,3 -6160,71301,0,6160,3 -6161,16478,1,6161,3 -6162,55642,0,6162,3 -6163,72719,0,6163,3 -6164,28409,0,6164,3 -6165,64705,0,6165,3 -6166,43858,0,6166,3 -6167,80072,0,6167,3 -6168,47972,0,6168,3 -6169,17826,0,6169,3 -6170,76624,0,6170,3 -6171,46085,0,6171,3 -6172,28161,0,6172,3 -6173,12727,0,6173,3 -6174,64006,1,6174,3 -6175,81851,0,6175,3 -6176,72009,0,6176,3 -6177,82783,0,6177,3 -6178,15527,1,6178,3 -6179,40635,0,6179,3 -6180,85243,0,6180,3 -6181,40788,0,6181,3 -6182,77162,0,6182,3 -6183,52664,0,6183,3 -6184,53938,1,6184,3 -6185,81277,1,6185,3 -6186,36459,0,6186,3 -6187,58552,0,6187,3 -6188,25745,1,6188,3 -6189,54053,0,6189,3 -6190,73077,1,6190,3 -6191,59933,1,6191,3 -6192,78402,0,6192,3 -6193,31373,0,6193,3 -6194,46994,0,6194,3 -6195,27789,0,6195,3 -6196,15768,0,6196,3 -6197,22433,0,6197,3 -6198,28322,0,6198,3 -6199,63483,0,6199,3 -6200,84174,0,6200,3 -6201,45191,0,6201,3 -6202,57649,0,6202,3 -6203,71522,0,6203,3 -6204,18489,0,6204,3 -6205,82232,0,6205,3 -6206,54355,1,6206,3 -6207,13600,1,6207,3 -6208,82448,0,6208,3 -6209,54945,0,6209,3 -6210,75192,0,6210,3 -6211,25193,0,6211,3 -6212,65097,0,6212,3 -6213,34339,0,6213,3 -6214,46178,0,6214,3 -6215,75498,0,6215,3 -6216,72782,1,6216,3 -6217,61239,0,6217,3 -6218,24268,0,6218,3 -6219,30859,0,6219,3 -6220,59239,0,6220,3 -6221,83406,0,6221,3 -6222,82635,1,6222,3 -6223,70136,0,6223,3 -6224,16441,0,6224,3 -6225,23568,0,6225,3 -6226,69568,0,6226,3 -6227,78048,0,6227,3 -6228,55719,0,6228,3 -6229,53398,0,6229,3 -6230,80872,0,6230,3 -6231,44483,0,6231,3 -6232,48501,0,6232,3 -6233,87459,1,6233,3 -6234,54442,0,6234,3 -6235,88473,0,6235,3 -6236,44656,0,6236,3 -6237,11323,0,6237,3 -6238,12291,0,6238,3 -6239,32871,0,6239,3 -6240,57636,0,6240,3 -6241,84251,0,6241,3 -6242,28542,0,6242,3 -6243,51775,0,6243,3 -6244,86253,0,6244,3 -6245,39320,0,6245,3 -6246,53100,1,6246,3 -6247,44662,0,6247,3 -6248,41863,0,6248,3 -6249,53673,0,6249,3 -6250,33077,0,6250,3 -6251,13478,0,6251,3 -6252,23993,0,6252,3 -6253,23045,0,6253,3 -6254,52577,0,6254,3 -6255,44215,0,6255,3 -6256,30552,0,6256,3 -6257,69443,0,6257,3 -6258,29713,1,6258,3 -6259,31542,0,6259,3 -6260,59668,0,6260,3 -6261,69825,1,6261,3 -6262,24206,1,6262,3 -6263,49935,0,6263,3 -6264,84957,1,6264,3 -6265,22329,0,6265,3 -6266,54120,0,6266,3 -6267,38432,0,6267,3 -6268,35425,0,6268,3 -6269,82820,0,6269,3 -6270,18208,0,6270,3 -6271,11620,0,6271,3 -6272,23821,0,6272,3 -6273,56922,0,6273,3 -6274,11622,0,6274,3 -6275,17865,0,6275,3 -6276,12723,0,6276,3 -6277,23874,0,6277,3 -6278,24258,0,6278,3 -6279,33414,0,6279,3 -6280,33674,0,6280,3 -6281,17200,0,6281,3 -6282,42371,0,6282,3 -6283,26046,0,6283,3 -6284,64615,0,6284,3 -6285,61974,1,6285,3 -6286,46395,0,6286,3 -6287,61329,1,6287,3 -6288,78140,0,6288,3 -6289,32094,1,6289,3 -6290,33239,0,6290,3 -6291,75617,0,6291,3 -6292,79313,0,6292,3 -6293,88042,0,6293,3 -6294,70636,0,6294,3 -6295,40563,0,6295,3 -6296,62383,0,6296,3 -6297,48973,0,6297,3 -6298,23262,0,6298,3 -6299,40713,0,6299,3 -6300,65039,0,6300,3 -6301,23547,1,6301,3 -6302,14495,0,6302,3 -6303,22980,0,6303,3 -6304,54913,0,6304,3 -6305,71100,0,6305,3 -6306,11274,0,6306,3 -6307,73131,0,6307,3 -6308,50000,0,6308,3 -6309,17892,0,6309,3 -6310,13758,0,6310,3 -6311,64862,0,6311,3 -6312,48389,1,6312,3 -6313,31294,0,6313,3 -6314,81885,0,6314,3 -6315,27977,1,6315,3 -6316,10417,0,6316,3 -6317,54515,0,6317,3 -6318,29539,1,6318,3 -6319,19896,0,6319,3 -6320,25234,1,6320,3 -6321,85998,0,6321,3 -6322,85663,0,6322,3 -6323,59667,0,6323,3 -6324,32997,0,6324,3 -6325,30112,0,6325,3 -6326,10452,0,6326,3 -6327,21179,0,6327,3 -6328,33473,0,6328,3 -6329,79586,0,6329,3 -6330,58813,0,6330,3 -6331,20127,1,6331,3 -6332,54230,1,6332,3 -6333,62117,0,6333,3 -6334,53510,1,6334,3 -6335,45225,0,6335,3 -6336,54059,1,6336,3 -6337,18115,0,6337,3 -6338,85430,0,6338,3 -6339,63506,0,6339,3 -6340,69523,1,6340,3 -6341,47241,0,6341,3 -6342,77115,0,6342,3 -6343,70930,0,6343,3 -6344,18266,0,6344,3 -6345,15819,0,6345,3 -6346,62312,0,6346,3 -6347,48705,0,6347,3 -6348,67954,0,6348,3 -6349,19404,0,6349,3 -6350,49547,0,6350,3 -6351,76871,0,6351,3 -6352,72974,0,6352,3 -6353,34429,0,6353,3 -6354,15785,0,6354,3 -6355,12531,0,6355,3 -6356,65919,1,6356,3 -6357,71421,0,6357,3 -6358,81016,0,6358,3 -6359,10524,1,6359,3 -6360,78603,0,6360,3 -6361,33706,0,6361,3 -6362,78480,0,6362,3 -6363,89840,0,6363,3 -6364,20359,0,6364,3 -6365,74183,1,6365,3 -6366,50463,1,6366,3 -6367,67290,0,6367,3 -6368,47291,0,6368,3 -6369,42565,1,6369,3 -6370,68268,0,6370,3 -6371,15733,0,6371,3 -6372,32406,0,6372,3 -6373,40353,0,6373,3 -6374,47421,0,6374,3 -6375,78978,0,6375,3 -6376,87799,0,6376,3 -6377,71804,0,6377,3 -6378,20101,0,6378,3 -6379,37001,1,6379,3 -6380,85675,0,6380,3 -6381,40567,0,6381,3 -6382,37287,0,6382,3 -6383,83349,0,6383,3 -6384,38775,0,6384,3 -6385,68374,0,6385,3 -6386,87503,0,6386,3 -6387,41322,0,6387,3 -6388,58647,0,6388,3 -6389,54194,0,6389,3 -6390,19762,0,6390,3 -6391,81433,1,6391,3 -6392,38555,0,6392,3 -6393,40783,1,6393,3 -6394,31816,0,6394,3 -6395,22161,0,6395,3 -6396,32457,0,6396,3 -6397,30449,0,6397,3 -6398,12959,0,6398,3 -6399,57652,1,6399,3 -6400,46955,0,6400,3 -6401,38753,0,6401,3 -6402,22183,1,6402,3 -6403,76156,1,6403,3 -6404,85950,0,6404,3 -6405,13898,0,6405,3 -6406,76478,0,6406,3 -6407,31006,0,6407,3 -6408,69767,0,6408,3 -6409,23350,0,6409,3 -6410,50923,0,6410,3 -6411,76388,0,6411,3 -6412,49266,0,6412,3 -6413,22452,0,6413,3 -6414,22027,1,6414,3 -6415,26718,0,6415,3 -6416,27582,0,6416,3 -6417,61710,0,6417,3 -6418,69037,0,6418,3 -6419,13469,1,6419,3 -6420,20694,0,6420,3 -6421,73809,1,6421,3 -6422,27692,0,6422,3 -6423,11721,1,6423,3 -6424,87896,0,6424,3 -6425,15998,0,6425,3 -6426,83536,0,6426,3 -6427,14558,0,6427,3 -6428,71354,0,6428,3 -6429,84497,1,6429,3 -6430,45092,0,6430,3 -6431,57742,0,6431,3 -6432,70848,0,6432,3 -6433,75179,0,6433,3 -6434,71982,1,6434,3 -6435,47919,0,6435,3 -6436,67508,0,6436,3 -6437,14524,1,6437,3 -6438,87533,0,6438,3 -6439,59964,0,6439,3 -6440,25557,0,6440,3 -6441,36195,0,6441,3 -6442,12809,0,6442,3 -6443,68197,0,6443,3 -6444,33006,0,6444,3 -6445,75320,1,6445,3 -6446,23497,0,6446,3 -6447,86554,1,6447,3 -6448,51394,0,6448,3 -6449,62543,0,6449,3 -6450,12796,0,6450,3 -6451,64606,0,6451,3 -6452,48800,0,6452,3 -6453,19964,0,6453,3 -6454,61563,1,6454,3 -6455,54197,0,6455,3 -6456,28191,1,6456,3 -6457,20464,0,6457,3 -6458,38357,0,6458,3 -6459,34354,1,6459,3 -6460,57776,1,6460,3 -6461,48128,1,6461,3 -6462,34743,0,6462,3 -6463,54053,0,6463,3 -6464,21269,1,6464,3 -6465,27893,0,6465,3 -6466,22265,1,6466,3 -6467,39091,0,6467,3 -6468,66108,1,6468,3 -6469,29211,0,6469,3 -6470,46356,0,6470,3 -6471,20964,0,6471,3 -6472,13572,0,6472,3 -6473,15705,0,6473,3 -6474,32793,0,6474,3 -6475,77589,0,6475,3 -6476,70581,0,6476,3 -6477,10933,0,6477,3 -6478,22740,0,6478,3 -6479,39334,0,6479,3 -6480,83697,0,6480,3 -6481,31501,0,6481,3 -6482,21304,1,6482,3 -6483,19950,0,6483,3 -6484,61099,0,6484,3 -6485,17415,1,6485,3 -6486,45144,0,6486,3 -6487,38230,0,6487,3 -6488,23152,0,6488,3 -6489,18997,1,6489,3 -6490,40079,0,6490,3 -6491,63314,0,6491,3 -6492,73785,1,6492,3 -6493,11766,0,6493,3 -6494,61103,0,6494,3 -6495,80755,0,6495,3 -6496,63342,0,6496,3 -6497,74512,1,6497,3 -6498,19845,1,6498,3 -6499,30294,0,6499,3 -6500,71812,0,6500,3 -6501,39345,1,6501,3 -6502,39336,1,6502,3 -6503,56778,0,6503,3 -6504,69603,0,6504,3 -6505,43979,0,6505,3 -6506,75846,1,6506,3 -6507,73892,0,6507,3 -6508,68332,0,6508,3 -6509,55028,0,6509,3 -6510,53685,0,6510,3 -6511,12121,0,6511,3 -6512,55645,0,6512,3 -6513,59541,1,6513,3 -6514,66513,0,6514,3 -6515,35255,0,6515,3 -6516,25571,0,6516,3 -6517,53965,0,6517,3 -6518,42721,0,6518,3 -6519,65648,0,6519,3 -6520,56903,0,6520,3 -6521,40368,0,6521,3 -6522,44451,0,6522,3 -6523,55078,0,6523,3 -6524,25271,1,6524,3 -6525,29257,1,6525,3 -6526,26389,1,6526,3 -6527,65986,1,6527,3 -6528,30158,0,6528,3 -6529,86221,0,6529,3 -6530,68169,0,6530,3 -6531,55275,0,6531,3 -6532,26438,0,6532,3 -6533,50090,0,6533,3 -6534,55850,0,6534,3 -6535,44926,0,6535,3 -6536,87973,0,6536,3 -6537,14997,0,6537,3 -6538,15566,1,6538,3 -6539,67106,1,6539,3 -6540,35002,0,6540,3 -6541,85117,0,6541,3 -6542,36902,0,6542,3 -6543,78735,0,6543,3 -6544,53232,0,6544,3 -6545,64524,1,6545,3 -6546,64973,0,6546,3 -6547,18091,1,6547,3 -6548,66563,0,6548,3 -6549,69040,0,6549,3 -6550,82364,0,6550,3 -6551,22538,0,6551,3 -6552,29624,1,6552,3 -6553,15594,0,6553,3 -6554,53043,0,6554,3 -6555,35483,1,6555,3 -6556,29366,0,6556,3 -6557,87411,0,6557,3 -6558,69490,0,6558,3 -6559,46879,0,6559,3 -6560,14609,0,6560,3 -6561,32363,0,6561,3 -6562,70415,1,6562,3 -6563,11309,0,6563,3 -6564,80771,0,6564,3 -6565,18102,0,6565,3 -6566,64019,0,6566,3 -6567,21430,0,6567,3 -6568,86516,0,6568,3 -6569,25018,0,6569,3 -6570,86404,1,6570,3 -6571,26980,0,6571,3 -6572,54338,0,6572,3 -6573,55643,1,6573,3 -6574,37481,0,6574,3 -6575,28338,0,6575,3 -6576,71680,0,6576,3 -6577,70039,0,6577,3 -6578,67144,0,6578,3 -6579,16399,0,6579,3 -6580,74036,0,6580,3 -6581,86476,1,6581,3 -6582,37199,1,6582,3 -6583,80195,0,6583,3 -6584,12914,0,6584,3 -6585,41944,0,6585,3 -6586,89090,0,6586,3 -6587,49344,1,6587,3 -6588,49308,0,6588,3 -6589,46839,0,6589,3 -6590,61752,1,6590,3 -6591,52373,1,6591,3 -6592,55068,0,6592,3 -6593,35487,0,6593,3 -6594,37015,0,6594,3 -6595,79008,1,6595,3 -6596,27336,0,6596,3 -6597,70626,0,6597,3 -6598,53217,0,6598,3 -6599,37409,0,6599,3 -6600,72224,0,6600,3 -6601,89739,0,6601,3 -6602,71353,0,6602,3 -6603,47088,0,6603,3 -6604,25031,0,6604,3 -6605,67439,0,6605,3 -6606,58525,0,6606,3 -6607,53133,1,6607,3 -6608,89066,0,6608,3 -6609,70034,0,6609,3 -6610,45065,0,6610,3 -6611,42880,0,6611,3 -6612,46670,1,6612,3 -6613,82538,1,6613,3 -6614,77660,0,6614,3 -6615,29132,0,6615,3 -6616,62546,0,6616,3 -6617,13336,0,6617,3 -6618,14222,1,6618,3 -6619,86927,1,6619,3 -6620,30632,0,6620,3 -6621,29628,0,6621,3 -6622,19273,0,6622,3 -6623,24614,0,6623,3 -6624,36113,0,6624,3 -6625,41427,0,6625,3 -6626,18171,1,6626,3 -6627,35634,0,6627,3 -6628,17991,0,6628,3 -6629,33248,0,6629,3 -6630,78322,0,6630,3 -6631,18266,0,6631,3 -6632,56117,0,6632,3 -6633,25826,0,6633,3 -6634,21649,0,6634,3 -6635,71169,0,6635,3 -6636,76001,0,6636,3 -6637,73489,0,6637,3 -6638,14110,0,6638,3 -6639,81871,0,6639,3 -6640,45441,0,6640,3 -6641,62163,0,6641,3 -6642,54444,1,6642,3 -6643,51684,0,6643,3 -6644,18559,0,6644,3 -6645,88613,0,6645,3 -6646,71676,0,6646,3 -6647,76063,1,6647,3 -6648,37030,0,6648,3 -6649,29226,0,6649,3 -6650,69650,0,6650,3 -6651,70691,0,6651,3 -6652,88494,0,6652,3 -6653,83271,0,6653,3 -6654,33769,0,6654,3 -6655,58274,0,6655,3 -6656,44848,0,6656,3 -6657,15951,0,6657,3 -6658,79368,0,6658,3 -6659,59307,0,6659,3 -6660,43494,0,6660,3 -6661,24918,0,6661,3 -6662,65794,0,6662,3 -6663,61060,0,6663,3 -6664,56964,0,6664,3 -6665,65043,0,6665,3 -6666,54910,0,6666,3 -6667,24812,0,6667,3 -6668,26381,0,6668,3 -6669,71222,1,6669,3 -6670,25505,0,6670,3 -6671,15105,0,6671,3 -6672,44725,0,6672,3 -6673,78414,0,6673,3 -6674,87624,0,6674,3 -6675,81452,0,6675,3 -6676,57250,1,6676,3 -6677,61532,0,6677,3 -6678,25964,0,6678,3 -6679,88808,0,6679,3 -6680,73539,0,6680,3 -6681,67348,0,6681,3 -6682,25429,0,6682,3 -6683,63293,0,6683,3 -6684,81561,0,6684,3 -6685,67453,1,6685,3 -6686,46515,0,6686,3 -6687,29063,0,6687,3 -6688,62911,0,6688,3 -6689,22614,0,6689,3 -6690,71344,0,6690,3 -6691,19545,0,6691,3 -6692,75272,0,6692,3 -6693,12642,0,6693,3 -6694,41372,0,6694,3 -6695,79497,0,6695,3 -6696,72182,0,6696,3 -6697,80187,1,6697,3 -6698,43075,0,6698,3 -6699,20128,0,6699,3 -6700,66737,0,6700,3 -6701,13803,1,6701,3 -6702,50744,0,6702,3 -6703,72656,0,6703,3 -6704,70792,0,6704,3 -6705,27804,1,6705,3 -6706,56987,0,6706,3 -6707,66809,0,6707,3 -6708,81018,0,6708,3 -6709,59234,0,6709,3 -6710,80767,0,6710,3 -6711,23992,0,6711,3 -6712,88151,0,6712,3 -6713,18637,0,6713,3 -6714,86834,0,6714,3 -6715,45402,0,6715,3 -6716,70619,1,6716,3 -6717,70372,0,6717,3 -6718,88906,0,6718,3 -6719,60234,1,6719,3 -6720,54221,1,6720,3 -6721,41740,0,6721,3 -6722,44414,0,6722,3 -6723,58909,0,6723,3 -6724,34659,0,6724,3 -6725,63485,0,6725,3 -6726,59394,0,6726,3 -6727,75285,1,6727,3 -6728,69401,1,6728,3 -6729,12604,0,6729,3 -6730,18358,0,6730,3 -6731,77284,0,6731,3 -6732,81280,0,6732,3 -6733,43016,0,6733,3 -6734,28625,0,6734,3 -6735,23500,0,6735,3 -6736,29487,0,6736,3 -6737,37819,0,6737,3 -6738,22999,0,6738,3 -6739,76397,1,6739,3 -6740,71131,0,6740,3 -6741,63001,0,6741,3 -6742,78412,0,6742,3 -6743,53020,0,6743,3 -6744,15623,0,6744,3 -6745,46387,0,6745,3 -6746,48684,0,6746,3 -6747,36189,1,6747,3 -6748,36589,0,6748,3 -6749,48931,0,6749,3 -6750,53914,0,6750,3 -6751,55382,0,6751,3 -6752,61970,0,6752,3 -6753,11358,1,6753,3 -6754,59782,0,6754,3 -6755,39999,0,6755,3 -6756,51237,0,6756,3 -6757,19486,0,6757,3 -6758,38274,0,6758,3 -6759,34283,0,6759,3 -6760,72722,0,6760,3 -6761,79173,0,6761,3 -6762,73881,0,6762,3 -6763,87104,1,6763,3 -6764,67152,0,6764,3 -6765,70729,0,6765,3 -6766,70335,1,6766,3 -6767,73277,0,6767,3 -6768,77585,0,6768,3 -6769,57105,0,6769,3 -6770,75361,0,6770,3 -6771,46733,0,6771,3 -6772,60876,1,6772,3 -6773,89542,0,6773,3 -6774,26588,0,6774,3 -6775,15039,0,6775,3 -6776,80450,0,6776,3 -6777,52263,0,6777,3 -6778,46851,0,6778,3 -6779,57302,0,6779,3 -6780,66107,0,6780,3 -6781,20352,0,6781,3 -6782,38978,0,6782,3 -6783,61020,1,6783,3 -6784,88001,1,6784,3 -6785,24095,0,6785,3 -6786,52164,0,6786,3 -6787,60196,0,6787,3 -6788,38403,0,6788,3 -6789,84494,0,6789,3 -6790,69643,0,6790,3 -6791,40122,0,6791,3 -6792,20384,0,6792,3 -6793,47899,0,6793,3 -6794,65157,0,6794,3 -6795,80120,0,6795,3 -6796,83604,0,6796,3 -6797,11284,0,6797,3 -6798,44231,0,6798,3 -6799,19734,0,6799,3 -6800,18984,0,6800,3 -6801,85092,0,6801,3 -6802,39762,1,6802,3 -6803,89985,0,6803,3 -6804,74242,0,6804,3 -6805,77179,1,6805,3 -6806,75715,1,6806,3 -6807,43146,0,6807,3 -6808,38728,0,6808,3 -6809,30373,0,6809,3 -6810,40554,0,6810,3 -6811,39985,0,6811,3 -6812,74204,0,6812,3 -6813,88209,0,6813,3 -6814,89950,0,6814,3 -6815,40326,0,6815,3 -6816,62657,0,6816,3 -6817,59535,1,6817,3 -6818,29645,0,6818,3 -6819,82010,1,6819,3 -6820,87178,0,6820,3 -6821,36319,0,6821,3 -6822,18614,0,6822,3 -6823,17952,0,6823,3 -6824,32074,0,6824,3 -6825,36062,0,6825,3 -6826,31593,0,6826,3 -6827,64075,0,6827,3 -6828,20017,1,6828,3 -6829,52572,1,6829,3 -6830,87585,0,6830,3 -6831,88674,0,6831,3 -6832,17729,0,6832,3 -6833,89991,0,6833,3 -6834,34355,1,6834,3 -6835,60021,0,6835,3 -6836,77434,1,6836,3 -6837,89201,0,6837,3 -6838,80367,1,6838,3 -6839,18175,1,6839,3 -6840,36392,0,6840,3 -6841,45871,0,6841,3 -6842,11575,0,6842,3 -6843,22040,0,6843,3 -6844,88613,0,6844,3 -6845,88054,0,6845,3 -6846,30472,1,6846,3 -6847,52501,0,6847,3 -6848,28323,0,6848,3 -6849,74081,0,6849,3 -6850,35179,0,6850,3 -6851,86529,0,6851,3 -6852,23336,0,6852,3 -6853,18404,0,6853,3 -6854,68967,0,6854,3 -6855,19407,0,6855,3 -6856,52985,0,6856,3 -6857,59085,0,6857,3 -6858,69454,0,6858,3 -6859,17295,1,6859,3 -6860,77259,1,6860,3 -6861,10012,0,6861,3 -6862,73503,0,6862,3 -6863,60273,0,6863,3 -6864,26225,0,6864,3 -6865,19172,0,6865,3 -6866,16393,0,6866,3 -6867,17119,0,6867,3 -6868,23598,0,6868,3 -6869,79989,0,6869,3 -6870,38668,0,6870,3 -6871,18240,0,6871,3 -6872,81843,1,6872,3 -6873,20352,0,6873,3 -6874,51379,1,6874,3 -6875,66355,0,6875,3 -6876,33245,1,6876,3 -6877,37576,0,6877,3 -6878,32825,0,6878,3 -6879,14620,0,6879,3 -6880,40236,0,6880,3 -6881,10484,0,6881,3 -6882,50627,0,6882,3 -6883,86393,0,6883,3 -6884,29873,0,6884,3 -6885,18490,0,6885,3 -6886,10639,0,6886,3 -6887,30893,0,6887,3 -6888,49241,0,6888,3 -6889,68025,0,6889,3 -6890,21432,0,6890,3 -6891,27994,0,6891,3 -6892,11933,0,6892,3 -6893,70228,0,6893,3 -6894,74653,1,6894,3 -6895,86927,0,6895,3 -6896,42108,0,6896,3 -6897,45928,0,6897,3 -6898,20769,0,6898,3 -6899,86439,0,6899,3 -6900,22837,0,6900,3 -6901,27524,1,6901,3 -6902,35119,1,6902,3 -6903,71957,0,6903,3 -6904,27046,0,6904,3 -6905,82048,0,6905,3 -6906,19098,0,6906,3 -6907,65558,0,6907,3 -6908,49970,0,6908,3 -6909,60693,0,6909,3 -6910,59378,0,6910,3 -6911,10376,0,6911,3 -6912,42014,0,6912,3 -6913,26441,1,6913,3 -6914,20065,0,6914,3 -6915,50230,0,6915,3 -6916,77158,0,6916,3 -6917,18017,0,6917,3 -6918,31351,0,6918,3 -6919,79920,0,6919,3 -6920,71889,0,6920,3 -6921,45928,0,6921,3 -6922,23334,0,6922,3 -6923,25734,0,6923,3 -6924,21920,0,6924,3 -6925,81671,0,6925,3 -6926,12617,0,6926,3 -6927,23109,1,6927,3 -6928,18850,0,6928,3 -6929,81451,0,6929,3 -6930,88912,0,6930,3 -6931,19071,0,6931,3 -6932,31925,0,6932,3 -6933,59981,0,6933,3 -6934,21640,1,6934,3 -6935,17519,0,6935,3 -6936,69968,0,6936,3 -6937,40580,0,6937,3 -6938,60078,0,6938,3 -6939,80759,0,6939,3 -6940,67932,0,6940,3 -6941,64474,0,6941,3 -6942,22188,0,6942,3 -6943,33789,0,6943,3 -6944,50584,0,6944,3 -6945,64196,0,6945,3 -6946,63411,0,6946,3 -6947,44095,0,6947,3 -6948,19149,0,6948,3 -6949,48904,0,6949,3 -6950,23154,1,6950,3 -6951,23683,0,6951,3 -6952,69966,0,6952,3 -6953,85835,0,6953,3 -6954,79174,0,6954,3 -6955,85566,0,6955,3 -6956,12095,0,6956,3 -6957,31794,0,6957,3 -6958,54574,0,6958,3 -6959,78451,0,6959,3 -6960,16156,0,6960,3 -6961,89571,0,6961,3 -6962,64994,1,6962,3 -6963,78037,0,6963,3 -6964,53990,0,6964,3 -6965,87270,0,6965,3 -6966,19717,1,6966,3 -6967,55380,0,6967,3 -6968,85393,0,6968,3 -6969,37987,0,6969,3 -6970,13185,0,6970,3 -6971,33741,0,6971,3 -6972,22717,0,6972,3 -6973,25249,0,6973,3 -6974,49127,1,6974,3 -6975,18029,0,6975,3 -6976,23368,1,6976,3 -6977,74110,0,6977,3 -6978,14321,0,6978,3 -6979,84669,1,6979,3 -6980,26387,0,6980,3 -6981,79941,0,6981,3 -6982,86902,0,6982,3 -6983,64170,0,6983,3 -6984,56162,0,6984,3 -6985,14666,0,6985,3 -6986,20484,0,6986,3 -6987,22853,0,6987,3 -6988,56574,0,6988,3 -6989,78374,0,6989,3 -6990,65738,0,6990,3 -6991,78467,0,6991,3 -6992,36406,0,6992,3 -6993,65355,0,6993,3 -6994,20584,0,6994,3 -6995,68170,0,6995,3 -6996,53984,0,6996,3 -6997,59367,0,6997,3 -6998,15074,0,6998,3 -6999,56634,1,6999,3 -7000,71927,0,7000,3 -7001,54308,1,7001,3 -7002,39672,0,7002,3 -7003,44831,1,7003,3 -7004,52439,1,7004,3 -7005,31645,1,7005,3 -7006,45089,0,7006,3 -7007,63189,0,7007,3 -7008,64790,0,7008,3 -7009,15976,0,7009,3 -7010,42652,0,7010,3 -7011,22125,0,7011,3 -7012,45100,0,7012,3 -7013,35064,1,7013,3 -7014,79353,0,7014,3 -7015,42673,0,7015,3 -7016,23974,0,7016,3 -7017,43733,0,7017,3 -7018,89450,0,7018,3 -7019,40973,0,7019,3 -7020,64709,0,7020,3 -7021,57957,1,7021,3 -7022,30852,1,7022,3 -7023,79634,1,7023,3 -7024,23461,0,7024,3 -7025,43576,1,7025,3 -7026,65652,0,7026,3 -7027,89226,0,7027,3 -7028,15131,1,7028,3 -7029,34227,0,7029,3 -7030,33838,0,7030,3 -7031,17642,0,7031,3 -7032,87478,0,7032,3 -7033,45886,0,7033,3 -7034,88400,0,7034,3 -7035,16987,0,7035,3 -7036,20307,0,7036,3 -7037,71084,0,7037,3 -7038,77480,0,7038,3 -7039,89847,0,7039,3 -7040,73880,0,7040,3 -7041,33433,0,7041,3 -7042,33999,0,7042,3 -7043,26015,0,7043,3 -7044,31163,0,7044,3 -7045,30904,0,7045,3 -7046,54117,0,7046,3 -7047,62050,0,7047,3 -7048,58675,0,7048,3 -7049,65620,0,7049,3 -7050,21014,1,7050,3 -7051,85712,0,7051,3 -7052,24740,1,7052,3 -7053,43713,0,7053,3 -7054,21855,0,7054,3 -7055,67924,0,7055,3 -7056,81950,0,7056,3 -7057,29083,0,7057,3 -7058,20066,0,7058,3 -7059,34655,0,7059,3 -7060,24895,0,7060,3 -7061,37816,0,7061,3 -7062,34882,0,7062,3 -7063,33447,1,7063,3 -7064,46082,0,7064,3 -7065,56809,0,7065,3 -7066,37427,0,7066,3 -7067,15559,0,7067,3 -7068,58371,0,7068,3 -7069,15265,0,7069,3 -7070,78069,1,7070,3 -7071,37176,0,7071,3 -7072,21436,0,7072,3 -7073,11401,0,7073,3 -7074,70165,0,7074,3 -7075,41809,0,7075,3 -7076,83424,0,7076,3 -7077,28163,0,7077,3 -7078,41499,0,7078,3 -7079,26668,1,7079,3 -7080,13971,0,7080,3 -7081,15920,0,7081,3 -7082,66795,0,7082,3 -7083,33503,1,7083,3 -7084,75870,0,7084,3 -7085,23449,0,7085,3 -7086,22646,0,7086,3 -7087,23233,0,7087,3 -7088,63701,0,7088,3 -7089,32447,0,7089,3 -7090,31959,1,7090,3 -7091,86610,0,7091,3 -7092,48182,0,7092,3 -7093,35209,0,7093,3 -7094,14434,0,7094,3 -7095,17240,0,7095,3 -7096,59292,0,7096,3 -7097,28364,0,7097,3 -7098,26690,0,7098,3 -7099,21366,0,7099,3 -7100,63663,0,7100,3 -7101,59400,0,7101,3 -7102,80592,0,7102,3 -7103,66844,0,7103,3 -7104,39382,0,7104,3 -7105,56789,0,7105,3 -7106,53124,0,7106,3 -7107,59446,1,7107,3 -7108,33312,0,7108,3 -7109,69993,0,7109,3 -7110,30238,1,7110,3 -7111,58892,0,7111,3 -7112,28895,0,7112,3 -7113,85119,0,7113,3 -7114,50314,0,7114,3 -7115,65338,1,7115,3 -7116,42925,0,7116,3 -7117,89553,0,7117,3 -7118,42005,0,7118,3 -7119,25599,1,7119,3 -7120,28833,1,7120,3 -7121,29349,0,7121,3 -7122,31609,0,7122,3 -7123,77872,0,7123,3 -7124,55237,1,7124,3 -7125,13345,1,7125,3 -7126,78129,0,7126,3 -7127,37963,0,7127,3 -7128,47944,0,7128,3 -7129,58262,0,7129,3 -7130,44742,1,7130,3 -7131,37411,0,7131,3 -7132,26133,0,7132,3 -7133,67931,0,7133,3 -7134,18644,1,7134,3 -7135,28372,1,7135,3 -7136,20681,0,7136,3 -7137,86347,1,7137,3 -7138,26977,0,7138,3 -7139,46605,0,7139,3 -7140,70131,1,7140,3 -7141,14791,0,7141,3 -7142,60681,0,7142,3 -7143,12162,0,7143,3 -7144,46708,0,7144,3 -7145,68558,1,7145,3 -7146,88679,0,7146,3 -7147,21163,0,7147,3 -7148,48405,0,7148,3 -7149,29350,0,7149,3 -7150,45797,0,7150,3 -7151,61279,0,7151,3 -7152,27200,0,7152,3 -7153,27537,1,7153,3 -7154,70560,0,7154,3 -7155,78203,0,7155,3 -7156,14838,0,7156,3 -7157,18716,0,7157,3 -7158,53503,0,7158,3 -7159,17105,0,7159,3 -7160,83994,0,7160,3 -7161,25418,1,7161,3 -7162,38659,0,7162,3 -7163,70597,0,7163,3 -7164,30813,0,7164,3 -7165,33717,0,7165,3 -7166,69421,0,7166,3 -7167,39971,0,7167,3 -7168,80489,0,7168,3 -7169,74159,0,7169,3 -7170,32304,1,7170,3 -7171,47122,0,7171,3 -7172,18084,0,7172,3 -7173,78786,1,7173,3 -7174,67860,0,7174,3 -7175,50792,1,7175,3 -7176,10267,1,7176,3 -7177,83058,0,7177,3 -7178,69315,0,7178,3 -7179,22294,1,7179,3 -7180,52138,0,7180,3 -7181,58523,0,7181,3 -7182,23966,0,7182,3 -7183,45563,0,7183,3 -7184,63763,0,7184,3 -7185,82722,1,7185,3 -7186,26183,0,7186,3 -7187,42188,1,7187,3 -7188,34421,1,7188,3 -7189,44678,0,7189,3 -7190,83873,0,7190,3 -7191,42129,0,7191,3 -7192,58047,0,7192,3 -7193,75403,0,7193,3 -7194,82862,0,7194,3 -7195,67578,0,7195,3 -7196,21362,1,7196,3 -7197,32037,0,7197,3 -7198,78758,0,7198,3 -7199,26598,0,7199,3 -7200,62660,0,7200,3 -7201,17294,0,7201,3 -7202,65598,0,7202,3 -7203,50053,0,7203,3 -7204,78917,0,7204,3 -7205,25042,0,7205,3 -7206,55426,1,7206,3 -7207,57751,1,7207,3 -7208,76970,0,7208,3 -7209,20048,0,7209,3 -7210,79515,0,7210,3 -7211,69350,0,7211,3 -7212,37623,0,7212,3 -7213,51321,1,7213,3 -7214,25277,0,7214,3 -7215,45247,0,7215,3 -7216,77515,1,7216,3 -7217,58182,0,7217,3 -7218,48850,0,7218,3 -7219,39555,0,7219,3 -7220,36713,0,7220,3 -7221,86919,1,7221,3 -7222,53429,0,7222,3 -7223,46624,0,7223,3 -7224,82934,1,7224,3 -7225,29577,1,7225,3 -7226,82833,0,7226,3 -7227,87568,0,7227,3 -7228,14222,0,7228,3 -7229,14707,0,7229,3 -7230,76153,0,7230,3 -7231,55720,0,7231,3 -7232,62984,0,7232,3 -7233,63079,1,7233,3 -7234,36828,0,7234,3 -7235,34793,0,7235,3 -7236,85295,0,7236,3 -7237,37731,0,7237,3 -7238,31236,0,7238,3 -7239,50079,0,7239,3 -7240,60717,0,7240,3 -7241,60052,0,7241,3 -7242,75192,0,7242,3 -7243,71846,0,7243,3 -7244,78772,0,7244,3 -7245,17939,0,7245,3 -7246,39595,0,7246,3 -7247,24932,0,7247,3 -7248,53994,0,7248,3 -7249,21743,0,7249,3 -7250,28837,1,7250,3 -7251,55747,0,7251,3 -7252,17544,0,7252,3 -7253,33090,0,7253,3 -7254,79649,0,7254,3 -7255,32672,0,7255,3 -7256,67747,1,7256,3 -7257,79630,1,7257,3 -7258,86288,0,7258,3 -7259,64365,0,7259,3 -7260,45589,0,7260,3 -7261,77124,0,7261,3 -7262,11611,0,7262,3 -7263,46657,0,7263,3 -7264,83732,0,7264,3 -7265,32665,0,7265,3 -7266,21010,0,7266,3 -7267,16191,0,7267,3 -7268,89484,0,7268,3 -7269,71253,0,7269,3 -7270,28957,0,7270,3 -7271,28151,0,7271,3 -7272,33568,0,7272,3 -7273,71319,0,7273,3 -7274,35164,0,7274,3 -7275,83605,0,7275,3 -7276,49432,0,7276,3 -7277,44240,0,7277,3 -7278,23649,0,7278,3 -7279,66477,0,7279,3 -7280,52537,0,7280,3 -7281,18325,0,7281,3 -7282,41647,0,7282,3 -7283,67021,0,7283,3 -7284,59049,0,7284,3 -7285,81512,0,7285,3 -7286,21345,0,7286,3 -7287,73679,0,7287,3 -7288,49556,0,7288,3 -7289,83543,1,7289,3 -7290,49966,1,7290,3 -7291,65367,0,7291,3 -7292,19826,0,7292,3 -7293,25919,0,7293,3 -7294,50836,0,7294,3 -7295,17522,0,7295,3 -7296,40450,0,7296,3 -7297,39128,1,7297,3 -7298,50128,0,7298,3 -7299,42561,0,7299,3 -7300,56702,0,7300,3 -7301,89167,0,7301,3 -7302,68118,0,7302,3 -7303,65425,0,7303,3 -7304,56736,0,7304,3 -7305,23871,0,7305,3 -7306,21774,0,7306,3 -7307,54367,1,7307,3 -7308,77277,1,7308,3 -7309,58092,0,7309,3 -7310,25849,0,7310,3 -7311,22165,0,7311,3 -7312,83932,0,7312,3 -7313,37592,0,7313,3 -7314,67473,0,7314,3 -7315,13741,0,7315,3 -7316,24369,0,7316,3 -7317,36167,0,7317,3 -7318,66621,0,7318,3 -7319,18856,1,7319,3 -7320,30251,0,7320,3 -7321,59298,0,7321,3 -7322,23248,0,7322,3 -7323,63840,0,7323,3 -7324,89493,1,7324,3 -7325,45858,0,7325,3 -7326,20775,0,7326,3 -7327,23520,1,7327,3 -7328,42037,0,7328,3 -7329,66314,0,7329,3 -7330,72006,0,7330,3 -7331,77451,0,7331,3 -7332,24666,0,7332,3 -7333,70917,0,7333,3 -7334,60449,0,7334,3 -7335,62122,1,7335,3 -7336,80096,0,7336,3 -7337,27188,0,7337,3 -7338,69281,0,7338,3 -7339,21924,0,7339,3 -7340,76765,0,7340,3 -7341,39632,0,7341,3 -7342,52491,1,7342,3 -7343,36152,0,7343,3 -7344,38216,0,7344,3 -7345,84633,0,7345,3 -7346,66353,0,7346,3 -7347,11466,0,7347,3 -7348,37370,0,7348,3 -7349,81057,0,7349,3 -7350,11238,0,7350,3 -7351,61892,0,7351,3 -7352,60642,0,7352,3 -7353,24533,0,7353,3 -7354,47236,0,7354,3 -7355,82132,1,7355,3 -7356,39104,0,7356,3 -7357,32275,0,7357,3 -7358,26126,0,7358,3 -7359,86327,1,7359,3 -7360,12506,0,7360,3 -7361,67295,0,7361,3 -7362,18526,0,7362,3 -7363,45033,0,7363,3 -7364,79802,1,7364,3 -7365,21035,0,7365,3 -7366,65541,0,7366,3 -7367,44091,0,7367,3 -7368,61083,1,7368,3 -7369,78831,0,7369,3 -7370,26471,0,7370,3 -7371,59624,0,7371,3 -7372,26991,1,7372,3 -7373,16823,0,7373,3 -7374,40506,1,7374,3 -7375,39691,0,7375,3 -7376,12922,1,7376,3 -7377,89468,1,7377,3 -7378,38100,1,7378,3 -7379,80233,0,7379,3 -7380,60563,1,7380,3 -7381,81217,0,7381,3 -7382,28888,0,7382,3 -7383,57170,0,7383,3 -7384,24741,0,7384,3 -7385,29450,0,7385,3 -7386,39538,0,7386,3 -7387,25531,0,7387,3 -7388,87063,0,7388,3 -7389,24144,0,7389,3 -7390,81863,0,7390,3 -7391,36724,1,7391,3 -7392,81483,0,7392,3 -7393,20589,1,7393,3 -7394,65840,0,7394,3 -7395,73297,0,7395,3 -7396,54100,1,7396,3 -7397,62782,0,7397,3 -7398,75367,0,7398,3 -7399,32173,0,7399,3 -7400,48588,1,7400,3 -7401,31157,0,7401,3 -7402,13545,1,7402,3 -7403,76449,0,7403,3 -7404,28459,0,7404,3 -7405,89366,1,7405,3 -7406,84235,0,7406,3 -7407,44783,1,7407,3 -7408,23770,0,7408,3 -7409,81076,0,7409,3 -7410,40696,0,7410,3 -7411,78077,0,7411,3 -7412,66212,0,7412,3 -7413,10029,0,7413,3 -7414,62853,1,7414,3 -7415,79526,1,7415,3 -7416,68284,0,7416,3 -7417,32920,0,7417,3 -7418,75010,0,7418,3 -7419,19785,0,7419,3 -7420,79495,0,7420,3 -7421,42379,0,7421,3 -7422,59569,0,7422,3 -7423,34266,0,7423,3 -7424,57091,0,7424,3 -7425,18373,0,7425,3 -7426,40010,0,7426,3 -7427,43468,0,7427,3 -7428,86892,0,7428,3 -7429,32883,0,7429,3 -7430,64168,1,7430,3 -7431,59942,0,7431,3 -7432,22431,0,7432,3 -7433,29625,1,7433,3 -7434,45519,0,7434,3 -7435,85087,0,7435,3 -7436,66381,0,7436,3 -7437,64615,1,7437,3 -7438,46000,1,7438,3 -7439,40769,0,7439,3 -7440,80436,1,7440,3 -7441,47131,1,7441,3 -7442,64232,0,7442,3 -7443,45657,1,7443,3 -7444,53331,0,7444,3 -7445,19177,1,7445,3 -7446,70650,0,7446,3 -7447,62087,0,7447,3 -7448,58510,0,7448,3 -7449,60480,0,7449,3 -7450,60378,1,7450,3 -7451,20926,0,7451,3 -7452,73058,0,7452,3 -7453,76165,0,7453,3 -7454,16858,1,7454,3 -7455,43150,0,7455,3 -7456,78435,0,7456,3 -7457,43891,1,7457,3 -7458,80830,0,7458,3 -7459,10018,1,7459,3 -7460,52005,1,7460,3 -7461,56457,0,7461,3 -7462,88800,0,7462,3 -7463,66715,0,7463,3 -7464,45858,0,7464,3 -7465,68425,0,7465,3 -7466,14269,0,7466,3 -7467,28967,0,7467,3 -7468,28610,0,7468,3 -7469,14111,1,7469,3 -7470,13806,0,7470,3 -7471,53585,0,7471,3 -7472,52018,1,7472,3 -7473,69151,0,7473,3 -7474,67939,0,7474,3 -7475,80944,0,7475,3 -7476,84005,0,7476,3 -7477,64060,1,7477,3 -7478,80021,0,7478,3 -7479,84236,1,7479,3 -7480,44258,0,7480,3 -7481,48912,0,7481,3 -7482,59464,0,7482,3 -7483,40399,0,7483,3 -7484,36986,0,7484,3 -7485,78003,1,7485,3 -7486,23055,0,7486,3 -7487,55443,1,7487,3 -7488,62632,0,7488,3 -7489,45521,0,7489,3 -7490,60118,1,7490,3 -7491,76218,0,7491,3 -7492,58121,0,7492,3 -7493,27725,0,7493,3 -7494,67068,1,7494,3 -7495,13729,0,7495,3 -7496,15870,0,7496,3 -7497,37913,0,7497,3 -7498,12095,0,7498,3 -7499,66466,0,7499,3 -7500,40755,0,7500,3 -7501,41139,1,7501,3 -7502,18627,0,7502,3 -7503,11557,0,7503,3 -7504,38882,1,7504,3 -7505,12100,0,7505,3 -7506,36401,0,7506,3 -7507,49763,0,7507,3 -7508,13345,1,7508,3 -7509,58290,0,7509,3 -7510,34386,0,7510,3 -7511,13345,0,7511,3 -7512,81440,0,7512,3 -7513,87322,0,7513,3 -7514,40879,0,7514,3 -7515,68008,0,7515,3 -7516,46246,0,7516,3 -7517,32016,0,7517,3 -7518,35281,1,7518,3 -7519,38542,0,7519,3 -7520,86429,0,7520,3 -7521,45154,0,7521,3 -7522,34701,0,7522,3 -7523,31786,0,7523,3 -7524,76257,0,7524,3 -7525,24560,0,7525,3 -7526,46146,0,7526,3 -7527,54519,0,7527,3 -7528,52119,1,7528,3 -7529,78313,0,7529,3 -7530,52788,0,7530,3 -7531,24158,1,7531,3 -7532,19259,0,7532,3 -7533,63507,0,7533,3 -7534,44952,1,7534,3 -7535,80652,0,7535,3 -7536,68651,0,7536,3 -7537,45782,0,7537,3 -7538,41397,1,7538,3 -7539,64977,0,7539,3 -7540,80183,0,7540,3 -7541,18115,0,7541,3 -7542,27874,0,7542,3 -7543,85648,0,7543,3 -7544,39198,0,7544,3 -7545,29101,0,7545,3 -7546,81141,0,7546,3 -7547,18008,0,7547,3 -7548,18898,0,7548,3 -7549,75879,0,7549,3 -7550,74814,0,7550,3 -7551,46837,0,7551,3 -7552,82634,0,7552,3 -7553,86815,0,7553,3 -7554,19679,0,7554,3 -7555,68391,0,7555,3 -7556,24206,0,7556,3 -7557,78414,1,7557,3 -7558,51740,0,7558,3 -7559,82153,0,7559,3 -7560,87731,1,7560,3 -7561,46501,0,7561,3 -7562,48813,0,7562,3 -7563,23863,0,7563,3 -7564,59388,0,7564,3 -7565,50651,0,7565,3 -7566,43758,1,7566,3 -7567,20077,1,7567,3 -7568,49817,0,7568,3 -7569,51956,0,7569,3 -7570,87868,0,7570,3 -7571,29864,0,7571,3 -7572,57591,0,7572,3 -7573,88796,0,7573,3 -7574,27337,0,7574,3 -7575,28180,0,7575,3 -7576,48749,0,7576,3 -7577,75231,1,7577,3 -7578,66342,0,7578,3 -7579,61537,0,7579,3 -7580,19335,0,7580,3 -7581,28289,0,7581,3 -7582,76283,0,7582,3 -7583,66353,0,7583,3 -7584,82579,0,7584,3 -7585,52869,0,7585,3 -7586,39358,0,7586,3 -7587,42236,0,7587,3 -7588,74538,0,7588,3 -7589,73077,0,7589,3 -7590,23881,0,7590,3 -7591,23462,0,7591,3 -7592,69508,0,7592,3 -7593,56435,0,7593,3 -7594,46659,0,7594,3 -7595,54703,1,7595,3 -7596,43573,0,7596,3 -7597,34900,0,7597,3 -7598,82605,0,7598,3 -7599,71077,1,7599,3 -7600,35040,0,7600,3 -7601,18648,0,7601,3 -7602,68624,0,7602,3 -7603,50659,0,7603,3 -7604,14355,0,7604,3 -7605,28229,0,7605,3 -7606,58584,0,7606,3 -7607,14336,0,7607,3 -7608,55957,0,7608,3 -7609,70991,0,7609,3 -7610,64209,0,7610,3 -7611,26798,0,7611,3 -7612,64805,1,7612,3 -7613,14405,0,7613,3 -7614,77840,0,7614,3 -7615,12950,0,7615,3 -7616,87924,0,7616,3 -7617,14554,1,7617,3 -7618,36275,0,7618,3 -7619,16889,0,7619,3 -7620,80262,0,7620,3 -7621,45441,0,7621,3 -7622,30614,0,7622,3 -7623,88431,0,7623,3 -7624,20089,0,7624,3 -7625,73917,0,7625,3 -7626,15832,0,7626,3 -7627,32733,1,7627,3 -7628,56648,0,7628,3 -7629,30807,0,7629,3 -7630,75572,0,7630,3 -7631,70696,0,7631,3 -7632,11984,0,7632,3 -7633,88128,0,7633,3 -7634,60898,0,7634,3 -7635,19169,1,7635,3 -7636,88483,0,7636,3 -7637,57364,0,7637,3 -7638,63840,0,7638,3 -7639,69462,0,7639,3 -7640,88584,1,7640,3 -7641,71704,0,7641,3 -7642,30461,0,7642,3 -7643,44295,0,7643,3 -7644,40855,1,7644,3 -7645,75570,1,7645,3 -7646,18703,0,7646,3 -7647,75210,0,7647,3 -7648,68725,0,7648,3 -7649,48761,1,7649,3 -7650,15434,1,7650,3 -7651,75010,0,7651,3 -7652,43684,0,7652,3 -7653,82098,0,7653,3 -7654,75704,0,7654,3 -7655,69434,0,7655,3 -7656,75412,0,7656,3 -7657,81199,0,7657,3 -7658,50406,0,7658,3 -7659,85903,0,7659,3 -7660,42266,1,7660,3 -7661,43275,0,7661,3 -7662,40591,0,7662,3 -7663,62964,0,7663,3 -7664,54572,1,7664,3 -7665,43667,0,7665,3 -7666,85426,1,7666,3 -7667,84947,0,7667,3 -7668,72139,1,7668,3 -7669,14735,0,7669,3 -7670,76762,0,7670,3 -7671,88926,0,7671,3 -7672,79296,0,7672,3 -7673,55030,0,7673,3 -7674,54977,0,7674,3 -7675,66332,0,7675,3 -7676,34545,1,7676,3 -7677,30550,0,7677,3 -7678,35909,0,7678,3 -7679,47259,0,7679,3 -7680,68662,0,7680,3 -7681,14201,0,7681,3 -7682,22224,0,7682,3 -7683,34487,0,7683,3 -7684,44827,1,7684,3 -7685,15341,0,7685,3 -7686,35322,0,7686,3 -7687,60838,0,7687,3 -7688,75926,0,7688,3 -7689,35954,0,7689,3 -7690,60949,0,7690,3 -7691,87551,0,7691,3 -7692,27881,0,7692,3 -7693,39084,0,7693,3 -7694,22866,0,7694,3 -7695,47217,0,7695,3 -7696,25521,0,7696,3 -7697,15551,0,7697,3 -7698,11624,0,7698,3 -7699,71121,0,7699,3 -7700,44033,0,7700,3 -7701,82782,0,7701,3 -7702,13589,0,7702,3 -7703,40491,0,7703,3 -7704,14189,0,7704,3 -7705,19880,0,7705,3 -7706,68058,0,7706,3 -7707,38654,0,7707,3 -7708,12950,0,7708,3 -7709,25633,1,7709,3 -7710,87823,0,7710,3 -7711,25612,1,7711,3 -7712,31752,0,7712,3 -7713,61341,0,7713,3 -7714,28100,0,7714,3 -7715,19760,1,7715,3 -7716,86694,0,7716,3 -7717,89434,0,7717,3 -7718,80203,0,7718,3 -7719,10121,0,7719,3 -7720,23868,0,7720,3 -7721,44454,0,7721,3 -7722,53290,0,7722,3 -7723,78567,0,7723,3 -7724,35376,1,7724,3 -7725,34456,1,7725,3 -7726,80811,1,7726,3 -7727,73222,1,7727,3 -7728,39871,0,7728,3 -7729,17319,1,7729,3 -7730,81607,0,7730,3 -7731,72773,0,7731,3 -7732,14303,1,7732,3 -7733,65475,1,7733,3 -7734,24521,0,7734,3 -7735,24630,0,7735,3 -7736,34640,0,7736,3 -7737,27299,0,7737,3 -7738,41356,0,7738,3 -7739,10188,0,7739,3 -7740,41110,0,7740,3 -7741,26491,0,7741,3 -7742,37711,0,7742,3 -7743,20991,0,7743,3 -7744,80259,0,7744,3 -7745,61775,0,7745,3 -7746,56237,0,7746,3 -7747,53869,0,7747,3 -7748,33250,0,7748,3 -7749,64542,0,7749,3 -7750,62182,0,7750,3 -7751,60165,0,7751,3 -7752,42694,1,7752,3 -7753,44508,0,7753,3 -7754,81642,0,7754,3 -7755,21230,0,7755,3 -7756,22591,0,7756,3 -7757,72284,0,7757,3 -7758,31283,0,7758,3 -7759,59989,0,7759,3 -7760,35784,0,7760,3 -7761,30365,1,7761,3 -7762,57569,0,7762,3 -7763,66581,0,7763,3 -7764,53394,0,7764,3 -7765,54215,1,7765,3 -7766,22631,0,7766,3 -7767,13585,0,7767,3 -7768,89834,0,7768,3 -7769,17168,0,7769,3 -7770,88399,0,7770,3 -7771,63090,1,7771,3 -7772,82689,0,7772,3 -7773,82452,0,7773,3 -7774,49164,1,7774,3 -7775,51086,0,7775,3 -7776,85523,0,7776,3 -7777,63227,0,7777,3 -7778,34190,0,7778,3 -7779,63569,0,7779,3 -7780,47993,0,7780,3 -7781,38310,0,7781,3 -7782,58586,0,7782,3 -7783,56286,0,7783,3 -7784,72997,0,7784,3 -7785,70818,0,7785,3 -7786,66064,0,7786,3 -7787,27452,0,7787,3 -7788,55194,1,7788,3 -7789,11875,0,7789,3 -7790,52888,0,7790,3 -7791,48285,0,7791,3 -7792,29775,0,7792,3 -7793,83474,0,7793,3 -7794,80744,0,7794,3 -7795,43289,0,7795,3 -7796,76054,0,7796,3 -7797,84884,0,7797,3 -7798,28801,0,7798,3 -7799,35776,1,7799,3 -7800,35966,0,7800,3 -7801,74674,0,7801,3 -7802,56186,0,7802,3 -7803,45822,0,7803,3 -7804,12138,0,7804,3 -7805,62332,0,7805,3 -7806,71886,1,7806,3 -7807,68364,0,7807,3 -7808,75144,0,7808,3 -7809,24552,0,7809,3 -7810,71640,0,7810,3 -7811,42709,0,7811,3 -7812,45081,0,7812,3 -7813,75800,0,7813,3 -7814,24397,0,7814,3 -7815,61751,0,7815,3 -7816,63329,0,7816,3 -7817,82744,0,7817,3 -7818,15200,0,7818,3 -7819,79885,1,7819,3 -7820,12703,1,7820,3 -7821,56089,0,7821,3 -7822,73615,0,7822,3 -7823,78009,1,7823,3 -7824,83377,0,7824,3 -7825,42745,0,7825,3 -7826,32840,0,7826,3 -7827,84258,0,7827,3 -7828,54682,0,7828,3 -7829,86212,0,7829,3 -7830,60629,0,7830,3 -7831,55813,0,7831,3 -7832,87531,0,7832,3 -7833,70834,0,7833,3 -7834,78372,0,7834,3 -7835,82313,0,7835,3 -7836,38800,0,7836,3 -7837,28597,0,7837,3 -7838,36999,0,7838,3 -7839,87488,0,7839,3 -7840,67980,0,7840,3 -7841,78960,0,7841,3 -7842,36602,0,7842,3 -7843,84274,1,7843,3 -7844,69852,0,7844,3 -7845,89043,0,7845,3 -7846,60008,0,7846,3 -7847,74086,0,7847,3 -7848,63781,1,7848,3 -7849,76990,0,7849,3 -7850,65547,1,7850,3 -7851,43516,0,7851,3 -7852,71140,0,7852,3 -7853,74406,0,7853,3 -7854,68637,0,7854,3 -7855,66959,0,7855,3 -7856,39002,0,7856,3 -7857,68181,0,7857,3 -7858,65648,0,7858,3 -7859,29498,1,7859,3 -7860,22683,0,7860,3 -7861,51932,1,7861,3 -7862,25569,0,7862,3 -7863,36269,0,7863,3 -7864,37362,0,7864,3 -7865,72394,1,7865,3 -7866,79018,0,7866,3 -7867,43641,0,7867,3 -7868,25730,0,7868,3 -7869,34515,0,7869,3 -7870,21374,0,7870,3 -7871,44660,0,7871,3 -7872,16470,0,7872,3 -7873,56244,0,7873,3 -7874,64374,0,7874,3 -7875,22051,0,7875,3 -7876,63795,0,7876,3 -7877,58687,0,7877,3 -7878,64926,0,7878,3 -7879,62132,0,7879,3 -7880,22447,0,7880,3 -7881,78225,0,7881,3 -7882,40797,0,7882,3 -7883,18489,0,7883,3 -7884,80932,0,7884,3 -7885,72240,0,7885,3 -7886,42666,0,7886,3 -7887,46636,0,7887,3 -7888,55923,0,7888,3 -7889,57188,0,7889,3 -7890,42364,0,7890,3 -7891,57399,0,7891,3 -7892,37590,0,7892,3 -7893,50232,0,7893,3 -7894,86832,1,7894,3 -7895,85349,0,7895,3 -7896,78962,0,7896,3 -7897,11449,0,7897,3 -7898,42900,0,7898,3 -7899,86248,0,7899,3 -7900,45819,0,7900,3 -7901,33501,0,7901,3 -7902,20596,0,7902,3 -7903,76538,0,7903,3 -7904,72148,0,7904,3 -7905,42120,0,7905,3 -7906,60905,0,7906,3 -7907,86551,0,7907,3 -7908,53547,0,7908,3 -7909,78079,0,7909,3 -7910,56888,0,7910,3 -7911,65872,1,7911,3 -7912,83038,0,7912,3 -7913,77212,0,7913,3 -7914,75510,0,7914,3 -7915,69713,0,7915,3 -7916,43144,0,7916,3 -7917,52998,0,7917,3 -7918,28549,0,7918,3 -7919,64158,0,7919,3 -7920,55131,0,7920,3 -7921,34427,0,7921,3 -7922,77912,1,7922,3 -7923,40778,0,7923,3 -7924,57929,1,7924,3 -7925,50599,0,7925,3 -7926,68918,1,7926,3 -7927,48882,1,7927,3 -7928,65616,0,7928,3 -7929,78008,0,7929,3 -7930,24420,1,7930,3 -7931,74752,0,7931,3 -7932,29855,1,7932,3 -7933,22055,0,7933,3 -7934,88469,1,7934,3 -7935,57000,0,7935,3 -7936,64063,0,7936,3 -7937,87737,0,7937,3 -7938,39426,0,7938,3 -7939,71502,1,7939,3 -7940,56559,0,7940,3 -7941,75842,0,7941,3 -7942,51535,0,7942,3 -7943,28195,0,7943,3 -7944,76760,0,7944,3 -7945,14489,0,7945,3 -7946,10248,0,7946,3 -7947,80125,0,7947,3 -7948,43381,0,7948,3 -7949,67264,0,7949,3 -7950,50808,0,7950,3 -7951,12475,0,7951,3 -7952,80889,0,7952,3 -7953,13741,0,7953,3 -7954,37657,0,7954,3 -7955,84059,0,7955,3 -7956,32679,0,7956,3 -7957,51198,0,7957,3 -7958,15224,0,7958,3 -7959,39869,0,7959,3 -7960,76500,0,7960,3 -7961,35914,1,7961,3 -7962,11620,0,7962,3 -7963,65249,0,7963,3 -7964,80929,0,7964,3 -7965,41448,0,7965,3 -7966,29157,0,7966,3 -7967,10813,0,7967,3 -7968,22438,0,7968,3 -7969,81089,0,7969,3 -7970,79844,0,7970,3 -7971,28776,0,7971,3 -7972,46516,0,7972,3 -7973,79659,1,7973,3 -7974,76205,0,7974,3 -7975,55967,0,7975,3 -7976,77967,0,7976,3 -7977,47387,0,7977,3 -7978,38374,0,7978,3 -7979,46419,1,7979,3 -7980,22420,0,7980,3 -7981,79411,0,7981,3 -7982,28110,1,7982,3 -7983,20602,1,7983,3 -7984,22756,0,7984,3 -7985,50436,0,7985,3 -7986,85962,0,7986,3 -7987,40298,0,7987,3 -7988,16615,0,7988,3 -7989,31441,0,7989,3 -7990,81087,1,7990,3 -7991,77097,1,7991,3 -7992,39921,0,7992,3 -7993,47892,1,7993,3 -7994,66231,0,7994,3 -7995,40093,0,7995,3 -7996,31923,0,7996,3 -7997,73023,0,7997,3 -7998,13763,0,7998,3 -7999,29077,0,7999,3 + ,patient_id,labels,genotype_row,set +0 ,12410 ,1 ,0 ,1 +1 ,89718 ,1 ,1 ,1 +2 ,30592 ,0 ,2 ,1 +3 ,85934 ,0 ,3 ,1 +4 ,88604 ,0 ,4 ,1 +5 ,79409 ,0 ,5 ,1 +6 ,56761 ,1 ,6 ,1 +7 ,19105 ,0 ,7 ,1 +8 ,61400 ,0 ,8 ,1 +9 ,72245 ,0 ,9 ,1 +10 ,49204 ,0 ,10 ,1 +11 ,84420 ,0 ,11 ,1 +12 ,19248 ,0 ,12 ,1 +13 ,22737 ,0 ,13 ,1 +14 ,32622 ,0 ,14 ,1 +15 ,72026 ,0 ,15 ,1 +16 ,86416 ,0 ,16 ,1 +17 ,62803 ,0 ,17 ,1 +18 ,66416 ,0 ,18 ,1 +19 ,60594 ,0 ,19 ,1 +20 ,47633 ,0 ,20 ,1 +21 ,51328 ,0 ,21 ,1 +22 ,10678 ,0 ,22 ,1 +23 ,11884 ,1 ,23 ,1 +24 ,34677 ,1 ,24 ,1 +25 ,89343 ,0 ,25 ,1 +26 ,78898 ,0 ,26 ,1 +27 ,16105 ,0 ,27 ,1 +28 ,12725 ,0 ,28 ,1 +29 ,52325 ,1 ,29 ,1 +30 ,42106 ,0 ,30 ,1 +31 ,73266 ,0 ,31 ,1 +32 ,18310 ,0 ,32 ,1 +33 ,22914 ,1 ,33 ,1 +34 ,61361 ,0 ,34 ,1 +35 ,70172 ,0 ,35 ,1 +36 ,52631 ,0 ,36 ,1 +37 ,37269 ,0 ,37 ,1 +38 ,17845 ,0 ,38 ,1 +39 ,51406 ,0 ,39 ,1 +40 ,84172 ,1 ,40 ,1 +41 ,30739 ,0 ,41 ,1 +42 ,31718 ,0 ,42 ,1 +43 ,64294 ,0 ,43 ,1 +44 ,66951 ,0 ,44 ,1 +45 ,80172 ,0 ,45 ,1 +46 ,67918 ,0 ,46 ,1 +47 ,29400 ,0 ,47 ,1 +48 ,30975 ,0 ,48 ,1 +49 ,88512 ,0 ,49 ,1 +50 ,16989 ,0 ,50 ,1 +51 ,83925 ,0 ,51 ,1 +52 ,30936 ,1 ,52 ,1 +53 ,41580 ,0 ,53 ,1 +54 ,15421 ,0 ,54 ,1 +55 ,42389 ,1 ,55 ,1 +56 ,19457 ,0 ,56 ,1 +57 ,25469 ,0 ,57 ,1 +58 ,88323 ,1 ,58 ,1 +59 ,28550 ,0 ,59 ,1 +60 ,75241 ,1 ,60 ,1 +61 ,86669 ,0 ,61 ,1 +62 ,75364 ,0 ,62 ,1 +63 ,32383 ,0 ,63 ,1 +64 ,30685 ,1 ,64 ,1 +65 ,54852 ,0 ,65 ,1 +66 ,15197 ,0 ,66 ,1 +67 ,30585 ,1 ,67 ,1 +68 ,10105 ,0 ,68 ,1 +69 ,39592 ,0 ,69 ,1 +70 ,40400 ,0 ,70 ,1 +71 ,83712 ,0 ,71 ,1 +72 ,10459 ,0 ,72 ,1 +73 ,13141 ,0 ,73 ,1 +74 ,84971 ,1 ,74 ,1 +75 ,39878 ,0 ,75 ,1 +76 ,86797 ,0 ,76 ,1 +77 ,23465 ,1 ,77 ,1 +78 ,28305 ,0 ,78 ,1 +79 ,22426 ,0 ,79 ,1 +80 ,39458 ,1 ,80 ,1 +81 ,65912 ,0 ,81 ,1 +82 ,50344 ,0 ,82 ,1 +83 ,21829 ,0 ,83 ,1 +84 ,20488 ,0 ,84 ,1 +85 ,47718 ,0 ,85 ,1 +86 ,86140 ,0 ,86 ,1 +87 ,26451 ,0 ,87 ,1 +88 ,23756 ,0 ,88 ,1 +89 ,77621 ,0 ,89 ,1 +90 ,27984 ,0 ,90 ,1 +91 ,28925 ,1 ,91 ,1 +92 ,77168 ,1 ,92 ,1 +93 ,11174 ,0 ,93 ,1 +94 ,60617 ,1 ,94 ,1 +95 ,65668 ,1 ,95 ,1 +96 ,43940 ,0 ,96 ,1 +97 ,84251 ,0 ,97 ,1 +98 ,44046 ,0 ,98 ,1 +99 ,22848 ,0 ,99 ,1 +100 ,55974 ,1 ,100 ,1 +101 ,67596 ,0 ,101 ,1 +102 ,53963 ,0 ,102 ,1 +103 ,61467 ,0 ,103 ,1 +104 ,19106 ,0 ,104 ,1 +105 ,38908 ,0 ,105 ,1 +106 ,78354 ,0 ,106 ,1 +107 ,21894 ,0 ,107 ,1 +108 ,88355 ,0 ,108 ,1 +109 ,70322 ,1 ,109 ,1 +110 ,18334 ,0 ,110 ,1 +111 ,42076 ,0 ,111 ,1 +112 ,29856 ,0 ,112 ,1 +113 ,65004 ,0 ,113 ,1 +114 ,57389 ,0 ,114 ,1 +115 ,27604 ,1 ,115 ,1 +116 ,80639 ,0 ,116 ,1 +117 ,45111 ,0 ,117 ,1 +118 ,40294 ,1 ,118 ,1 +119 ,30461 ,1 ,119 ,1 +120 ,66144 ,0 ,120 ,1 +121 ,23204 ,0 ,121 ,1 +122 ,59322 ,0 ,122 ,1 +123 ,42601 ,0 ,123 ,1 +124 ,74276 ,0 ,124 ,1 +125 ,38779 ,0 ,125 ,1 +126 ,42106 ,0 ,126 ,1 +127 ,38161 ,0 ,127 ,1 +128 ,40466 ,0 ,128 ,1 +129 ,67348 ,1 ,129 ,1 +130 ,22812 ,0 ,130 ,1 +131 ,78556 ,1 ,131 ,1 +132 ,71451 ,0 ,132 ,1 +133 ,77003 ,0 ,133 ,1 +134 ,25402 ,1 ,134 ,1 +135 ,14202 ,0 ,135 ,1 +136 ,36151 ,0 ,136 ,1 +137 ,22693 ,0 ,137 ,1 +138 ,30410 ,0 ,138 ,1 +139 ,73793 ,0 ,139 ,1 +140 ,65055 ,0 ,140 ,1 +141 ,55657 ,1 ,141 ,1 +142 ,41272 ,0 ,142 ,1 +143 ,37976 ,0 ,143 ,1 +144 ,17392 ,0 ,144 ,1 +145 ,56994 ,0 ,145 ,1 +146 ,46701 ,0 ,146 ,1 +147 ,62410 ,0 ,147 ,1 +148 ,57051 ,1 ,148 ,1 +149 ,67420 ,0 ,149 ,1 +150 ,30008 ,0 ,150 ,1 +151 ,75190 ,0 ,151 ,1 +152 ,15058 ,0 ,152 ,1 +153 ,88865 ,0 ,153 ,1 +154 ,16269 ,0 ,154 ,1 +155 ,17818 ,1 ,155 ,1 +156 ,77265 ,0 ,156 ,1 +157 ,11204 ,0 ,157 ,1 +158 ,29213 ,0 ,158 ,1 +159 ,39875 ,0 ,159 ,1 +160 ,55991 ,0 ,160 ,1 +161 ,57699 ,0 ,161 ,1 +162 ,79680 ,0 ,162 ,1 +163 ,22109 ,0 ,163 ,1 +164 ,21205 ,0 ,164 ,1 +165 ,56397 ,0 ,165 ,1 +166 ,84877 ,0 ,166 ,1 +167 ,21814 ,1 ,167 ,1 +168 ,83345 ,0 ,168 ,1 +169 ,20720 ,0 ,169 ,1 +170 ,38024 ,0 ,170 ,1 +171 ,40750 ,0 ,171 ,1 +172 ,43127 ,0 ,172 ,1 +173 ,84871 ,0 ,173 ,1 +174 ,39519 ,0 ,174 ,1 +175 ,85370 ,1 ,175 ,1 +176 ,67286 ,0 ,176 ,1 +177 ,48700 ,1 ,177 ,1 +178 ,63016 ,0 ,178 ,1 +179 ,20329 ,0 ,179 ,1 +180 ,61326 ,0 ,180 ,1 +181 ,53527 ,1 ,181 ,1 +182 ,10191 ,0 ,182 ,1 +183 ,89564 ,1 ,183 ,1 +184 ,28366 ,0 ,184 ,1 +185 ,33390 ,0 ,185 ,1 +186 ,75084 ,0 ,186 ,1 +187 ,85533 ,0 ,187 ,1 +188 ,47004 ,0 ,188 ,1 +189 ,71356 ,0 ,189 ,1 +190 ,19137 ,0 ,190 ,1 +191 ,76006 ,1 ,191 ,1 +192 ,49852 ,0 ,192 ,1 +193 ,80027 ,0 ,193 ,1 +194 ,26010 ,0 ,194 ,1 +195 ,58871 ,0 ,195 ,1 +196 ,47974 ,0 ,196 ,1 +197 ,46427 ,0 ,197 ,1 +198 ,21059 ,0 ,198 ,1 +199 ,24380 ,0 ,199 ,1 +200 ,27218 ,0 ,200 ,1 +201 ,29644 ,1 ,201 ,1 +202 ,11324 ,0 ,202 ,1 +203 ,44592 ,0 ,203 ,1 +204 ,16265 ,0 ,204 ,1 +205 ,84027 ,0 ,205 ,1 +206 ,46105 ,0 ,206 ,1 +207 ,66464 ,0 ,207 ,1 +208 ,63992 ,0 ,208 ,1 +209 ,11737 ,0 ,209 ,1 +210 ,76399 ,0 ,210 ,1 +211 ,62097 ,1 ,211 ,1 +212 ,80630 ,0 ,212 ,1 +213 ,26807 ,0 ,213 ,1 +214 ,49807 ,0 ,214 ,1 +215 ,74600 ,0 ,215 ,1 +216 ,67114 ,0 ,216 ,1 +217 ,27538 ,1 ,217 ,1 +218 ,63896 ,0 ,218 ,1 +219 ,44662 ,0 ,219 ,1 +220 ,82824 ,0 ,220 ,1 +221 ,22309 ,1 ,221 ,1 +222 ,81630 ,0 ,222 ,1 +223 ,79031 ,0 ,223 ,1 +224 ,38299 ,1 ,224 ,1 +225 ,65252 ,0 ,225 ,1 +226 ,39073 ,0 ,226 ,1 +227 ,34004 ,0 ,227 ,1 +228 ,51642 ,0 ,228 ,1 +229 ,67480 ,0 ,229 ,1 +230 ,84251 ,0 ,230 ,1 +231 ,66656 ,0 ,231 ,1 +232 ,42974 ,0 ,232 ,1 +233 ,58305 ,0 ,233 ,1 +234 ,26415 ,0 ,234 ,1 +235 ,46960 ,0 ,235 ,1 +236 ,44567 ,0 ,236 ,1 +237 ,69859 ,0 ,237 ,1 +238 ,20858 ,0 ,238 ,1 +239 ,41568 ,1 ,239 ,1 +240 ,61417 ,0 ,240 ,1 +241 ,47613 ,0 ,241 ,1 +242 ,57952 ,0 ,242 ,1 +243 ,40751 ,0 ,243 ,1 +244 ,43750 ,0 ,244 ,1 +245 ,39686 ,0 ,245 ,1 +246 ,39830 ,0 ,246 ,1 +247 ,45149 ,0 ,247 ,1 +248 ,58865 ,0 ,248 ,1 +249 ,14994 ,0 ,249 ,1 +250 ,49498 ,1 ,250 ,1 +251 ,21640 ,0 ,251 ,1 +252 ,17915 ,0 ,252 ,1 +253 ,33777 ,0 ,253 ,1 +254 ,31453 ,1 ,254 ,1 +255 ,29029 ,0 ,255 ,1 +256 ,29276 ,0 ,256 ,1 +257 ,15579 ,1 ,257 ,1 +258 ,72122 ,1 ,258 ,1 +259 ,76022 ,0 ,259 ,1 +260 ,22202 ,0 ,260 ,1 +261 ,12833 ,0 ,261 ,1 +262 ,55253 ,0 ,262 ,1 +263 ,14525 ,0 ,263 ,1 +264 ,49087 ,1 ,264 ,1 +265 ,73839 ,0 ,265 ,1 +266 ,33584 ,0 ,266 ,1 +267 ,36548 ,0 ,267 ,1 +268 ,71697 ,0 ,268 ,1 +269 ,87686 ,0 ,269 ,1 +270 ,85305 ,1 ,270 ,1 +271 ,73222 ,1 ,271 ,1 +272 ,89333 ,0 ,272 ,1 +273 ,26809 ,0 ,273 ,1 +274 ,27200 ,0 ,274 ,1 +275 ,50404 ,0 ,275 ,1 +276 ,26545 ,0 ,276 ,1 +277 ,69972 ,0 ,277 ,1 +278 ,25919 ,0 ,278 ,1 +279 ,56514 ,0 ,279 ,1 +280 ,57575 ,0 ,280 ,1 +281 ,67247 ,0 ,281 ,1 +282 ,35871 ,0 ,282 ,1 +283 ,18581 ,0 ,283 ,1 +284 ,22552 ,1 ,284 ,1 +285 ,78530 ,0 ,285 ,1 +286 ,42804 ,0 ,286 ,1 +287 ,35063 ,0 ,287 ,1 +288 ,26026 ,0 ,288 ,1 +289 ,55916 ,0 ,289 ,1 +290 ,22859 ,0 ,290 ,1 +291 ,43747 ,0 ,291 ,1 +292 ,69803 ,0 ,292 ,1 +293 ,84426 ,0 ,293 ,1 +294 ,15744 ,0 ,294 ,1 +295 ,50556 ,0 ,295 ,1 +296 ,71119 ,1 ,296 ,1 +297 ,24279 ,0 ,297 ,1 +298 ,48493 ,0 ,298 ,1 +299 ,76116 ,0 ,299 ,1 +300 ,32761 ,0 ,300 ,1 +301 ,65740 ,0 ,301 ,1 +302 ,26087 ,0 ,302 ,1 +303 ,32269 ,1 ,303 ,1 +304 ,50338 ,0 ,304 ,1 +305 ,21068 ,0 ,305 ,1 +306 ,65524 ,0 ,306 ,1 +307 ,59328 ,0 ,307 ,1 +308 ,84399 ,0 ,308 ,1 +309 ,46043 ,0 ,309 ,1 +310 ,54994 ,0 ,310 ,1 +311 ,29765 ,0 ,311 ,1 +312 ,21170 ,0 ,312 ,1 +313 ,81973 ,0 ,313 ,1 +314 ,45041 ,0 ,314 ,1 +315 ,70678 ,0 ,315 ,1 +316 ,77984 ,0 ,316 ,1 +317 ,29667 ,0 ,317 ,1 +318 ,80573 ,0 ,318 ,1 +319 ,22794 ,0 ,319 ,1 +320 ,77080 ,1 ,320 ,1 +321 ,11343 ,1 ,321 ,1 +322 ,83628 ,1 ,322 ,1 +323 ,23569 ,0 ,323 ,1 +324 ,45224 ,0 ,324 ,1 +325 ,44069 ,0 ,325 ,1 +326 ,21759 ,0 ,326 ,1 +327 ,16862 ,0 ,327 ,1 +328 ,84400 ,0 ,328 ,1 +329 ,27762 ,0 ,329 ,1 +330 ,64677 ,0 ,330 ,1 +331 ,85942 ,1 ,331 ,1 +332 ,44966 ,0 ,332 ,1 +333 ,28767 ,0 ,333 ,1 +334 ,34222 ,0 ,334 ,1 +335 ,71599 ,0 ,335 ,1 +336 ,67287 ,0 ,336 ,1 +337 ,43181 ,0 ,337 ,1 +338 ,57795 ,0 ,338 ,1 +339 ,79956 ,0 ,339 ,1 +340 ,77360 ,0 ,340 ,1 +341 ,86125 ,1 ,341 ,1 +342 ,27513 ,0 ,342 ,1 +343 ,27923 ,0 ,343 ,1 +344 ,54306 ,0 ,344 ,1 +345 ,26687 ,0 ,345 ,1 +346 ,35403 ,1 ,346 ,1 +347 ,19099 ,1 ,347 ,1 +348 ,36284 ,0 ,348 ,1 +349 ,79680 ,0 ,349 ,1 +350 ,86113 ,0 ,350 ,1 +351 ,74702 ,0 ,351 ,1 +352 ,71983 ,0 ,352 ,1 +353 ,87209 ,0 ,353 ,1 +354 ,23853 ,0 ,354 ,1 +355 ,70576 ,1 ,355 ,1 +356 ,24685 ,0 ,356 ,1 +357 ,61095 ,1 ,357 ,1 +358 ,57149 ,1 ,358 ,1 +359 ,13642 ,0 ,359 ,1 +360 ,35126 ,1 ,360 ,1 +361 ,39825 ,0 ,361 ,1 +362 ,31726 ,0 ,362 ,1 +363 ,22836 ,0 ,363 ,1 +364 ,26554 ,0 ,364 ,1 +365 ,89043 ,1 ,365 ,1 +366 ,68211 ,1 ,366 ,1 +367 ,43021 ,0 ,367 ,1 +368 ,29098 ,0 ,368 ,1 +369 ,44588 ,0 ,369 ,1 +370 ,56018 ,0 ,370 ,1 +371 ,31071 ,0 ,371 ,1 +372 ,45439 ,0 ,372 ,1 +373 ,37364 ,0 ,373 ,1 +374 ,10835 ,0 ,374 ,1 +375 ,86251 ,0 ,375 ,1 +376 ,65644 ,0 ,376 ,1 +377 ,87887 ,0 ,377 ,1 +378 ,32799 ,0 ,378 ,1 +379 ,41692 ,0 ,379 ,1 +380 ,80173 ,0 ,380 ,1 +381 ,36591 ,0 ,381 ,1 +382 ,32590 ,0 ,382 ,1 +383 ,39203 ,0 ,383 ,1 +384 ,68769 ,0 ,384 ,1 +385 ,10343 ,0 ,385 ,1 +386 ,45811 ,0 ,386 ,1 +387 ,78521 ,0 ,387 ,1 +388 ,62543 ,0 ,388 ,1 +389 ,14454 ,0 ,389 ,1 +390 ,32225 ,1 ,390 ,1 +391 ,63255 ,0 ,391 ,1 +392 ,67806 ,0 ,392 ,1 +393 ,88635 ,0 ,393 ,1 +394 ,68935 ,1 ,394 ,1 +395 ,65712 ,0 ,395 ,1 +396 ,58124 ,1 ,396 ,1 +397 ,52418 ,0 ,397 ,1 +398 ,11761 ,0 ,398 ,1 +399 ,40932 ,0 ,399 ,1 +400 ,10343 ,0 ,400 ,1 +401 ,88778 ,1 ,401 ,1 +402 ,60336 ,0 ,402 ,1 +403 ,12756 ,0 ,403 ,1 +404 ,84013 ,0 ,404 ,1 +405 ,48256 ,0 ,405 ,1 +406 ,14888 ,0 ,406 ,1 +407 ,33632 ,0 ,407 ,1 +408 ,86150 ,0 ,408 ,1 +409 ,71984 ,0 ,409 ,1 +410 ,43915 ,1 ,410 ,1 +411 ,71454 ,0 ,411 ,1 +412 ,69803 ,0 ,412 ,1 +413 ,48020 ,0 ,413 ,1 +414 ,30000 ,0 ,414 ,1 +415 ,66536 ,0 ,415 ,1 +416 ,48105 ,0 ,416 ,1 +417 ,32474 ,1 ,417 ,1 +418 ,51185 ,0 ,418 ,1 +419 ,52278 ,0 ,419 ,1 +420 ,32945 ,0 ,420 ,1 +421 ,29619 ,0 ,421 ,1 +422 ,46927 ,0 ,422 ,1 +423 ,74522 ,0 ,423 ,1 +424 ,37960 ,1 ,424 ,1 +425 ,40023 ,0 ,425 ,1 +426 ,85195 ,0 ,426 ,1 +427 ,71857 ,0 ,427 ,1 +428 ,66564 ,1 ,428 ,1 +429 ,76273 ,0 ,429 ,1 +430 ,43487 ,0 ,430 ,1 +431 ,84952 ,0 ,431 ,1 +432 ,76182 ,0 ,432 ,1 +433 ,68577 ,0 ,433 ,1 +434 ,49181 ,0 ,434 ,1 +435 ,37403 ,0 ,435 ,1 +436 ,79615 ,0 ,436 ,1 +437 ,15011 ,0 ,437 ,1 +438 ,42376 ,0 ,438 ,1 +439 ,86687 ,0 ,439 ,1 +440 ,23756 ,0 ,440 ,1 +441 ,33730 ,0 ,441 ,1 +442 ,58324 ,0 ,442 ,1 +443 ,68222 ,0 ,443 ,1 +444 ,45732 ,0 ,444 ,1 +445 ,65726 ,1 ,445 ,1 +446 ,26267 ,0 ,446 ,1 +447 ,87051 ,0 ,447 ,1 +448 ,45630 ,0 ,448 ,1 +449 ,61843 ,1 ,449 ,1 +450 ,69889 ,0 ,450 ,1 +451 ,43731 ,1 ,451 ,1 +452 ,50625 ,0 ,452 ,1 +453 ,87530 ,0 ,453 ,1 +454 ,29553 ,0 ,454 ,1 +455 ,38991 ,0 ,455 ,1 +456 ,38306 ,1 ,456 ,1 +457 ,81442 ,0 ,457 ,1 +458 ,21332 ,0 ,458 ,1 +459 ,53891 ,0 ,459 ,1 +460 ,60183 ,1 ,460 ,1 +461 ,82852 ,0 ,461 ,1 +462 ,58595 ,0 ,462 ,1 +463 ,41912 ,0 ,463 ,1 +464 ,74512 ,0 ,464 ,1 +465 ,42488 ,0 ,465 ,1 +466 ,59535 ,1 ,466 ,1 +467 ,15671 ,0 ,467 ,1 +468 ,73536 ,0 ,468 ,1 +469 ,32396 ,0 ,469 ,1 +470 ,74251 ,0 ,470 ,1 +471 ,50877 ,0 ,471 ,1 +472 ,85134 ,1 ,472 ,1 +473 ,82361 ,0 ,473 ,1 +474 ,43149 ,0 ,474 ,1 +475 ,89549 ,0 ,475 ,1 +476 ,31301 ,0 ,476 ,1 +477 ,37078 ,1 ,477 ,1 +478 ,40211 ,0 ,478 ,1 +479 ,36204 ,0 ,479 ,1 +480 ,69172 ,0 ,480 ,1 +481 ,63478 ,0 ,481 ,1 +482 ,30011 ,0 ,482 ,1 +483 ,38316 ,0 ,483 ,1 +484 ,81363 ,0 ,484 ,1 +485 ,56160 ,0 ,485 ,1 +486 ,43442 ,1 ,486 ,1 +487 ,87204 ,0 ,487 ,1 +488 ,63534 ,0 ,488 ,1 +489 ,55830 ,0 ,489 ,1 +490 ,13830 ,0 ,490 ,1 +491 ,73193 ,0 ,491 ,1 +492 ,24030 ,1 ,492 ,1 +493 ,11420 ,0 ,493 ,1 +494 ,29515 ,0 ,494 ,1 +495 ,55342 ,1 ,495 ,1 +496 ,88974 ,1 ,496 ,1 +497 ,55472 ,0 ,497 ,1 +498 ,68162 ,0 ,498 ,1 +499 ,33626 ,0 ,499 ,1 +500 ,79441 ,0 ,500 ,1 +501 ,25019 ,1 ,501 ,1 +502 ,85109 ,0 ,502 ,1 +503 ,34824 ,0 ,503 ,1 +504 ,50542 ,0 ,504 ,1 +505 ,43168 ,0 ,505 ,1 +506 ,54688 ,0 ,506 ,1 +507 ,66481 ,0 ,507 ,1 +508 ,65544 ,0 ,508 ,1 +509 ,63668 ,0 ,509 ,1 +510 ,65027 ,0 ,510 ,1 +511 ,62321 ,0 ,511 ,1 +512 ,49720 ,0 ,512 ,1 +513 ,39672 ,0 ,513 ,1 +514 ,33535 ,0 ,514 ,1 +515 ,14662 ,0 ,515 ,1 +516 ,89507 ,0 ,516 ,1 +517 ,46865 ,0 ,517 ,1 +518 ,17521 ,1 ,518 ,1 +519 ,27246 ,0 ,519 ,1 +520 ,46583 ,0 ,520 ,1 +521 ,21749 ,0 ,521 ,1 +522 ,58263 ,0 ,522 ,1 +523 ,38439 ,0 ,523 ,1 +524 ,30205 ,0 ,524 ,1 +525 ,41672 ,0 ,525 ,1 +526 ,38706 ,0 ,526 ,1 +527 ,64426 ,0 ,527 ,1 +528 ,47915 ,0 ,528 ,1 +529 ,54384 ,0 ,529 ,1 +530 ,88917 ,0 ,530 ,1 +531 ,44145 ,0 ,531 ,1 +532 ,66296 ,0 ,532 ,1 +533 ,10644 ,0 ,533 ,1 +534 ,82467 ,1 ,534 ,1 +535 ,22516 ,0 ,535 ,1 +536 ,16535 ,0 ,536 ,1 +537 ,55939 ,0 ,537 ,1 +538 ,42270 ,0 ,538 ,1 +539 ,59380 ,1 ,539 ,1 +540 ,48714 ,1 ,540 ,1 +541 ,32862 ,1 ,541 ,1 +542 ,52298 ,0 ,542 ,1 +543 ,31057 ,0 ,543 ,1 +544 ,25904 ,0 ,544 ,1 +545 ,84092 ,0 ,545 ,1 +546 ,31464 ,1 ,546 ,1 +547 ,42055 ,0 ,547 ,1 +548 ,83780 ,0 ,548 ,1 +549 ,79165 ,0 ,549 ,1 +550 ,21476 ,0 ,550 ,1 +551 ,66185 ,1 ,551 ,1 +552 ,59818 ,0 ,552 ,1 +553 ,39373 ,0 ,553 ,1 +554 ,39640 ,0 ,554 ,1 +555 ,83413 ,0 ,555 ,1 +556 ,43633 ,0 ,556 ,1 +557 ,67608 ,0 ,557 ,1 +558 ,55521 ,0 ,558 ,1 +559 ,79632 ,0 ,559 ,1 +560 ,40163 ,1 ,560 ,1 +561 ,43369 ,1 ,561 ,1 +562 ,66110 ,1 ,562 ,1 +563 ,77912 ,1 ,563 ,1 +564 ,35334 ,1 ,564 ,1 +565 ,20192 ,0 ,565 ,1 +566 ,84399 ,1 ,566 ,1 +567 ,64605 ,1 ,567 ,1 +568 ,55977 ,0 ,568 ,1 +569 ,65553 ,0 ,569 ,1 +570 ,24210 ,0 ,570 ,1 +571 ,22561 ,0 ,571 ,1 +572 ,88799 ,1 ,572 ,1 +573 ,77806 ,0 ,573 ,1 +574 ,49312 ,0 ,574 ,1 +575 ,27888 ,0 ,575 ,1 +576 ,68403 ,0 ,576 ,1 +577 ,62098 ,0 ,577 ,1 +578 ,75083 ,0 ,578 ,1 +579 ,26393 ,1 ,579 ,1 +580 ,25957 ,1 ,580 ,1 +581 ,54378 ,0 ,581 ,1 +582 ,71824 ,1 ,582 ,1 +583 ,44285 ,0 ,583 ,1 +584 ,50537 ,0 ,584 ,1 +585 ,74589 ,1 ,585 ,1 +586 ,89899 ,0 ,586 ,1 +587 ,13229 ,0 ,587 ,1 +588 ,80339 ,1 ,588 ,1 +589 ,44251 ,0 ,589 ,1 +590 ,85519 ,0 ,590 ,1 +591 ,77566 ,0 ,591 ,1 +592 ,32035 ,0 ,592 ,1 +593 ,39001 ,0 ,593 ,1 +594 ,82762 ,0 ,594 ,1 +595 ,79935 ,0 ,595 ,1 +596 ,36442 ,0 ,596 ,1 +597 ,51342 ,0 ,597 ,1 +598 ,63765 ,0 ,598 ,1 +599 ,73095 ,0 ,599 ,1 +600 ,19002 ,0 ,600 ,1 +601 ,10927 ,0 ,601 ,1 +602 ,64126 ,0 ,602 ,1 +603 ,87314 ,0 ,603 ,1 +604 ,17754 ,1 ,604 ,1 +605 ,73861 ,0 ,605 ,1 +606 ,36415 ,0 ,606 ,1 +607 ,43222 ,0 ,607 ,1 +608 ,69387 ,0 ,608 ,1 +609 ,53492 ,0 ,609 ,1 +610 ,34951 ,0 ,610 ,1 +611 ,75554 ,1 ,611 ,1 +612 ,24275 ,0 ,612 ,1 +613 ,11347 ,0 ,613 ,1 +614 ,71395 ,0 ,614 ,1 +615 ,47492 ,0 ,615 ,1 +616 ,24776 ,0 ,616 ,1 +617 ,14493 ,0 ,617 ,1 +618 ,34611 ,0 ,618 ,1 +619 ,71782 ,0 ,619 ,1 +620 ,12296 ,0 ,620 ,1 +621 ,26243 ,0 ,621 ,1 +622 ,15477 ,1 ,622 ,1 +623 ,52230 ,1 ,623 ,1 +624 ,56641 ,0 ,624 ,1 +625 ,36104 ,0 ,625 ,1 +626 ,66023 ,0 ,626 ,1 +627 ,53469 ,0 ,627 ,1 +628 ,37004 ,0 ,628 ,1 +629 ,39448 ,0 ,629 ,1 +630 ,28633 ,0 ,630 ,1 +631 ,16753 ,1 ,631 ,1 +632 ,16837 ,1 ,632 ,1 +633 ,33575 ,0 ,633 ,1 +634 ,32561 ,0 ,634 ,1 +635 ,85806 ,0 ,635 ,1 +636 ,86654 ,1 ,636 ,1 +637 ,39809 ,0 ,637 ,1 +638 ,29800 ,1 ,638 ,1 +639 ,80618 ,0 ,639 ,1 +640 ,48952 ,0 ,640 ,1 +641 ,71058 ,0 ,641 ,1 +642 ,23866 ,0 ,642 ,1 +643 ,78743 ,0 ,643 ,1 +644 ,20669 ,0 ,644 ,1 +645 ,39866 ,0 ,645 ,1 +646 ,77810 ,0 ,646 ,1 +647 ,40492 ,0 ,647 ,1 +648 ,68460 ,0 ,648 ,1 +649 ,87583 ,1 ,649 ,1 +650 ,38390 ,0 ,650 ,1 +651 ,22383 ,0 ,651 ,1 +652 ,58269 ,0 ,652 ,1 +653 ,67106 ,1 ,653 ,1 +654 ,67959 ,0 ,654 ,1 +655 ,10161 ,0 ,655 ,1 +656 ,40174 ,0 ,656 ,1 +657 ,47108 ,0 ,657 ,1 +658 ,54465 ,0 ,658 ,1 +659 ,71518 ,0 ,659 ,1 +660 ,33069 ,0 ,660 ,1 +661 ,26192 ,1 ,661 ,1 +662 ,28053 ,0 ,662 ,1 +663 ,60498 ,0 ,663 ,1 +664 ,86208 ,0 ,664 ,1 +665 ,83054 ,0 ,665 ,1 +666 ,54923 ,0 ,666 ,1 +667 ,24478 ,0 ,667 ,1 +668 ,68172 ,0 ,668 ,1 +669 ,64015 ,1 ,669 ,1 +670 ,58824 ,0 ,670 ,1 +671 ,87769 ,0 ,671 ,1 +672 ,82982 ,0 ,672 ,1 +673 ,57389 ,0 ,673 ,1 +674 ,32850 ,0 ,674 ,1 +675 ,58191 ,1 ,675 ,1 +676 ,57329 ,0 ,676 ,1 +677 ,71038 ,0 ,677 ,1 +678 ,32696 ,0 ,678 ,1 +679 ,89180 ,0 ,679 ,1 +680 ,81212 ,0 ,680 ,1 +681 ,21259 ,0 ,681 ,1 +682 ,42401 ,0 ,682 ,1 +683 ,62140 ,0 ,683 ,1 +684 ,64920 ,1 ,684 ,1 +685 ,50455 ,0 ,685 ,1 +686 ,77842 ,0 ,686 ,1 +687 ,22845 ,0 ,687 ,1 +688 ,41656 ,0 ,688 ,1 +689 ,67072 ,0 ,689 ,1 +690 ,82979 ,0 ,690 ,1 +691 ,70637 ,0 ,691 ,1 +692 ,54872 ,0 ,692 ,1 +693 ,60038 ,0 ,693 ,1 +694 ,45781 ,0 ,694 ,1 +695 ,32551 ,1 ,695 ,1 +696 ,40279 ,0 ,696 ,1 +697 ,82670 ,0 ,697 ,1 +698 ,46792 ,0 ,698 ,1 +699 ,31392 ,0 ,699 ,1 +700 ,39209 ,0 ,700 ,1 +701 ,18767 ,0 ,701 ,1 +702 ,78050 ,0 ,702 ,1 +703 ,10649 ,0 ,703 ,1 +704 ,89387 ,1 ,704 ,1 +705 ,29512 ,0 ,705 ,1 +706 ,83786 ,0 ,706 ,1 +707 ,88338 ,0 ,707 ,1 +708 ,40763 ,1 ,708 ,1 +709 ,24573 ,0 ,709 ,1 +710 ,25194 ,0 ,710 ,1 +711 ,62334 ,0 ,711 ,1 +712 ,82192 ,0 ,712 ,1 +713 ,40708 ,1 ,713 ,1 +714 ,53689 ,0 ,714 ,1 +715 ,75355 ,1 ,715 ,1 +716 ,55294 ,0 ,716 ,1 +717 ,58078 ,1 ,717 ,1 +718 ,23283 ,0 ,718 ,1 +719 ,32518 ,0 ,719 ,1 +720 ,11640 ,0 ,720 ,1 +721 ,77915 ,0 ,721 ,1 +722 ,16928 ,0 ,722 ,1 +723 ,39240 ,0 ,723 ,1 +724 ,24668 ,0 ,724 ,1 +725 ,83339 ,0 ,725 ,1 +726 ,85777 ,1 ,726 ,1 +727 ,87845 ,1 ,727 ,1 +728 ,51331 ,0 ,728 ,1 +729 ,22878 ,0 ,729 ,1 +730 ,14187 ,0 ,730 ,1 +731 ,42993 ,0 ,731 ,1 +732 ,20938 ,0 ,732 ,1 +733 ,64910 ,0 ,733 ,1 +734 ,24672 ,0 ,734 ,1 +735 ,28280 ,0 ,735 ,1 +736 ,61802 ,0 ,736 ,1 +737 ,73771 ,0 ,737 ,1 +738 ,11263 ,0 ,738 ,1 +739 ,54188 ,1 ,739 ,1 +740 ,60453 ,1 ,740 ,1 +741 ,86907 ,0 ,741 ,1 +742 ,45778 ,0 ,742 ,1 +743 ,76940 ,0 ,743 ,1 +744 ,45422 ,1 ,744 ,1 +745 ,57140 ,0 ,745 ,1 +746 ,85278 ,0 ,746 ,1 +747 ,19265 ,0 ,747 ,1 +748 ,79892 ,0 ,748 ,1 +749 ,10938 ,0 ,749 ,1 +750 ,53991 ,0 ,750 ,1 +751 ,79443 ,1 ,751 ,1 +752 ,55344 ,0 ,752 ,1 +753 ,25485 ,0 ,753 ,1 +754 ,56728 ,0 ,754 ,1 +755 ,57491 ,0 ,755 ,1 +756 ,28863 ,1 ,756 ,1 +757 ,41022 ,0 ,757 ,1 +758 ,44604 ,0 ,758 ,1 +759 ,76047 ,0 ,759 ,1 +760 ,80007 ,0 ,760 ,1 +761 ,74711 ,0 ,761 ,1 +762 ,77447 ,0 ,762 ,1 +763 ,28390 ,0 ,763 ,1 +764 ,29576 ,0 ,764 ,1 +765 ,40622 ,1 ,765 ,1 +766 ,55755 ,0 ,766 ,1 +767 ,48564 ,0 ,767 ,1 +768 ,50984 ,0 ,768 ,1 +769 ,84795 ,0 ,769 ,1 +770 ,28309 ,0 ,770 ,1 +771 ,70760 ,0 ,771 ,1 +772 ,78038 ,0 ,772 ,1 +773 ,81859 ,0 ,773 ,1 +774 ,69919 ,0 ,774 ,1 +775 ,30846 ,0 ,775 ,1 +776 ,61133 ,0 ,776 ,1 +777 ,40766 ,0 ,777 ,1 +778 ,29412 ,0 ,778 ,1 +779 ,27317 ,0 ,779 ,1 +780 ,79663 ,0 ,780 ,1 +781 ,22409 ,1 ,781 ,1 +782 ,55924 ,0 ,782 ,1 +783 ,83047 ,0 ,783 ,1 +784 ,64987 ,0 ,784 ,1 +785 ,42386 ,0 ,785 ,1 +786 ,18527 ,1 ,786 ,1 +787 ,29305 ,1 ,787 ,1 +788 ,20465 ,1 ,788 ,1 +789 ,48374 ,0 ,789 ,1 +790 ,83511 ,0 ,790 ,1 +791 ,39265 ,0 ,791 ,1 +792 ,89240 ,1 ,792 ,1 +793 ,49020 ,1 ,793 ,1 +794 ,84248 ,0 ,794 ,1 +795 ,70714 ,1 ,795 ,1 +796 ,68990 ,0 ,796 ,1 +797 ,42861 ,0 ,797 ,1 +798 ,72491 ,1 ,798 ,1 +799 ,49572 ,1 ,799 ,1 +800 ,11250 ,0 ,800 ,1 +801 ,47042 ,1 ,801 ,1 +802 ,44067 ,0 ,802 ,1 +803 ,39525 ,0 ,803 ,1 +804 ,43890 ,0 ,804 ,1 +805 ,47347 ,1 ,805 ,1 +806 ,42812 ,0 ,806 ,1 +807 ,88998 ,0 ,807 ,1 +808 ,78239 ,0 ,808 ,1 +809 ,30826 ,0 ,809 ,1 +810 ,68380 ,0 ,810 ,1 +811 ,45443 ,0 ,811 ,1 +812 ,79167 ,0 ,812 ,1 +813 ,77943 ,0 ,813 ,1 +814 ,14132 ,0 ,814 ,1 +815 ,89583 ,0 ,815 ,1 +816 ,77911 ,0 ,816 ,1 +817 ,22310 ,0 ,817 ,1 +818 ,33849 ,1 ,818 ,1 +819 ,70126 ,1 ,819 ,1 +820 ,85495 ,0 ,820 ,1 +821 ,18564 ,0 ,821 ,1 +822 ,68970 ,0 ,822 ,1 +823 ,34311 ,1 ,823 ,1 +824 ,32618 ,0 ,824 ,1 +825 ,77304 ,0 ,825 ,1 +826 ,22365 ,0 ,826 ,1 +827 ,32955 ,0 ,827 ,1 +828 ,46356 ,0 ,828 ,1 +829 ,74583 ,0 ,829 ,1 +830 ,36218 ,0 ,830 ,1 +831 ,78591 ,0 ,831 ,1 +832 ,47404 ,0 ,832 ,1 +833 ,87385 ,0 ,833 ,1 +834 ,76460 ,0 ,834 ,1 +835 ,61729 ,0 ,835 ,1 +836 ,39980 ,1 ,836 ,1 +837 ,33082 ,0 ,837 ,1 +838 ,13958 ,0 ,838 ,1 +839 ,75315 ,0 ,839 ,1 +840 ,12474 ,0 ,840 ,1 +841 ,54193 ,1 ,841 ,1 +842 ,83802 ,0 ,842 ,1 +843 ,56700 ,0 ,843 ,1 +844 ,69954 ,0 ,844 ,1 +845 ,83478 ,0 ,845 ,1 +846 ,55921 ,0 ,846 ,1 +847 ,66059 ,0 ,847 ,1 +848 ,55099 ,0 ,848 ,1 +849 ,37626 ,0 ,849 ,1 +850 ,49160 ,0 ,850 ,1 +851 ,40261 ,0 ,851 ,1 +852 ,55929 ,0 ,852 ,1 +853 ,64898 ,0 ,853 ,1 +854 ,23736 ,0 ,854 ,1 +855 ,69514 ,0 ,855 ,1 +856 ,87191 ,1 ,856 ,1 +857 ,64290 ,0 ,857 ,1 +858 ,21613 ,0 ,858 ,1 +859 ,18281 ,0 ,859 ,1 +860 ,88901 ,0 ,860 ,1 +861 ,62787 ,0 ,861 ,1 +862 ,21615 ,0 ,862 ,1 +863 ,68444 ,0 ,863 ,1 +864 ,56163 ,0 ,864 ,1 +865 ,30055 ,0 ,865 ,1 +866 ,37520 ,0 ,866 ,1 +867 ,47082 ,0 ,867 ,1 +868 ,12881 ,0 ,868 ,1 +869 ,17115 ,1 ,869 ,1 +870 ,44548 ,0 ,870 ,1 +871 ,83976 ,0 ,871 ,1 +872 ,20624 ,1 ,872 ,1 +873 ,82681 ,0 ,873 ,1 +874 ,81188 ,1 ,874 ,1 +875 ,44216 ,0 ,875 ,1 +876 ,40227 ,0 ,876 ,1 +877 ,10815 ,0 ,877 ,1 +878 ,19599 ,0 ,878 ,1 +879 ,79435 ,0 ,879 ,1 +880 ,77496 ,0 ,880 ,1 +881 ,73535 ,0 ,881 ,1 +882 ,76249 ,0 ,882 ,1 +883 ,28591 ,0 ,883 ,1 +884 ,63313 ,0 ,884 ,1 +885 ,34696 ,1 ,885 ,1 +886 ,15059 ,0 ,886 ,1 +887 ,58950 ,0 ,887 ,1 +888 ,85084 ,0 ,888 ,1 +889 ,89316 ,1 ,889 ,1 +890 ,83568 ,0 ,890 ,1 +891 ,89295 ,0 ,891 ,1 +892 ,69012 ,1 ,892 ,1 +893 ,33777 ,0 ,893 ,1 +894 ,35050 ,0 ,894 ,1 +895 ,88957 ,0 ,895 ,1 +896 ,41355 ,0 ,896 ,1 +897 ,25806 ,1 ,897 ,1 +898 ,71753 ,0 ,898 ,1 +899 ,71229 ,0 ,899 ,1 +900 ,40337 ,0 ,900 ,1 +901 ,47490 ,0 ,901 ,1 +902 ,78895 ,0 ,902 ,1 +903 ,41265 ,1 ,903 ,1 +904 ,87821 ,0 ,904 ,1 +905 ,86456 ,1 ,905 ,1 +906 ,87412 ,0 ,906 ,1 +907 ,86539 ,0 ,907 ,1 +908 ,67767 ,0 ,908 ,1 +909 ,52683 ,0 ,909 ,1 +910 ,73747 ,0 ,910 ,1 +911 ,71909 ,1 ,911 ,1 +912 ,79623 ,1 ,912 ,1 +913 ,48677 ,0 ,913 ,1 +914 ,59494 ,0 ,914 ,1 +915 ,34200 ,0 ,915 ,1 +916 ,24929 ,0 ,916 ,1 +917 ,19231 ,0 ,917 ,1 +918 ,56144 ,0 ,918 ,1 +919 ,61930 ,0 ,919 ,1 +920 ,66652 ,1 ,920 ,1 +921 ,14682 ,0 ,921 ,1 +922 ,40195 ,0 ,922 ,1 +923 ,27641 ,1 ,923 ,1 +924 ,14866 ,0 ,924 ,1 +925 ,76239 ,0 ,925 ,1 +926 ,45177 ,0 ,926 ,1 +927 ,87642 ,0 ,927 ,1 +928 ,34776 ,0 ,928 ,1 +929 ,48654 ,0 ,929 ,1 +930 ,73189 ,0 ,930 ,1 +931 ,71303 ,1 ,931 ,1 +932 ,74833 ,0 ,932 ,1 +933 ,54507 ,0 ,933 ,1 +934 ,18002 ,0 ,934 ,1 +935 ,52557 ,0 ,935 ,1 +936 ,41399 ,0 ,936 ,1 +937 ,46182 ,1 ,937 ,1 +938 ,71664 ,0 ,938 ,1 +939 ,69577 ,0 ,939 ,1 +940 ,28859 ,0 ,940 ,1 +941 ,17750 ,0 ,941 ,1 +942 ,66172 ,0 ,942 ,1 +943 ,89533 ,0 ,943 ,1 +944 ,29189 ,0 ,944 ,1 +945 ,78129 ,0 ,945 ,1 +946 ,60815 ,0 ,946 ,1 +947 ,80791 ,0 ,947 ,1 +948 ,27666 ,0 ,948 ,1 +949 ,34581 ,0 ,949 ,1 +950 ,33807 ,0 ,950 ,1 +951 ,70526 ,0 ,951 ,1 +952 ,59701 ,0 ,952 ,1 +953 ,60701 ,0 ,953 ,1 +954 ,29562 ,0 ,954 ,1 +955 ,89217 ,0 ,955 ,1 +956 ,74854 ,0 ,956 ,1 +957 ,15049 ,0 ,957 ,1 +958 ,82088 ,0 ,958 ,1 +959 ,85382 ,0 ,959 ,1 +960 ,44048 ,1 ,960 ,1 +961 ,77945 ,0 ,961 ,1 +962 ,35699 ,1 ,962 ,1 +963 ,16425 ,0 ,963 ,1 +964 ,75106 ,0 ,964 ,1 +965 ,59211 ,0 ,965 ,1 +966 ,69715 ,0 ,966 ,1 +967 ,17391 ,0 ,967 ,1 +968 ,82217 ,0 ,968 ,1 +969 ,25414 ,1 ,969 ,1 +970 ,12746 ,0 ,970 ,1 +971 ,25234 ,0 ,971 ,1 +972 ,72539 ,0 ,972 ,1 +973 ,79619 ,0 ,973 ,1 +974 ,20389 ,0 ,974 ,1 +975 ,17703 ,0 ,975 ,1 +976 ,79959 ,0 ,976 ,1 +977 ,44566 ,1 ,977 ,1 +978 ,38677 ,1 ,978 ,1 +979 ,77850 ,0 ,979 ,1 +980 ,10421 ,0 ,980 ,1 +981 ,34996 ,0 ,981 ,1 +982 ,40594 ,1 ,982 ,1 +983 ,25692 ,0 ,983 ,1 +984 ,85533 ,0 ,984 ,1 +985 ,21869 ,0 ,985 ,1 +986 ,75563 ,0 ,986 ,1 +987 ,29604 ,0 ,987 ,1 +988 ,72104 ,0 ,988 ,1 +989 ,74177 ,1 ,989 ,1 +990 ,60611 ,0 ,990 ,1 +991 ,72917 ,0 ,991 ,1 +992 ,62458 ,0 ,992 ,1 +993 ,85022 ,0 ,993 ,1 +994 ,71187 ,0 ,994 ,1 +995 ,34275 ,0 ,995 ,1 +996 ,22073 ,0 ,996 ,1 +997 ,12652 ,0 ,997 ,1 +998 ,63724 ,0 ,998 ,1 +999 ,37072 ,0 ,999 ,1 +1000,17202 ,0 ,1000 ,1 +1001,79594 ,0 ,1001 ,1 +1002,68074 ,0 ,1002 ,1 +1003,44206 ,0 ,1003 ,1 +1004,43108 ,0 ,1004 ,1 +1005,70907 ,0 ,1005 ,1 +1006,68448 ,0 ,1006 ,1 +1007,79183 ,0 ,1007 ,1 +1008,83089 ,0 ,1008 ,1 +1009,50936 ,0 ,1009 ,1 +1010,38819 ,0 ,1010 ,1 +1011,53810 ,0 ,1011 ,1 +1012,82792 ,0 ,1012 ,1 +1013,13912 ,0 ,1013 ,1 +1014,86496 ,0 ,1014 ,1 +1015,56784 ,0 ,1015 ,1 +1016,43211 ,0 ,1016 ,1 +1017,82274 ,0 ,1017 ,1 +1018,10260 ,1 ,1018 ,1 +1019,75641 ,0 ,1019 ,1 +1020,20614 ,0 ,1020 ,1 +1021,87355 ,0 ,1021 ,1 +1022,36665 ,0 ,1022 ,1 +1023,68104 ,0 ,1023 ,1 +1024,73561 ,0 ,1024 ,1 +1025,87563 ,0 ,1025 ,1 +1026,66852 ,0 ,1026 ,1 +1027,52446 ,0 ,1027 ,1 +1028,56313 ,0 ,1028 ,1 +1029,85039 ,0 ,1029 ,1 +1030,71056 ,0 ,1030 ,1 +1031,62282 ,1 ,1031 ,1 +1032,77086 ,1 ,1032 ,1 +1033,86155 ,0 ,1033 ,1 +1034,22817 ,0 ,1034 ,1 +1035,73555 ,0 ,1035 ,1 +1036,76971 ,0 ,1036 ,1 +1037,53750 ,0 ,1037 ,1 +1038,72574 ,0 ,1038 ,1 +1039,67535 ,0 ,1039 ,1 +1040,22368 ,0 ,1040 ,1 +1041,49543 ,1 ,1041 ,1 +1042,50060 ,0 ,1042 ,1 +1043,16042 ,0 ,1043 ,1 +1044,43447 ,0 ,1044 ,1 +1045,80253 ,0 ,1045 ,1 +1046,13645 ,0 ,1046 ,1 +1047,19935 ,1 ,1047 ,1 +1048,19069 ,0 ,1048 ,1 +1049,77158 ,0 ,1049 ,1 +1050,89715 ,1 ,1050 ,1 +1051,60740 ,0 ,1051 ,1 +1052,45553 ,0 ,1052 ,1 +1053,23084 ,0 ,1053 ,1 +1054,79801 ,0 ,1054 ,1 +1055,35304 ,0 ,1055 ,1 +1056,48574 ,1 ,1056 ,1 +1057,71803 ,0 ,1057 ,1 +1058,13399 ,0 ,1058 ,1 +1059,50018 ,0 ,1059 ,1 +1060,56538 ,1 ,1060 ,1 +1061,62703 ,0 ,1061 ,1 +1062,29672 ,0 ,1062 ,1 +1063,69638 ,0 ,1063 ,1 +1064,37837 ,0 ,1064 ,1 +1065,69644 ,0 ,1065 ,1 +1066,74989 ,0 ,1066 ,1 +1067,83652 ,0 ,1067 ,1 +1068,79993 ,0 ,1068 ,1 +1069,24839 ,0 ,1069 ,1 +1070,18004 ,0 ,1070 ,1 +1071,37945 ,0 ,1071 ,1 +1072,78990 ,0 ,1072 ,1 +1073,87352 ,0 ,1073 ,1 +1074,82760 ,0 ,1074 ,1 +1075,87396 ,1 ,1075 ,1 +1076,25549 ,1 ,1076 ,1 +1077,81272 ,1 ,1077 ,1 +1078,26021 ,0 ,1078 ,1 +1079,66287 ,1 ,1079 ,1 +1080,43767 ,0 ,1080 ,1 +1081,14323 ,0 ,1081 ,1 +1082,30798 ,0 ,1082 ,1 +1083,57552 ,1 ,1083 ,1 +1084,46481 ,0 ,1084 ,1 +1085,83938 ,0 ,1085 ,1 +1086,42644 ,0 ,1086 ,1 +1087,27688 ,0 ,1087 ,1 +1088,37838 ,0 ,1088 ,1 +1089,76264 ,1 ,1089 ,1 +1090,74144 ,0 ,1090 ,1 +1091,85078 ,0 ,1091 ,1 +1092,83147 ,0 ,1092 ,1 +1093,57728 ,0 ,1093 ,1 +1094,14042 ,0 ,1094 ,1 +1095,47363 ,0 ,1095 ,1 +1096,63448 ,0 ,1096 ,1 +1097,48484 ,0 ,1097 ,1 +1098,73982 ,0 ,1098 ,1 +1099,75448 ,0 ,1099 ,1 +1100,84335 ,0 ,1100 ,1 +1101,24188 ,0 ,1101 ,1 +1102,54869 ,0 ,1102 ,1 +1103,28645 ,0 ,1103 ,1 +1104,38076 ,0 ,1104 ,1 +1105,46064 ,0 ,1105 ,1 +1106,23788 ,0 ,1106 ,1 +1107,71422 ,1 ,1107 ,1 +1108,11074 ,0 ,1108 ,1 +1109,56235 ,0 ,1109 ,1 +1110,12274 ,0 ,1110 ,1 +1111,75744 ,1 ,1111 ,1 +1112,58591 ,0 ,1112 ,1 +1113,21762 ,0 ,1113 ,1 +1114,60916 ,0 ,1114 ,1 +1115,24644 ,0 ,1115 ,1 +1116,35596 ,0 ,1116 ,1 +1117,13435 ,0 ,1117 ,1 +1118,71191 ,0 ,1118 ,1 +1119,37776 ,0 ,1119 ,1 +1120,89987 ,0 ,1120 ,1 +1121,74866 ,0 ,1121 ,1 +1122,22128 ,0 ,1122 ,1 +1123,83660 ,0 ,1123 ,1 +1124,55740 ,1 ,1124 ,1 +1125,65237 ,0 ,1125 ,1 +1126,64457 ,0 ,1126 ,1 +1127,88295 ,0 ,1127 ,1 +1128,55159 ,0 ,1128 ,1 +1129,37141 ,0 ,1129 ,1 +1130,61540 ,0 ,1130 ,1 +1131,43991 ,0 ,1131 ,1 +1132,38921 ,0 ,1132 ,1 +1133,13688 ,0 ,1133 ,1 +1134,68303 ,0 ,1134 ,1 +1135,69226 ,0 ,1135 ,1 +1136,46334 ,0 ,1136 ,1 +1137,39562 ,0 ,1137 ,1 +1138,10509 ,0 ,1138 ,1 +1139,38745 ,0 ,1139 ,1 +1140,47757 ,0 ,1140 ,1 +1141,89543 ,0 ,1141 ,1 +1142,87556 ,0 ,1142 ,1 +1143,39678 ,0 ,1143 ,1 +1144,61240 ,0 ,1144 ,1 +1145,37116 ,0 ,1145 ,1 +1146,59106 ,0 ,1146 ,1 +1147,30081 ,0 ,1147 ,1 +1148,44911 ,0 ,1148 ,1 +1149,70283 ,0 ,1149 ,1 +1150,34450 ,0 ,1150 ,1 +1151,52810 ,0 ,1151 ,1 +1152,62374 ,0 ,1152 ,1 +1153,54094 ,0 ,1153 ,1 +1154,82551 ,0 ,1154 ,1 +1155,84249 ,0 ,1155 ,1 +1156,22395 ,0 ,1156 ,1 +1157,81189 ,1 ,1157 ,1 +1158,74265 ,0 ,1158 ,1 +1159,78008 ,0 ,1159 ,1 +1160,27628 ,0 ,1160 ,1 +1161,73653 ,0 ,1161 ,1 +1162,88269 ,0 ,1162 ,1 +1163,33655 ,0 ,1163 ,1 +1164,66569 ,0 ,1164 ,1 +1165,65428 ,0 ,1165 ,1 +1166,75529 ,0 ,1166 ,1 +1167,36946 ,1 ,1167 ,1 +1168,28761 ,0 ,1168 ,1 +1169,47032 ,0 ,1169 ,1 +1170,55270 ,0 ,1170 ,1 +1171,40065 ,0 ,1171 ,1 +1172,47420 ,1 ,1172 ,1 +1173,51039 ,0 ,1173 ,1 +1174,47663 ,0 ,1174 ,1 +1175,55365 ,0 ,1175 ,1 +1176,12061 ,0 ,1176 ,1 +1177,66535 ,0 ,1177 ,1 +1178,84743 ,0 ,1178 ,1 +1179,42529 ,0 ,1179 ,1 +1180,75748 ,0 ,1180 ,1 +1181,17291 ,1 ,1181 ,1 +1182,42242 ,0 ,1182 ,1 +1183,74535 ,0 ,1183 ,1 +1184,27180 ,1 ,1184 ,1 +1185,71920 ,0 ,1185 ,1 +1186,18955 ,0 ,1186 ,1 +1187,18134 ,0 ,1187 ,1 +1188,56194 ,0 ,1188 ,1 +1189,80015 ,0 ,1189 ,1 +1190,11140 ,0 ,1190 ,1 +1191,63177 ,1 ,1191 ,1 +1192,54585 ,0 ,1192 ,1 +1193,68186 ,0 ,1193 ,1 +1194,12347 ,0 ,1194 ,1 +1195,42685 ,1 ,1195 ,1 +1196,71380 ,0 ,1196 ,1 +1197,17152 ,1 ,1197 ,1 +1198,19771 ,1 ,1198 ,1 +1199,57566 ,1 ,1199 ,1 +1200,26729 ,1 ,1200 ,1 +1201,43059 ,0 ,1201 ,1 +1202,13678 ,0 ,1202 ,1 +1203,18446 ,0 ,1203 ,1 +1204,58762 ,0 ,1204 ,1 +1205,17965 ,0 ,1205 ,1 +1206,31756 ,1 ,1206 ,1 +1207,75530 ,1 ,1207 ,1 +1208,89041 ,1 ,1208 ,1 +1209,68654 ,0 ,1209 ,1 +1210,34026 ,1 ,1210 ,1 +1211,47388 ,0 ,1211 ,1 +1212,79305 ,0 ,1212 ,1 +1213,19432 ,0 ,1213 ,1 +1214,78065 ,1 ,1214 ,1 +1215,38953 ,0 ,1215 ,1 +1216,58120 ,0 ,1216 ,1 +1217,59874 ,0 ,1217 ,1 +1218,76514 ,1 ,1218 ,1 +1219,19577 ,0 ,1219 ,1 +1220,21574 ,1 ,1220 ,1 +1221,13201 ,0 ,1221 ,1 +1222,65048 ,0 ,1222 ,1 +1223,32306 ,0 ,1223 ,1 +1224,14211 ,1 ,1224 ,1 +1225,47914 ,0 ,1225 ,1 +1226,25301 ,0 ,1226 ,1 +1227,16459 ,0 ,1227 ,1 +1228,30507 ,0 ,1228 ,1 +1229,42674 ,0 ,1229 ,1 +1230,53990 ,0 ,1230 ,1 +1231,64567 ,0 ,1231 ,1 +1232,48264 ,0 ,1232 ,1 +1233,41654 ,0 ,1233 ,1 +1234,25245 ,0 ,1234 ,1 +1235,26851 ,0 ,1235 ,1 +1236,57735 ,0 ,1236 ,1 +1237,69182 ,0 ,1237 ,1 +1238,42483 ,0 ,1238 ,1 +1239,63079 ,1 ,1239 ,1 +1240,17931 ,0 ,1240 ,1 +1241,71979 ,1 ,1241 ,1 +1242,34515 ,0 ,1242 ,1 +1243,14501 ,0 ,1243 ,1 +1244,72012 ,0 ,1244 ,1 +1245,23763 ,0 ,1245 ,1 +1246,54877 ,0 ,1246 ,1 +1247,71506 ,0 ,1247 ,1 +1248,89009 ,0 ,1248 ,1 +1249,15008 ,1 ,1249 ,1 +1250,54517 ,0 ,1250 ,1 +1251,34963 ,0 ,1251 ,1 +1252,82036 ,0 ,1252 ,1 +1253,58916 ,0 ,1253 ,1 +1254,20120 ,0 ,1254 ,1 +1255,86838 ,0 ,1255 ,1 +1256,74580 ,0 ,1256 ,1 +1257,82788 ,0 ,1257 ,1 +1258,10060 ,0 ,1258 ,1 +1259,28286 ,0 ,1259 ,1 +1260,54370 ,0 ,1260 ,1 +1261,27806 ,0 ,1261 ,1 +1262,43136 ,0 ,1262 ,1 +1263,24444 ,0 ,1263 ,1 +1264,23596 ,1 ,1264 ,1 +1265,54645 ,1 ,1265 ,1 +1266,63052 ,0 ,1266 ,1 +1267,51907 ,1 ,1267 ,1 +1268,21948 ,0 ,1268 ,1 +1269,49475 ,0 ,1269 ,1 +1270,75097 ,0 ,1270 ,1 +1271,81302 ,1 ,1271 ,1 +1272,20369 ,1 ,1272 ,1 +1273,27062 ,0 ,1273 ,1 +1274,37784 ,0 ,1274 ,1 +1275,58510 ,1 ,1275 ,1 +1276,67333 ,0 ,1276 ,1 +1277,59353 ,0 ,1277 ,1 +1278,47296 ,1 ,1278 ,1 +1279,11821 ,0 ,1279 ,1 +1280,20587 ,0 ,1280 ,1 +1281,15184 ,0 ,1281 ,1 +1282,88234 ,1 ,1282 ,1 +1283,33018 ,1 ,1283 ,1 +1284,58395 ,0 ,1284 ,1 +1285,19788 ,1 ,1285 ,1 +1286,46196 ,1 ,1286 ,1 +1287,72397 ,0 ,1287 ,1 +1288,26382 ,0 ,1288 ,1 +1289,69304 ,0 ,1289 ,1 +1290,17793 ,1 ,1290 ,1 +1291,41441 ,0 ,1291 ,1 +1292,67080 ,0 ,1292 ,1 +1293,42306 ,0 ,1293 ,1 +1294,36060 ,0 ,1294 ,1 +1295,84220 ,0 ,1295 ,1 +1296,64704 ,0 ,1296 ,1 +1297,82673 ,0 ,1297 ,1 +1298,65181 ,0 ,1298 ,1 +1299,41816 ,0 ,1299 ,1 +1300,20810 ,1 ,1300 ,1 +1301,82052 ,0 ,1301 ,1 +1302,13662 ,0 ,1302 ,1 +1303,20959 ,0 ,1303 ,1 +1304,27960 ,0 ,1304 ,1 +1305,57098 ,0 ,1305 ,1 +1306,61287 ,0 ,1306 ,1 +1307,70683 ,0 ,1307 ,1 +1308,34316 ,0 ,1308 ,1 +1309,30117 ,0 ,1309 ,1 +1310,43304 ,0 ,1310 ,1 +1311,27761 ,0 ,1311 ,1 +1312,49183 ,0 ,1312 ,1 +1313,61716 ,1 ,1313 ,1 +1314,53667 ,0 ,1314 ,1 +1315,61166 ,0 ,1315 ,1 +1316,13986 ,0 ,1316 ,1 +1317,25411 ,0 ,1317 ,1 +1318,24376 ,0 ,1318 ,1 +1319,89875 ,0 ,1319 ,1 +1320,87629 ,0 ,1320 ,1 +1321,12318 ,0 ,1321 ,1 +1322,78782 ,0 ,1322 ,1 +1323,85624 ,1 ,1323 ,1 +1324,62426 ,0 ,1324 ,1 +1325,67918 ,0 ,1325 ,1 +1326,68100 ,0 ,1326 ,1 +1327,67723 ,0 ,1327 ,1 +1328,35288 ,0 ,1328 ,1 +1329,37147 ,0 ,1329 ,1 +1330,16491 ,1 ,1330 ,1 +1331,31123 ,1 ,1331 ,1 +1332,13732 ,0 ,1332 ,1 +1333,59590 ,0 ,1333 ,1 +1334,11786 ,0 ,1334 ,1 +1335,74555 ,0 ,1335 ,1 +1336,71523 ,0 ,1336 ,1 +1337,82199 ,0 ,1337 ,1 +1338,20611 ,1 ,1338 ,1 +1339,56668 ,0 ,1339 ,1 +1340,60139 ,0 ,1340 ,1 +1341,65438 ,0 ,1341 ,1 +1342,45986 ,1 ,1342 ,1 +1343,71976 ,0 ,1343 ,1 +1344,28825 ,0 ,1344 ,1 +1345,60119 ,0 ,1345 ,1 +1346,47469 ,0 ,1346 ,1 +1347,20453 ,0 ,1347 ,1 +1348,22311 ,0 ,1348 ,1 +1349,48912 ,0 ,1349 ,1 +1350,33974 ,0 ,1350 ,1 +1351,20554 ,0 ,1351 ,1 +1352,34631 ,0 ,1352 ,1 +1353,27623 ,1 ,1353 ,1 +1354,26364 ,0 ,1354 ,1 +1355,83617 ,0 ,1355 ,1 +1356,18004 ,0 ,1356 ,1 +1357,45005 ,0 ,1357 ,1 +1358,61309 ,0 ,1358 ,1 +1359,53321 ,1 ,1359 ,1 +1360,86546 ,0 ,1360 ,1 +1361,32248 ,0 ,1361 ,1 +1362,46419 ,0 ,1362 ,1 +1363,22470 ,1 ,1363 ,1 +1364,89228 ,1 ,1364 ,1 +1365,49894 ,0 ,1365 ,1 +1366,77234 ,0 ,1366 ,1 +1367,31141 ,1 ,1367 ,1 +1368,17221 ,0 ,1368 ,1 +1369,28656 ,0 ,1369 ,1 +1370,39060 ,0 ,1370 ,1 +1371,20267 ,0 ,1371 ,1 +1372,19160 ,0 ,1372 ,1 +1373,12845 ,0 ,1373 ,1 +1374,44413 ,0 ,1374 ,1 +1375,52553 ,0 ,1375 ,1 +1376,89843 ,0 ,1376 ,1 +1377,32376 ,0 ,1377 ,1 +1378,77166 ,0 ,1378 ,1 +1379,25551 ,0 ,1379 ,1 +1380,61738 ,0 ,1380 ,1 +1381,24871 ,0 ,1381 ,1 +1382,79594 ,0 ,1382 ,1 +1383,35851 ,0 ,1383 ,1 +1384,19930 ,0 ,1384 ,1 +1385,37306 ,0 ,1385 ,1 +1386,10085 ,1 ,1386 ,1 +1387,89175 ,0 ,1387 ,1 +1388,86966 ,0 ,1388 ,1 +1389,56734 ,0 ,1389 ,1 +1390,21525 ,0 ,1390 ,1 +1391,42214 ,1 ,1391 ,1 +1392,56782 ,0 ,1392 ,1 +1393,11729 ,1 ,1393 ,1 +1394,83558 ,0 ,1394 ,1 +1395,89893 ,0 ,1395 ,1 +1396,49926 ,0 ,1396 ,1 +1397,23347 ,0 ,1397 ,1 +1398,55455 ,1 ,1398 ,1 +1399,14490 ,1 ,1399 ,1 +1400,89241 ,0 ,1400 ,1 +1401,18652 ,0 ,1401 ,1 +1402,54673 ,0 ,1402 ,1 +1403,37036 ,0 ,1403 ,1 +1404,41148 ,0 ,1404 ,1 +1405,67693 ,0 ,1405 ,1 +1406,57425 ,1 ,1406 ,1 +1407,54464 ,0 ,1407 ,1 +1408,35052 ,0 ,1408 ,1 +1409,12471 ,0 ,1409 ,1 +1410,30578 ,0 ,1410 ,1 +1411,59354 ,0 ,1411 ,1 +1412,89861 ,0 ,1412 ,1 +1413,65940 ,0 ,1413 ,1 +1414,24370 ,0 ,1414 ,1 +1415,49688 ,0 ,1415 ,1 +1416,84609 ,1 ,1416 ,1 +1417,56657 ,0 ,1417 ,1 +1418,13642 ,0 ,1418 ,1 +1419,71530 ,0 ,1419 ,1 +1420,47343 ,0 ,1420 ,1 +1421,26059 ,0 ,1421 ,1 +1422,19203 ,1 ,1422 ,1 +1423,13367 ,0 ,1423 ,1 +1424,69131 ,1 ,1424 ,1 +1425,52174 ,0 ,1425 ,1 +1426,33046 ,1 ,1426 ,1 +1427,63832 ,0 ,1427 ,1 +1428,61358 ,1 ,1428 ,1 +1429,81707 ,0 ,1429 ,1 +1430,86678 ,0 ,1430 ,1 +1431,20731 ,0 ,1431 ,1 +1432,78476 ,0 ,1432 ,1 +1433,82280 ,0 ,1433 ,1 +1434,48315 ,0 ,1434 ,1 +1435,86049 ,0 ,1435 ,1 +1436,73253 ,0 ,1436 ,1 +1437,23570 ,0 ,1437 ,1 +1438,44918 ,0 ,1438 ,1 +1439,48715 ,0 ,1439 ,1 +1440,66370 ,1 ,1440 ,1 +1441,22330 ,0 ,1441 ,1 +1442,51728 ,1 ,1442 ,1 +1443,79109 ,0 ,1443 ,1 +1444,39747 ,0 ,1444 ,1 +1445,10023 ,0 ,1445 ,1 +1446,75675 ,0 ,1446 ,1 +1447,72707 ,1 ,1447 ,1 +1448,78163 ,0 ,1448 ,1 +1449,71281 ,0 ,1449 ,1 +1450,89334 ,0 ,1450 ,1 +1451,39819 ,0 ,1451 ,1 +1452,55295 ,0 ,1452 ,1 +1453,13292 ,0 ,1453 ,1 +1454,22319 ,1 ,1454 ,1 +1455,80818 ,0 ,1455 ,1 +1456,40749 ,0 ,1456 ,1 +1457,80400 ,0 ,1457 ,1 +1458,11102 ,0 ,1458 ,1 +1459,63160 ,1 ,1459 ,1 +1460,50772 ,0 ,1460 ,1 +1461,70766 ,1 ,1461 ,1 +1462,62469 ,0 ,1462 ,1 +1463,64397 ,1 ,1463 ,1 +1464,68429 ,0 ,1464 ,1 +1465,34051 ,1 ,1465 ,1 +1466,78373 ,0 ,1466 ,1 +1467,17073 ,0 ,1467 ,1 +1468,53346 ,0 ,1468 ,1 +1469,59622 ,0 ,1469 ,1 +1470,80782 ,0 ,1470 ,1 +1471,28041 ,0 ,1471 ,1 +1472,51233 ,0 ,1472 ,1 +1473,88638 ,0 ,1473 ,1 +1474,86854 ,0 ,1474 ,1 +1475,81493 ,0 ,1475 ,1 +1476,38687 ,0 ,1476 ,1 +1477,25176 ,0 ,1477 ,1 +1478,55299 ,0 ,1478 ,1 +1479,39818 ,0 ,1479 ,1 +1480,52770 ,0 ,1480 ,1 +1481,56331 ,0 ,1481 ,1 +1482,82445 ,0 ,1482 ,1 +1483,53109 ,0 ,1483 ,1 +1484,54637 ,0 ,1484 ,1 +1485,76070 ,0 ,1485 ,1 +1486,21726 ,0 ,1486 ,1 +1487,72962 ,0 ,1487 ,1 +1488,47950 ,0 ,1488 ,1 +1489,77143 ,0 ,1489 ,1 +1490,82462 ,0 ,1490 ,1 +1491,59958 ,0 ,1491 ,1 +1492,39054 ,0 ,1492 ,1 +1493,56115 ,0 ,1493 ,1 +1494,35042 ,0 ,1494 ,1 +1495,28672 ,1 ,1495 ,1 +1496,71908 ,0 ,1496 ,1 +1497,47421 ,0 ,1497 ,1 +1498,49376 ,0 ,1498 ,1 +1499,23157 ,1 ,1499 ,1 +1500,56097 ,0 ,1500 ,1 +1501,88508 ,0 ,1501 ,1 +1502,10746 ,0 ,1502 ,1 +1503,56899 ,1 ,1503 ,1 +1504,56538 ,0 ,1504 ,1 +1505,38203 ,0 ,1505 ,1 +1506,86283 ,0 ,1506 ,1 +1507,55146 ,0 ,1507 ,1 +1508,84347 ,0 ,1508 ,1 +1509,85897 ,0 ,1509 ,1 +1510,78114 ,0 ,1510 ,1 +1511,11565 ,0 ,1511 ,1 +1512,10299 ,0 ,1512 ,1 +1513,10988 ,1 ,1513 ,1 +1514,39731 ,0 ,1514 ,1 +1515,60939 ,1 ,1515 ,1 +1516,40161 ,1 ,1516 ,1 +1517,47917 ,0 ,1517 ,1 +1518,50427 ,1 ,1518 ,1 +1519,25944 ,0 ,1519 ,1 +1520,15910 ,0 ,1520 ,1 +1521,76546 ,0 ,1521 ,1 +1522,46651 ,0 ,1522 ,1 +1523,18578 ,0 ,1523 ,1 +1524,81944 ,0 ,1524 ,1 +1525,13439 ,1 ,1525 ,1 +1526,36173 ,1 ,1526 ,1 +1527,56755 ,0 ,1527 ,1 +1528,87320 ,0 ,1528 ,1 +1529,81822 ,0 ,1529 ,1 +1530,79279 ,0 ,1530 ,1 +1531,48171 ,0 ,1531 ,1 +1532,22285 ,1 ,1532 ,1 +1533,54065 ,0 ,1533 ,1 +1534,56056 ,1 ,1534 ,1 +1535,49142 ,1 ,1535 ,1 +1536,80585 ,0 ,1536 ,1 +1537,71985 ,0 ,1537 ,1 +1538,68031 ,0 ,1538 ,1 +1539,56213 ,0 ,1539 ,1 +1540,60399 ,0 ,1540 ,1 +1541,80248 ,0 ,1541 ,1 +1542,71171 ,0 ,1542 ,1 +1543,20173 ,0 ,1543 ,1 +1544,73752 ,0 ,1544 ,1 +1545,77159 ,0 ,1545 ,1 +1546,61288 ,0 ,1546 ,1 +1547,56658 ,0 ,1547 ,1 +1548,65515 ,0 ,1548 ,1 +1549,46512 ,0 ,1549 ,1 +1550,87128 ,0 ,1550 ,1 +1551,57589 ,0 ,1551 ,1 +1552,40592 ,0 ,1552 ,1 +1553,36182 ,0 ,1553 ,1 +1554,80773 ,0 ,1554 ,1 +1555,20381 ,1 ,1555 ,1 +1556,50778 ,0 ,1556 ,1 +1557,63702 ,0 ,1557 ,1 +1558,63200 ,0 ,1558 ,1 +1559,30233 ,0 ,1559 ,1 +1560,62260 ,0 ,1560 ,1 +1561,37785 ,0 ,1561 ,1 +1562,17740 ,0 ,1562 ,1 +1563,17811 ,1 ,1563 ,1 +1564,11818 ,1 ,1564 ,1 +1565,24257 ,0 ,1565 ,1 +1566,68272 ,0 ,1566 ,1 +1567,42351 ,0 ,1567 ,1 +1568,45056 ,0 ,1568 ,1 +1569,60414 ,0 ,1569 ,1 +1570,72911 ,0 ,1570 ,1 +1571,81950 ,0 ,1571 ,1 +1572,24011 ,0 ,1572 ,1 +1573,15440 ,1 ,1573 ,1 +1574,64307 ,1 ,1574 ,1 +1575,78972 ,1 ,1575 ,1 +1576,17422 ,0 ,1576 ,1 +1577,40914 ,0 ,1577 ,1 +1578,12277 ,0 ,1578 ,1 +1579,68662 ,0 ,1579 ,1 +1580,29006 ,1 ,1580 ,1 +1581,86819 ,0 ,1581 ,1 +1582,69564 ,0 ,1582 ,1 +1583,80413 ,0 ,1583 ,1 +1584,84513 ,0 ,1584 ,1 +1585,65308 ,0 ,1585 ,1 +1586,71241 ,0 ,1586 ,1 +1587,31553 ,0 ,1587 ,1 +1588,28694 ,0 ,1588 ,1 +1589,33391 ,0 ,1589 ,1 +1590,42299 ,0 ,1590 ,1 +1591,89925 ,0 ,1591 ,1 +1592,32053 ,0 ,1592 ,1 +1593,74976 ,0 ,1593 ,1 +1594,53809 ,0 ,1594 ,1 +1595,82144 ,0 ,1595 ,1 +1596,74354 ,0 ,1596 ,1 +1597,73300 ,0 ,1597 ,1 +1598,41682 ,0 ,1598 ,1 +1599,36682 ,0 ,1599 ,1 +1600,49256 ,0 ,1600 ,1 +1601,56461 ,1 ,1601 ,1 +1602,11914 ,0 ,1602 ,1 +1603,48665 ,0 ,1603 ,1 +1604,32264 ,1 ,1604 ,1 +1605,13035 ,0 ,1605 ,1 +1606,73035 ,0 ,1606 ,1 +1607,11999 ,0 ,1607 ,1 +1608,12454 ,0 ,1608 ,1 +1609,68899 ,0 ,1609 ,1 +1610,44762 ,1 ,1610 ,1 +1611,47770 ,0 ,1611 ,1 +1612,45222 ,0 ,1612 ,1 +1613,60796 ,0 ,1613 ,1 +1614,42795 ,0 ,1614 ,1 +1615,51563 ,1 ,1615 ,1 +1616,11425 ,0 ,1616 ,1 +1617,57387 ,1 ,1617 ,1 +1618,87597 ,0 ,1618 ,1 +1619,15252 ,1 ,1619 ,1 +1620,81274 ,0 ,1620 ,1 +1621,40129 ,0 ,1621 ,1 +1622,35319 ,0 ,1622 ,1 +1623,60494 ,0 ,1623 ,1 +1624,19886 ,1 ,1624 ,1 +1625,43254 ,0 ,1625 ,1 +1626,25709 ,1 ,1626 ,1 +1627,84342 ,0 ,1627 ,1 +1628,37611 ,0 ,1628 ,1 +1629,48359 ,0 ,1629 ,1 +1630,60192 ,1 ,1630 ,1 +1631,21155 ,0 ,1631 ,1 +1632,39697 ,0 ,1632 ,1 +1633,41997 ,0 ,1633 ,1 +1634,73143 ,0 ,1634 ,1 +1635,75443 ,0 ,1635 ,1 +1636,62200 ,0 ,1636 ,1 +1637,17669 ,1 ,1637 ,1 +1638,54884 ,0 ,1638 ,1 +1639,10894 ,0 ,1639 ,1 +1640,67282 ,0 ,1640 ,1 +1641,40446 ,0 ,1641 ,1 +1642,82180 ,0 ,1642 ,1 +1643,85713 ,0 ,1643 ,1 +1644,12905 ,0 ,1644 ,1 +1645,57222 ,0 ,1645 ,1 +1646,43672 ,0 ,1646 ,1 +1647,26119 ,0 ,1647 ,1 +1648,48684 ,0 ,1648 ,1 +1649,28039 ,0 ,1649 ,1 +1650,83574 ,0 ,1650 ,1 +1651,24558 ,0 ,1651 ,1 +1652,67141 ,0 ,1652 ,1 +1653,44961 ,0 ,1653 ,1 +1654,41153 ,0 ,1654 ,1 +1655,53581 ,0 ,1655 ,1 +1656,14813 ,0 ,1656 ,1 +1657,65390 ,0 ,1657 ,1 +1658,23978 ,0 ,1658 ,1 +1659,63751 ,0 ,1659 ,1 +1660,31395 ,0 ,1660 ,1 +1661,20926 ,1 ,1661 ,1 +1662,50606 ,0 ,1662 ,1 +1663,46953 ,0 ,1663 ,1 +1664,89985 ,0 ,1664 ,1 +1665,67108 ,0 ,1665 ,1 +1666,52205 ,0 ,1666 ,1 +1667,88627 ,0 ,1667 ,1 +1668,52277 ,0 ,1668 ,1 +1669,21680 ,0 ,1669 ,1 +1670,70001 ,0 ,1670 ,1 +1671,85290 ,0 ,1671 ,1 +1672,27706 ,0 ,1672 ,1 +1673,68382 ,0 ,1673 ,1 +1674,33440 ,0 ,1674 ,1 +1675,12055 ,0 ,1675 ,1 +1676,83235 ,1 ,1676 ,1 +1677,24574 ,0 ,1677 ,1 +1678,37195 ,0 ,1678 ,1 +1679,25495 ,0 ,1679 ,1 +1680,49801 ,0 ,1680 ,1 +1681,36072 ,0 ,1681 ,1 +1682,77935 ,0 ,1682 ,1 +1683,57611 ,1 ,1683 ,1 +1684,71404 ,0 ,1684 ,1 +1685,70160 ,0 ,1685 ,1 +1686,34582 ,0 ,1686 ,1 +1687,72055 ,1 ,1687 ,1 +1688,22104 ,0 ,1688 ,1 +1689,24738 ,0 ,1689 ,1 +1690,73618 ,0 ,1690 ,1 +1691,51981 ,0 ,1691 ,1 +1692,71346 ,1 ,1692 ,1 +1693,83575 ,0 ,1693 ,1 +1694,83256 ,0 ,1694 ,1 +1695,22706 ,0 ,1695 ,1 +1696,45337 ,0 ,1696 ,1 +1697,24509 ,0 ,1697 ,1 +1698,63777 ,0 ,1698 ,1 +1699,50065 ,0 ,1699 ,1 +1700,45597 ,0 ,1700 ,1 +1701,56961 ,0 ,1701 ,1 +1702,19982 ,0 ,1702 ,1 +1703,41816 ,1 ,1703 ,1 +1704,20139 ,0 ,1704 ,1 +1705,45123 ,0 ,1705 ,1 +1706,15133 ,0 ,1706 ,1 +1707,24763 ,0 ,1707 ,1 +1708,25887 ,0 ,1708 ,1 +1709,41825 ,0 ,1709 ,1 +1710,86573 ,0 ,1710 ,1 +1711,46795 ,1 ,1711 ,1 +1712,15672 ,0 ,1712 ,1 +1713,46433 ,0 ,1713 ,1 +1714,85008 ,1 ,1714 ,1 +1715,46202 ,0 ,1715 ,1 +1716,24393 ,0 ,1716 ,1 +1717,85334 ,0 ,1717 ,1 +1718,48071 ,0 ,1718 ,1 +1719,10755 ,0 ,1719 ,1 +1720,37480 ,0 ,1720 ,1 +1721,66751 ,0 ,1721 ,1 +1722,33869 ,0 ,1722 ,1 +1723,28560 ,1 ,1723 ,1 +1724,77244 ,0 ,1724 ,1 +1725,63105 ,0 ,1725 ,1 +1726,45476 ,0 ,1726 ,1 +1727,35535 ,0 ,1727 ,1 +1728,55912 ,1 ,1728 ,1 +1729,76934 ,0 ,1729 ,1 +1730,78338 ,1 ,1730 ,1 +1731,19355 ,0 ,1731 ,1 +1732,49192 ,0 ,1732 ,1 +1733,12022 ,0 ,1733 ,1 +1734,45600 ,0 ,1734 ,1 +1735,58196 ,0 ,1735 ,1 +1736,42207 ,0 ,1736 ,1 +1737,39996 ,0 ,1737 ,1 +1738,64018 ,0 ,1738 ,1 +1739,16370 ,0 ,1739 ,1 +1740,89617 ,0 ,1740 ,1 +1741,38297 ,0 ,1741 ,1 +1742,77892 ,0 ,1742 ,1 +1743,45543 ,0 ,1743 ,1 +1744,60231 ,0 ,1744 ,1 +1745,71584 ,1 ,1745 ,1 +1746,32191 ,0 ,1746 ,1 +1747,80179 ,0 ,1747 ,1 +1748,69596 ,0 ,1748 ,1 +1749,18410 ,0 ,1749 ,1 +1750,86835 ,0 ,1750 ,1 +1751,56607 ,0 ,1751 ,1 +1752,44885 ,0 ,1752 ,1 +1753,59136 ,1 ,1753 ,1 +1754,25864 ,0 ,1754 ,1 +1755,32600 ,1 ,1755 ,1 +1756,55726 ,0 ,1756 ,1 +1757,85261 ,0 ,1757 ,1 +1758,70871 ,0 ,1758 ,1 +1759,66330 ,0 ,1759 ,1 +1760,21515 ,0 ,1760 ,1 +1761,25248 ,0 ,1761 ,1 +1762,38460 ,0 ,1762 ,1 +1763,31070 ,0 ,1763 ,1 +1764,71704 ,0 ,1764 ,1 +1765,61655 ,0 ,1765 ,1 +1766,77379 ,1 ,1766 ,1 +1767,44277 ,0 ,1767 ,1 +1768,39205 ,0 ,1768 ,1 +1769,16966 ,1 ,1769 ,1 +1770,65282 ,1 ,1770 ,1 +1771,47327 ,1 ,1771 ,1 +1772,82728 ,0 ,1772 ,1 +1773,29346 ,0 ,1773 ,1 +1774,60896 ,1 ,1774 ,1 +1775,89379 ,0 ,1775 ,1 +1776,68805 ,0 ,1776 ,1 +1777,64790 ,0 ,1777 ,1 +1778,14760 ,0 ,1778 ,1 +1779,41247 ,0 ,1779 ,1 +1780,15496 ,1 ,1780 ,1 +1781,30149 ,0 ,1781 ,1 +1782,83597 ,1 ,1782 ,1 +1783,23810 ,1 ,1783 ,1 +1784,51822 ,0 ,1784 ,1 +1785,18041 ,1 ,1785 ,1 +1786,38007 ,0 ,1786 ,1 +1787,85628 ,0 ,1787 ,1 +1788,54857 ,0 ,1788 ,1 +1789,23847 ,0 ,1789 ,1 +1790,54196 ,0 ,1790 ,1 +1791,29802 ,0 ,1791 ,1 +1792,53290 ,0 ,1792 ,1 +1793,48187 ,0 ,1793 ,1 +1794,23192 ,0 ,1794 ,1 +1795,84502 ,0 ,1795 ,1 +1796,25759 ,0 ,1796 ,1 +1797,38454 ,0 ,1797 ,1 +1798,33678 ,1 ,1798 ,1 +1799,71323 ,0 ,1799 ,1 +1800,20937 ,0 ,1800 ,1 +1801,67173 ,0 ,1801 ,1 +1802,12332 ,0 ,1802 ,1 +1803,55470 ,0 ,1803 ,1 +1804,71354 ,0 ,1804 ,1 +1805,37803 ,0 ,1805 ,1 +1806,40425 ,0 ,1806 ,1 +1807,13134 ,0 ,1807 ,1 +1808,72863 ,0 ,1808 ,1 +1809,42836 ,0 ,1809 ,1 +1810,17355 ,0 ,1810 ,1 +1811,34838 ,0 ,1811 ,1 +1812,32606 ,0 ,1812 ,1 +1813,79231 ,0 ,1813 ,1 +1814,26947 ,1 ,1814 ,1 +1815,64885 ,0 ,1815 ,1 +1816,35518 ,1 ,1816 ,1 +1817,70964 ,0 ,1817 ,1 +1818,33351 ,0 ,1818 ,1 +1819,67058 ,0 ,1819 ,1 +1820,64173 ,1 ,1820 ,1 +1821,43564 ,1 ,1821 ,1 +1822,13478 ,0 ,1822 ,1 +1823,35680 ,0 ,1823 ,1 +1824,43555 ,0 ,1824 ,1 +1825,89339 ,0 ,1825 ,1 +1826,48739 ,0 ,1826 ,1 +1827,76985 ,1 ,1827 ,1 +1828,57902 ,0 ,1828 ,1 +1829,88534 ,0 ,1829 ,1 +1830,42132 ,1 ,1830 ,1 +1831,43004 ,0 ,1831 ,1 +1832,15775 ,0 ,1832 ,1 +1833,64517 ,0 ,1833 ,1 +1834,76381 ,0 ,1834 ,1 +1835,69318 ,0 ,1835 ,1 +1836,10612 ,1 ,1836 ,1 +1837,12872 ,0 ,1837 ,1 +1838,15823 ,0 ,1838 ,1 +1839,10191 ,0 ,1839 ,1 +1840,11544 ,0 ,1840 ,1 +1841,48068 ,0 ,1841 ,1 +1842,69495 ,0 ,1842 ,1 +1843,23027 ,0 ,1843 ,1 +1844,67015 ,0 ,1844 ,1 +1845,39489 ,0 ,1845 ,1 +1846,10177 ,0 ,1846 ,1 +1847,53197 ,0 ,1847 ,1 +1848,12925 ,0 ,1848 ,1 +1849,20887 ,1 ,1849 ,1 +1850,17135 ,0 ,1850 ,1 +1851,32812 ,0 ,1851 ,1 +1852,29011 ,0 ,1852 ,1 +1853,26013 ,0 ,1853 ,1 +1854,72401 ,1 ,1854 ,1 +1855,55911 ,1 ,1855 ,1 +1856,73228 ,0 ,1856 ,1 +1857,77433 ,1 ,1857 ,1 +1858,14053 ,0 ,1858 ,1 +1859,62709 ,0 ,1859 ,1 +1860,65222 ,0 ,1860 ,1 +1861,75661 ,0 ,1861 ,1 +1862,83662 ,1 ,1862 ,1 +1863,89027 ,0 ,1863 ,1 +1864,39614 ,0 ,1864 ,1 +1865,31432 ,1 ,1865 ,1 +1866,49378 ,0 ,1866 ,1 +1867,18985 ,0 ,1867 ,1 +1868,46071 ,0 ,1868 ,1 +1869,39805 ,0 ,1869 ,1 +1870,47496 ,0 ,1870 ,1 +1871,28024 ,0 ,1871 ,1 +1872,85245 ,1 ,1872 ,1 +1873,46699 ,0 ,1873 ,1 +1874,62216 ,1 ,1874 ,1 +1875,67418 ,0 ,1875 ,1 +1876,22775 ,0 ,1876 ,1 +1877,25002 ,0 ,1877 ,1 +1878,40151 ,0 ,1878 ,1 +1879,24279 ,1 ,1879 ,1 +1880,80573 ,1 ,1880 ,1 +1881,28039 ,0 ,1881 ,1 +1882,42415 ,0 ,1882 ,1 +1883,31309 ,0 ,1883 ,1 +1884,13306 ,1 ,1884 ,1 +1885,24729 ,0 ,1885 ,1 +1886,64075 ,0 ,1886 ,1 +1887,64304 ,1 ,1887 ,1 +1888,71972 ,0 ,1888 ,1 +1889,83919 ,0 ,1889 ,1 +1890,12103 ,0 ,1890 ,1 +1891,43380 ,0 ,1891 ,1 +1892,41237 ,0 ,1892 ,1 +1893,86099 ,0 ,1893 ,1 +1894,15307 ,0 ,1894 ,1 +1895,54658 ,0 ,1895 ,1 +1896,10741 ,0 ,1896 ,1 +1897,85916 ,0 ,1897 ,1 +1898,22228 ,0 ,1898 ,1 +1899,47285 ,0 ,1899 ,1 +1900,76761 ,1 ,1900 ,1 +1901,66175 ,0 ,1901 ,1 +1902,35762 ,0 ,1902 ,1 +1903,43689 ,0 ,1903 ,1 +1904,28876 ,0 ,1904 ,1 +1905,35441 ,0 ,1905 ,1 +1906,62543 ,0 ,1906 ,1 +1907,36515 ,0 ,1907 ,1 +1908,74916 ,1 ,1908 ,1 +1909,83718 ,0 ,1909 ,1 +1910,65162 ,0 ,1910 ,1 +1911,55776 ,0 ,1911 ,1 +1912,19791 ,0 ,1912 ,1 +1913,33548 ,0 ,1913 ,1 +1914,64093 ,0 ,1914 ,1 +1915,77023 ,1 ,1915 ,1 +1916,80501 ,0 ,1916 ,1 +1917,72879 ,1 ,1917 ,1 +1918,66849 ,1 ,1918 ,1 +1919,11928 ,0 ,1919 ,1 +1920,10411 ,0 ,1920 ,1 +1921,51803 ,0 ,1921 ,1 +1922,11653 ,0 ,1922 ,1 +1923,84703 ,0 ,1923 ,1 +1924,83818 ,0 ,1924 ,1 +1925,73949 ,0 ,1925 ,1 +1926,57107 ,0 ,1926 ,1 +1927,40492 ,1 ,1927 ,1 +1928,18715 ,0 ,1928 ,1 +1929,71477 ,0 ,1929 ,1 +1930,36752 ,0 ,1930 ,1 +1931,57768 ,0 ,1931 ,1 +1932,70167 ,0 ,1932 ,1 +1933,43357 ,0 ,1933 ,1 +1934,81239 ,1 ,1934 ,1 +1935,85479 ,1 ,1935 ,1 +1936,45909 ,0 ,1936 ,1 +1937,48877 ,0 ,1937 ,1 +1938,46218 ,1 ,1938 ,1 +1939,47381 ,0 ,1939 ,1 +1940,44559 ,0 ,1940 ,1 +1941,74532 ,0 ,1941 ,1 +1942,57889 ,1 ,1942 ,1 +1943,15546 ,0 ,1943 ,1 +1944,75218 ,1 ,1944 ,1 +1945,11121 ,0 ,1945 ,1 +1946,40771 ,0 ,1946 ,1 +1947,72191 ,1 ,1947 ,1 +1948,55745 ,1 ,1948 ,1 +1949,76673 ,0 ,1949 ,1 +1950,17340 ,0 ,1950 ,1 +1951,53244 ,0 ,1951 ,1 +1952,59674 ,0 ,1952 ,1 +1953,14983 ,0 ,1953 ,1 +1954,49136 ,1 ,1954 ,1 +1955,64262 ,0 ,1955 ,1 +1956,34770 ,0 ,1956 ,1 +1957,36336 ,1 ,1957 ,1 +1958,15969 ,0 ,1958 ,1 +1959,47830 ,0 ,1959 ,1 +1960,15006 ,0 ,1960 ,1 +1961,24998 ,1 ,1961 ,1 +1962,68855 ,1 ,1962 ,1 +1963,39726 ,1 ,1963 ,1 +1964,69095 ,0 ,1964 ,1 +1965,74393 ,0 ,1965 ,1 +1966,55283 ,1 ,1966 ,1 +1967,63019 ,0 ,1967 ,1 +1968,60826 ,0 ,1968 ,1 +1969,83731 ,0 ,1969 ,1 +1970,58747 ,1 ,1970 ,1 +1971,15176 ,0 ,1971 ,1 +1972,19730 ,0 ,1972 ,1 +1973,78378 ,0 ,1973 ,1 +1974,21494 ,0 ,1974 ,1 +1975,38469 ,0 ,1975 ,1 +1976,57962 ,0 ,1976 ,1 +1977,14557 ,0 ,1977 ,1 +1978,50272 ,0 ,1978 ,1 +1979,23593 ,0 ,1979 ,1 +1980,22694 ,0 ,1980 ,1 +1981,11227 ,0 ,1981 ,1 +1982,44910 ,0 ,1982 ,1 +1983,32881 ,0 ,1983 ,1 +1984,45516 ,0 ,1984 ,1 +1985,69623 ,0 ,1985 ,1 +1986,41871 ,1 ,1986 ,1 +1987,33484 ,0 ,1987 ,1 +1988,76745 ,0 ,1988 ,1 +1989,59976 ,0 ,1989 ,1 +1990,40787 ,0 ,1990 ,1 +1991,27844 ,1 ,1991 ,1 +1992,10161 ,0 ,1992 ,1 +1993,41325 ,0 ,1993 ,1 +1994,84148 ,0 ,1994 ,1 +1995,78468 ,0 ,1995 ,1 +1996,78271 ,1 ,1996 ,1 +1997,75445 ,0 ,1997 ,1 +1998,54942 ,0 ,1998 ,1 +1999,79177 ,0 ,1999 ,1 +2000,41411 ,0 ,2000 ,1 +2001,14096 ,0 ,2001 ,1 +2002,26366 ,1 ,2002 ,1 +2003,55872 ,0 ,2003 ,1 +2004,23379 ,0 ,2004 ,1 +2005,47019 ,1 ,2005 ,1 +2006,65147 ,1 ,2006 ,1 +2007,32042 ,0 ,2007 ,1 +2008,39489 ,0 ,2008 ,1 +2009,42638 ,0 ,2009 ,1 +2010,15558 ,0 ,2010 ,1 +2011,66385 ,1 ,2011 ,1 +2012,72801 ,0 ,2012 ,1 +2013,73739 ,0 ,2013 ,1 +2014,83777 ,0 ,2014 ,1 +2015,39163 ,1 ,2015 ,1 +2016,38684 ,0 ,2016 ,1 +2017,29788 ,0 ,2017 ,1 +2018,69211 ,0 ,2018 ,1 +2019,31462 ,0 ,2019 ,1 +2020,37101 ,0 ,2020 ,1 +2021,77881 ,1 ,2021 ,1 +2022,24612 ,0 ,2022 ,1 +2023,65012 ,1 ,2023 ,1 +2024,10114 ,0 ,2024 ,1 +2025,43442 ,1 ,2025 ,1 +2026,43753 ,0 ,2026 ,1 +2027,74430 ,0 ,2027 ,1 +2028,83668 ,0 ,2028 ,1 +2029,34386 ,0 ,2029 ,1 +2030,24483 ,0 ,2030 ,1 +2031,23307 ,0 ,2031 ,1 +2032,69474 ,0 ,2032 ,1 +2033,11239 ,0 ,2033 ,1 +2034,59360 ,0 ,2034 ,1 +2035,85201 ,0 ,2035 ,1 +2036,21837 ,0 ,2036 ,1 +2037,84828 ,1 ,2037 ,1 +2038,26207 ,0 ,2038 ,1 +2039,85193 ,0 ,2039 ,1 +2040,85187 ,0 ,2040 ,1 +2041,70029 ,0 ,2041 ,1 +2042,23574 ,0 ,2042 ,1 +2043,88233 ,0 ,2043 ,1 +2044,81547 ,1 ,2044 ,1 +2045,48418 ,0 ,2045 ,1 +2046,28177 ,0 ,2046 ,1 +2047,65853 ,0 ,2047 ,1 +2048,43849 ,1 ,2048 ,1 +2049,33734 ,0 ,2049 ,1 +2050,23614 ,0 ,2050 ,1 +2051,44259 ,0 ,2051 ,1 +2052,66042 ,0 ,2052 ,1 +2053,76016 ,0 ,2053 ,1 +2054,48141 ,0 ,2054 ,1 +2055,44515 ,1 ,2055 ,1 +2056,63696 ,0 ,2056 ,1 +2057,74271 ,0 ,2057 ,1 +2058,58175 ,0 ,2058 ,1 +2059,37406 ,0 ,2059 ,1 +2060,49109 ,0 ,2060 ,1 +2061,60365 ,0 ,2061 ,1 +2062,30336 ,1 ,2062 ,1 +2063,51503 ,0 ,2063 ,1 +2064,74975 ,0 ,2064 ,1 +2065,67691 ,1 ,2065 ,1 +2066,55864 ,1 ,2066 ,1 +2067,10178 ,0 ,2067 ,1 +2068,82862 ,0 ,2068 ,1 +2069,82136 ,0 ,2069 ,1 +2070,30976 ,0 ,2070 ,1 +2071,61920 ,0 ,2071 ,1 +2072,84482 ,0 ,2072 ,1 +2073,59654 ,0 ,2073 ,1 +2074,74168 ,0 ,2074 ,1 +2075,31408 ,0 ,2075 ,1 +2076,64624 ,0 ,2076 ,1 +2077,41472 ,0 ,2077 ,1 +2078,38863 ,0 ,2078 ,1 +2079,40703 ,0 ,2079 ,1 +2080,69669 ,0 ,2080 ,1 +2081,83229 ,0 ,2081 ,1 +2082,54260 ,1 ,2082 ,1 +2083,34035 ,0 ,2083 ,1 +2084,73319 ,1 ,2084 ,1 +2085,30352 ,1 ,2085 ,1 +2086,36877 ,1 ,2086 ,1 +2087,77378 ,0 ,2087 ,1 +2088,56038 ,0 ,2088 ,1 +2089,64440 ,0 ,2089 ,1 +2090,72773 ,0 ,2090 ,1 +2091,85299 ,0 ,2091 ,1 +2092,28650 ,0 ,2092 ,1 +2093,72275 ,0 ,2093 ,1 +2094,18586 ,0 ,2094 ,1 +2095,89544 ,1 ,2095 ,1 +2096,76243 ,0 ,2096 ,1 +2097,67765 ,0 ,2097 ,1 +2098,40569 ,0 ,2098 ,1 +2099,72668 ,1 ,2099 ,1 +2100,12872 ,0 ,2100 ,1 +2101,49835 ,0 ,2101 ,1 +2102,76234 ,0 ,2102 ,1 +2103,81569 ,0 ,2103 ,1 +2104,26882 ,0 ,2104 ,1 +2105,18189 ,0 ,2105 ,1 +2106,10600 ,1 ,2106 ,1 +2107,79637 ,0 ,2107 ,1 +2108,21892 ,0 ,2108 ,1 +2109,44712 ,0 ,2109 ,1 +2110,20905 ,0 ,2110 ,1 +2111,55890 ,0 ,2111 ,1 +2112,42687 ,0 ,2112 ,1 +2113,81414 ,0 ,2113 ,1 +2114,60215 ,0 ,2114 ,1 +2115,47150 ,1 ,2115 ,1 +2116,50436 ,0 ,2116 ,1 +2117,35723 ,0 ,2117 ,1 +2118,78529 ,0 ,2118 ,1 +2119,21069 ,0 ,2119 ,1 +2120,76686 ,0 ,2120 ,1 +2121,72418 ,1 ,2121 ,1 +2122,44756 ,0 ,2122 ,1 +2123,58716 ,0 ,2123 ,1 +2124,64529 ,0 ,2124 ,1 +2125,87844 ,0 ,2125 ,1 +2126,53549 ,0 ,2126 ,1 +2127,79402 ,0 ,2127 ,1 +2128,14966 ,0 ,2128 ,1 +2129,89030 ,0 ,2129 ,1 +2130,69945 ,0 ,2130 ,1 +2131,15998 ,0 ,2131 ,1 +2132,55246 ,0 ,2132 ,1 +2133,34730 ,0 ,2133 ,1 +2134,89350 ,0 ,2134 ,1 +2135,79294 ,1 ,2135 ,1 +2136,82832 ,0 ,2136 ,1 +2137,21631 ,1 ,2137 ,1 +2138,51837 ,0 ,2138 ,1 +2139,45766 ,0 ,2139 ,1 +2140,15223 ,0 ,2140 ,1 +2141,89670 ,1 ,2141 ,1 +2142,24042 ,0 ,2142 ,1 +2143,50143 ,1 ,2143 ,1 +2144,12910 ,0 ,2144 ,1 +2145,30628 ,1 ,2145 ,1 +2146,24757 ,0 ,2146 ,1 +2147,24910 ,0 ,2147 ,1 +2148,17005 ,0 ,2148 ,1 +2149,81085 ,0 ,2149 ,1 +2150,43027 ,0 ,2150 ,1 +2151,46031 ,0 ,2151 ,1 +2152,63470 ,0 ,2152 ,1 +2153,27915 ,0 ,2153 ,1 +2154,43081 ,0 ,2154 ,1 +2155,44697 ,0 ,2155 ,1 +2156,30745 ,1 ,2156 ,1 +2157,26785 ,1 ,2157 ,1 +2158,20188 ,0 ,2158 ,1 +2159,24705 ,0 ,2159 ,1 +2160,43172 ,0 ,2160 ,1 +2161,23913 ,0 ,2161 ,1 +2162,32324 ,1 ,2162 ,1 +2163,76552 ,0 ,2163 ,1 +2164,36804 ,0 ,2164 ,1 +2165,70013 ,0 ,2165 ,1 +2166,34843 ,0 ,2166 ,1 +2167,16472 ,0 ,2167 ,1 +2168,10379 ,0 ,2168 ,1 +2169,64275 ,0 ,2169 ,1 +2170,65281 ,0 ,2170 ,1 +2171,55985 ,0 ,2171 ,1 +2172,35554 ,0 ,2172 ,1 +2173,69868 ,0 ,2173 ,1 +2174,71629 ,0 ,2174 ,1 +2175,29244 ,1 ,2175 ,1 +2176,44467 ,0 ,2176 ,1 +2177,55018 ,1 ,2177 ,1 +2178,69510 ,0 ,2178 ,1 +2179,32782 ,0 ,2179 ,1 +2180,85292 ,0 ,2180 ,1 +2181,15505 ,0 ,2181 ,1 +2182,54712 ,0 ,2182 ,1 +2183,86986 ,0 ,2183 ,1 +2184,30042 ,0 ,2184 ,1 +2185,28012 ,1 ,2185 ,1 +2186,24708 ,0 ,2186 ,1 +2187,57119 ,0 ,2187 ,1 +2188,21989 ,0 ,2188 ,1 +2189,23613 ,1 ,2189 ,1 +2190,82957 ,0 ,2190 ,1 +2191,48337 ,0 ,2191 ,1 +2192,74663 ,0 ,2192 ,1 +2193,44251 ,0 ,2193 ,1 +2194,53231 ,0 ,2194 ,1 +2195,42195 ,0 ,2195 ,1 +2196,77868 ,1 ,2196 ,1 +2197,15357 ,0 ,2197 ,1 +2198,48614 ,0 ,2198 ,1 +2199,28807 ,1 ,2199 ,1 +2200,28063 ,0 ,2200 ,1 +2201,88284 ,0 ,2201 ,1 +2202,84395 ,0 ,2202 ,1 +2203,55672 ,0 ,2203 ,1 +2204,69243 ,0 ,2204 ,1 +2205,40820 ,0 ,2205 ,1 +2206,68818 ,0 ,2206 ,1 +2207,42820 ,0 ,2207 ,1 +2208,64170 ,0 ,2208 ,1 +2209,29810 ,1 ,2209 ,1 +2210,71174 ,0 ,2210 ,1 +2211,88890 ,0 ,2211 ,1 +2212,52538 ,0 ,2212 ,1 +2213,70977 ,1 ,2213 ,1 +2214,35693 ,1 ,2214 ,1 +2215,64042 ,0 ,2215 ,1 +2216,26396 ,0 ,2216 ,1 +2217,46508 ,0 ,2217 ,1 +2218,57623 ,0 ,2218 ,1 +2219,11951 ,1 ,2219 ,1 +2220,28470 ,0 ,2220 ,1 +2221,54432 ,1 ,2221 ,1 +2222,84675 ,0 ,2222 ,1 +2223,73859 ,0 ,2223 ,1 +2224,30708 ,0 ,2224 ,1 +2225,55246 ,0 ,2225 ,1 +2226,19040 ,0 ,2226 ,1 +2227,70118 ,0 ,2227 ,1 +2228,26993 ,0 ,2228 ,1 +2229,29891 ,1 ,2229 ,1 +2230,82048 ,0 ,2230 ,1 +2231,73417 ,1 ,2231 ,1 +2232,85990 ,0 ,2232 ,1 +2233,65597 ,0 ,2233 ,1 +2234,18682 ,0 ,2234 ,1 +2235,86634 ,0 ,2235 ,1 +2236,65813 ,0 ,2236 ,1 +2237,49139 ,0 ,2237 ,1 +2238,75277 ,0 ,2238 ,1 +2239,50409 ,0 ,2239 ,1 +2240,49523 ,0 ,2240 ,1 +2241,43955 ,0 ,2241 ,1 +2242,53427 ,0 ,2242 ,1 +2243,42798 ,1 ,2243 ,1 +2244,46738 ,0 ,2244 ,1 +2245,38367 ,0 ,2245 ,1 +2246,34563 ,0 ,2246 ,1 +2247,39888 ,0 ,2247 ,1 +2248,33645 ,0 ,2248 ,1 +2249,21655 ,0 ,2249 ,1 +2250,63476 ,0 ,2250 ,1 +2251,78864 ,0 ,2251 ,1 +2252,88304 ,0 ,2252 ,1 +2253,43068 ,0 ,2253 ,1 +2254,23054 ,0 ,2254 ,1 +2255,53134 ,0 ,2255 ,1 +2256,33594 ,0 ,2256 ,1 +2257,69364 ,0 ,2257 ,1 +2258,62459 ,0 ,2258 ,1 +2259,75543 ,0 ,2259 ,1 +2260,39796 ,0 ,2260 ,1 +2261,74121 ,0 ,2261 ,1 +2262,81926 ,0 ,2262 ,1 +2263,38365 ,0 ,2263 ,1 +2264,52571 ,0 ,2264 ,1 +2265,21799 ,0 ,2265 ,1 +2266,86194 ,0 ,2266 ,1 +2267,30919 ,0 ,2267 ,1 +2268,25042 ,0 ,2268 ,1 +2269,33134 ,0 ,2269 ,1 +2270,49419 ,0 ,2270 ,1 +2271,24619 ,0 ,2271 ,1 +2272,34000 ,1 ,2272 ,1 +2273,63545 ,0 ,2273 ,1 +2274,64982 ,0 ,2274 ,1 +2275,29119 ,1 ,2275 ,1 +2276,66553 ,0 ,2276 ,1 +2277,22586 ,0 ,2277 ,1 +2278,30617 ,1 ,2278 ,1 +2279,38066 ,0 ,2279 ,1 +2280,58851 ,0 ,2280 ,1 +2281,23487 ,0 ,2281 ,1 +2282,89204 ,0 ,2282 ,1 +2283,38907 ,0 ,2283 ,1 +2284,79722 ,0 ,2284 ,1 +2285,17114 ,0 ,2285 ,1 +2286,39574 ,0 ,2286 ,1 +2287,22015 ,0 ,2287 ,1 +2288,34064 ,0 ,2288 ,1 +2289,89530 ,0 ,2289 ,1 +2290,22783 ,1 ,2290 ,1 +2291,54807 ,1 ,2291 ,1 +2292,10577 ,0 ,2292 ,1 +2293,44551 ,0 ,2293 ,1 +2294,59931 ,0 ,2294 ,1 +2295,38217 ,0 ,2295 ,1 +2296,36091 ,0 ,2296 ,1 +2297,68586 ,0 ,2297 ,1 +2298,13631 ,0 ,2298 ,1 +2299,63636 ,0 ,2299 ,1 +2300,80595 ,1 ,2300 ,1 +2301,61839 ,0 ,2301 ,1 +2302,81633 ,0 ,2302 ,1 +2303,71482 ,0 ,2303 ,1 +2304,78026 ,0 ,2304 ,1 +2305,14408 ,0 ,2305 ,1 +2306,49978 ,0 ,2306 ,1 +2307,67816 ,1 ,2307 ,1 +2308,70096 ,0 ,2308 ,1 +2309,70523 ,0 ,2309 ,1 +2310,14685 ,0 ,2310 ,1 +2311,22609 ,0 ,2311 ,1 +2312,22963 ,0 ,2312 ,1 +2313,15121 ,0 ,2313 ,1 +2314,19504 ,0 ,2314 ,1 +2315,32505 ,0 ,2315 ,1 +2316,12971 ,0 ,2316 ,1 +2317,42247 ,0 ,2317 ,1 +2318,67272 ,0 ,2318 ,1 +2319,38540 ,0 ,2319 ,1 +2320,71420 ,0 ,2320 ,1 +2321,72416 ,0 ,2321 ,1 +2322,72072 ,0 ,2322 ,1 +2323,88481 ,0 ,2323 ,1 +2324,36981 ,0 ,2324 ,1 +2325,33582 ,1 ,2325 ,1 +2326,29981 ,1 ,2326 ,1 +2327,37376 ,1 ,2327 ,1 +2328,89881 ,0 ,2328 ,1 +2329,41215 ,0 ,2329 ,1 +2330,27300 ,0 ,2330 ,1 +2331,81973 ,0 ,2331 ,1 +2332,69916 ,0 ,2332 ,1 +2333,72944 ,0 ,2333 ,1 +2334,57439 ,1 ,2334 ,1 +2335,15206 ,0 ,2335 ,1 +2336,42417 ,0 ,2336 ,1 +2337,82211 ,0 ,2337 ,1 +2338,88102 ,0 ,2338 ,1 +2339,54152 ,0 ,2339 ,1 +2340,82860 ,0 ,2340 ,1 +2341,43241 ,0 ,2341 ,1 +2342,42410 ,0 ,2342 ,1 +2343,63573 ,0 ,2343 ,1 +2344,71491 ,0 ,2344 ,1 +2345,85959 ,0 ,2345 ,1 +2346,45222 ,0 ,2346 ,1 +2347,51056 ,1 ,2347 ,1 +2348,83015 ,0 ,2348 ,1 +2349,45306 ,0 ,2349 ,1 +2350,29036 ,0 ,2350 ,1 +2351,81719 ,0 ,2351 ,1 +2352,66765 ,0 ,2352 ,1 +2353,43948 ,0 ,2353 ,1 +2354,35808 ,0 ,2354 ,1 +2355,73766 ,0 ,2355 ,1 +2356,77355 ,1 ,2356 ,1 +2357,84762 ,1 ,2357 ,1 +2358,20002 ,0 ,2358 ,1 +2359,76532 ,0 ,2359 ,1 +2360,21594 ,0 ,2360 ,1 +2361,51290 ,0 ,2361 ,1 +2362,27020 ,0 ,2362 ,1 +2363,52206 ,0 ,2363 ,1 +2364,29007 ,0 ,2364 ,1 +2365,77526 ,0 ,2365 ,1 +2366,42977 ,1 ,2366 ,1 +2367,74295 ,0 ,2367 ,1 +2368,24418 ,0 ,2368 ,1 +2369,10795 ,1 ,2369 ,1 +2370,17522 ,0 ,2370 ,1 +2371,81533 ,0 ,2371 ,1 +2372,25068 ,1 ,2372 ,1 +2373,26760 ,1 ,2373 ,1 +2374,25609 ,0 ,2374 ,1 +2375,84652 ,1 ,2375 ,1 +2376,11098 ,0 ,2376 ,1 +2377,29161 ,0 ,2377 ,1 +2378,70743 ,0 ,2378 ,1 +2379,83980 ,0 ,2379 ,1 +2380,47544 ,0 ,2380 ,1 +2381,37822 ,0 ,2381 ,1 +2382,88440 ,0 ,2382 ,1 +2383,70246 ,0 ,2383 ,1 +2384,70759 ,0 ,2384 ,1 +2385,46247 ,0 ,2385 ,1 +2386,86779 ,0 ,2386 ,1 +2387,17345 ,1 ,2387 ,1 +2388,63959 ,0 ,2388 ,1 +2389,38716 ,0 ,2389 ,1 +2390,88817 ,0 ,2390 ,1 +2391,57144 ,0 ,2391 ,1 +2392,46674 ,0 ,2392 ,1 +2393,21136 ,0 ,2393 ,1 +2394,53503 ,1 ,2394 ,1 +2395,17959 ,0 ,2395 ,1 +2396,33914 ,0 ,2396 ,1 +2397,85676 ,0 ,2397 ,1 +2398,72542 ,1 ,2398 ,1 +2399,70082 ,0 ,2399 ,1 +2400,77693 ,0 ,2400 ,1 +2401,22571 ,1 ,2401 ,1 +2402,69415 ,0 ,2402 ,1 +2403,26972 ,1 ,2403 ,1 +2404,23142 ,0 ,2404 ,1 +2405,68281 ,1 ,2405 ,1 +2406,64512 ,1 ,2406 ,1 +2407,47185 ,0 ,2407 ,1 +2408,56798 ,0 ,2408 ,1 +2409,51473 ,0 ,2409 ,1 +2410,19538 ,0 ,2410 ,1 +2411,56554 ,1 ,2411 ,1 +2412,74632 ,0 ,2412 ,1 +2413,60035 ,0 ,2413 ,1 +2414,10382 ,0 ,2414 ,1 +2415,74965 ,0 ,2415 ,1 +2416,31512 ,0 ,2416 ,1 +2417,46280 ,0 ,2417 ,1 +2418,13452 ,0 ,2418 ,1 +2419,76814 ,0 ,2419 ,1 +2420,62959 ,0 ,2420 ,1 +2421,47281 ,0 ,2421 ,1 +2422,77200 ,0 ,2422 ,1 +2423,44931 ,0 ,2423 ,1 +2424,58760 ,0 ,2424 ,1 +2425,56578 ,1 ,2425 ,1 +2426,18055 ,0 ,2426 ,1 +2427,82361 ,0 ,2427 ,1 +2428,49396 ,0 ,2428 ,1 +2429,77303 ,0 ,2429 ,1 +2430,85261 ,0 ,2430 ,1 +2431,32912 ,0 ,2431 ,1 +2432,12762 ,0 ,2432 ,1 +2433,24503 ,0 ,2433 ,1 +2434,31281 ,0 ,2434 ,1 +2435,47428 ,0 ,2435 ,1 +2436,48580 ,0 ,2436 ,1 +2437,57356 ,0 ,2437 ,1 +2438,82498 ,0 ,2438 ,1 +2439,15548 ,0 ,2439 ,1 +2440,41177 ,0 ,2440 ,1 +2441,25397 ,1 ,2441 ,1 +2442,22258 ,0 ,2442 ,1 +2443,79525 ,0 ,2443 ,1 +2444,41313 ,0 ,2444 ,1 +2445,31894 ,0 ,2445 ,1 +2446,81465 ,0 ,2446 ,1 +2447,19932 ,0 ,2447 ,1 +2448,33026 ,1 ,2448 ,1 +2449,79450 ,0 ,2449 ,1 +2450,73012 ,0 ,2450 ,1 +2451,25357 ,0 ,2451 ,1 +2452,83531 ,0 ,2452 ,1 +2453,31592 ,0 ,2453 ,1 +2454,28187 ,0 ,2454 ,1 +2455,66702 ,0 ,2455 ,1 +2456,23269 ,0 ,2456 ,1 +2457,82346 ,0 ,2457 ,1 +2458,29613 ,0 ,2458 ,1 +2459,43288 ,1 ,2459 ,1 +2460,25160 ,0 ,2460 ,1 +2461,56339 ,0 ,2461 ,1 +2462,55112 ,0 ,2462 ,1 +2463,73043 ,0 ,2463 ,1 +2464,76794 ,0 ,2464 ,1 +2465,32076 ,0 ,2465 ,1 +2466,25544 ,0 ,2466 ,1 +2467,57407 ,0 ,2467 ,1 +2468,24196 ,0 ,2468 ,1 +2469,72409 ,0 ,2469 ,1 +2470,73470 ,0 ,2470 ,1 +2471,80757 ,1 ,2471 ,1 +2472,82926 ,0 ,2472 ,1 +2473,66775 ,1 ,2473 ,1 +2474,48453 ,0 ,2474 ,1 +2475,85451 ,0 ,2475 ,1 +2476,60334 ,0 ,2476 ,1 +2477,72564 ,0 ,2477 ,1 +2478,61096 ,0 ,2478 ,1 +2479,47857 ,1 ,2479 ,1 +2480,63044 ,0 ,2480 ,1 +2481,53373 ,0 ,2481 ,1 +2482,10454 ,1 ,2482 ,1 +2483,58332 ,0 ,2483 ,1 +2484,52374 ,0 ,2484 ,1 +2485,27283 ,0 ,2485 ,1 +2486,82387 ,1 ,2486 ,1 +2487,78889 ,0 ,2487 ,1 +2488,43212 ,0 ,2488 ,1 +2489,14150 ,0 ,2489 ,1 +2490,88201 ,0 ,2490 ,1 +2491,80724 ,0 ,2491 ,1 +2492,35155 ,1 ,2492 ,1 +2493,21555 ,0 ,2493 ,1 +2494,23760 ,0 ,2494 ,1 +2495,21515 ,0 ,2495 ,1 +2496,37470 ,0 ,2496 ,1 +2497,27015 ,0 ,2497 ,1 +2498,21459 ,1 ,2498 ,1 +2499,25239 ,0 ,2499 ,1 +2500,41938 ,1 ,2500 ,1 +2501,50056 ,0 ,2501 ,1 +2502,19949 ,0 ,2502 ,1 +2503,80518 ,0 ,2503 ,1 +2504,61449 ,1 ,2504 ,1 +2505,27310 ,0 ,2505 ,1 +2506,48717 ,0 ,2506 ,1 +2507,63701 ,0 ,2507 ,1 +2508,37126 ,0 ,2508 ,1 +2509,87041 ,0 ,2509 ,1 +2510,43904 ,0 ,2510 ,1 +2511,19162 ,0 ,2511 ,1 +2512,87835 ,0 ,2512 ,1 +2513,80166 ,0 ,2513 ,1 +2514,51402 ,0 ,2514 ,1 +2515,48017 ,0 ,2515 ,1 +2516,68922 ,0 ,2516 ,1 +2517,64894 ,0 ,2517 ,1 +2518,43800 ,0 ,2518 ,1 +2519,66243 ,1 ,2519 ,1 +2520,14686 ,0 ,2520 ,1 +2521,26030 ,0 ,2521 ,1 +2522,39295 ,0 ,2522 ,1 +2523,41656 ,0 ,2523 ,1 +2524,64907 ,0 ,2524 ,1 +2525,75366 ,0 ,2525 ,1 +2526,51904 ,0 ,2526 ,1 +2527,76624 ,1 ,2527 ,1 +2528,71960 ,0 ,2528 ,1 +2529,71323 ,0 ,2529 ,1 +2530,85585 ,0 ,2530 ,1 +2531,56062 ,0 ,2531 ,1 +2532,39973 ,1 ,2532 ,1 +2533,78776 ,1 ,2533 ,1 +2534,37510 ,0 ,2534 ,1 +2535,85485 ,0 ,2535 ,1 +2536,39157 ,1 ,2536 ,1 +2537,52736 ,0 ,2537 ,1 +2538,22639 ,0 ,2538 ,1 +2539,43200 ,0 ,2539 ,1 +2540,26673 ,0 ,2540 ,1 +2541,47964 ,0 ,2541 ,1 +2542,25708 ,0 ,2542 ,1 +2543,26840 ,0 ,2543 ,1 +2544,40420 ,1 ,2544 ,1 +2545,25917 ,1 ,2545 ,1 +2546,68048 ,1 ,2546 ,1 +2547,48453 ,0 ,2547 ,1 +2548,20285 ,0 ,2548 ,1 +2549,11865 ,0 ,2549 ,1 +2550,45665 ,0 ,2550 ,1 +2551,30913 ,0 ,2551 ,1 +2552,38811 ,0 ,2552 ,1 +2553,15820 ,1 ,2553 ,1 +2554,39715 ,0 ,2554 ,1 +2555,38959 ,0 ,2555 ,1 +2556,54896 ,0 ,2556 ,1 +2557,62107 ,0 ,2557 ,1 +2558,86113 ,0 ,2558 ,1 +2559,25434 ,1 ,2559 ,1 +2560,43418 ,0 ,2560 ,1 +2561,79117 ,0 ,2561 ,1 +2562,57494 ,0 ,2562 ,1 +2563,65957 ,0 ,2563 ,1 +2564,51864 ,0 ,2564 ,1 +2565,53522 ,0 ,2565 ,1 +2566,87449 ,0 ,2566 ,1 +2567,71665 ,0 ,2567 ,1 +2568,65040 ,0 ,2568 ,1 +2569,87474 ,0 ,2569 ,1 +2570,33283 ,1 ,2570 ,1 +2571,17733 ,0 ,2571 ,1 +2572,66663 ,0 ,2572 ,1 +2573,25985 ,0 ,2573 ,1 +2574,80275 ,0 ,2574 ,1 +2575,37197 ,1 ,2575 ,1 +2576,31471 ,0 ,2576 ,1 +2577,37027 ,0 ,2577 ,1 +2578,44464 ,1 ,2578 ,1 +2579,45008 ,0 ,2579 ,1 +2580,30595 ,0 ,2580 ,1 +2581,58512 ,1 ,2581 ,1 +2582,56427 ,1 ,2582 ,1 +2583,80738 ,0 ,2583 ,1 +2584,87947 ,0 ,2584 ,1 +2585,77886 ,0 ,2585 ,1 +2586,81157 ,0 ,2586 ,1 +2587,85251 ,0 ,2587 ,1 +2588,84592 ,0 ,2588 ,1 +2589,63858 ,0 ,2589 ,1 +2590,47190 ,0 ,2590 ,1 +2591,69419 ,0 ,2591 ,1 +2592,64097 ,1 ,2592 ,1 +2593,47991 ,0 ,2593 ,1 +2594,10857 ,0 ,2594 ,1 +2595,57733 ,0 ,2595 ,1 +2596,64696 ,0 ,2596 ,1 +2597,32096 ,1 ,2597 ,1 +2598,89730 ,0 ,2598 ,1 +2599,79100 ,0 ,2599 ,1 +2600,69366 ,0 ,2600 ,1 +2601,26943 ,0 ,2601 ,1 +2602,42512 ,1 ,2602 ,1 +2603,80723 ,0 ,2603 ,1 +2604,28380 ,0 ,2604 ,1 +2605,47356 ,0 ,2605 ,1 +2606,30207 ,0 ,2606 ,1 +2607,80065 ,0 ,2607 ,1 +2608,79131 ,0 ,2608 ,1 +2609,51167 ,0 ,2609 ,1 +2610,65361 ,0 ,2610 ,1 +2611,76401 ,0 ,2611 ,1 +2612,45894 ,0 ,2612 ,1 +2613,43330 ,0 ,2613 ,1 +2614,47675 ,0 ,2614 ,1 +2615,79943 ,0 ,2615 ,1 +2616,18916 ,1 ,2616 ,1 +2617,42202 ,0 ,2617 ,1 +2618,31536 ,0 ,2618 ,1 +2619,31735 ,0 ,2619 ,1 +2620,57562 ,0 ,2620 ,1 +2621,59641 ,0 ,2621 ,1 +2622,51379 ,1 ,2622 ,1 +2623,19476 ,0 ,2623 ,1 +2624,31777 ,1 ,2624 ,1 +2625,29746 ,0 ,2625 ,1 +2626,63923 ,0 ,2626 ,1 +2627,20233 ,0 ,2627 ,1 +2628,37973 ,0 ,2628 ,1 +2629,13955 ,0 ,2629 ,1 +2630,44664 ,1 ,2630 ,1 +2631,86754 ,0 ,2631 ,1 +2632,68126 ,0 ,2632 ,1 +2633,83706 ,0 ,2633 ,1 +2634,50176 ,0 ,2634 ,1 +2635,80807 ,0 ,2635 ,1 +2636,28723 ,0 ,2636 ,1 +2637,55124 ,0 ,2637 ,1 +2638,64864 ,1 ,2638 ,1 +2639,39992 ,0 ,2639 ,1 +2640,29494 ,0 ,2640 ,1 +2641,19501 ,0 ,2641 ,1 +2642,59436 ,1 ,2642 ,1 +2643,64450 ,0 ,2643 ,1 +2644,56822 ,0 ,2644 ,1 +2645,39549 ,0 ,2645 ,1 +2646,50958 ,0 ,2646 ,1 +2647,27073 ,0 ,2647 ,1 +2648,52824 ,0 ,2648 ,1 +2649,36621 ,0 ,2649 ,1 +2650,35489 ,1 ,2650 ,1 +2651,18727 ,1 ,2651 ,1 +2652,77199 ,1 ,2652 ,1 +2653,51352 ,0 ,2653 ,1 +2654,32341 ,0 ,2654 ,1 +2655,76790 ,0 ,2655 ,1 +2656,87761 ,0 ,2656 ,1 +2657,64157 ,0 ,2657 ,1 +2658,23361 ,0 ,2658 ,1 +2659,70543 ,0 ,2659 ,1 +2660,77820 ,0 ,2660 ,1 +2661,41819 ,1 ,2661 ,1 +2662,24387 ,0 ,2662 ,1 +2663,37516 ,1 ,2663 ,1 +2664,21355 ,0 ,2664 ,1 +2665,78083 ,0 ,2665 ,1 +2666,75121 ,0 ,2666 ,1 +2667,57201 ,0 ,2667 ,1 +2668,68676 ,1 ,2668 ,1 +2669,52570 ,0 ,2669 ,1 +2670,32394 ,0 ,2670 ,1 +2671,68072 ,1 ,2671 ,1 +2672,19215 ,0 ,2672 ,1 +2673,32987 ,0 ,2673 ,1 +2674,16100 ,0 ,2674 ,1 +2675,68224 ,0 ,2675 ,1 +2676,39766 ,0 ,2676 ,1 +2677,74163 ,0 ,2677 ,1 +2678,75755 ,0 ,2678 ,1 +2679,44290 ,1 ,2679 ,1 +2680,30115 ,0 ,2680 ,1 +2681,35150 ,0 ,2681 ,1 +2682,72225 ,1 ,2682 ,1 +2683,70212 ,0 ,2683 ,1 +2684,82316 ,0 ,2684 ,1 +2685,73109 ,0 ,2685 ,1 +2686,12189 ,0 ,2686 ,1 +2687,64922 ,0 ,2687 ,1 +2688,46762 ,0 ,2688 ,1 +2689,72681 ,0 ,2689 ,1 +2690,87664 ,1 ,2690 ,1 +2691,57350 ,0 ,2691 ,1 +2692,20418 ,1 ,2692 ,1 +2693,89177 ,0 ,2693 ,1 +2694,64372 ,0 ,2694 ,1 +2695,20921 ,0 ,2695 ,1 +2696,68010 ,1 ,2696 ,1 +2697,64156 ,1 ,2697 ,1 +2698,43004 ,0 ,2698 ,1 +2699,76679 ,0 ,2699 ,1 +2700,52880 ,0 ,2700 ,1 +2701,64007 ,0 ,2701 ,1 +2702,16810 ,1 ,2702 ,1 +2703,17832 ,0 ,2703 ,1 +2704,23647 ,1 ,2704 ,1 +2705,56893 ,0 ,2705 ,1 +2706,87373 ,0 ,2706 ,1 +2707,61213 ,1 ,2707 ,1 +2708,80620 ,0 ,2708 ,1 +2709,81331 ,0 ,2709 ,1 +2710,30163 ,0 ,2710 ,1 +2711,44479 ,1 ,2711 ,1 +2712,73539 ,0 ,2712 ,1 +2713,66765 ,0 ,2713 ,1 +2714,66784 ,0 ,2714 ,1 +2715,40996 ,0 ,2715 ,1 +2716,76694 ,0 ,2716 ,1 +2717,43662 ,1 ,2717 ,1 +2718,58010 ,0 ,2718 ,1 +2719,75148 ,0 ,2719 ,1 +2720,89484 ,0 ,2720 ,1 +2721,13788 ,0 ,2721 ,1 +2722,62864 ,1 ,2722 ,1 +2723,88132 ,0 ,2723 ,1 +2724,39429 ,0 ,2724 ,1 +2725,69772 ,0 ,2725 ,1 +2726,18465 ,0 ,2726 ,1 +2727,66698 ,0 ,2727 ,1 +2728,75837 ,0 ,2728 ,1 +2729,70164 ,0 ,2729 ,1 +2730,74240 ,0 ,2730 ,1 +2731,80854 ,0 ,2731 ,1 +2732,83221 ,0 ,2732 ,1 +2733,43425 ,0 ,2733 ,1 +2734,68485 ,0 ,2734 ,1 +2735,82395 ,0 ,2735 ,1 +2736,27407 ,0 ,2736 ,1 +2737,58156 ,0 ,2737 ,1 +2738,76873 ,0 ,2738 ,1 +2739,51556 ,0 ,2739 ,1 +2740,72985 ,0 ,2740 ,1 +2741,70403 ,0 ,2741 ,1 +2742,83606 ,0 ,2742 ,1 +2743,43655 ,0 ,2743 ,1 +2744,23924 ,0 ,2744 ,1 +2745,53814 ,0 ,2745 ,1 +2746,46647 ,0 ,2746 ,1 +2747,68056 ,0 ,2747 ,1 +2748,27267 ,1 ,2748 ,1 +2749,19109 ,0 ,2749 ,1 +2750,47268 ,1 ,2750 ,1 +2751,61686 ,0 ,2751 ,1 +2752,23770 ,0 ,2752 ,1 +2753,67938 ,0 ,2753 ,1 +2754,68796 ,0 ,2754 ,1 +2755,78140 ,0 ,2755 ,1 +2756,64287 ,0 ,2756 ,1 +2757,48995 ,0 ,2757 ,1 +2758,64526 ,0 ,2758 ,1 +2759,49184 ,0 ,2759 ,1 +2760,46651 ,0 ,2760 ,1 +2761,38481 ,0 ,2761 ,1 +2762,45317 ,0 ,2762 ,1 +2763,61885 ,0 ,2763 ,1 +2764,15075 ,0 ,2764 ,1 +2765,63067 ,0 ,2765 ,1 +2766,10540 ,0 ,2766 ,1 +2767,45815 ,0 ,2767 ,1 +2768,64831 ,0 ,2768 ,1 +2769,66080 ,0 ,2769 ,1 +2770,67702 ,0 ,2770 ,1 +2771,11263 ,0 ,2771 ,1 +2772,77542 ,0 ,2772 ,1 +2773,45900 ,0 ,2773 ,1 +2774,79874 ,0 ,2774 ,1 +2775,67459 ,0 ,2775 ,1 +2776,62094 ,0 ,2776 ,1 +2777,66834 ,0 ,2777 ,1 +2778,39363 ,1 ,2778 ,1 +2779,76953 ,0 ,2779 ,1 +2780,88202 ,0 ,2780 ,1 +2781,43635 ,1 ,2781 ,1 +2782,78702 ,0 ,2782 ,1 +2783,81519 ,0 ,2783 ,1 +2784,22250 ,0 ,2784 ,1 +2785,13220 ,1 ,2785 ,1 +2786,12556 ,0 ,2786 ,1 +2787,56089 ,0 ,2787 ,1 +2788,84635 ,0 ,2788 ,1 +2789,53226 ,0 ,2789 ,1 +2790,55727 ,0 ,2790 ,1 +2791,42887 ,0 ,2791 ,1 +2792,10243 ,0 ,2792 ,1 +2793,85964 ,0 ,2793 ,1 +2794,84000 ,0 ,2794 ,1 +2795,26323 ,0 ,2795 ,1 +2796,85101 ,0 ,2796 ,1 +2797,83235 ,0 ,2797 ,1 +2798,55743 ,0 ,2798 ,1 +2799,27817 ,1 ,2799 ,1 +2800,23712 ,1 ,2800 ,1 +2801,16285 ,0 ,2801 ,1 +2802,25824 ,0 ,2802 ,1 +2803,42263 ,0 ,2803 ,1 +2804,15206 ,0 ,2804 ,1 +2805,51126 ,0 ,2805 ,1 +2806,36800 ,1 ,2806 ,1 +2807,23876 ,0 ,2807 ,1 +2808,25390 ,0 ,2808 ,1 +2809,23814 ,0 ,2809 ,1 +2810,19727 ,1 ,2810 ,1 +2811,85214 ,0 ,2811 ,1 +2812,71688 ,0 ,2812 ,1 +2813,59723 ,0 ,2813 ,1 +2814,60729 ,0 ,2814 ,1 +2815,42343 ,0 ,2815 ,1 +2816,43986 ,0 ,2816 ,1 +2817,74122 ,0 ,2817 ,1 +2818,24519 ,0 ,2818 ,1 +2819,44451 ,0 ,2819 ,1 +2820,86627 ,0 ,2820 ,1 +2821,87599 ,0 ,2821 ,1 +2822,53192 ,0 ,2822 ,1 +2823,38866 ,0 ,2823 ,1 +2824,84558 ,0 ,2824 ,1 +2825,42242 ,0 ,2825 ,1 +2826,84286 ,0 ,2826 ,1 +2827,59184 ,0 ,2827 ,1 +2828,37951 ,1 ,2828 ,1 +2829,49397 ,1 ,2829 ,1 +2830,72700 ,0 ,2830 ,1 +2831,25603 ,1 ,2831 ,1 +2832,17955 ,0 ,2832 ,1 +2833,64556 ,0 ,2833 ,1 +2834,89016 ,0 ,2834 ,1 +2835,11475 ,1 ,2835 ,1 +2836,25356 ,1 ,2836 ,1 +2837,66647 ,0 ,2837 ,1 +2838,75613 ,0 ,2838 ,1 +2839,27513 ,0 ,2839 ,1 +2840,36249 ,0 ,2840 ,1 +2841,86822 ,1 ,2841 ,1 +2842,74318 ,0 ,2842 ,1 +2843,23536 ,0 ,2843 ,1 +2844,37689 ,0 ,2844 ,1 +2845,13273 ,0 ,2845 ,1 +2846,15197 ,0 ,2846 ,1 +2847,12540 ,0 ,2847 ,1 +2848,87811 ,0 ,2848 ,1 +2849,18833 ,1 ,2849 ,1 +2850,52874 ,1 ,2850 ,1 +2851,64730 ,0 ,2851 ,1 +2852,51564 ,0 ,2852 ,1 +2853,44872 ,0 ,2853 ,1 +2854,62401 ,0 ,2854 ,1 +2855,10487 ,0 ,2855 ,1 +2856,13190 ,0 ,2856 ,1 +2857,34938 ,0 ,2857 ,1 +2858,47239 ,0 ,2858 ,1 +2859,46661 ,0 ,2859 ,1 +2860,55843 ,0 ,2860 ,1 +2861,35135 ,0 ,2861 ,1 +2862,73468 ,0 ,2862 ,1 +2863,79322 ,0 ,2863 ,1 +2864,67084 ,0 ,2864 ,1 +2865,70116 ,0 ,2865 ,1 +2866,86607 ,0 ,2866 ,1 +2867,20174 ,1 ,2867 ,1 +2868,43030 ,0 ,2868 ,1 +2869,21559 ,0 ,2869 ,1 +2870,57342 ,0 ,2870 ,1 +2871,21536 ,0 ,2871 ,1 +2872,11928 ,1 ,2872 ,1 +2873,39684 ,0 ,2873 ,1 +2874,31308 ,0 ,2874 ,1 +2875,65819 ,0 ,2875 ,1 +2876,24193 ,0 ,2876 ,1 +2877,46781 ,0 ,2877 ,1 +2878,83093 ,0 ,2878 ,1 +2879,31972 ,0 ,2879 ,1 +2880,30094 ,0 ,2880 ,1 +2881,81754 ,0 ,2881 ,1 +2882,32787 ,0 ,2882 ,1 +2883,87444 ,0 ,2883 ,1 +2884,34204 ,0 ,2884 ,1 +2885,82120 ,0 ,2885 ,1 +2886,80531 ,0 ,2886 ,1 +2887,13461 ,0 ,2887 ,1 +2888,25345 ,0 ,2888 ,1 +2889,22278 ,0 ,2889 ,1 +2890,81787 ,0 ,2890 ,1 +2891,17638 ,0 ,2891 ,1 +2892,60531 ,0 ,2892 ,1 +2893,34666 ,1 ,2893 ,1 +2894,39020 ,1 ,2894 ,1 +2895,88728 ,0 ,2895 ,1 +2896,18704 ,0 ,2896 ,1 +2897,23977 ,1 ,2897 ,1 +2898,14835 ,0 ,2898 ,1 +2899,12382 ,0 ,2899 ,1 +2900,20532 ,0 ,2900 ,1 +2901,49752 ,0 ,2901 ,1 +2902,51052 ,0 ,2902 ,1 +2903,31845 ,0 ,2903 ,1 +2904,20300 ,0 ,2904 ,1 +2905,28034 ,0 ,2905 ,1 +2906,83873 ,1 ,2906 ,1 +2907,50074 ,0 ,2907 ,1 +2908,60478 ,0 ,2908 ,1 +2909,56006 ,0 ,2909 ,1 +2910,20980 ,0 ,2910 ,1 +2911,59677 ,0 ,2911 ,1 +2912,65886 ,0 ,2912 ,1 +2913,15610 ,0 ,2913 ,1 +2914,89667 ,0 ,2914 ,1 +2915,18874 ,0 ,2915 ,1 +2916,88513 ,0 ,2916 ,1 +2917,29050 ,1 ,2917 ,1 +2918,87292 ,0 ,2918 ,1 +2919,72763 ,1 ,2919 ,1 +2920,56005 ,1 ,2920 ,1 +2921,26052 ,0 ,2921 ,1 +2922,60557 ,0 ,2922 ,1 +2923,70627 ,1 ,2923 ,1 +2924,16658 ,0 ,2924 ,1 +2925,12021 ,0 ,2925 ,1 +2926,71640 ,0 ,2926 ,1 +2927,73331 ,0 ,2927 ,1 +2928,26984 ,1 ,2928 ,1 +2929,32130 ,0 ,2929 ,1 +2930,51195 ,0 ,2930 ,1 +2931,18256 ,0 ,2931 ,1 +2932,45545 ,0 ,2932 ,1 +2933,30194 ,0 ,2933 ,1 +2934,58790 ,0 ,2934 ,1 +2935,61186 ,0 ,2935 ,1 +2936,34900 ,0 ,2936 ,1 +2937,32830 ,0 ,2937 ,1 +2938,25964 ,0 ,2938 ,1 +2939,13260 ,0 ,2939 ,1 +2940,83271 ,0 ,2940 ,1 +2941,16402 ,0 ,2941 ,1 +2942,48797 ,0 ,2942 ,1 +2943,68497 ,0 ,2943 ,1 +2944,47197 ,0 ,2944 ,1 +2945,48780 ,0 ,2945 ,1 +2946,65353 ,0 ,2946 ,1 +2947,81915 ,0 ,2947 ,1 +2948,20299 ,1 ,2948 ,1 +2949,20451 ,0 ,2949 ,1 +2950,79617 ,1 ,2950 ,1 +2951,12303 ,0 ,2951 ,1 +2952,65657 ,0 ,2952 ,1 +2953,50496 ,0 ,2953 ,1 +2954,86497 ,0 ,2954 ,1 +2955,31527 ,1 ,2955 ,1 +2956,88787 ,0 ,2956 ,1 +2957,30175 ,0 ,2957 ,1 +2958,42519 ,1 ,2958 ,1 +2959,63788 ,0 ,2959 ,1 +2960,25467 ,0 ,2960 ,1 +2961,76003 ,0 ,2961 ,1 +2962,54633 ,0 ,2962 ,1 +2963,47956 ,0 ,2963 ,1 +2964,26048 ,0 ,2964 ,1 +2965,11639 ,0 ,2965 ,1 +2966,58137 ,0 ,2966 ,1 +2967,50224 ,0 ,2967 ,1 +2968,68888 ,0 ,2968 ,1 +2969,39184 ,0 ,2969 ,1 +2970,12216 ,0 ,2970 ,1 +2971,85656 ,0 ,2971 ,1 +2972,87024 ,0 ,2972 ,1 +2973,22172 ,0 ,2973 ,1 +2974,46385 ,1 ,2974 ,1 +2975,30443 ,0 ,2975 ,1 +2976,60902 ,0 ,2976 ,1 +2977,32550 ,0 ,2977 ,1 +2978,57233 ,0 ,2978 ,1 +2979,30486 ,0 ,2979 ,1 +2980,31616 ,1 ,2980 ,1 +2981,67760 ,1 ,2981 ,1 +2982,41382 ,1 ,2982 ,1 +2983,46070 ,0 ,2983 ,1 +2984,67535 ,0 ,2984 ,1 +2985,18946 ,0 ,2985 ,1 +2986,38887 ,0 ,2986 ,1 +2987,42050 ,0 ,2987 ,1 +2988,17065 ,0 ,2988 ,1 +2989,86956 ,0 ,2989 ,1 +2990,50546 ,0 ,2990 ,1 +2991,40671 ,0 ,2991 ,1 +2992,67397 ,0 ,2992 ,1 +2993,20712 ,0 ,2993 ,1 +2994,40930 ,0 ,2994 ,1 +2995,28970 ,0 ,2995 ,1 +2996,53623 ,0 ,2996 ,1 +2997,15390 ,0 ,2997 ,1 +2998,32845 ,0 ,2998 ,1 +2999,59972 ,0 ,2999 ,1 +3000,23291 ,0 ,3000 ,1 +3001,19386 ,0 ,3001 ,1 +3002,69214 ,0 ,3002 ,1 +3003,24376 ,0 ,3003 ,1 +3004,16770 ,0 ,3004 ,1 +3005,70097 ,0 ,3005 ,1 +3006,28812 ,0 ,3006 ,1 +3007,34114 ,0 ,3007 ,1 +3008,22433 ,1 ,3008 ,1 +3009,82062 ,0 ,3009 ,1 +3010,48767 ,0 ,3010 ,1 +3011,45210 ,0 ,3011 ,1 +3012,51222 ,0 ,3012 ,1 +3013,36430 ,0 ,3013 ,1 +3014,42103 ,0 ,3014 ,1 +3015,43184 ,0 ,3015 ,1 +3016,64727 ,0 ,3016 ,1 +3017,66298 ,1 ,3017 ,1 +3018,47114 ,0 ,3018 ,1 +3019,34799 ,0 ,3019 ,1 +3020,20042 ,1 ,3020 ,1 +3021,61628 ,0 ,3021 ,1 +3022,45874 ,0 ,3022 ,1 +3023,63978 ,0 ,3023 ,1 +3024,61227 ,0 ,3024 ,1 +3025,21577 ,0 ,3025 ,1 +3026,34148 ,1 ,3026 ,1 +3027,17451 ,0 ,3027 ,1 +3028,67272 ,0 ,3028 ,1 +3029,42764 ,0 ,3029 ,1 +3030,44695 ,0 ,3030 ,1 +3031,20660 ,0 ,3031 ,1 +3032,83552 ,0 ,3032 ,1 +3033,62620 ,0 ,3033 ,1 +3034,52607 ,0 ,3034 ,1 +3035,42620 ,1 ,3035 ,1 +3036,51202 ,0 ,3036 ,1 +3037,85128 ,1 ,3037 ,1 +3038,64236 ,0 ,3038 ,1 +3039,47124 ,0 ,3039 ,1 +3040,34352 ,0 ,3040 ,1 +3041,85618 ,0 ,3041 ,1 +3042,52546 ,1 ,3042 ,1 +3043,52392 ,0 ,3043 ,1 +3044,67133 ,0 ,3044 ,1 +3045,66945 ,0 ,3045 ,1 +3046,48609 ,1 ,3046 ,1 +3047,18492 ,0 ,3047 ,1 +3048,80422 ,0 ,3048 ,1 +3049,64768 ,0 ,3049 ,1 +3050,82462 ,0 ,3050 ,1 +3051,52077 ,0 ,3051 ,1 +3052,70856 ,1 ,3052 ,1 +3053,12866 ,0 ,3053 ,1 +3054,42928 ,1 ,3054 ,1 +3055,64103 ,0 ,3055 ,1 +3056,40646 ,0 ,3056 ,1 +3057,37195 ,1 ,3057 ,1 +3058,82306 ,1 ,3058 ,1 +3059,13859 ,0 ,3059 ,1 +3060,27947 ,0 ,3060 ,1 +3061,31188 ,0 ,3061 ,1 +3062,57997 ,0 ,3062 ,1 +3063,56513 ,0 ,3063 ,1 +3064,77448 ,0 ,3064 ,1 +3065,73209 ,0 ,3065 ,1 +3066,84411 ,0 ,3066 ,1 +3067,83354 ,0 ,3067 ,1 +3068,19766 ,0 ,3068 ,1 +3069,76579 ,0 ,3069 ,1 +3070,54032 ,0 ,3070 ,1 +3071,56149 ,1 ,3071 ,1 +3072,42492 ,0 ,3072 ,1 +3073,69862 ,0 ,3073 ,1 +3074,30356 ,0 ,3074 ,1 +3075,78172 ,0 ,3075 ,1 +3076,42857 ,0 ,3076 ,1 +3077,37230 ,0 ,3077 ,1 +3078,17332 ,0 ,3078 ,1 +3079,49238 ,0 ,3079 ,1 +3080,76766 ,0 ,3080 ,1 +3081,75683 ,0 ,3081 ,1 +3082,19459 ,1 ,3082 ,1 +3083,35872 ,1 ,3083 ,1 +3084,51689 ,0 ,3084 ,1 +3085,41797 ,0 ,3085 ,1 +3086,58433 ,0 ,3086 ,1 +3087,23823 ,1 ,3087 ,1 +3088,21595 ,0 ,3088 ,1 +3089,20765 ,1 ,3089 ,1 +3090,43148 ,0 ,3090 ,1 +3091,34043 ,0 ,3091 ,1 +3092,66622 ,1 ,3092 ,1 +3093,24480 ,1 ,3093 ,1 +3094,73946 ,0 ,3094 ,1 +3095,74787 ,0 ,3095 ,1 +3096,42932 ,0 ,3096 ,1 +3097,15804 ,0 ,3097 ,1 +3098,80824 ,0 ,3098 ,1 +3099,75412 ,0 ,3099 ,1 +3100,16054 ,1 ,3100 ,1 +3101,86103 ,0 ,3101 ,1 +3102,12687 ,0 ,3102 ,1 +3103,88925 ,0 ,3103 ,1 +3104,50711 ,0 ,3104 ,1 +3105,56923 ,1 ,3105 ,1 +3106,33596 ,0 ,3106 ,1 +3107,60418 ,1 ,3107 ,1 +3108,36933 ,0 ,3108 ,1 +3109,87740 ,0 ,3109 ,1 +3110,82326 ,1 ,3110 ,1 +3111,25425 ,0 ,3111 ,1 +3112,48361 ,0 ,3112 ,1 +3113,32194 ,0 ,3113 ,1 +3114,30738 ,0 ,3114 ,1 +3115,89871 ,0 ,3115 ,1 +3116,20384 ,0 ,3116 ,1 +3117,21748 ,0 ,3117 ,1 +3118,39170 ,0 ,3118 ,1 +3119,32518 ,0 ,3119 ,1 +3120,65527 ,0 ,3120 ,1 +3121,13834 ,0 ,3121 ,1 +3122,61179 ,0 ,3122 ,1 +3123,75413 ,0 ,3123 ,1 +3124,68164 ,0 ,3124 ,1 +3125,78730 ,0 ,3125 ,1 +3126,34750 ,1 ,3126 ,1 +3127,32709 ,0 ,3127 ,1 +3128,49218 ,1 ,3128 ,1 +3129,65201 ,0 ,3129 ,1 +3130,56976 ,0 ,3130 ,1 +3131,81870 ,0 ,3131 ,1 +3132,19446 ,0 ,3132 ,1 +3133,22402 ,0 ,3133 ,1 +3134,47867 ,0 ,3134 ,1 +3135,87802 ,1 ,3135 ,1 +3136,18194 ,0 ,3136 ,1 +3137,70953 ,0 ,3137 ,1 +3138,41848 ,0 ,3138 ,1 +3139,85075 ,0 ,3139 ,1 +3140,43934 ,0 ,3140 ,1 +3141,61217 ,0 ,3141 ,1 +3142,43066 ,0 ,3142 ,1 +3143,36217 ,0 ,3143 ,1 +3144,56357 ,0 ,3144 ,1 +3145,29958 ,0 ,3145 ,1 +3146,57603 ,0 ,3146 ,1 +3147,32583 ,0 ,3147 ,1 +3148,59667 ,0 ,3148 ,1 +3149,73350 ,0 ,3149 ,1 +3150,52876 ,0 ,3150 ,1 +3151,52879 ,0 ,3151 ,1 +3152,76759 ,0 ,3152 ,1 +3153,58174 ,0 ,3153 ,1 +3154,11403 ,0 ,3154 ,1 +3155,27733 ,0 ,3155 ,1 +3156,60505 ,0 ,3156 ,1 +3157,42036 ,0 ,3157 ,1 +3158,84718 ,0 ,3158 ,1 +3159,65599 ,0 ,3159 ,1 +3160,66838 ,0 ,3160 ,1 +3161,45799 ,0 ,3161 ,1 +3162,12626 ,0 ,3162 ,1 +3163,20657 ,0 ,3163 ,1 +3164,17316 ,0 ,3164 ,1 +3165,26775 ,0 ,3165 ,1 +3166,49978 ,0 ,3166 ,1 +3167,77777 ,0 ,3167 ,1 +3168,46348 ,0 ,3168 ,1 +3169,42074 ,0 ,3169 ,1 +3170,48435 ,0 ,3170 ,1 +3171,35626 ,0 ,3171 ,1 +3172,48339 ,0 ,3172 ,1 +3173,79588 ,0 ,3173 ,1 +3174,58136 ,0 ,3174 ,1 +3175,35850 ,0 ,3175 ,1 +3176,17162 ,0 ,3176 ,1 +3177,21787 ,1 ,3177 ,1 +3178,15971 ,0 ,3178 ,1 +3179,72976 ,0 ,3179 ,1 +3180,13518 ,0 ,3180 ,1 +3181,28633 ,0 ,3181 ,1 +3182,40205 ,0 ,3182 ,1 +3183,41636 ,0 ,3183 ,1 +3184,78680 ,0 ,3184 ,1 +3185,42504 ,1 ,3185 ,1 +3186,89080 ,0 ,3186 ,1 +3187,50396 ,1 ,3187 ,1 +3188,80911 ,0 ,3188 ,1 +3189,48860 ,0 ,3189 ,1 +3190,24212 ,0 ,3190 ,1 +3191,20626 ,1 ,3191 ,1 +3192,29871 ,0 ,3192 ,1 +3193,57465 ,0 ,3193 ,1 +3194,54521 ,1 ,3194 ,1 +3195,15196 ,1 ,3195 ,1 +3196,20547 ,0 ,3196 ,1 +3197,28456 ,0 ,3197 ,1 +3198,66050 ,0 ,3198 ,1 +3199,11924 ,0 ,3199 ,1 +3200,67509 ,0 ,3200 ,1 +3201,10690 ,0 ,3201 ,1 +3202,84319 ,0 ,3202 ,1 +3203,24616 ,0 ,3203 ,1 +3204,41911 ,0 ,3204 ,1 +3205,20618 ,1 ,3205 ,1 +3206,75072 ,1 ,3206 ,1 +3207,59220 ,0 ,3207 ,1 +3208,76028 ,0 ,3208 ,1 +3209,17982 ,0 ,3209 ,1 +3210,38037 ,0 ,3210 ,1 +3211,61780 ,1 ,3211 ,1 +3212,43916 ,0 ,3212 ,1 +3213,39803 ,1 ,3213 ,1 +3214,15519 ,1 ,3214 ,1 +3215,11248 ,0 ,3215 ,1 +3216,42006 ,0 ,3216 ,1 +3217,39221 ,0 ,3217 ,1 +3218,15621 ,0 ,3218 ,1 +3219,75920 ,0 ,3219 ,1 +3220,82626 ,0 ,3220 ,1 +3221,18722 ,0 ,3221 ,1 +3222,69445 ,0 ,3222 ,1 +3223,67975 ,0 ,3223 ,1 +3224,23338 ,0 ,3224 ,1 +3225,24453 ,0 ,3225 ,1 +3226,17296 ,0 ,3226 ,1 +3227,26556 ,1 ,3227 ,1 +3228,25137 ,1 ,3228 ,1 +3229,31118 ,1 ,3229 ,1 +3230,43287 ,0 ,3230 ,1 +3231,45160 ,0 ,3231 ,1 +3232,80653 ,0 ,3232 ,1 +3233,52989 ,0 ,3233 ,1 +3234,30968 ,0 ,3234 ,1 +3235,82643 ,0 ,3235 ,1 +3236,64980 ,0 ,3236 ,1 +3237,55440 ,0 ,3237 ,1 +3238,26414 ,0 ,3238 ,1 +3239,64401 ,0 ,3239 ,1 +3240,84826 ,0 ,3240 ,1 +3241,33065 ,0 ,3241 ,1 +3242,58900 ,1 ,3242 ,1 +3243,31326 ,0 ,3243 ,1 +3244,16069 ,0 ,3244 ,1 +3245,77220 ,0 ,3245 ,1 +3246,75770 ,0 ,3246 ,1 +3247,82265 ,0 ,3247 ,1 +3248,50728 ,0 ,3248 ,1 +3249,35096 ,0 ,3249 ,1 +3250,17634 ,0 ,3250 ,1 +3251,60436 ,1 ,3251 ,1 +3252,25165 ,0 ,3252 ,1 +3253,71226 ,0 ,3253 ,1 +3254,56842 ,0 ,3254 ,1 +3255,74611 ,1 ,3255 ,1 +3256,76349 ,0 ,3256 ,1 +3257,51875 ,0 ,3257 ,1 +3258,54576 ,0 ,3258 ,1 +3259,73671 ,0 ,3259 ,1 +3260,64649 ,0 ,3260 ,1 +3261,83813 ,0 ,3261 ,1 +3262,23614 ,0 ,3262 ,1 +3263,41216 ,1 ,3263 ,1 +3264,19150 ,0 ,3264 ,1 +3265,44818 ,0 ,3265 ,1 +3266,50899 ,0 ,3266 ,1 +3267,78203 ,0 ,3267 ,1 +3268,26761 ,1 ,3268 ,1 +3269,16933 ,0 ,3269 ,1 +3270,26882 ,1 ,3270 ,1 +3271,65847 ,0 ,3271 ,1 +3272,52196 ,0 ,3272 ,1 +3273,55822 ,0 ,3273 ,1 +3274,41801 ,0 ,3274 ,1 +3275,55937 ,0 ,3275 ,1 +3276,33274 ,0 ,3276 ,1 +3277,26889 ,0 ,3277 ,1 +3278,51972 ,1 ,3278 ,1 +3279,11683 ,0 ,3279 ,1 +3280,81280 ,0 ,3280 ,1 +3281,43869 ,0 ,3281 ,1 +3282,39187 ,0 ,3282 ,1 +3283,31093 ,1 ,3283 ,1 +3284,88865 ,1 ,3284 ,1 +3285,18938 ,1 ,3285 ,1 +3286,39469 ,0 ,3286 ,1 +3287,69332 ,0 ,3287 ,1 +3288,48247 ,0 ,3288 ,1 +3289,44590 ,0 ,3289 ,1 +3290,81729 ,0 ,3290 ,1 +3291,34503 ,0 ,3291 ,1 +3292,54164 ,0 ,3292 ,1 +3293,20168 ,0 ,3293 ,1 +3294,76481 ,0 ,3294 ,1 +3295,84976 ,0 ,3295 ,1 +3296,50387 ,0 ,3296 ,1 +3297,41898 ,0 ,3297 ,1 +3298,24355 ,0 ,3298 ,1 +3299,16708 ,0 ,3299 ,1 +3300,13531 ,1 ,3300 ,1 +3301,87070 ,1 ,3301 ,1 +3302,84312 ,0 ,3302 ,1 +3303,72444 ,0 ,3303 ,1 +3304,56337 ,0 ,3304 ,1 +3305,59402 ,0 ,3305 ,1 +3306,33637 ,0 ,3306 ,1 +3307,35026 ,0 ,3307 ,1 +3308,49162 ,0 ,3308 ,1 +3309,89006 ,0 ,3309 ,1 +3310,58455 ,0 ,3310 ,1 +3311,83864 ,0 ,3311 ,1 +3312,46514 ,0 ,3312 ,1 +3313,41014 ,0 ,3313 ,1 +3314,21590 ,0 ,3314 ,1 +3315,53370 ,0 ,3315 ,1 +3316,24971 ,0 ,3316 ,1 +3317,61442 ,1 ,3317 ,1 +3318,38162 ,1 ,3318 ,1 +3319,37078 ,0 ,3319 ,1 +3320,25480 ,0 ,3320 ,1 +3321,60253 ,0 ,3321 ,1 +3322,83835 ,0 ,3322 ,1 +3323,89607 ,0 ,3323 ,1 +3324,20286 ,0 ,3324 ,1 +3325,78543 ,0 ,3325 ,1 +3326,24963 ,0 ,3326 ,1 +3327,19250 ,0 ,3327 ,1 +3328,75741 ,0 ,3328 ,1 +3329,84763 ,0 ,3329 ,1 +3330,22680 ,1 ,3330 ,1 +3331,46626 ,0 ,3331 ,1 +3332,21451 ,1 ,3332 ,1 +3333,40280 ,0 ,3333 ,1 +3334,50824 ,0 ,3334 ,1 +3335,55475 ,0 ,3335 ,1 +3336,15412 ,0 ,3336 ,1 +3337,70849 ,0 ,3337 ,1 +3338,30309 ,0 ,3338 ,1 +3339,54048 ,0 ,3339 ,1 +3340,68930 ,0 ,3340 ,1 +3341,37381 ,0 ,3341 ,1 +3342,12684 ,0 ,3342 ,1 +3343,14799 ,0 ,3343 ,1 +3344,41529 ,0 ,3344 ,1 +3345,20440 ,1 ,3345 ,1 +3346,55802 ,0 ,3346 ,1 +3347,76010 ,0 ,3347 ,1 +3348,25709 ,0 ,3348 ,1 +3349,39513 ,0 ,3349 ,1 +3350,54956 ,0 ,3350 ,1 +3351,75829 ,0 ,3351 ,1 +3352,31392 ,0 ,3352 ,1 +3353,30930 ,0 ,3353 ,1 +3354,51606 ,0 ,3354 ,1 +3355,22743 ,0 ,3355 ,1 +3356,42948 ,0 ,3356 ,1 +3357,21293 ,0 ,3357 ,1 +3358,47000 ,0 ,3358 ,1 +3359,56267 ,0 ,3359 ,1 +3360,36940 ,0 ,3360 ,1 +3361,87816 ,0 ,3361 ,1 +3362,22882 ,0 ,3362 ,1 +3363,76950 ,1 ,3363 ,1 +3364,42430 ,1 ,3364 ,1 +3365,80277 ,0 ,3365 ,1 +3366,55853 ,0 ,3366 ,1 +3367,26238 ,0 ,3367 ,1 +3368,75694 ,0 ,3368 ,1 +3369,37705 ,0 ,3369 ,1 +3370,60133 ,0 ,3370 ,1 +3371,48476 ,0 ,3371 ,1 +3372,60189 ,0 ,3372 ,1 +3373,74782 ,0 ,3373 ,1 +3374,73989 ,0 ,3374 ,1 +3375,62554 ,0 ,3375 ,1 +3376,28146 ,0 ,3376 ,1 +3377,83084 ,0 ,3377 ,1 +3378,18550 ,0 ,3378 ,1 +3379,71210 ,0 ,3379 ,1 +3380,88841 ,0 ,3380 ,1 +3381,75848 ,0 ,3381 ,1 +3382,61326 ,1 ,3382 ,1 +3383,17546 ,0 ,3383 ,1 +3384,70205 ,0 ,3384 ,1 +3385,12322 ,0 ,3385 ,1 +3386,37313 ,0 ,3386 ,1 +3387,84358 ,0 ,3387 ,1 +3388,13272 ,0 ,3388 ,1 +3389,87729 ,0 ,3389 ,1 +3390,21445 ,0 ,3390 ,1 +3391,87579 ,0 ,3391 ,1 +3392,69718 ,0 ,3392 ,1 +3393,71341 ,0 ,3393 ,1 +3394,60664 ,0 ,3394 ,1 +3395,74240 ,0 ,3395 ,1 +3396,87645 ,0 ,3396 ,1 +3397,50282 ,0 ,3397 ,1 +3398,51188 ,1 ,3398 ,1 +3399,58319 ,0 ,3399 ,1 +3400,30889 ,0 ,3400 ,1 +3401,59250 ,0 ,3401 ,1 +3402,66487 ,0 ,3402 ,1 +3403,87019 ,1 ,3403 ,1 +3404,30499 ,0 ,3404 ,1 +3405,61552 ,0 ,3405 ,1 +3406,38134 ,1 ,3406 ,1 +3407,86868 ,0 ,3407 ,1 +3408,22053 ,0 ,3408 ,1 +3409,33258 ,0 ,3409 ,1 +3410,55539 ,0 ,3410 ,1 +3411,25538 ,0 ,3411 ,1 +3412,86818 ,0 ,3412 ,1 +3413,14126 ,0 ,3413 ,1 +3414,64352 ,1 ,3414 ,1 +3415,66788 ,0 ,3415 ,1 +3416,87532 ,0 ,3416 ,1 +3417,85927 ,0 ,3417 ,1 +3418,10634 ,1 ,3418 ,1 +3419,29518 ,0 ,3419 ,1 +3420,73982 ,0 ,3420 ,1 +3421,49485 ,0 ,3421 ,1 +3422,74514 ,0 ,3422 ,1 +3423,86206 ,0 ,3423 ,1 +3424,29313 ,0 ,3424 ,1 +3425,66852 ,0 ,3425 ,1 +3426,52643 ,0 ,3426 ,1 +3427,26133 ,1 ,3427 ,1 +3428,55298 ,0 ,3428 ,1 +3429,24184 ,0 ,3429 ,1 +3430,23449 ,0 ,3430 ,1 +3431,85546 ,0 ,3431 ,1 +3432,80313 ,0 ,3432 ,1 +3433,87356 ,0 ,3433 ,1 +3434,32630 ,0 ,3434 ,1 +3435,10153 ,0 ,3435 ,1 +3436,56344 ,0 ,3436 ,1 +3437,56715 ,0 ,3437 ,1 +3438,21355 ,0 ,3438 ,1 +3439,14153 ,0 ,3439 ,1 +3440,29423 ,0 ,3440 ,1 +3441,38648 ,0 ,3441 ,1 +3442,81690 ,0 ,3442 ,1 +3443,73994 ,0 ,3443 ,1 +3444,20575 ,0 ,3444 ,1 +3445,60536 ,0 ,3445 ,1 +3446,11787 ,0 ,3446 ,1 +3447,11016 ,0 ,3447 ,1 +3448,51634 ,0 ,3448 ,1 +3449,49261 ,0 ,3449 ,1 +3450,51680 ,0 ,3450 ,1 +3451,88014 ,0 ,3451 ,1 +3452,80820 ,0 ,3452 ,1 +3453,76090 ,0 ,3453 ,1 +3454,30860 ,0 ,3454 ,1 +3455,28547 ,0 ,3455 ,1 +3456,31873 ,0 ,3456 ,1 +3457,22852 ,0 ,3457 ,1 +3458,40474 ,0 ,3458 ,1 +3459,49119 ,0 ,3459 ,1 +3460,78498 ,0 ,3460 ,1 +3461,88801 ,0 ,3461 ,1 +3462,39446 ,0 ,3462 ,1 +3463,56472 ,0 ,3463 ,1 +3464,36092 ,0 ,3464 ,1 +3465,79995 ,0 ,3465 ,1 +3466,64756 ,0 ,3466 ,1 +3467,26671 ,0 ,3467 ,1 +3468,64262 ,1 ,3468 ,1 +3469,45724 ,0 ,3469 ,1 +3470,27066 ,0 ,3470 ,1 +3471,21995 ,1 ,3471 ,1 +3472,39463 ,1 ,3472 ,1 +3473,80660 ,0 ,3473 ,1 +3474,59822 ,0 ,3474 ,1 +3475,55499 ,0 ,3475 ,1 +3476,64467 ,0 ,3476 ,1 +3477,69921 ,0 ,3477 ,1 +3478,12681 ,0 ,3478 ,1 +3479,69610 ,0 ,3479 ,1 +3480,30637 ,0 ,3480 ,1 +3481,37851 ,0 ,3481 ,1 +3482,24405 ,0 ,3482 ,1 +3483,57339 ,0 ,3483 ,1 +3484,86470 ,0 ,3484 ,1 +3485,65120 ,1 ,3485 ,1 +3486,66188 ,0 ,3486 ,1 +3487,67082 ,0 ,3487 ,1 +3488,42778 ,1 ,3488 ,1 +3489,35512 ,0 ,3489 ,1 +3490,69639 ,0 ,3490 ,1 +3491,18850 ,0 ,3491 ,1 +3492,59417 ,0 ,3492 ,1 +3493,38035 ,0 ,3493 ,1 +3494,25886 ,0 ,3494 ,1 +3495,88455 ,0 ,3495 ,1 +3496,76445 ,0 ,3496 ,1 +3497,87975 ,1 ,3497 ,1 +3498,33895 ,0 ,3498 ,1 +3499,30038 ,0 ,3499 ,1 +3500,54740 ,0 ,3500 ,1 +3501,11514 ,0 ,3501 ,1 +3502,73975 ,0 ,3502 ,1 +3503,25734 ,0 ,3503 ,1 +3504,17362 ,0 ,3504 ,1 +3505,26262 ,0 ,3505 ,1 +3506,62605 ,0 ,3506 ,1 +3507,29632 ,1 ,3507 ,1 +3508,88764 ,0 ,3508 ,1 +3509,21632 ,0 ,3509 ,1 +3510,35272 ,0 ,3510 ,1 +3511,80608 ,1 ,3511 ,1 +3512,55210 ,0 ,3512 ,1 +3513,64012 ,0 ,3513 ,1 +3514,54633 ,0 ,3514 ,1 +3515,86353 ,0 ,3515 ,1 +3516,25751 ,1 ,3516 ,1 +3517,38919 ,0 ,3517 ,1 +3518,36853 ,0 ,3518 ,1 +3519,26666 ,0 ,3519 ,1 +3520,64267 ,1 ,3520 ,1 +3521,72293 ,0 ,3521 ,1 +3522,37794 ,0 ,3522 ,1 +3523,59856 ,1 ,3523 ,1 +3524,80894 ,0 ,3524 ,1 +3525,32938 ,0 ,3525 ,1 +3526,29167 ,0 ,3526 ,1 +3527,42261 ,0 ,3527 ,1 +3528,17260 ,0 ,3528 ,1 +3529,85532 ,0 ,3529 ,1 +3530,51093 ,0 ,3530 ,1 +3531,41708 ,1 ,3531 ,1 +3532,64249 ,0 ,3532 ,1 +3533,65478 ,0 ,3533 ,1 +3534,24391 ,0 ,3534 ,1 +3535,23135 ,0 ,3535 ,1 +3536,25788 ,0 ,3536 ,1 +3537,76901 ,0 ,3537 ,1 +3538,83076 ,1 ,3538 ,1 +3539,42440 ,1 ,3539 ,1 +3540,40725 ,0 ,3540 ,1 +3541,20726 ,0 ,3541 ,1 +3542,10424 ,0 ,3542 ,1 +3543,50643 ,1 ,3543 ,1 +3544,68793 ,0 ,3544 ,1 +3545,57999 ,0 ,3545 ,1 +3546,31235 ,0 ,3546 ,1 +3547,11777 ,0 ,3547 ,1 +3548,50948 ,0 ,3548 ,1 +3549,80758 ,0 ,3549 ,1 +3550,21596 ,0 ,3550 ,1 +3551,45490 ,1 ,3551 ,1 +3552,71803 ,0 ,3552 ,1 +3553,35453 ,0 ,3553 ,1 +3554,67951 ,0 ,3554 ,1 +3555,20494 ,0 ,3555 ,1 +3556,48311 ,1 ,3556 ,1 +3557,52068 ,0 ,3557 ,1 +3558,59975 ,0 ,3558 ,1 +3559,53925 ,0 ,3559 ,1 +3560,57171 ,0 ,3560 ,1 +3561,52956 ,0 ,3561 ,1 +3562,26656 ,0 ,3562 ,1 +3563,26299 ,0 ,3563 ,1 +3564,11748 ,0 ,3564 ,1 +3565,25187 ,0 ,3565 ,1 +3566,43511 ,0 ,3566 ,1 +3567,61208 ,0 ,3567 ,1 +3568,41917 ,0 ,3568 ,1 +3569,68295 ,0 ,3569 ,1 +3570,13994 ,1 ,3570 ,1 +3571,36545 ,0 ,3571 ,1 +3572,41401 ,0 ,3572 ,1 +3573,12970 ,0 ,3573 ,1 +3574,59794 ,0 ,3574 ,1 +3575,24168 ,0 ,3575 ,1 +3576,33350 ,0 ,3576 ,1 +3577,53962 ,0 ,3577 ,1 +3578,69743 ,1 ,3578 ,1 +3579,53879 ,0 ,3579 ,1 +3580,53058 ,0 ,3580 ,1 +3581,88022 ,0 ,3581 ,1 +3582,37578 ,0 ,3582 ,1 +3583,49826 ,0 ,3583 ,1 +3584,74422 ,0 ,3584 ,1 +3585,35373 ,1 ,3585 ,1 +3586,53487 ,0 ,3586 ,1 +3587,70994 ,1 ,3587 ,1 +3588,69394 ,0 ,3588 ,1 +3589,11427 ,0 ,3589 ,1 +3590,34303 ,0 ,3590 ,1 +3591,37539 ,0 ,3591 ,1 +3592,51194 ,0 ,3592 ,1 +3593,42562 ,0 ,3593 ,1 +3594,36978 ,0 ,3594 ,1 +3595,50846 ,0 ,3595 ,1 +3596,69649 ,0 ,3596 ,1 +3597,87004 ,0 ,3597 ,1 +3598,37835 ,0 ,3598 ,1 +3599,42181 ,0 ,3599 ,1 +3600,19078 ,0 ,3600 ,1 +3601,17778 ,0 ,3601 ,1 +3602,56649 ,0 ,3602 ,1 +3603,89155 ,1 ,3603 ,1 +3604,81817 ,0 ,3604 ,1 +3605,78041 ,0 ,3605 ,1 +3606,37701 ,1 ,3606 ,1 +3607,60690 ,0 ,3607 ,1 +3608,77544 ,0 ,3608 ,1 +3609,69645 ,0 ,3609 ,1 +3610,89078 ,0 ,3610 ,1 +3611,66666 ,0 ,3611 ,1 +3612,43493 ,1 ,3612 ,1 +3613,33417 ,0 ,3613 ,1 +3614,39978 ,0 ,3614 ,1 +3615,13541 ,0 ,3615 ,1 +3616,34645 ,0 ,3616 ,1 +3617,49493 ,0 ,3617 ,1 +3618,14983 ,0 ,3618 ,1 +3619,40426 ,0 ,3619 ,1 +3620,77966 ,1 ,3620 ,1 +3621,75290 ,0 ,3621 ,1 +3622,78035 ,0 ,3622 ,1 +3623,89070 ,1 ,3623 ,1 +3624,26528 ,0 ,3624 ,1 +3625,68294 ,0 ,3625 ,1 +3626,32698 ,0 ,3626 ,1 +3627,25995 ,0 ,3627 ,1 +3628,81450 ,0 ,3628 ,1 +3629,78230 ,0 ,3629 ,1 +3630,77407 ,0 ,3630 ,1 +3631,27392 ,0 ,3631 ,1 +3632,39723 ,0 ,3632 ,1 +3633,47049 ,1 ,3633 ,1 +3634,41953 ,0 ,3634 ,1 +3635,30377 ,0 ,3635 ,1 +3636,34703 ,0 ,3636 ,1 +3637,10324 ,0 ,3637 ,1 +3638,55252 ,0 ,3638 ,1 +3639,37545 ,1 ,3639 ,1 +3640,17645 ,1 ,3640 ,1 +3641,85648 ,0 ,3641 ,1 +3642,38658 ,0 ,3642 ,1 +3643,52271 ,1 ,3643 ,1 +3644,67439 ,0 ,3644 ,1 +3645,45277 ,0 ,3645 ,1 +3646,17604 ,0 ,3646 ,1 +3647,57044 ,0 ,3647 ,1 +3648,43440 ,0 ,3648 ,1 +3649,33010 ,0 ,3649 ,1 +3650,15152 ,0 ,3650 ,1 +3651,18647 ,0 ,3651 ,1 +3652,25872 ,0 ,3652 ,1 +3653,49568 ,0 ,3653 ,1 +3654,17988 ,1 ,3654 ,1 +3655,38209 ,0 ,3655 ,1 +3656,63389 ,0 ,3656 ,1 +3657,37465 ,0 ,3657 ,1 +3658,74892 ,0 ,3658 ,1 +3659,22717 ,0 ,3659 ,1 +3660,56793 ,1 ,3660 ,1 +3661,13552 ,0 ,3661 ,1 +3662,20638 ,0 ,3662 ,1 +3663,22534 ,0 ,3663 ,1 +3664,78212 ,0 ,3664 ,1 +3665,29792 ,1 ,3665 ,1 +3666,80518 ,0 ,3666 ,1 +3667,71678 ,0 ,3667 ,1 +3668,23595 ,0 ,3668 ,1 +3669,43275 ,1 ,3669 ,1 +3670,39661 ,0 ,3670 ,1 +3671,36398 ,0 ,3671 ,1 +3672,47643 ,1 ,3672 ,1 +3673,87284 ,0 ,3673 ,1 +3674,12856 ,0 ,3674 ,1 +3675,83429 ,0 ,3675 ,1 +3676,37563 ,0 ,3676 ,1 +3677,32270 ,0 ,3677 ,1 +3678,33793 ,0 ,3678 ,1 +3679,30129 ,0 ,3679 ,1 +3680,82177 ,0 ,3680 ,1 +3681,47472 ,0 ,3681 ,1 +3682,70396 ,0 ,3682 ,1 +3683,62579 ,0 ,3683 ,1 +3684,83658 ,0 ,3684 ,1 +3685,32754 ,1 ,3685 ,1 +3686,45627 ,0 ,3686 ,1 +3687,74666 ,1 ,3687 ,1 +3688,67360 ,0 ,3688 ,1 +3689,85360 ,0 ,3689 ,1 +3690,53134 ,1 ,3690 ,1 +3691,36165 ,0 ,3691 ,1 +3692,81126 ,0 ,3692 ,1 +3693,36494 ,1 ,3693 ,1 +3694,89704 ,1 ,3694 ,1 +3695,23340 ,0 ,3695 ,1 +3696,70705 ,1 ,3696 ,1 +3697,42863 ,0 ,3697 ,1 +3698,32812 ,0 ,3698 ,1 +3699,52609 ,0 ,3699 ,1 +3700,32942 ,0 ,3700 ,1 +3701,61323 ,0 ,3701 ,1 +3702,15397 ,0 ,3702 ,1 +3703,57532 ,0 ,3703 ,1 +3704,11720 ,0 ,3704 ,1 +3705,59761 ,0 ,3705 ,1 +3706,23671 ,0 ,3706 ,1 +3707,30585 ,0 ,3707 ,1 +3708,59890 ,0 ,3708 ,1 +3709,65841 ,0 ,3709 ,1 +3710,88506 ,0 ,3710 ,1 +3711,83979 ,1 ,3711 ,1 +3712,34111 ,0 ,3712 ,1 +3713,31474 ,0 ,3713 ,1 +3714,59667 ,1 ,3714 ,1 +3715,84174 ,0 ,3715 ,1 +3716,38115 ,0 ,3716 ,1 +3717,45004 ,0 ,3717 ,1 +3718,38414 ,0 ,3718 ,1 +3719,14357 ,0 ,3719 ,1 +3720,35926 ,0 ,3720 ,1 +3721,69736 ,0 ,3721 ,1 +3722,80012 ,0 ,3722 ,1 +3723,81243 ,0 ,3723 ,1 +3724,24147 ,0 ,3724 ,1 +3725,66562 ,0 ,3725 ,1 +3726,46065 ,1 ,3726 ,1 +3727,65381 ,0 ,3727 ,1 +3728,89131 ,0 ,3728 ,1 +3729,38105 ,0 ,3729 ,1 +3730,27695 ,0 ,3730 ,1 +3731,49317 ,0 ,3731 ,1 +3732,16886 ,0 ,3732 ,1 +3733,20903 ,1 ,3733 ,1 +3734,84236 ,0 ,3734 ,1 +3735,11811 ,1 ,3735 ,1 +3736,78293 ,0 ,3736 ,1 +3737,74777 ,0 ,3737 ,1 +3738,22905 ,0 ,3738 ,1 +3739,61500 ,0 ,3739 ,1 +3740,28471 ,0 ,3740 ,1 +3741,44516 ,0 ,3741 ,1 +3742,77998 ,0 ,3742 ,1 +3743,30386 ,0 ,3743 ,1 +3744,87072 ,0 ,3744 ,1 +3745,11069 ,0 ,3745 ,1 +3746,27285 ,0 ,3746 ,1 +3747,82803 ,1 ,3747 ,1 +3748,18967 ,1 ,3748 ,1 +3749,66784 ,0 ,3749 ,1 +3750,49159 ,0 ,3750 ,1 +3751,36211 ,0 ,3751 ,1 +3752,21910 ,0 ,3752 ,1 +3753,48369 ,0 ,3753 ,1 +3754,12717 ,0 ,3754 ,1 +3755,44968 ,0 ,3755 ,1 +3756,55582 ,0 ,3756 ,1 +3757,61717 ,0 ,3757 ,1 +3758,75835 ,1 ,3758 ,1 +3759,18537 ,0 ,3759 ,1 +3760,18781 ,0 ,3760 ,1 +3761,36134 ,1 ,3761 ,1 +3762,43306 ,0 ,3762 ,1 +3763,27896 ,1 ,3763 ,1 +3764,87309 ,0 ,3764 ,1 +3765,52516 ,1 ,3765 ,1 +3766,50013 ,1 ,3766 ,1 +3767,56856 ,0 ,3767 ,1 +3768,20620 ,1 ,3768 ,1 +3769,29201 ,0 ,3769 ,1 +3770,43907 ,1 ,3770 ,1 +3771,53767 ,0 ,3771 ,1 +3772,12315 ,1 ,3772 ,1 +3773,52034 ,0 ,3773 ,1 +3774,83155 ,0 ,3774 ,1 +3775,34937 ,0 ,3775 ,1 +3776,12987 ,1 ,3776 ,1 +3777,53495 ,0 ,3777 ,1 +3778,79560 ,0 ,3778 ,1 +3779,35606 ,1 ,3779 ,1 +3780,12581 ,0 ,3780 ,1 +3781,65459 ,0 ,3781 ,1 +3782,27066 ,0 ,3782 ,1 +3783,52267 ,0 ,3783 ,1 +3784,25722 ,0 ,3784 ,1 +3785,79599 ,0 ,3785 ,1 +3786,60012 ,0 ,3786 ,1 +3787,60307 ,0 ,3787 ,1 +3788,71887 ,0 ,3788 ,1 +3789,17909 ,0 ,3789 ,1 +3790,10018 ,0 ,3790 ,1 +3791,20017 ,0 ,3791 ,1 +3792,10721 ,0 ,3792 ,1 +3793,10942 ,1 ,3793 ,1 +3794,75345 ,0 ,3794 ,1 +3795,76762 ,0 ,3795 ,1 +3796,45405 ,0 ,3796 ,1 +3797,39290 ,0 ,3797 ,1 +3798,63442 ,0 ,3798 ,1 +3799,14541 ,1 ,3799 ,1 +3800,10835 ,0 ,3800 ,1 +3801,19225 ,0 ,3801 ,1 +3802,20199 ,0 ,3802 ,1 +3803,59174 ,0 ,3803 ,1 +3804,66938 ,1 ,3804 ,1 +3805,29159 ,1 ,3805 ,1 +3806,37609 ,0 ,3806 ,1 +3807,20016 ,0 ,3807 ,1 +3808,72302 ,0 ,3808 ,1 +3809,10201 ,0 ,3809 ,1 +3810,70580 ,0 ,3810 ,1 +3811,19777 ,1 ,3811 ,1 +3812,16806 ,0 ,3812 ,1 +3813,38427 ,0 ,3813 ,1 +3814,75314 ,0 ,3814 ,1 +3815,46287 ,0 ,3815 ,1 +3816,43772 ,0 ,3816 ,1 +3817,52839 ,0 ,3817 ,1 +3818,80706 ,0 ,3818 ,1 +3819,44809 ,1 ,3819 ,1 +3820,32509 ,0 ,3820 ,1 +3821,59471 ,0 ,3821 ,1 +3822,18560 ,1 ,3822 ,1 +3823,43969 ,0 ,3823 ,1 +3824,28946 ,1 ,3824 ,1 +3825,76711 ,0 ,3825 ,1 +3826,72553 ,0 ,3826 ,1 +3827,21520 ,1 ,3827 ,1 +3828,58259 ,0 ,3828 ,1 +3829,65166 ,0 ,3829 ,1 +3830,85032 ,0 ,3830 ,1 +3831,79683 ,1 ,3831 ,1 +3832,11297 ,0 ,3832 ,1 +3833,68107 ,0 ,3833 ,1 +3834,63214 ,0 ,3834 ,1 +3835,73955 ,0 ,3835 ,1 +3836,32990 ,0 ,3836 ,1 +3837,44412 ,1 ,3837 ,1 +3838,83130 ,0 ,3838 ,1 +3839,12342 ,0 ,3839 ,1 +3840,47772 ,0 ,3840 ,1 +3841,36517 ,0 ,3841 ,1 +3842,44490 ,1 ,3842 ,1 +3843,31170 ,0 ,3843 ,1 +3844,25630 ,1 ,3844 ,1 +3845,32713 ,0 ,3845 ,1 +3846,31664 ,0 ,3846 ,1 +3847,59308 ,0 ,3847 ,1 +3848,66417 ,0 ,3848 ,1 +3849,22246 ,0 ,3849 ,1 +3850,16116 ,0 ,3850 ,1 +3851,19196 ,0 ,3851 ,1 +3852,89616 ,0 ,3852 ,1 +3853,28479 ,0 ,3853 ,1 +3854,11174 ,0 ,3854 ,1 +3855,83722 ,0 ,3855 ,1 +3856,42751 ,0 ,3856 ,1 +3857,32356 ,0 ,3857 ,1 +3858,43510 ,0 ,3858 ,1 +3859,20286 ,1 ,3859 ,1 +3860,19773 ,1 ,3860 ,1 +3861,24385 ,1 ,3861 ,1 +3862,82479 ,0 ,3862 ,1 +3863,51799 ,0 ,3863 ,1 +3864,27593 ,0 ,3864 ,1 +3865,72486 ,0 ,3865 ,1 +3866,56261 ,1 ,3866 ,1 +3867,42844 ,0 ,3867 ,1 +3868,76004 ,0 ,3868 ,1 +3869,59994 ,0 ,3869 ,1 +3870,34538 ,0 ,3870 ,1 +3871,59618 ,1 ,3871 ,1 +3872,83563 ,1 ,3872 ,1 +3873,50201 ,0 ,3873 ,1 +3874,35523 ,0 ,3874 ,1 +3875,61494 ,1 ,3875 ,1 +3876,39027 ,0 ,3876 ,1 +3877,14984 ,0 ,3877 ,1 +3878,34267 ,0 ,3878 ,1 +3879,35421 ,0 ,3879 ,1 +3880,87679 ,0 ,3880 ,1 +3881,73335 ,1 ,3881 ,1 +3882,46446 ,1 ,3882 ,1 +3883,29072 ,0 ,3883 ,1 +3884,40916 ,0 ,3884 ,1 +3885,24350 ,0 ,3885 ,1 +3886,45899 ,0 ,3886 ,1 +3887,85409 ,0 ,3887 ,1 +3888,11329 ,1 ,3888 ,1 +3889,16437 ,0 ,3889 ,1 +3890,43492 ,0 ,3890 ,1 +3891,21900 ,0 ,3891 ,1 +3892,17342 ,0 ,3892 ,1 +3893,10546 ,1 ,3893 ,1 +3894,66893 ,0 ,3894 ,1 +3895,20246 ,0 ,3895 ,1 +3896,64268 ,0 ,3896 ,1 +3897,19039 ,0 ,3897 ,1 +3898,51577 ,0 ,3898 ,1 +3899,63422 ,0 ,3899 ,1 +3900,87175 ,0 ,3900 ,1 +3901,81651 ,0 ,3901 ,1 +3902,12401 ,0 ,3902 ,1 +3903,21001 ,0 ,3903 ,1 +3904,55592 ,0 ,3904 ,1 +3905,30952 ,0 ,3905 ,1 +3906,63668 ,0 ,3906 ,1 +3907,87866 ,0 ,3907 ,1 +3908,10871 ,1 ,3908 ,1 +3909,41483 ,0 ,3909 ,1 +3910,81358 ,0 ,3910 ,1 +3911,71649 ,1 ,3911 ,1 +3912,80720 ,0 ,3912 ,1 +3913,88259 ,1 ,3913 ,1 +3914,18501 ,0 ,3914 ,1 +3915,17521 ,1 ,3915 ,1 +3916,35197 ,0 ,3916 ,1 +3917,35847 ,0 ,3917 ,1 +3918,63769 ,0 ,3918 ,1 +3919,66942 ,0 ,3919 ,1 +3920,62347 ,0 ,3920 ,1 +3921,25733 ,0 ,3921 ,1 +3922,60983 ,0 ,3922 ,1 +3923,40398 ,0 ,3923 ,1 +3924,28434 ,0 ,3924 ,1 +3925,38688 ,0 ,3925 ,1 +3926,73021 ,0 ,3926 ,1 +3927,60499 ,0 ,3927 ,1 +3928,79078 ,0 ,3928 ,1 +3929,41637 ,0 ,3929 ,1 +3930,67485 ,0 ,3930 ,1 +3931,54197 ,0 ,3931 ,1 +3932,69833 ,1 ,3932 ,1 +3933,53456 ,0 ,3933 ,1 +3934,39162 ,1 ,3934 ,1 +3935,88839 ,0 ,3935 ,1 +3936,52972 ,0 ,3936 ,1 +3937,11473 ,0 ,3937 ,1 +3938,39673 ,0 ,3938 ,1 +3939,78097 ,0 ,3939 ,1 +3940,30077 ,0 ,3940 ,1 +3941,33350 ,0 ,3941 ,1 +3942,29541 ,0 ,3942 ,1 +3943,51749 ,0 ,3943 ,1 +3944,48038 ,0 ,3944 ,1 +3945,62173 ,0 ,3945 ,1 +3946,86441 ,0 ,3946 ,1 +3947,53944 ,0 ,3947 ,1 +3948,30224 ,1 ,3948 ,1 +3949,23189 ,0 ,3949 ,1 +3950,64331 ,0 ,3950 ,1 +3951,54422 ,0 ,3951 ,1 +3952,43313 ,1 ,3952 ,1 +3953,37029 ,0 ,3953 ,1 +3954,13263 ,0 ,3954 ,1 +3955,32282 ,1 ,3955 ,1 +3956,71874 ,0 ,3956 ,1 +3957,50460 ,0 ,3957 ,1 +3958,27226 ,0 ,3958 ,1 +3959,78694 ,0 ,3959 ,1 +3960,60922 ,0 ,3960 ,1 +3961,20206 ,0 ,3961 ,1 +3962,49391 ,0 ,3962 ,1 +3963,55070 ,0 ,3963 ,1 +3964,46151 ,0 ,3964 ,1 +3965,61095 ,0 ,3965 ,1 +3966,62274 ,0 ,3966 ,1 +3967,25901 ,0 ,3967 ,1 +3968,88500 ,0 ,3968 ,1 +3969,20075 ,0 ,3969 ,1 +3970,49932 ,0 ,3970 ,1 +3971,60300 ,0 ,3971 ,1 +3972,24627 ,1 ,3972 ,1 +3973,22559 ,1 ,3973 ,1 +3974,61224 ,0 ,3974 ,1 +3975,34950 ,0 ,3975 ,1 +3976,32193 ,0 ,3976 ,1 +3977,18972 ,0 ,3977 ,1 +3978,22472 ,0 ,3978 ,1 +3979,86248 ,0 ,3979 ,1 +3980,23496 ,0 ,3980 ,1 +3981,52971 ,0 ,3981 ,1 +3982,88522 ,0 ,3982 ,1 +3983,62290 ,0 ,3983 ,1 +3984,52355 ,0 ,3984 ,1 +3985,14545 ,0 ,3985 ,1 +3986,19318 ,0 ,3986 ,1 +3987,86806 ,1 ,3987 ,1 +3988,30897 ,1 ,3988 ,1 +3989,56623 ,1 ,3989 ,1 +3990,30430 ,0 ,3990 ,1 +3991,53432 ,1 ,3991 ,1 +3992,13378 ,0 ,3992 ,1 +3993,37606 ,0 ,3993 ,1 +3994,46263 ,0 ,3994 ,1 +3995,38044 ,1 ,3995 ,1 +3996,51260 ,0 ,3996 ,1 +3997,84243 ,0 ,3997 ,1 +3998,32939 ,1 ,3998 ,1 +3999,82985 ,0 ,3999 ,1 +4000,51103 ,0 ,4000 ,2 +4001,85933 ,0 ,4001 ,2 +4002,89583 ,1 ,4002 ,2 +4003,77587 ,0 ,4003 ,2 +4004,33381 ,0 ,4004 ,2 +4005,53799 ,0 ,4005 ,2 +4006,77618 ,0 ,4006 ,2 +4007,73521 ,0 ,4007 ,2 +4008,41862 ,0 ,4008 ,2 +4009,12702 ,1 ,4009 ,2 +4010,48332 ,0 ,4010 ,2 +4011,59135 ,0 ,4011 ,2 +4012,69354 ,0 ,4012 ,2 +4013,85854 ,0 ,4013 ,2 +4014,40165 ,0 ,4014 ,2 +4015,73098 ,0 ,4015 ,2 +4016,22306 ,0 ,4016 ,2 +4017,19548 ,0 ,4017 ,2 +4018,57091 ,0 ,4018 ,2 +4019,80208 ,0 ,4019 ,2 +4020,75344 ,1 ,4020 ,2 +4021,81599 ,0 ,4021 ,2 +4022,29406 ,1 ,4022 ,2 +4023,64473 ,0 ,4023 ,2 +4024,38076 ,0 ,4024 ,2 +4025,21371 ,0 ,4025 ,2 +4026,88794 ,0 ,4026 ,2 +4027,82338 ,1 ,4027 ,2 +4028,83221 ,0 ,4028 ,2 +4029,34322 ,0 ,4029 ,2 +4030,39801 ,0 ,4030 ,2 +4031,82488 ,0 ,4031 ,2 +4032,30777 ,0 ,4032 ,2 +4033,69948 ,1 ,4033 ,2 +4034,19068 ,0 ,4034 ,2 +4035,10882 ,0 ,4035 ,2 +4036,89117 ,0 ,4036 ,2 +4037,12387 ,0 ,4037 ,2 +4038,33678 ,0 ,4038 ,2 +4039,86751 ,0 ,4039 ,2 +4040,26351 ,1 ,4040 ,2 +4041,34254 ,0 ,4041 ,2 +4042,15988 ,0 ,4042 ,2 +4043,38576 ,0 ,4043 ,2 +4044,37100 ,0 ,4044 ,2 +4045,66850 ,0 ,4045 ,2 +4046,24967 ,0 ,4046 ,2 +4047,62559 ,1 ,4047 ,2 +4048,44199 ,0 ,4048 ,2 +4049,60192 ,1 ,4049 ,2 +4050,53345 ,0 ,4050 ,2 +4051,36054 ,0 ,4051 ,2 +4052,44165 ,1 ,4052 ,2 +4053,18416 ,0 ,4053 ,2 +4054,18297 ,0 ,4054 ,2 +4055,65616 ,0 ,4055 ,2 +4056,67673 ,0 ,4056 ,2 +4057,75828 ,0 ,4057 ,2 +4058,74711 ,0 ,4058 ,2 +4059,44515 ,0 ,4059 ,2 +4060,40650 ,0 ,4060 ,2 +4061,10240 ,0 ,4061 ,2 +4062,38434 ,0 ,4062 ,2 +4063,40563 ,0 ,4063 ,2 +4064,46047 ,0 ,4064 ,2 +4065,20454 ,0 ,4065 ,2 +4066,83919 ,0 ,4066 ,2 +4067,74191 ,1 ,4067 ,2 +4068,27319 ,0 ,4068 ,2 +4069,75408 ,1 ,4069 ,2 +4070,61975 ,0 ,4070 ,2 +4071,76384 ,0 ,4071 ,2 +4072,18977 ,0 ,4072 ,2 +4073,36623 ,1 ,4073 ,2 +4074,88219 ,0 ,4074 ,2 +4075,65760 ,0 ,4075 ,2 +4076,47529 ,0 ,4076 ,2 +4077,49644 ,0 ,4077 ,2 +4078,85278 ,0 ,4078 ,2 +4079,59130 ,0 ,4079 ,2 +4080,45858 ,0 ,4080 ,2 +4081,74875 ,0 ,4081 ,2 +4082,24077 ,0 ,4082 ,2 +4083,26827 ,0 ,4083 ,2 +4084,78676 ,1 ,4084 ,2 +4085,50381 ,1 ,4085 ,2 +4086,22687 ,0 ,4086 ,2 +4087,19153 ,1 ,4087 ,2 +4088,39150 ,0 ,4088 ,2 +4089,50758 ,0 ,4089 ,2 +4090,53114 ,0 ,4090 ,2 +4091,57662 ,0 ,4091 ,2 +4092,36509 ,0 ,4092 ,2 +4093,61855 ,0 ,4093 ,2 +4094,72369 ,0 ,4094 ,2 +4095,63246 ,0 ,4095 ,2 +4096,55370 ,0 ,4096 ,2 +4097,84717 ,0 ,4097 ,2 +4098,68968 ,0 ,4098 ,2 +4099,56309 ,0 ,4099 ,2 +4100,10260 ,0 ,4100 ,2 +4101,76511 ,0 ,4101 ,2 +4102,61670 ,0 ,4102 ,2 +4103,88487 ,1 ,4103 ,2 +4104,12187 ,0 ,4104 ,2 +4105,86446 ,0 ,4105 ,2 +4106,35316 ,0 ,4106 ,2 +4107,70613 ,1 ,4107 ,2 +4108,40869 ,1 ,4108 ,2 +4109,43596 ,0 ,4109 ,2 +4110,64302 ,0 ,4110 ,2 +4111,88270 ,0 ,4111 ,2 +4112,45520 ,0 ,4112 ,2 +4113,16593 ,0 ,4113 ,2 +4114,27690 ,0 ,4114 ,2 +4115,13436 ,0 ,4115 ,2 +4116,45428 ,0 ,4116 ,2 +4117,19446 ,0 ,4117 ,2 +4118,44280 ,0 ,4118 ,2 +4119,51036 ,0 ,4119 ,2 +4120,49955 ,0 ,4120 ,2 +4121,72582 ,0 ,4121 ,2 +4122,53440 ,0 ,4122 ,2 +4123,41429 ,0 ,4123 ,2 +4124,33215 ,0 ,4124 ,2 +4125,25444 ,0 ,4125 ,2 +4126,89946 ,0 ,4126 ,2 +4127,84541 ,0 ,4127 ,2 +4128,63448 ,0 ,4128 ,2 +4129,29597 ,0 ,4129 ,2 +4130,43882 ,0 ,4130 ,2 +4131,74165 ,1 ,4131 ,2 +4132,68676 ,0 ,4132 ,2 +4133,65066 ,0 ,4133 ,2 +4134,16290 ,0 ,4134 ,2 +4135,19603 ,0 ,4135 ,2 +4136,43210 ,0 ,4136 ,2 +4137,81605 ,0 ,4137 ,2 +4138,24343 ,0 ,4138 ,2 +4139,14892 ,0 ,4139 ,2 +4140,78052 ,1 ,4140 ,2 +4141,31228 ,0 ,4141 ,2 +4142,25790 ,0 ,4142 ,2 +4143,36375 ,0 ,4143 ,2 +4144,29808 ,0 ,4144 ,2 +4145,37271 ,0 ,4145 ,2 +4146,47607 ,0 ,4146 ,2 +4147,49959 ,1 ,4147 ,2 +4148,62431 ,0 ,4148 ,2 +4149,39167 ,0 ,4149 ,2 +4150,33940 ,0 ,4150 ,2 +4151,84898 ,0 ,4151 ,2 +4152,11976 ,0 ,4152 ,2 +4153,37306 ,0 ,4153 ,2 +4154,21700 ,1 ,4154 ,2 +4155,56305 ,0 ,4155 ,2 +4156,38244 ,0 ,4156 ,2 +4157,27300 ,0 ,4157 ,2 +4158,89678 ,0 ,4158 ,2 +4159,63219 ,0 ,4159 ,2 +4160,64587 ,1 ,4160 ,2 +4161,45795 ,0 ,4161 ,2 +4162,13838 ,0 ,4162 ,2 +4163,66129 ,0 ,4163 ,2 +4164,55991 ,1 ,4164 ,2 +4165,64189 ,0 ,4165 ,2 +4166,47741 ,0 ,4166 ,2 +4167,75627 ,1 ,4167 ,2 +4168,63345 ,0 ,4168 ,2 +4169,74177 ,1 ,4169 ,2 +4170,38932 ,0 ,4170 ,2 +4171,60715 ,1 ,4171 ,2 +4172,55203 ,1 ,4172 ,2 +4173,25533 ,0 ,4173 ,2 +4174,61151 ,0 ,4174 ,2 +4175,20618 ,0 ,4175 ,2 +4176,46242 ,0 ,4176 ,2 +4177,44308 ,1 ,4177 ,2 +4178,29022 ,0 ,4178 ,2 +4179,59114 ,0 ,4179 ,2 +4180,79246 ,0 ,4180 ,2 +4181,26549 ,0 ,4181 ,2 +4182,26611 ,0 ,4182 ,2 +4183,13425 ,0 ,4183 ,2 +4184,46036 ,0 ,4184 ,2 +4185,45170 ,0 ,4185 ,2 +4186,74662 ,0 ,4186 ,2 +4187,66556 ,0 ,4187 ,2 +4188,65084 ,0 ,4188 ,2 +4189,76358 ,0 ,4189 ,2 +4190,13237 ,0 ,4190 ,2 +4191,16908 ,1 ,4191 ,2 +4192,34599 ,0 ,4192 ,2 +4193,50736 ,0 ,4193 ,2 +4194,61257 ,1 ,4194 ,2 +4195,79141 ,0 ,4195 ,2 +4196,21518 ,1 ,4196 ,2 +4197,87841 ,0 ,4197 ,2 +4198,37985 ,0 ,4198 ,2 +4199,82118 ,0 ,4199 ,2 +4200,70124 ,1 ,4200 ,2 +4201,14004 ,0 ,4201 ,2 +4202,54553 ,0 ,4202 ,2 +4203,21113 ,0 ,4203 ,2 +4204,55830 ,0 ,4204 ,2 +4205,36280 ,1 ,4205 ,2 +4206,76855 ,1 ,4206 ,2 +4207,43839 ,0 ,4207 ,2 +4208,17066 ,0 ,4208 ,2 +4209,35315 ,0 ,4209 ,2 +4210,51450 ,0 ,4210 ,2 +4211,40856 ,0 ,4211 ,2 +4212,40118 ,0 ,4212 ,2 +4213,84804 ,0 ,4213 ,2 +4214,72091 ,0 ,4214 ,2 +4215,36252 ,1 ,4215 ,2 +4216,11100 ,0 ,4216 ,2 +4217,88904 ,0 ,4217 ,2 +4218,36814 ,0 ,4218 ,2 +4219,51988 ,0 ,4219 ,2 +4220,44767 ,0 ,4220 ,2 +4221,72686 ,1 ,4221 ,2 +4222,33000 ,0 ,4222 ,2 +4223,68681 ,0 ,4223 ,2 +4224,53511 ,0 ,4224 ,2 +4225,18790 ,0 ,4225 ,2 +4226,28761 ,0 ,4226 ,2 +4227,16545 ,1 ,4227 ,2 +4228,25681 ,1 ,4228 ,2 +4229,80892 ,0 ,4229 ,2 +4230,48928 ,1 ,4230 ,2 +4231,86890 ,0 ,4231 ,2 +4232,64187 ,0 ,4232 ,2 +4233,12504 ,0 ,4233 ,2 +4234,26872 ,1 ,4234 ,2 +4235,39421 ,0 ,4235 ,2 +4236,23788 ,0 ,4236 ,2 +4237,29576 ,0 ,4237 ,2 +4238,87332 ,0 ,4238 ,2 +4239,38670 ,1 ,4239 ,2 +4240,63209 ,0 ,4240 ,2 +4241,76575 ,0 ,4241 ,2 +4242,34589 ,1 ,4242 ,2 +4243,46345 ,0 ,4243 ,2 +4244,82474 ,0 ,4244 ,2 +4245,89818 ,0 ,4245 ,2 +4246,22542 ,0 ,4246 ,2 +4247,65088 ,0 ,4247 ,2 +4248,60524 ,0 ,4248 ,2 +4249,29498 ,0 ,4249 ,2 +4250,49856 ,0 ,4250 ,2 +4251,83265 ,0 ,4251 ,2 +4252,49753 ,0 ,4252 ,2 +4253,65203 ,0 ,4253 ,2 +4254,35791 ,1 ,4254 ,2 +4255,31752 ,0 ,4255 ,2 +4256,21112 ,0 ,4256 ,2 +4257,67666 ,0 ,4257 ,2 +4258,85119 ,0 ,4258 ,2 +4259,10650 ,0 ,4259 ,2 +4260,86053 ,1 ,4260 ,2 +4261,60609 ,1 ,4261 ,2 +4262,44224 ,0 ,4262 ,2 +4263,30900 ,0 ,4263 ,2 +4264,16962 ,0 ,4264 ,2 +4265,33885 ,0 ,4265 ,2 +4266,19644 ,0 ,4266 ,2 +4267,56982 ,0 ,4267 ,2 +4268,36021 ,0 ,4268 ,2 +4269,54606 ,0 ,4269 ,2 +4270,85988 ,0 ,4270 ,2 +4271,73283 ,0 ,4271 ,2 +4272,86578 ,0 ,4272 ,2 +4273,73529 ,0 ,4273 ,2 +4274,36542 ,0 ,4274 ,2 +4275,27917 ,1 ,4275 ,2 +4276,86003 ,0 ,4276 ,2 +4277,45056 ,0 ,4277 ,2 +4278,82731 ,0 ,4278 ,2 +4279,75302 ,1 ,4279 ,2 +4280,85190 ,0 ,4280 ,2 +4281,60341 ,0 ,4281 ,2 +4282,86055 ,0 ,4282 ,2 +4283,17463 ,0 ,4283 ,2 +4284,56618 ,0 ,4284 ,2 +4285,73998 ,0 ,4285 ,2 +4286,88697 ,0 ,4286 ,2 +4287,74965 ,0 ,4287 ,2 +4288,25394 ,0 ,4288 ,2 +4289,15204 ,1 ,4289 ,2 +4290,20669 ,0 ,4290 ,2 +4291,13395 ,0 ,4291 ,2 +4292,36280 ,1 ,4292 ,2 +4293,68810 ,0 ,4293 ,2 +4294,48332 ,0 ,4294 ,2 +4295,81348 ,0 ,4295 ,2 +4296,82955 ,0 ,4296 ,2 +4297,28065 ,0 ,4297 ,2 +4298,15070 ,0 ,4298 ,2 +4299,30629 ,0 ,4299 ,2 +4300,89909 ,0 ,4300 ,2 +4301,21780 ,0 ,4301 ,2 +4302,79630 ,0 ,4302 ,2 +4303,89177 ,0 ,4303 ,2 +4304,85833 ,0 ,4304 ,2 +4305,27512 ,0 ,4305 ,2 +4306,10590 ,1 ,4306 ,2 +4307,65753 ,0 ,4307 ,2 +4308,62699 ,0 ,4308 ,2 +4309,56974 ,0 ,4309 ,2 +4310,89909 ,0 ,4310 ,2 +4311,23606 ,0 ,4311 ,2 +4312,84300 ,1 ,4312 ,2 +4313,43773 ,0 ,4313 ,2 +4314,42117 ,0 ,4314 ,2 +4315,47010 ,1 ,4315 ,2 +4316,81347 ,0 ,4316 ,2 +4317,10071 ,0 ,4317 ,2 +4318,32618 ,0 ,4318 ,2 +4319,19477 ,0 ,4319 ,2 +4320,74921 ,0 ,4320 ,2 +4321,28211 ,0 ,4321 ,2 +4322,17620 ,1 ,4322 ,2 +4323,48978 ,0 ,4323 ,2 +4324,13856 ,0 ,4324 ,2 +4325,66336 ,0 ,4325 ,2 +4326,86884 ,0 ,4326 ,2 +4327,46176 ,0 ,4327 ,2 +4328,79111 ,0 ,4328 ,2 +4329,60441 ,0 ,4329 ,2 +4330,11696 ,0 ,4330 ,2 +4331,68178 ,1 ,4331 ,2 +4332,75009 ,0 ,4332 ,2 +4333,27698 ,0 ,4333 ,2 +4334,79474 ,0 ,4334 ,2 +4335,60638 ,0 ,4335 ,2 +4336,87392 ,0 ,4336 ,2 +4337,82082 ,1 ,4337 ,2 +4338,40864 ,0 ,4338 ,2 +4339,87206 ,0 ,4339 ,2 +4340,22991 ,0 ,4340 ,2 +4341,85469 ,0 ,4341 ,2 +4342,13147 ,0 ,4342 ,2 +4343,72121 ,0 ,4343 ,2 +4344,32866 ,1 ,4344 ,2 +4345,68483 ,0 ,4345 ,2 +4346,27175 ,0 ,4346 ,2 +4347,74928 ,0 ,4347 ,2 +4348,20478 ,0 ,4348 ,2 +4349,52166 ,0 ,4349 ,2 +4350,41389 ,0 ,4350 ,2 +4351,22222 ,1 ,4351 ,2 +4352,67568 ,0 ,4352 ,2 +4353,79731 ,0 ,4353 ,2 +4354,88476 ,1 ,4354 ,2 +4355,28511 ,0 ,4355 ,2 +4356,15065 ,0 ,4356 ,2 +4357,88827 ,0 ,4357 ,2 +4358,29447 ,1 ,4358 ,2 +4359,74120 ,0 ,4359 ,2 +4360,74529 ,0 ,4360 ,2 +4361,69501 ,0 ,4361 ,2 +4362,64842 ,0 ,4362 ,2 +4363,48986 ,1 ,4363 ,2 +4364,31265 ,0 ,4364 ,2 +4365,15864 ,1 ,4365 ,2 +4366,41444 ,0 ,4366 ,2 +4367,46701 ,0 ,4367 ,2 +4368,66006 ,0 ,4368 ,2 +4369,45911 ,1 ,4369 ,2 +4370,28088 ,0 ,4370 ,2 +4371,63891 ,1 ,4371 ,2 +4372,19993 ,0 ,4372 ,2 +4373,64522 ,0 ,4373 ,2 +4374,82184 ,0 ,4374 ,2 +4375,31157 ,0 ,4375 ,2 +4376,55472 ,0 ,4376 ,2 +4377,43211 ,1 ,4377 ,2 +4378,26033 ,0 ,4378 ,2 +4379,55262 ,1 ,4379 ,2 +4380,87501 ,0 ,4380 ,2 +4381,49617 ,1 ,4381 ,2 +4382,14042 ,0 ,4382 ,2 +4383,19852 ,0 ,4383 ,2 +4384,45706 ,0 ,4384 ,2 +4385,88577 ,0 ,4385 ,2 +4386,50955 ,0 ,4386 ,2 +4387,36362 ,0 ,4387 ,2 +4388,64571 ,0 ,4388 ,2 +4389,85014 ,0 ,4389 ,2 +4390,31108 ,0 ,4390 ,2 +4391,44669 ,0 ,4391 ,2 +4392,72615 ,0 ,4392 ,2 +4393,16901 ,1 ,4393 ,2 +4394,70482 ,0 ,4394 ,2 +4395,58578 ,0 ,4395 ,2 +4396,66220 ,0 ,4396 ,2 +4397,43312 ,0 ,4397 ,2 +4398,15775 ,0 ,4398 ,2 +4399,21116 ,0 ,4399 ,2 +4400,66973 ,0 ,4400 ,2 +4401,36818 ,1 ,4401 ,2 +4402,86453 ,0 ,4402 ,2 +4403,44935 ,0 ,4403 ,2 +4404,22457 ,0 ,4404 ,2 +4405,21449 ,0 ,4405 ,2 +4406,87862 ,0 ,4406 ,2 +4407,42181 ,0 ,4407 ,2 +4408,17019 ,0 ,4408 ,2 +4409,45837 ,0 ,4409 ,2 +4410,33834 ,0 ,4410 ,2 +4411,89841 ,0 ,4411 ,2 +4412,19524 ,0 ,4412 ,2 +4413,16651 ,0 ,4413 ,2 +4414,73133 ,1 ,4414 ,2 +4415,68926 ,0 ,4415 ,2 +4416,19757 ,0 ,4416 ,2 +4417,80412 ,1 ,4417 ,2 +4418,89920 ,0 ,4418 ,2 +4419,89778 ,1 ,4419 ,2 +4420,52771 ,1 ,4420 ,2 +4421,59879 ,0 ,4421 ,2 +4422,34025 ,0 ,4422 ,2 +4423,10058 ,0 ,4423 ,2 +4424,26519 ,0 ,4424 ,2 +4425,66333 ,0 ,4425 ,2 +4426,22575 ,0 ,4426 ,2 +4427,85949 ,0 ,4427 ,2 +4428,34925 ,0 ,4428 ,2 +4429,10010 ,0 ,4429 ,2 +4430,38072 ,1 ,4430 ,2 +4431,51411 ,0 ,4431 ,2 +4432,24123 ,1 ,4432 ,2 +4433,88046 ,0 ,4433 ,2 +4434,84117 ,0 ,4434 ,2 +4435,48186 ,0 ,4435 ,2 +4436,37634 ,0 ,4436 ,2 +4437,30203 ,0 ,4437 ,2 +4438,13216 ,0 ,4438 ,2 +4439,11314 ,0 ,4439 ,2 +4440,83487 ,0 ,4440 ,2 +4441,81537 ,0 ,4441 ,2 +4442,73922 ,0 ,4442 ,2 +4443,24972 ,1 ,4443 ,2 +4444,31081 ,0 ,4444 ,2 +4445,17613 ,0 ,4445 ,2 +4446,64058 ,0 ,4446 ,2 +4447,53186 ,0 ,4447 ,2 +4448,44515 ,0 ,4448 ,2 +4449,43410 ,0 ,4449 ,2 +4450,26533 ,0 ,4450 ,2 +4451,23374 ,0 ,4451 ,2 +4452,13002 ,1 ,4452 ,2 +4453,87619 ,0 ,4453 ,2 +4454,62101 ,0 ,4454 ,2 +4455,57879 ,0 ,4455 ,2 +4456,32384 ,0 ,4456 ,2 +4457,81566 ,1 ,4457 ,2 +4458,60633 ,0 ,4458 ,2 +4459,26918 ,0 ,4459 ,2 +4460,88464 ,0 ,4460 ,2 +4461,25835 ,0 ,4461 ,2 +4462,20150 ,0 ,4462 ,2 +4463,55526 ,0 ,4463 ,2 +4464,84977 ,0 ,4464 ,2 +4465,77770 ,0 ,4465 ,2 +4466,42991 ,0 ,4466 ,2 +4467,47789 ,0 ,4467 ,2 +4468,87015 ,0 ,4468 ,2 +4469,46468 ,0 ,4469 ,2 +4470,81291 ,1 ,4470 ,2 +4471,23195 ,0 ,4471 ,2 +4472,29315 ,0 ,4472 ,2 +4473,40365 ,0 ,4473 ,2 +4474,40195 ,0 ,4474 ,2 +4475,11880 ,0 ,4475 ,2 +4476,60854 ,0 ,4476 ,2 +4477,24577 ,0 ,4477 ,2 +4478,52745 ,1 ,4478 ,2 +4479,19537 ,0 ,4479 ,2 +4480,47269 ,0 ,4480 ,2 +4481,80831 ,0 ,4481 ,2 +4482,33425 ,0 ,4482 ,2 +4483,24339 ,0 ,4483 ,2 +4484,35097 ,0 ,4484 ,2 +4485,52368 ,0 ,4485 ,2 +4486,63412 ,0 ,4486 ,2 +4487,20022 ,1 ,4487 ,2 +4488,41967 ,0 ,4488 ,2 +4489,87907 ,0 ,4489 ,2 +4490,25100 ,1 ,4490 ,2 +4491,87746 ,0 ,4491 ,2 +4492,40227 ,1 ,4492 ,2 +4493,53552 ,0 ,4493 ,2 +4494,23100 ,0 ,4494 ,2 +4495,36880 ,0 ,4495 ,2 +4496,86029 ,0 ,4496 ,2 +4497,87864 ,1 ,4497 ,2 +4498,61964 ,0 ,4498 ,2 +4499,10666 ,0 ,4499 ,2 +4500,40291 ,0 ,4500 ,2 +4501,40426 ,0 ,4501 ,2 +4502,33782 ,1 ,4502 ,2 +4503,56085 ,1 ,4503 ,2 +4504,79103 ,0 ,4504 ,2 +4505,30458 ,0 ,4505 ,2 +4506,73215 ,0 ,4506 ,2 +4507,54259 ,0 ,4507 ,2 +4508,82547 ,0 ,4508 ,2 +4509,26011 ,0 ,4509 ,2 +4510,51748 ,1 ,4510 ,2 +4511,37840 ,0 ,4511 ,2 +4512,16739 ,0 ,4512 ,2 +4513,58131 ,0 ,4513 ,2 +4514,21597 ,0 ,4514 ,2 +4515,17244 ,0 ,4515 ,2 +4516,10155 ,0 ,4516 ,2 +4517,63835 ,0 ,4517 ,2 +4518,14946 ,0 ,4518 ,2 +4519,54444 ,0 ,4519 ,2 +4520,68837 ,0 ,4520 ,2 +4521,55217 ,0 ,4521 ,2 +4522,85619 ,0 ,4522 ,2 +4523,75847 ,0 ,4523 ,2 +4524,43987 ,0 ,4524 ,2 +4525,57358 ,0 ,4525 ,2 +4526,47515 ,0 ,4526 ,2 +4527,52393 ,0 ,4527 ,2 +4528,62067 ,0 ,4528 ,2 +4529,13480 ,0 ,4529 ,2 +4530,17903 ,1 ,4530 ,2 +4531,10318 ,0 ,4531 ,2 +4532,86722 ,0 ,4532 ,2 +4533,10271 ,0 ,4533 ,2 +4534,75459 ,0 ,4534 ,2 +4535,69098 ,0 ,4535 ,2 +4536,70568 ,0 ,4536 ,2 +4537,27992 ,0 ,4537 ,2 +4538,36775 ,0 ,4538 ,2 +4539,28628 ,0 ,4539 ,2 +4540,66650 ,0 ,4540 ,2 +4541,84572 ,0 ,4541 ,2 +4542,82083 ,0 ,4542 ,2 +4543,64667 ,1 ,4543 ,2 +4544,40461 ,0 ,4544 ,2 +4545,69065 ,0 ,4545 ,2 +4546,68432 ,0 ,4546 ,2 +4547,87564 ,0 ,4547 ,2 +4548,45505 ,0 ,4548 ,2 +4549,32240 ,0 ,4549 ,2 +4550,18172 ,0 ,4550 ,2 +4551,84394 ,0 ,4551 ,2 +4552,67096 ,1 ,4552 ,2 +4553,79246 ,0 ,4553 ,2 +4554,51498 ,1 ,4554 ,2 +4555,88634 ,0 ,4555 ,2 +4556,33507 ,0 ,4556 ,2 +4557,59906 ,0 ,4557 ,2 +4558,70067 ,0 ,4558 ,2 +4559,30235 ,0 ,4559 ,2 +4560,52121 ,0 ,4560 ,2 +4561,67478 ,0 ,4561 ,2 +4562,67170 ,0 ,4562 ,2 +4563,38951 ,0 ,4563 ,2 +4564,42291 ,1 ,4564 ,2 +4565,49550 ,0 ,4565 ,2 +4566,47677 ,0 ,4566 ,2 +4567,45923 ,0 ,4567 ,2 +4568,84583 ,1 ,4568 ,2 +4569,77376 ,0 ,4569 ,2 +4570,63239 ,0 ,4570 ,2 +4571,22414 ,0 ,4571 ,2 +4572,84807 ,0 ,4572 ,2 +4573,44080 ,0 ,4573 ,2 +4574,44638 ,0 ,4574 ,2 +4575,51112 ,0 ,4575 ,2 +4576,60735 ,0 ,4576 ,2 +4577,32018 ,1 ,4577 ,2 +4578,66420 ,0 ,4578 ,2 +4579,37158 ,0 ,4579 ,2 +4580,28973 ,1 ,4580 ,2 +4581,83291 ,0 ,4581 ,2 +4582,63828 ,0 ,4582 ,2 +4583,71149 ,1 ,4583 ,2 +4584,55400 ,1 ,4584 ,2 +4585,17760 ,0 ,4585 ,2 +4586,49748 ,0 ,4586 ,2 +4587,14176 ,0 ,4587 ,2 +4588,65427 ,0 ,4588 ,2 +4589,67018 ,0 ,4589 ,2 +4590,85663 ,1 ,4590 ,2 +4591,47717 ,0 ,4591 ,2 +4592,56728 ,1 ,4592 ,2 +4593,65168 ,0 ,4593 ,2 +4594,80022 ,0 ,4594 ,2 +4595,57114 ,0 ,4595 ,2 +4596,81041 ,0 ,4596 ,2 +4597,87910 ,1 ,4597 ,2 +4598,87877 ,0 ,4598 ,2 +4599,14925 ,0 ,4599 ,2 +4600,19006 ,0 ,4600 ,2 +4601,39766 ,0 ,4601 ,2 +4602,87979 ,0 ,4602 ,2 +4603,36392 ,1 ,4603 ,2 +4604,73549 ,0 ,4604 ,2 +4605,69363 ,0 ,4605 ,2 +4606,25011 ,0 ,4606 ,2 +4607,64929 ,0 ,4607 ,2 +4608,10531 ,0 ,4608 ,2 +4609,52327 ,0 ,4609 ,2 +4610,86152 ,0 ,4610 ,2 +4611,51177 ,0 ,4611 ,2 +4612,19598 ,0 ,4612 ,2 +4613,71573 ,0 ,4613 ,2 +4614,60342 ,0 ,4614 ,2 +4615,21657 ,0 ,4615 ,2 +4616,68793 ,0 ,4616 ,2 +4617,17125 ,1 ,4617 ,2 +4618,42753 ,0 ,4618 ,2 +4619,63906 ,0 ,4619 ,2 +4620,59209 ,0 ,4620 ,2 +4621,16634 ,1 ,4621 ,2 +4622,59785 ,1 ,4622 ,2 +4623,57127 ,0 ,4623 ,2 +4624,18145 ,0 ,4624 ,2 +4625,61718 ,0 ,4625 ,2 +4626,53005 ,0 ,4626 ,2 +4627,33809 ,0 ,4627 ,2 +4628,55334 ,0 ,4628 ,2 +4629,61310 ,0 ,4629 ,2 +4630,78938 ,0 ,4630 ,2 +4631,72312 ,0 ,4631 ,2 +4632,10974 ,0 ,4632 ,2 +4633,13808 ,0 ,4633 ,2 +4634,86830 ,0 ,4634 ,2 +4635,18443 ,0 ,4635 ,2 +4636,51918 ,0 ,4636 ,2 +4637,84206 ,0 ,4637 ,2 +4638,45482 ,0 ,4638 ,2 +4639,77396 ,0 ,4639 ,2 +4640,46286 ,0 ,4640 ,2 +4641,50059 ,0 ,4641 ,2 +4642,74125 ,0 ,4642 ,2 +4643,66010 ,1 ,4643 ,2 +4644,88074 ,1 ,4644 ,2 +4645,43089 ,0 ,4645 ,2 +4646,71600 ,0 ,4646 ,2 +4647,62110 ,0 ,4647 ,2 +4648,66190 ,0 ,4648 ,2 +4649,50346 ,0 ,4649 ,2 +4650,31482 ,0 ,4650 ,2 +4651,35193 ,0 ,4651 ,2 +4652,87491 ,0 ,4652 ,2 +4653,61111 ,1 ,4653 ,2 +4654,22436 ,0 ,4654 ,2 +4655,55977 ,0 ,4655 ,2 +4656,12028 ,0 ,4656 ,2 +4657,39986 ,0 ,4657 ,2 +4658,77112 ,0 ,4658 ,2 +4659,24794 ,0 ,4659 ,2 +4660,48259 ,1 ,4660 ,2 +4661,59609 ,1 ,4661 ,2 +4662,70876 ,0 ,4662 ,2 +4663,34839 ,0 ,4663 ,2 +4664,74986 ,1 ,4664 ,2 +4665,61098 ,0 ,4665 ,2 +4666,51291 ,0 ,4666 ,2 +4667,46289 ,0 ,4667 ,2 +4668,25681 ,0 ,4668 ,2 +4669,60404 ,0 ,4669 ,2 +4670,69933 ,1 ,4670 ,2 +4671,44097 ,1 ,4671 ,2 +4672,16284 ,0 ,4672 ,2 +4673,50327 ,0 ,4673 ,2 +4674,31324 ,1 ,4674 ,2 +4675,63187 ,0 ,4675 ,2 +4676,31458 ,0 ,4676 ,2 +4677,35409 ,0 ,4677 ,2 +4678,14715 ,0 ,4678 ,2 +4679,68622 ,0 ,4679 ,2 +4680,51790 ,0 ,4680 ,2 +4681,72601 ,0 ,4681 ,2 +4682,21601 ,0 ,4682 ,2 +4683,66281 ,0 ,4683 ,2 +4684,87722 ,0 ,4684 ,2 +4685,65283 ,0 ,4685 ,2 +4686,62918 ,0 ,4686 ,2 +4687,73237 ,0 ,4687 ,2 +4688,20030 ,1 ,4688 ,2 +4689,79553 ,0 ,4689 ,2 +4690,82909 ,0 ,4690 ,2 +4691,51077 ,0 ,4691 ,2 +4692,75054 ,0 ,4692 ,2 +4693,73174 ,0 ,4693 ,2 +4694,73568 ,0 ,4694 ,2 +4695,19126 ,0 ,4695 ,2 +4696,61516 ,1 ,4696 ,2 +4697,88652 ,1 ,4697 ,2 +4698,13634 ,1 ,4698 ,2 +4699,13837 ,0 ,4699 ,2 +4700,76772 ,1 ,4700 ,2 +4701,79319 ,0 ,4701 ,2 +4702,65898 ,0 ,4702 ,2 +4703,67561 ,0 ,4703 ,2 +4704,29825 ,0 ,4704 ,2 +4705,12994 ,0 ,4705 ,2 +4706,28728 ,0 ,4706 ,2 +4707,67297 ,0 ,4707 ,2 +4708,49978 ,0 ,4708 ,2 +4709,19660 ,0 ,4709 ,2 +4710,57407 ,0 ,4710 ,2 +4711,25788 ,0 ,4711 ,2 +4712,62128 ,0 ,4712 ,2 +4713,71857 ,0 ,4713 ,2 +4714,76390 ,0 ,4714 ,2 +4715,64525 ,1 ,4715 ,2 +4716,25748 ,0 ,4716 ,2 +4717,57451 ,0 ,4717 ,2 +4718,62892 ,1 ,4718 ,2 +4719,52095 ,0 ,4719 ,2 +4720,37251 ,1 ,4720 ,2 +4721,18738 ,0 ,4721 ,2 +4722,11869 ,0 ,4722 ,2 +4723,42083 ,0 ,4723 ,2 +4724,20036 ,0 ,4724 ,2 +4725,63184 ,0 ,4725 ,2 +4726,40392 ,0 ,4726 ,2 +4727,68047 ,0 ,4727 ,2 +4728,16858 ,0 ,4728 ,2 +4729,16047 ,0 ,4729 ,2 +4730,11734 ,0 ,4730 ,2 +4731,59087 ,0 ,4731 ,2 +4732,60432 ,0 ,4732 ,2 +4733,49285 ,0 ,4733 ,2 +4734,10082 ,1 ,4734 ,2 +4735,35059 ,0 ,4735 ,2 +4736,31351 ,0 ,4736 ,2 +4737,61316 ,0 ,4737 ,2 +4738,54277 ,0 ,4738 ,2 +4739,64001 ,0 ,4739 ,2 +4740,69266 ,0 ,4740 ,2 +4741,40532 ,0 ,4741 ,2 +4742,58107 ,0 ,4742 ,2 +4743,53020 ,0 ,4743 ,2 +4744,29434 ,0 ,4744 ,2 +4745,29257 ,0 ,4745 ,2 +4746,11708 ,0 ,4746 ,2 +4747,40889 ,0 ,4747 ,2 +4748,42137 ,1 ,4748 ,2 +4749,41964 ,0 ,4749 ,2 +4750,32548 ,0 ,4750 ,2 +4751,64423 ,0 ,4751 ,2 +4752,26162 ,0 ,4752 ,2 +4753,52699 ,0 ,4753 ,2 +4754,19448 ,1 ,4754 ,2 +4755,33227 ,0 ,4755 ,2 +4756,80033 ,1 ,4756 ,2 +4757,58687 ,0 ,4757 ,2 +4758,39593 ,0 ,4758 ,2 +4759,21651 ,0 ,4759 ,2 +4760,47262 ,0 ,4760 ,2 +4761,57513 ,0 ,4761 ,2 +4762,84888 ,0 ,4762 ,2 +4763,42223 ,0 ,4763 ,2 +4764,80140 ,0 ,4764 ,2 +4765,51649 ,1 ,4765 ,2 +4766,21576 ,0 ,4766 ,2 +4767,71997 ,0 ,4767 ,2 +4768,72153 ,0 ,4768 ,2 +4769,61179 ,0 ,4769 ,2 +4770,41435 ,0 ,4770 ,2 +4771,80025 ,1 ,4771 ,2 +4772,12099 ,0 ,4772 ,2 +4773,33568 ,0 ,4773 ,2 +4774,81481 ,1 ,4774 ,2 +4775,32459 ,0 ,4775 ,2 +4776,62530 ,1 ,4776 ,2 +4777,47286 ,0 ,4777 ,2 +4778,69680 ,0 ,4778 ,2 +4779,17256 ,0 ,4779 ,2 +4780,22718 ,0 ,4780 ,2 +4781,62864 ,0 ,4781 ,2 +4782,75498 ,0 ,4782 ,2 +4783,18680 ,1 ,4783 ,2 +4784,77069 ,0 ,4784 ,2 +4785,49011 ,0 ,4785 ,2 +4786,27934 ,0 ,4786 ,2 +4787,55267 ,1 ,4787 ,2 +4788,41775 ,0 ,4788 ,2 +4789,30432 ,0 ,4789 ,2 +4790,78274 ,1 ,4790 ,2 +4791,49037 ,1 ,4791 ,2 +4792,36808 ,1 ,4792 ,2 +4793,33491 ,1 ,4793 ,2 +4794,30803 ,0 ,4794 ,2 +4795,74925 ,1 ,4795 ,2 +4796,45662 ,1 ,4796 ,2 +4797,28459 ,0 ,4797 ,2 +4798,89013 ,0 ,4798 ,2 +4799,42809 ,0 ,4799 ,2 +4800,86244 ,1 ,4800 ,2 +4801,10718 ,1 ,4801 ,2 +4802,36564 ,0 ,4802 ,2 +4803,87803 ,0 ,4803 ,2 +4804,35821 ,0 ,4804 ,2 +4805,33526 ,0 ,4805 ,2 +4806,19141 ,0 ,4806 ,2 +4807,73336 ,0 ,4807 ,2 +4808,84351 ,0 ,4808 ,2 +4809,85020 ,1 ,4809 ,2 +4810,62883 ,0 ,4810 ,2 +4811,19491 ,0 ,4811 ,2 +4812,47694 ,1 ,4812 ,2 +4813,40378 ,0 ,4813 ,2 +4814,34748 ,1 ,4814 ,2 +4815,22807 ,0 ,4815 ,2 +4816,58400 ,0 ,4816 ,2 +4817,23052 ,0 ,4817 ,2 +4818,52363 ,0 ,4818 ,2 +4819,60443 ,0 ,4819 ,2 +4820,64572 ,1 ,4820 ,2 +4821,17792 ,0 ,4821 ,2 +4822,45637 ,0 ,4822 ,2 +4823,17669 ,0 ,4823 ,2 +4824,19305 ,1 ,4824 ,2 +4825,69122 ,0 ,4825 ,2 +4826,15413 ,1 ,4826 ,2 +4827,73154 ,0 ,4827 ,2 +4828,18783 ,0 ,4828 ,2 +4829,26134 ,0 ,4829 ,2 +4830,83444 ,0 ,4830 ,2 +4831,75434 ,0 ,4831 ,2 +4832,12680 ,0 ,4832 ,2 +4833,23087 ,1 ,4833 ,2 +4834,75291 ,0 ,4834 ,2 +4835,33873 ,0 ,4835 ,2 +4836,34918 ,0 ,4836 ,2 +4837,65038 ,0 ,4837 ,2 +4838,40669 ,0 ,4838 ,2 +4839,51289 ,0 ,4839 ,2 +4840,40956 ,0 ,4840 ,2 +4841,74746 ,1 ,4841 ,2 +4842,79206 ,0 ,4842 ,2 +4843,72021 ,0 ,4843 ,2 +4844,15202 ,0 ,4844 ,2 +4845,42599 ,0 ,4845 ,2 +4846,61947 ,1 ,4846 ,2 +4847,62203 ,0 ,4847 ,2 +4848,50966 ,1 ,4848 ,2 +4849,33065 ,1 ,4849 ,2 +4850,58099 ,0 ,4850 ,2 +4851,58642 ,0 ,4851 ,2 +4852,84085 ,0 ,4852 ,2 +4853,21657 ,0 ,4853 ,2 +4854,15700 ,0 ,4854 ,2 +4855,14297 ,0 ,4855 ,2 +4856,64214 ,0 ,4856 ,2 +4857,43783 ,0 ,4857 ,2 +4858,69754 ,1 ,4858 ,2 +4859,16167 ,0 ,4859 ,2 +4860,89576 ,0 ,4860 ,2 +4861,72040 ,0 ,4861 ,2 +4862,58002 ,1 ,4862 ,2 +4863,33814 ,0 ,4863 ,2 +4864,88754 ,0 ,4864 ,2 +4865,63726 ,0 ,4865 ,2 +4866,14655 ,0 ,4866 ,2 +4867,34487 ,0 ,4867 ,2 +4868,64695 ,0 ,4868 ,2 +4869,24483 ,0 ,4869 ,2 +4870,21357 ,0 ,4870 ,2 +4871,59751 ,0 ,4871 ,2 +4872,37389 ,0 ,4872 ,2 +4873,41817 ,1 ,4873 ,2 +4874,21605 ,0 ,4874 ,2 +4875,50947 ,1 ,4875 ,2 +4876,71258 ,0 ,4876 ,2 +4877,72745 ,0 ,4877 ,2 +4878,37680 ,0 ,4878 ,2 +4879,10460 ,1 ,4879 ,2 +4880,84025 ,0 ,4880 ,2 +4881,64695 ,1 ,4881 ,2 +4882,66734 ,0 ,4882 ,2 +4883,16537 ,0 ,4883 ,2 +4884,38222 ,1 ,4884 ,2 +4885,34199 ,1 ,4885 ,2 +4886,22481 ,0 ,4886 ,2 +4887,73649 ,0 ,4887 ,2 +4888,88903 ,0 ,4888 ,2 +4889,64170 ,0 ,4889 ,2 +4890,25713 ,0 ,4890 ,2 +4891,47539 ,0 ,4891 ,2 +4892,65560 ,0 ,4892 ,2 +4893,18742 ,0 ,4893 ,2 +4894,13073 ,0 ,4894 ,2 +4895,31382 ,0 ,4895 ,2 +4896,34677 ,0 ,4896 ,2 +4897,29053 ,0 ,4897 ,2 +4898,14572 ,1 ,4898 ,2 +4899,75864 ,0 ,4899 ,2 +4900,80367 ,0 ,4900 ,2 +4901,51985 ,0 ,4901 ,2 +4902,34397 ,0 ,4902 ,2 +4903,67465 ,0 ,4903 ,2 +4904,66143 ,0 ,4904 ,2 +4905,89643 ,0 ,4905 ,2 +4906,83004 ,0 ,4906 ,2 +4907,27113 ,1 ,4907 ,2 +4908,81781 ,1 ,4908 ,2 +4909,50266 ,0 ,4909 ,2 +4910,49350 ,0 ,4910 ,2 +4911,27327 ,0 ,4911 ,2 +4912,53694 ,0 ,4912 ,2 +4913,52848 ,0 ,4913 ,2 +4914,61733 ,0 ,4914 ,2 +4915,49010 ,0 ,4915 ,2 +4916,37866 ,0 ,4916 ,2 +4917,56333 ,0 ,4917 ,2 +4918,57504 ,0 ,4918 ,2 +4919,24427 ,0 ,4919 ,2 +4920,13585 ,0 ,4920 ,2 +4921,63790 ,0 ,4921 ,2 +4922,27960 ,0 ,4922 ,2 +4923,45309 ,0 ,4923 ,2 +4924,76273 ,1 ,4924 ,2 +4925,55587 ,0 ,4925 ,2 +4926,83527 ,0 ,4926 ,2 +4927,50731 ,0 ,4927 ,2 +4928,48487 ,1 ,4928 ,2 +4929,19015 ,0 ,4929 ,2 +4930,14614 ,0 ,4930 ,2 +4931,47920 ,0 ,4931 ,2 +4932,59358 ,0 ,4932 ,2 +4933,80610 ,0 ,4933 ,2 +4934,82075 ,1 ,4934 ,2 +4935,12027 ,0 ,4935 ,2 +4936,79776 ,0 ,4936 ,2 +4937,56801 ,0 ,4937 ,2 +4938,40768 ,1 ,4938 ,2 +4939,85882 ,0 ,4939 ,2 +4940,83029 ,0 ,4940 ,2 +4941,53255 ,0 ,4941 ,2 +4942,74317 ,0 ,4942 ,2 +4943,75599 ,0 ,4943 ,2 +4944,70828 ,0 ,4944 ,2 +4945,85481 ,0 ,4945 ,2 +4946,26723 ,0 ,4946 ,2 +4947,47886 ,0 ,4947 ,2 +4948,17245 ,0 ,4948 ,2 +4949,39137 ,0 ,4949 ,2 +4950,37332 ,0 ,4950 ,2 +4951,52179 ,0 ,4951 ,2 +4952,45299 ,0 ,4952 ,2 +4953,86381 ,0 ,4953 ,2 +4954,89557 ,0 ,4954 ,2 +4955,48910 ,0 ,4955 ,2 +4956,47474 ,0 ,4956 ,2 +4957,25661 ,0 ,4957 ,2 +4958,64315 ,0 ,4958 ,2 +4959,72262 ,0 ,4959 ,2 +4960,86396 ,0 ,4960 ,2 +4961,87380 ,0 ,4961 ,2 +4962,34301 ,0 ,4962 ,2 +4963,15191 ,0 ,4963 ,2 +4964,49126 ,0 ,4964 ,2 +4965,77385 ,0 ,4965 ,2 +4966,33307 ,1 ,4966 ,2 +4967,46237 ,0 ,4967 ,2 +4968,38509 ,0 ,4968 ,2 +4969,58596 ,0 ,4969 ,2 +4970,75513 ,0 ,4970 ,2 +4971,11092 ,0 ,4971 ,2 +4972,64468 ,0 ,4972 ,2 +4973,37609 ,0 ,4973 ,2 +4974,72394 ,0 ,4974 ,2 +4975,86958 ,0 ,4975 ,2 +4976,69554 ,0 ,4976 ,2 +4977,35646 ,0 ,4977 ,2 +4978,40417 ,0 ,4978 ,2 +4979,42303 ,1 ,4979 ,2 +4980,79738 ,1 ,4980 ,2 +4981,11318 ,0 ,4981 ,2 +4982,78897 ,0 ,4982 ,2 +4983,24746 ,0 ,4983 ,2 +4984,11070 ,0 ,4984 ,2 +4985,73055 ,0 ,4985 ,2 +4986,26340 ,1 ,4986 ,2 +4987,37266 ,1 ,4987 ,2 +4988,18223 ,0 ,4988 ,2 +4989,82459 ,1 ,4989 ,2 +4990,35102 ,0 ,4990 ,2 +4991,79015 ,0 ,4991 ,2 +4992,72969 ,0 ,4992 ,2 +4993,37722 ,1 ,4993 ,2 +4994,55478 ,0 ,4994 ,2 +4995,89229 ,1 ,4995 ,2 +4996,59299 ,1 ,4996 ,2 +4997,35122 ,0 ,4997 ,2 +4998,74052 ,1 ,4998 ,2 +4999,23278 ,0 ,4999 ,2 +5000,38902 ,0 ,5000 ,2 +5001,78814 ,0 ,5001 ,2 +5002,40692 ,1 ,5002 ,2 +5003,45146 ,0 ,5003 ,2 +5004,73773 ,0 ,5004 ,2 +5005,64471 ,0 ,5005 ,2 +5006,76782 ,1 ,5006 ,2 +5007,19803 ,0 ,5007 ,2 +5008,14865 ,0 ,5008 ,2 +5009,58771 ,0 ,5009 ,2 +5010,35114 ,0 ,5010 ,2 +5011,11356 ,0 ,5011 ,2 +5012,30775 ,0 ,5012 ,2 +5013,26130 ,0 ,5013 ,2 +5014,19925 ,0 ,5014 ,2 +5015,35210 ,0 ,5015 ,2 +5016,67738 ,0 ,5016 ,2 +5017,59697 ,0 ,5017 ,2 +5018,45947 ,0 ,5018 ,2 +5019,41053 ,0 ,5019 ,2 +5020,10826 ,0 ,5020 ,2 +5021,62920 ,0 ,5021 ,2 +5022,88129 ,0 ,5022 ,2 +5023,61156 ,0 ,5023 ,2 +5024,71674 ,1 ,5024 ,2 +5025,14550 ,0 ,5025 ,2 +5026,86980 ,0 ,5026 ,2 +5027,72950 ,0 ,5027 ,2 +5028,18920 ,0 ,5028 ,2 +5029,78685 ,0 ,5029 ,2 +5030,81974 ,0 ,5030 ,2 +5031,69204 ,0 ,5031 ,2 +5032,31132 ,0 ,5032 ,2 +5033,45956 ,0 ,5033 ,2 +5034,74002 ,1 ,5034 ,2 +5035,22528 ,0 ,5035 ,2 +5036,40736 ,0 ,5036 ,2 +5037,48960 ,0 ,5037 ,2 +5038,49918 ,0 ,5038 ,2 +5039,50806 ,0 ,5039 ,2 +5040,53465 ,0 ,5040 ,2 +5041,20155 ,0 ,5041 ,2 +5042,87771 ,0 ,5042 ,2 +5043,83145 ,0 ,5043 ,2 +5044,45209 ,0 ,5044 ,2 +5045,26839 ,0 ,5045 ,2 +5046,86523 ,0 ,5046 ,2 +5047,52683 ,0 ,5047 ,2 +5048,57240 ,1 ,5048 ,2 +5049,82491 ,0 ,5049 ,2 +5050,13754 ,0 ,5050 ,2 +5051,75963 ,0 ,5051 ,2 +5052,78249 ,0 ,5052 ,2 +5053,87598 ,0 ,5053 ,2 +5054,88165 ,1 ,5054 ,2 +5055,40927 ,0 ,5055 ,2 +5056,47835 ,0 ,5056 ,2 +5057,32365 ,0 ,5057 ,2 +5058,11507 ,0 ,5058 ,2 +5059,20690 ,0 ,5059 ,2 +5060,21047 ,0 ,5060 ,2 +5061,38481 ,0 ,5061 ,2 +5062,81554 ,0 ,5062 ,2 +5063,52851 ,1 ,5063 ,2 +5064,25321 ,0 ,5064 ,2 +5065,66374 ,1 ,5065 ,2 +5066,30352 ,1 ,5066 ,2 +5067,63546 ,0 ,5067 ,2 +5068,21280 ,1 ,5068 ,2 +5069,18031 ,1 ,5069 ,2 +5070,45781 ,0 ,5070 ,2 +5071,89710 ,0 ,5071 ,2 +5072,82841 ,0 ,5072 ,2 +5073,35156 ,0 ,5073 ,2 +5074,39106 ,0 ,5074 ,2 +5075,49575 ,0 ,5075 ,2 +5076,41842 ,0 ,5076 ,2 +5077,52837 ,0 ,5077 ,2 +5078,29529 ,0 ,5078 ,2 +5079,64973 ,0 ,5079 ,2 +5080,39883 ,0 ,5080 ,2 +5081,74356 ,0 ,5081 ,2 +5082,75146 ,0 ,5082 ,2 +5083,47127 ,0 ,5083 ,2 +5084,17976 ,0 ,5084 ,2 +5085,49043 ,0 ,5085 ,2 +5086,28787 ,0 ,5086 ,2 +5087,13199 ,1 ,5087 ,2 +5088,69181 ,0 ,5088 ,2 +5089,67363 ,0 ,5089 ,2 +5090,86655 ,0 ,5090 ,2 +5091,23198 ,0 ,5091 ,2 +5092,76676 ,0 ,5092 ,2 +5093,87403 ,0 ,5093 ,2 +5094,89611 ,0 ,5094 ,2 +5095,57200 ,0 ,5095 ,2 +5096,46051 ,0 ,5096 ,2 +5097,47623 ,0 ,5097 ,2 +5098,50978 ,0 ,5098 ,2 +5099,36224 ,0 ,5099 ,2 +5100,27025 ,0 ,5100 ,2 +5101,35446 ,0 ,5101 ,2 +5102,55204 ,0 ,5102 ,2 +5103,39683 ,0 ,5103 ,2 +5104,62165 ,0 ,5104 ,2 +5105,54127 ,0 ,5105 ,2 +5106,42644 ,1 ,5106 ,2 +5107,82506 ,0 ,5107 ,2 +5108,80570 ,1 ,5108 ,2 +5109,30717 ,0 ,5109 ,2 +5110,36451 ,0 ,5110 ,2 +5111,85669 ,0 ,5111 ,2 +5112,25693 ,0 ,5112 ,2 +5113,12280 ,0 ,5113 ,2 +5114,59471 ,0 ,5114 ,2 +5115,15798 ,0 ,5115 ,2 +5116,52533 ,0 ,5116 ,2 +5117,55877 ,0 ,5117 ,2 +5118,27791 ,0 ,5118 ,2 +5119,34832 ,0 ,5119 ,2 +5120,27248 ,0 ,5120 ,2 +5121,76163 ,0 ,5121 ,2 +5122,82034 ,0 ,5122 ,2 +5123,21829 ,1 ,5123 ,2 +5124,19202 ,0 ,5124 ,2 +5125,19426 ,0 ,5125 ,2 +5126,29648 ,0 ,5126 ,2 +5127,62021 ,1 ,5127 ,2 +5128,89173 ,0 ,5128 ,2 +5129,80916 ,1 ,5129 ,2 +5130,71274 ,1 ,5130 ,2 +5131,24600 ,0 ,5131 ,2 +5132,69890 ,0 ,5132 ,2 +5133,21273 ,1 ,5133 ,2 +5134,67466 ,0 ,5134 ,2 +5135,82343 ,1 ,5135 ,2 +5136,35340 ,0 ,5136 ,2 +5137,43188 ,0 ,5137 ,2 +5138,26512 ,0 ,5138 ,2 +5139,73569 ,0 ,5139 ,2 +5140,74402 ,0 ,5140 ,2 +5141,63381 ,0 ,5141 ,2 +5142,41436 ,0 ,5142 ,2 +5143,54618 ,1 ,5143 ,2 +5144,51161 ,0 ,5144 ,2 +5145,47163 ,1 ,5145 ,2 +5146,88373 ,0 ,5146 ,2 +5147,77722 ,1 ,5147 ,2 +5148,13490 ,0 ,5148 ,2 +5149,28570 ,0 ,5149 ,2 +5150,55737 ,0 ,5150 ,2 +5151,79990 ,0 ,5151 ,2 +5152,89993 ,0 ,5152 ,2 +5153,49096 ,0 ,5153 ,2 +5154,71012 ,1 ,5154 ,2 +5155,27728 ,0 ,5155 ,2 +5156,18773 ,0 ,5156 ,2 +5157,18454 ,0 ,5157 ,2 +5158,43590 ,0 ,5158 ,2 +5159,27340 ,0 ,5159 ,2 +5160,76123 ,1 ,5160 ,2 +5161,22365 ,0 ,5161 ,2 +5162,11243 ,1 ,5162 ,2 +5163,69769 ,0 ,5163 ,2 +5164,51232 ,0 ,5164 ,2 +5165,62680 ,0 ,5165 ,2 +5166,75238 ,0 ,5166 ,2 +5167,87323 ,0 ,5167 ,2 +5168,40149 ,0 ,5168 ,2 +5169,33740 ,0 ,5169 ,2 +5170,26555 ,0 ,5170 ,2 +5171,81794 ,0 ,5171 ,2 +5172,37958 ,1 ,5172 ,2 +5173,27669 ,0 ,5173 ,2 +5174,36166 ,0 ,5174 ,2 +5175,13490 ,0 ,5175 ,2 +5176,89510 ,0 ,5176 ,2 +5177,82086 ,0 ,5177 ,2 +5178,19916 ,0 ,5178 ,2 +5179,19282 ,0 ,5179 ,2 +5180,68674 ,0 ,5180 ,2 +5181,21925 ,0 ,5181 ,2 +5182,37607 ,1 ,5182 ,2 +5183,71117 ,0 ,5183 ,2 +5184,71639 ,0 ,5184 ,2 +5185,64382 ,0 ,5185 ,2 +5186,65149 ,0 ,5186 ,2 +5187,21060 ,1 ,5187 ,2 +5188,80146 ,0 ,5188 ,2 +5189,25698 ,1 ,5189 ,2 +5190,72869 ,0 ,5190 ,2 +5191,50552 ,0 ,5191 ,2 +5192,43613 ,0 ,5192 ,2 +5193,46147 ,0 ,5193 ,2 +5194,35681 ,0 ,5194 ,2 +5195,63185 ,0 ,5195 ,2 +5196,82187 ,1 ,5196 ,2 +5197,17235 ,0 ,5197 ,2 +5198,16876 ,0 ,5198 ,2 +5199,74280 ,0 ,5199 ,2 +5200,32941 ,0 ,5200 ,2 +5201,68035 ,0 ,5201 ,2 +5202,44415 ,0 ,5202 ,2 +5203,82519 ,0 ,5203 ,2 +5204,12895 ,0 ,5204 ,2 +5205,10052 ,0 ,5205 ,2 +5206,81763 ,0 ,5206 ,2 +5207,70613 ,0 ,5207 ,2 +5208,17355 ,0 ,5208 ,2 +5209,78981 ,0 ,5209 ,2 +5210,21348 ,1 ,5210 ,2 +5211,29980 ,0 ,5211 ,2 +5212,39726 ,0 ,5212 ,2 +5213,19873 ,0 ,5213 ,2 +5214,83807 ,0 ,5214 ,2 +5215,49339 ,0 ,5215 ,2 +5216,63613 ,0 ,5216 ,2 +5217,31865 ,0 ,5217 ,2 +5218,39398 ,1 ,5218 ,2 +5219,10749 ,0 ,5219 ,2 +5220,47771 ,0 ,5220 ,2 +5221,35188 ,0 ,5221 ,2 +5222,30240 ,1 ,5222 ,2 +5223,36751 ,0 ,5223 ,2 +5224,43783 ,0 ,5224 ,2 +5225,70058 ,0 ,5225 ,2 +5226,45296 ,0 ,5226 ,2 +5227,79839 ,0 ,5227 ,2 +5228,49164 ,0 ,5228 ,2 +5229,39926 ,0 ,5229 ,2 +5230,17986 ,0 ,5230 ,2 +5231,82482 ,1 ,5231 ,2 +5232,43730 ,0 ,5232 ,2 +5233,78298 ,0 ,5233 ,2 +5234,20773 ,0 ,5234 ,2 +5235,45215 ,0 ,5235 ,2 +5236,81431 ,0 ,5236 ,2 +5237,40121 ,0 ,5237 ,2 +5238,79259 ,0 ,5238 ,2 +5239,43155 ,0 ,5239 ,2 +5240,38361 ,0 ,5240 ,2 +5241,25974 ,0 ,5241 ,2 +5242,64115 ,0 ,5242 ,2 +5243,47480 ,1 ,5243 ,2 +5244,30106 ,0 ,5244 ,2 +5245,69926 ,0 ,5245 ,2 +5246,30653 ,0 ,5246 ,2 +5247,37798 ,0 ,5247 ,2 +5248,22983 ,0 ,5248 ,2 +5249,79409 ,1 ,5249 ,2 +5250,44022 ,0 ,5250 ,2 +5251,72301 ,1 ,5251 ,2 +5252,25665 ,0 ,5252 ,2 +5253,27525 ,0 ,5253 ,2 +5254,80073 ,0 ,5254 ,2 +5255,61325 ,0 ,5255 ,2 +5256,37431 ,0 ,5256 ,2 +5257,34259 ,0 ,5257 ,2 +5258,69615 ,0 ,5258 ,2 +5259,26473 ,0 ,5259 ,2 +5260,59574 ,0 ,5260 ,2 +5261,87172 ,0 ,5261 ,2 +5262,88165 ,0 ,5262 ,2 +5263,45053 ,0 ,5263 ,2 +5264,39733 ,0 ,5264 ,2 +5265,81003 ,0 ,5265 ,2 +5266,40949 ,0 ,5266 ,2 +5267,61152 ,0 ,5267 ,2 +5268,60765 ,0 ,5268 ,2 +5269,64524 ,1 ,5269 ,2 +5270,46634 ,0 ,5270 ,2 +5271,15203 ,0 ,5271 ,2 +5272,75085 ,1 ,5272 ,2 +5273,80884 ,0 ,5273 ,2 +5274,85648 ,0 ,5274 ,2 +5275,82193 ,1 ,5275 ,2 +5276,77935 ,0 ,5276 ,2 +5277,44254 ,0 ,5277 ,2 +5278,44664 ,0 ,5278 ,2 +5279,20103 ,0 ,5279 ,2 +5280,52168 ,0 ,5280 ,2 +5281,57918 ,0 ,5281 ,2 +5282,79152 ,1 ,5282 ,2 +5283,84648 ,0 ,5283 ,2 +5284,30346 ,0 ,5284 ,2 +5285,61451 ,0 ,5285 ,2 +5286,74780 ,0 ,5286 ,2 +5287,57745 ,0 ,5287 ,2 +5288,78264 ,0 ,5288 ,2 +5289,32509 ,1 ,5289 ,2 +5290,39133 ,1 ,5290 ,2 +5291,81209 ,0 ,5291 ,2 +5292,39757 ,0 ,5292 ,2 +5293,50990 ,0 ,5293 ,2 +5294,62179 ,0 ,5294 ,2 +5295,48649 ,1 ,5295 ,2 +5296,60760 ,0 ,5296 ,2 +5297,20598 ,1 ,5297 ,2 +5298,69846 ,0 ,5298 ,2 +5299,53579 ,0 ,5299 ,2 +5300,27579 ,0 ,5300 ,2 +5301,74211 ,0 ,5301 ,2 +5302,64821 ,1 ,5302 ,2 +5303,46823 ,0 ,5303 ,2 +5304,56346 ,0 ,5304 ,2 +5305,29903 ,0 ,5305 ,2 +5306,26231 ,0 ,5306 ,2 +5307,55417 ,0 ,5307 ,2 +5308,61046 ,0 ,5308 ,2 +5309,51957 ,1 ,5309 ,2 +5310,73207 ,1 ,5310 ,2 +5311,40208 ,0 ,5311 ,2 +5312,37432 ,0 ,5312 ,2 +5313,45729 ,0 ,5313 ,2 +5314,31083 ,0 ,5314 ,2 +5315,79468 ,0 ,5315 ,2 +5316,22119 ,0 ,5316 ,2 +5317,85537 ,0 ,5317 ,2 +5318,71053 ,0 ,5318 ,2 +5319,39782 ,0 ,5319 ,2 +5320,86355 ,0 ,5320 ,2 +5321,58148 ,0 ,5321 ,2 +5322,64507 ,0 ,5322 ,2 +5323,46162 ,0 ,5323 ,2 +5324,30919 ,0 ,5324 ,2 +5325,43250 ,0 ,5325 ,2 +5326,80703 ,0 ,5326 ,2 +5327,14224 ,0 ,5327 ,2 +5328,55140 ,1 ,5328 ,2 +5329,38091 ,0 ,5329 ,2 +5330,42224 ,0 ,5330 ,2 +5331,45491 ,0 ,5331 ,2 +5332,23118 ,1 ,5332 ,2 +5333,14262 ,0 ,5333 ,2 +5334,77816 ,0 ,5334 ,2 +5335,67653 ,0 ,5335 ,2 +5336,67800 ,1 ,5336 ,2 +5337,21680 ,1 ,5337 ,2 +5338,11229 ,1 ,5338 ,2 +5339,71336 ,0 ,5339 ,2 +5340,33187 ,0 ,5340 ,2 +5341,83332 ,0 ,5341 ,2 +5342,29828 ,0 ,5342 ,2 +5343,88876 ,0 ,5343 ,2 +5344,85802 ,0 ,5344 ,2 +5345,84128 ,0 ,5345 ,2 +5346,51778 ,0 ,5346 ,2 +5347,10451 ,0 ,5347 ,2 +5348,33088 ,0 ,5348 ,2 +5349,31518 ,0 ,5349 ,2 +5350,43083 ,0 ,5350 ,2 +5351,70143 ,1 ,5351 ,2 +5352,41877 ,1 ,5352 ,2 +5353,30893 ,0 ,5353 ,2 +5354,48175 ,0 ,5354 ,2 +5355,10178 ,1 ,5355 ,2 +5356,59880 ,0 ,5356 ,2 +5357,75755 ,0 ,5357 ,2 +5358,48756 ,0 ,5358 ,2 +5359,88839 ,1 ,5359 ,2 +5360,50009 ,0 ,5360 ,2 +5361,79011 ,1 ,5361 ,2 +5362,82765 ,0 ,5362 ,2 +5363,11976 ,0 ,5363 ,2 +5364,25238 ,0 ,5364 ,2 +5365,60159 ,0 ,5365 ,2 +5366,32764 ,0 ,5366 ,2 +5367,76164 ,0 ,5367 ,2 +5368,20128 ,1 ,5368 ,2 +5369,38574 ,0 ,5369 ,2 +5370,78988 ,0 ,5370 ,2 +5371,39963 ,1 ,5371 ,2 +5372,62659 ,0 ,5372 ,2 +5373,71273 ,0 ,5373 ,2 +5374,77134 ,0 ,5374 ,2 +5375,63340 ,0 ,5375 ,2 +5376,44256 ,0 ,5376 ,2 +5377,50445 ,0 ,5377 ,2 +5378,45557 ,0 ,5378 ,2 +5379,33902 ,0 ,5379 ,2 +5380,71184 ,0 ,5380 ,2 +5381,46685 ,0 ,5381 ,2 +5382,80968 ,0 ,5382 ,2 +5383,75204 ,0 ,5383 ,2 +5384,67674 ,1 ,5384 ,2 +5385,35132 ,0 ,5385 ,2 +5386,17301 ,0 ,5386 ,2 +5387,66880 ,1 ,5387 ,2 +5388,10738 ,0 ,5388 ,2 +5389,19859 ,0 ,5389 ,2 +5390,42559 ,0 ,5390 ,2 +5391,75924 ,0 ,5391 ,2 +5392,15523 ,1 ,5392 ,2 +5393,88788 ,0 ,5393 ,2 +5394,64555 ,0 ,5394 ,2 +5395,49405 ,0 ,5395 ,2 +5396,34388 ,1 ,5396 ,2 +5397,65227 ,0 ,5397 ,2 +5398,30882 ,0 ,5398 ,2 +5399,45572 ,0 ,5399 ,2 +5400,48663 ,0 ,5400 ,2 +5401,49422 ,0 ,5401 ,2 +5402,77132 ,1 ,5402 ,2 +5403,60630 ,0 ,5403 ,2 +5404,83691 ,0 ,5404 ,2 +5405,49443 ,0 ,5405 ,2 +5406,37881 ,0 ,5406 ,2 +5407,77205 ,0 ,5407 ,2 +5408,84812 ,1 ,5408 ,2 +5409,73843 ,0 ,5409 ,2 +5410,23984 ,1 ,5410 ,2 +5411,42345 ,0 ,5411 ,2 +5412,41755 ,0 ,5412 ,2 +5413,50165 ,0 ,5413 ,2 +5414,81696 ,1 ,5414 ,2 +5415,38551 ,0 ,5415 ,2 +5416,14629 ,0 ,5416 ,2 +5417,39390 ,1 ,5417 ,2 +5418,16457 ,0 ,5418 ,2 +5419,44103 ,0 ,5419 ,2 +5420,51440 ,0 ,5420 ,2 +5421,34022 ,0 ,5421 ,2 +5422,34234 ,0 ,5422 ,2 +5423,82273 ,0 ,5423 ,2 +5424,46222 ,0 ,5424 ,2 +5425,18438 ,0 ,5425 ,2 +5426,18281 ,0 ,5426 ,2 +5427,39431 ,0 ,5427 ,2 +5428,18411 ,0 ,5428 ,2 +5429,67855 ,0 ,5429 ,2 +5430,36058 ,1 ,5430 ,2 +5431,57046 ,0 ,5431 ,2 +5432,31427 ,0 ,5432 ,2 +5433,18179 ,0 ,5433 ,2 +5434,16295 ,0 ,5434 ,2 +5435,68067 ,0 ,5435 ,2 +5436,57655 ,0 ,5436 ,2 +5437,87725 ,0 ,5437 ,2 +5438,18248 ,1 ,5438 ,2 +5439,39299 ,0 ,5439 ,2 +5440,56691 ,1 ,5440 ,2 +5441,15234 ,0 ,5441 ,2 +5442,37649 ,0 ,5442 ,2 +5443,64614 ,0 ,5443 ,2 +5444,73372 ,0 ,5444 ,2 +5445,55963 ,0 ,5445 ,2 +5446,86397 ,0 ,5446 ,2 +5447,39348 ,1 ,5447 ,2 +5448,71265 ,0 ,5448 ,2 +5449,46219 ,0 ,5449 ,2 +5450,83482 ,0 ,5450 ,2 +5451,75598 ,0 ,5451 ,2 +5452,89497 ,0 ,5452 ,2 +5453,29694 ,0 ,5453 ,2 +5454,75084 ,0 ,5454 ,2 +5455,45597 ,0 ,5455 ,2 +5456,60389 ,0 ,5456 ,2 +5457,65005 ,0 ,5457 ,2 +5458,73744 ,0 ,5458 ,2 +5459,27017 ,0 ,5459 ,2 +5460,65680 ,0 ,5460 ,2 +5461,83684 ,0 ,5461 ,2 +5462,15881 ,0 ,5462 ,2 +5463,16058 ,1 ,5463 ,2 +5464,42693 ,0 ,5464 ,2 +5465,20786 ,0 ,5465 ,2 +5466,27942 ,0 ,5466 ,2 +5467,83127 ,0 ,5467 ,2 +5468,17136 ,0 ,5468 ,2 +5469,60545 ,0 ,5469 ,2 +5470,35319 ,0 ,5470 ,2 +5471,13386 ,0 ,5471 ,2 +5472,29369 ,0 ,5472 ,2 +5473,50676 ,0 ,5473 ,2 +5474,31283 ,0 ,5474 ,2 +5475,12956 ,0 ,5475 ,2 +5476,11323 ,1 ,5476 ,2 +5477,48044 ,0 ,5477 ,2 +5478,89453 ,0 ,5478 ,2 +5479,31145 ,0 ,5479 ,2 +5480,21937 ,0 ,5480 ,2 +5481,78690 ,1 ,5481 ,2 +5482,69730 ,0 ,5482 ,2 +5483,24473 ,0 ,5483 ,2 +5484,75522 ,0 ,5484 ,2 +5485,74879 ,0 ,5485 ,2 +5486,83813 ,0 ,5486 ,2 +5487,47269 ,0 ,5487 ,2 +5488,64005 ,0 ,5488 ,2 +5489,16845 ,1 ,5489 ,2 +5490,65962 ,0 ,5490 ,2 +5491,38281 ,0 ,5491 ,2 +5492,26048 ,0 ,5492 ,2 +5493,54138 ,0 ,5493 ,2 +5494,15307 ,0 ,5494 ,2 +5495,57848 ,1 ,5495 ,2 +5496,76541 ,0 ,5496 ,2 +5497,75082 ,0 ,5497 ,2 +5498,37499 ,0 ,5498 ,2 +5499,88359 ,0 ,5499 ,2 +5500,11386 ,0 ,5500 ,2 +5501,29993 ,0 ,5501 ,2 +5502,47229 ,0 ,5502 ,2 +5503,83102 ,0 ,5503 ,2 +5504,63953 ,0 ,5504 ,2 +5505,76739 ,0 ,5505 ,2 +5506,83976 ,0 ,5506 ,2 +5507,58746 ,0 ,5507 ,2 +5508,39321 ,1 ,5508 ,2 +5509,70271 ,0 ,5509 ,2 +5510,73752 ,0 ,5510 ,2 +5511,22815 ,0 ,5511 ,2 +5512,76640 ,0 ,5512 ,2 +5513,68029 ,0 ,5513 ,2 +5514,12128 ,0 ,5514 ,2 +5515,12737 ,0 ,5515 ,2 +5516,25457 ,0 ,5516 ,2 +5517,28761 ,0 ,5517 ,2 +5518,46088 ,1 ,5518 ,2 +5519,84886 ,0 ,5519 ,2 +5520,14069 ,0 ,5520 ,2 +5521,62014 ,0 ,5521 ,2 +5522,46665 ,0 ,5522 ,2 +5523,73079 ,0 ,5523 ,2 +5524,64901 ,0 ,5524 ,2 +5525,65471 ,0 ,5525 ,2 +5526,75655 ,0 ,5526 ,2 +5527,44789 ,0 ,5527 ,2 +5528,86660 ,0 ,5528 ,2 +5529,36205 ,0 ,5529 ,2 +5530,57242 ,0 ,5530 ,2 +5531,65431 ,0 ,5531 ,2 +5532,57046 ,1 ,5532 ,2 +5533,60685 ,0 ,5533 ,2 +5534,57012 ,1 ,5534 ,2 +5535,73789 ,0 ,5535 ,2 +5536,47797 ,0 ,5536 ,2 +5537,63695 ,0 ,5537 ,2 +5538,30313 ,0 ,5538 ,2 +5539,16803 ,0 ,5539 ,2 +5540,30573 ,1 ,5540 ,2 +5541,80761 ,0 ,5541 ,2 +5542,30498 ,0 ,5542 ,2 +5543,52009 ,0 ,5543 ,2 +5544,56945 ,0 ,5544 ,2 +5545,35483 ,1 ,5545 ,2 +5546,66447 ,0 ,5546 ,2 +5547,45278 ,1 ,5547 ,2 +5548,15744 ,1 ,5548 ,2 +5549,74598 ,0 ,5549 ,2 +5550,61919 ,0 ,5550 ,2 +5551,83640 ,1 ,5551 ,2 +5552,39135 ,0 ,5552 ,2 +5553,53906 ,1 ,5553 ,2 +5554,57392 ,0 ,5554 ,2 +5555,18763 ,0 ,5555 ,2 +5556,53135 ,0 ,5556 ,2 +5557,57439 ,1 ,5557 ,2 +5558,88262 ,0 ,5558 ,2 +5559,48245 ,1 ,5559 ,2 +5560,78383 ,0 ,5560 ,2 +5561,24398 ,0 ,5561 ,2 +5562,28051 ,0 ,5562 ,2 +5563,43895 ,0 ,5563 ,2 +5564,13056 ,0 ,5564 ,2 +5565,57366 ,1 ,5565 ,2 +5566,41652 ,0 ,5566 ,2 +5567,79516 ,0 ,5567 ,2 +5568,35568 ,1 ,5568 ,2 +5569,33603 ,0 ,5569 ,2 +5570,56156 ,0 ,5570 ,2 +5571,17412 ,0 ,5571 ,2 +5572,48611 ,0 ,5572 ,2 +5573,73013 ,0 ,5573 ,2 +5574,13051 ,0 ,5574 ,2 +5575,46671 ,0 ,5575 ,2 +5576,16414 ,1 ,5576 ,2 +5577,41066 ,0 ,5577 ,2 +5578,31539 ,1 ,5578 ,2 +5579,26768 ,0 ,5579 ,2 +5580,40202 ,0 ,5580 ,2 +5581,81263 ,0 ,5581 ,2 +5582,23225 ,0 ,5582 ,2 +5583,83662 ,0 ,5583 ,2 +5584,79598 ,0 ,5584 ,2 +5585,66914 ,0 ,5585 ,2 +5586,61236 ,0 ,5586 ,2 +5587,84561 ,1 ,5587 ,2 +5588,21955 ,0 ,5588 ,2 +5589,11880 ,0 ,5589 ,2 +5590,83279 ,0 ,5590 ,2 +5591,38966 ,0 ,5591 ,2 +5592,30279 ,1 ,5592 ,2 +5593,12403 ,1 ,5593 ,2 +5594,31053 ,0 ,5594 ,2 +5595,68922 ,1 ,5595 ,2 +5596,20129 ,1 ,5596 ,2 +5597,54116 ,0 ,5597 ,2 +5598,80408 ,0 ,5598 ,2 +5599,28641 ,0 ,5599 ,2 +5600,48831 ,0 ,5600 ,2 +5601,71126 ,0 ,5601 ,2 +5602,37794 ,0 ,5602 ,2 +5603,31360 ,0 ,5603 ,2 +5604,48917 ,0 ,5604 ,2 +5605,54190 ,1 ,5605 ,2 +5606,13417 ,0 ,5606 ,2 +5607,71139 ,0 ,5607 ,2 +5608,62744 ,1 ,5608 ,2 +5609,10484 ,0 ,5609 ,2 +5610,40567 ,0 ,5610 ,2 +5611,36204 ,1 ,5611 ,2 +5612,39026 ,0 ,5612 ,2 +5613,22429 ,1 ,5613 ,2 +5614,30882 ,0 ,5614 ,2 +5615,73960 ,0 ,5615 ,2 +5616,64889 ,0 ,5616 ,2 +5617,61399 ,1 ,5617 ,2 +5618,67636 ,1 ,5618 ,2 +5619,31178 ,1 ,5619 ,2 +5620,66248 ,0 ,5620 ,2 +5621,27764 ,0 ,5621 ,2 +5622,21752 ,0 ,5622 ,2 +5623,71937 ,0 ,5623 ,2 +5624,50875 ,0 ,5624 ,2 +5625,13847 ,0 ,5625 ,2 +5626,32907 ,0 ,5626 ,2 +5627,85045 ,0 ,5627 ,2 +5628,73246 ,0 ,5628 ,2 +5629,14130 ,0 ,5629 ,2 +5630,78937 ,0 ,5630 ,2 +5631,46644 ,1 ,5631 ,2 +5632,52763 ,0 ,5632 ,2 +5633,77486 ,1 ,5633 ,2 +5634,14287 ,0 ,5634 ,2 +5635,76149 ,0 ,5635 ,2 +5636,31478 ,0 ,5636 ,2 +5637,43958 ,0 ,5637 ,2 +5638,42383 ,0 ,5638 ,2 +5639,26745 ,1 ,5639 ,2 +5640,47546 ,1 ,5640 ,2 +5641,68866 ,0 ,5641 ,2 +5642,34180 ,0 ,5642 ,2 +5643,83599 ,0 ,5643 ,2 +5644,62956 ,0 ,5644 ,2 +5645,13871 ,0 ,5645 ,2 +5646,41283 ,1 ,5646 ,2 +5647,75408 ,0 ,5647 ,2 +5648,43035 ,0 ,5648 ,2 +5649,19391 ,0 ,5649 ,2 +5650,47978 ,0 ,5650 ,2 +5651,22255 ,0 ,5651 ,2 +5652,23158 ,0 ,5652 ,2 +5653,83892 ,1 ,5653 ,2 +5654,84699 ,0 ,5654 ,2 +5655,18602 ,0 ,5655 ,2 +5656,23338 ,0 ,5656 ,2 +5657,51795 ,0 ,5657 ,2 +5658,65215 ,0 ,5658 ,2 +5659,13610 ,0 ,5659 ,2 +5660,24396 ,0 ,5660 ,2 +5661,16150 ,0 ,5661 ,2 +5662,52098 ,0 ,5662 ,2 +5663,45962 ,0 ,5663 ,2 +5664,17321 ,0 ,5664 ,2 +5665,45557 ,1 ,5665 ,2 +5666,33719 ,0 ,5666 ,2 +5667,66128 ,0 ,5667 ,2 +5668,54420 ,0 ,5668 ,2 +5669,40299 ,1 ,5669 ,2 +5670,37631 ,0 ,5670 ,2 +5671,25117 ,0 ,5671 ,2 +5672,51169 ,0 ,5672 ,2 +5673,41396 ,0 ,5673 ,2 +5674,79935 ,0 ,5674 ,2 +5675,56879 ,0 ,5675 ,2 +5676,27458 ,0 ,5676 ,2 +5677,35472 ,0 ,5677 ,2 +5678,72173 ,0 ,5678 ,2 +5679,48655 ,0 ,5679 ,2 +5680,24195 ,0 ,5680 ,2 +5681,15026 ,0 ,5681 ,2 +5682,76149 ,0 ,5682 ,2 +5683,85684 ,0 ,5683 ,2 +5684,30415 ,0 ,5684 ,2 +5685,56894 ,0 ,5685 ,2 +5686,62810 ,0 ,5686 ,2 +5687,65574 ,1 ,5687 ,2 +5688,64124 ,1 ,5688 ,2 +5689,87979 ,0 ,5689 ,2 +5690,16204 ,0 ,5690 ,2 +5691,84304 ,0 ,5691 ,2 +5692,78096 ,0 ,5692 ,2 +5693,78879 ,1 ,5693 ,2 +5694,31070 ,0 ,5694 ,2 +5695,25094 ,0 ,5695 ,2 +5696,82818 ,0 ,5696 ,2 +5697,13945 ,1 ,5697 ,2 +5698,34911 ,0 ,5698 ,2 +5699,10878 ,0 ,5699 ,2 +5700,86592 ,0 ,5700 ,2 +5701,13081 ,0 ,5701 ,2 +5702,24000 ,0 ,5702 ,2 +5703,54071 ,0 ,5703 ,2 +5704,35711 ,0 ,5704 ,2 +5705,34021 ,0 ,5705 ,2 +5706,19013 ,0 ,5706 ,2 +5707,80172 ,0 ,5707 ,2 +5708,56174 ,1 ,5708 ,2 +5709,34380 ,0 ,5709 ,2 +5710,38935 ,0 ,5710 ,2 +5711,45580 ,0 ,5711 ,2 +5712,56849 ,0 ,5712 ,2 +5713,38425 ,0 ,5713 ,2 +5714,67063 ,0 ,5714 ,2 +5715,66078 ,0 ,5715 ,2 +5716,71849 ,0 ,5716 ,2 +5717,12226 ,0 ,5717 ,2 +5718,34959 ,0 ,5718 ,2 +5719,25817 ,0 ,5719 ,2 +5720,67322 ,0 ,5720 ,2 +5721,80417 ,1 ,5721 ,2 +5722,11169 ,0 ,5722 ,2 +5723,83224 ,0 ,5723 ,2 +5724,49154 ,0 ,5724 ,2 +5725,52877 ,0 ,5725 ,2 +5726,67478 ,0 ,5726 ,2 +5727,74722 ,0 ,5727 ,2 +5728,35734 ,1 ,5728 ,2 +5729,26224 ,0 ,5729 ,2 +5730,82256 ,0 ,5730 ,2 +5731,15546 ,0 ,5731 ,2 +5732,21971 ,0 ,5732 ,2 +5733,44671 ,1 ,5733 ,2 +5734,51752 ,0 ,5734 ,2 +5735,65365 ,1 ,5735 ,2 +5736,22128 ,0 ,5736 ,2 +5737,66197 ,1 ,5737 ,2 +5738,71400 ,1 ,5738 ,2 +5739,29170 ,0 ,5739 ,2 +5740,71288 ,1 ,5740 ,2 +5741,69980 ,0 ,5741 ,2 +5742,25436 ,0 ,5742 ,2 +5743,89745 ,0 ,5743 ,2 +5744,61163 ,0 ,5744 ,2 +5745,69994 ,0 ,5745 ,2 +5746,33117 ,0 ,5746 ,2 +5747,41166 ,0 ,5747 ,2 +5748,88149 ,0 ,5748 ,2 +5749,31565 ,0 ,5749 ,2 +5750,76293 ,0 ,5750 ,2 +5751,71891 ,0 ,5751 ,2 +5752,27041 ,0 ,5752 ,2 +5753,39100 ,1 ,5753 ,2 +5754,42752 ,1 ,5754 ,2 +5755,48287 ,0 ,5755 ,2 +5756,31694 ,0 ,5756 ,2 +5757,31589 ,0 ,5757 ,2 +5758,78681 ,0 ,5758 ,2 +5759,32287 ,0 ,5759 ,2 +5760,88512 ,0 ,5760 ,2 +5761,27740 ,1 ,5761 ,2 +5762,79451 ,0 ,5762 ,2 +5763,30766 ,0 ,5763 ,2 +5764,77388 ,0 ,5764 ,2 +5765,38037 ,0 ,5765 ,2 +5766,27173 ,1 ,5766 ,2 +5767,76025 ,0 ,5767 ,2 +5768,31219 ,0 ,5768 ,2 +5769,16537 ,1 ,5769 ,2 +5770,80857 ,0 ,5770 ,2 +5771,12144 ,0 ,5771 ,2 +5772,41030 ,0 ,5772 ,2 +5773,60122 ,0 ,5773 ,2 +5774,12382 ,0 ,5774 ,2 +5775,80028 ,0 ,5775 ,2 +5776,36447 ,0 ,5776 ,2 +5777,25795 ,1 ,5777 ,2 +5778,20484 ,0 ,5778 ,2 +5779,14922 ,0 ,5779 ,2 +5780,68325 ,0 ,5780 ,2 +5781,48100 ,0 ,5781 ,2 +5782,47256 ,0 ,5782 ,2 +5783,75892 ,0 ,5783 ,2 +5784,43588 ,0 ,5784 ,2 +5785,45706 ,1 ,5785 ,2 +5786,48123 ,0 ,5786 ,2 +5787,49555 ,0 ,5787 ,2 +5788,31040 ,0 ,5788 ,2 +5789,78371 ,0 ,5789 ,2 +5790,61457 ,0 ,5790 ,2 +5791,60840 ,0 ,5791 ,2 +5792,78946 ,0 ,5792 ,2 +5793,75442 ,0 ,5793 ,2 +5794,52562 ,0 ,5794 ,2 +5795,73942 ,0 ,5795 ,2 +5796,51170 ,0 ,5796 ,2 +5797,81628 ,1 ,5797 ,2 +5798,26678 ,0 ,5798 ,2 +5799,71698 ,0 ,5799 ,2 +5800,24582 ,0 ,5800 ,2 +5801,82462 ,0 ,5801 ,2 +5802,40951 ,1 ,5802 ,2 +5803,57659 ,0 ,5803 ,2 +5804,51908 ,0 ,5804 ,2 +5805,33800 ,0 ,5805 ,2 +5806,47526 ,0 ,5806 ,2 +5807,49392 ,0 ,5807 ,2 +5808,36659 ,0 ,5808 ,2 +5809,67255 ,0 ,5809 ,2 +5810,32523 ,0 ,5810 ,2 +5811,78824 ,1 ,5811 ,2 +5812,53690 ,0 ,5812 ,2 +5813,61781 ,0 ,5813 ,2 +5814,61574 ,0 ,5814 ,2 +5815,61484 ,1 ,5815 ,2 +5816,70237 ,1 ,5816 ,2 +5817,78044 ,1 ,5817 ,2 +5818,56470 ,1 ,5818 ,2 +5819,63166 ,0 ,5819 ,2 +5820,67291 ,1 ,5820 ,2 +5821,20588 ,0 ,5821 ,2 +5822,43599 ,0 ,5822 ,2 +5823,80442 ,0 ,5823 ,2 +5824,35596 ,0 ,5824 ,2 +5825,29436 ,0 ,5825 ,2 +5826,70748 ,0 ,5826 ,2 +5827,52743 ,0 ,5827 ,2 +5828,36108 ,0 ,5828 ,2 +5829,60089 ,1 ,5829 ,2 +5830,63257 ,0 ,5830 ,2 +5831,68310 ,0 ,5831 ,2 +5832,15811 ,0 ,5832 ,2 +5833,32056 ,1 ,5833 ,2 +5834,43243 ,1 ,5834 ,2 +5835,73585 ,0 ,5835 ,2 +5836,23917 ,0 ,5836 ,2 +5837,73706 ,0 ,5837 ,2 +5838,33370 ,0 ,5838 ,2 +5839,58453 ,0 ,5839 ,2 +5840,68160 ,0 ,5840 ,2 +5841,87621 ,0 ,5841 ,2 +5842,17039 ,0 ,5842 ,2 +5843,30401 ,0 ,5843 ,2 +5844,55025 ,0 ,5844 ,2 +5845,38836 ,0 ,5845 ,2 +5846,49217 ,1 ,5846 ,2 +5847,54462 ,0 ,5847 ,2 +5848,73254 ,0 ,5848 ,2 +5849,11833 ,0 ,5849 ,2 +5850,30511 ,1 ,5850 ,2 +5851,55783 ,0 ,5851 ,2 +5852,74694 ,0 ,5852 ,2 +5853,15241 ,0 ,5853 ,2 +5854,82450 ,0 ,5854 ,2 +5855,85553 ,0 ,5855 ,2 +5856,76261 ,1 ,5856 ,2 +5857,60839 ,0 ,5857 ,2 +5858,69695 ,0 ,5858 ,2 +5859,11542 ,0 ,5859 ,2 +5860,80127 ,0 ,5860 ,2 +5861,35042 ,0 ,5861 ,2 +5862,34329 ,0 ,5862 ,2 +5863,34340 ,1 ,5863 ,2 +5864,35703 ,0 ,5864 ,2 +5865,47442 ,1 ,5865 ,2 +5866,87458 ,0 ,5866 ,2 +5867,23022 ,1 ,5867 ,2 +5868,19584 ,1 ,5868 ,2 +5869,21403 ,0 ,5869 ,2 +5870,88282 ,0 ,5870 ,2 +5871,58862 ,1 ,5871 ,2 +5872,50251 ,0 ,5872 ,2 +5873,36884 ,1 ,5873 ,2 +5874,65484 ,0 ,5874 ,2 +5875,55852 ,0 ,5875 ,2 +5876,59519 ,0 ,5876 ,2 +5877,24785 ,1 ,5877 ,2 +5878,53916 ,0 ,5878 ,2 +5879,75045 ,0 ,5879 ,2 +5880,10499 ,0 ,5880 ,2 +5881,45530 ,0 ,5881 ,2 +5882,24840 ,0 ,5882 ,2 +5883,20932 ,0 ,5883 ,2 +5884,26092 ,0 ,5884 ,2 +5885,33625 ,0 ,5885 ,2 +5886,89611 ,0 ,5886 ,2 +5887,56440 ,0 ,5887 ,2 +5888,39692 ,1 ,5888 ,2 +5889,26771 ,0 ,5889 ,2 +5890,18426 ,0 ,5890 ,2 +5891,15302 ,0 ,5891 ,2 +5892,88538 ,0 ,5892 ,2 +5893,88445 ,0 ,5893 ,2 +5894,32475 ,1 ,5894 ,2 +5895,15320 ,0 ,5895 ,2 +5896,33355 ,0 ,5896 ,2 +5897,87541 ,0 ,5897 ,2 +5898,80052 ,0 ,5898 ,2 +5899,81834 ,0 ,5899 ,2 +5900,53288 ,0 ,5900 ,2 +5901,55365 ,0 ,5901 ,2 +5902,71552 ,0 ,5902 ,2 +5903,11896 ,0 ,5903 ,2 +5904,61207 ,0 ,5904 ,2 +5905,46888 ,0 ,5905 ,2 +5906,75615 ,0 ,5906 ,2 +5907,84684 ,0 ,5907 ,2 +5908,60033 ,0 ,5908 ,2 +5909,38067 ,0 ,5909 ,2 +5910,79281 ,0 ,5910 ,2 +5911,27165 ,0 ,5911 ,2 +5912,78489 ,1 ,5912 ,2 +5913,26155 ,0 ,5913 ,2 +5914,17523 ,1 ,5914 ,2 +5915,54819 ,0 ,5915 ,2 +5916,17291 ,0 ,5916 ,2 +5917,81795 ,0 ,5917 ,2 +5918,29605 ,0 ,5918 ,2 +5919,10524 ,0 ,5919 ,2 +5920,32893 ,0 ,5920 ,2 +5921,76662 ,1 ,5921 ,2 +5922,52596 ,0 ,5922 ,2 +5923,83694 ,0 ,5923 ,2 +5924,66351 ,0 ,5924 ,2 +5925,51159 ,0 ,5925 ,2 +5926,77559 ,0 ,5926 ,2 +5927,18351 ,1 ,5927 ,2 +5928,44968 ,1 ,5928 ,2 +5929,88806 ,0 ,5929 ,2 +5930,82797 ,0 ,5930 ,2 +5931,57069 ,0 ,5931 ,2 +5932,72652 ,1 ,5932 ,2 +5933,55202 ,0 ,5933 ,2 +5934,32247 ,0 ,5934 ,2 +5935,55834 ,0 ,5935 ,2 +5936,24593 ,0 ,5936 ,2 +5937,47109 ,0 ,5937 ,2 +5938,12031 ,0 ,5938 ,2 +5939,74595 ,1 ,5939 ,2 +5940,54475 ,0 ,5940 ,2 +5941,24186 ,0 ,5941 ,2 +5942,44583 ,0 ,5942 ,2 +5943,86786 ,0 ,5943 ,2 +5944,88073 ,1 ,5944 ,2 +5945,16193 ,0 ,5945 ,2 +5946,83594 ,1 ,5946 ,2 +5947,64053 ,0 ,5947 ,2 +5948,34717 ,0 ,5948 ,2 +5949,64148 ,0 ,5949 ,2 +5950,65393 ,0 ,5950 ,2 +5951,43049 ,0 ,5951 ,2 +5952,70946 ,0 ,5952 ,2 +5953,65386 ,0 ,5953 ,2 +5954,24342 ,0 ,5954 ,2 +5955,64527 ,0 ,5955 ,2 +5956,26359 ,0 ,5956 ,2 +5957,16817 ,1 ,5957 ,2 +5958,46403 ,0 ,5958 ,2 +5959,84627 ,0 ,5959 ,2 +5960,15575 ,0 ,5960 ,2 +5961,70128 ,0 ,5961 ,2 +5962,84865 ,0 ,5962 ,2 +5963,85428 ,0 ,5963 ,2 +5964,85533 ,1 ,5964 ,2 +5965,31440 ,0 ,5965 ,2 +5966,27415 ,0 ,5966 ,2 +5967,45083 ,0 ,5967 ,2 +5968,38349 ,1 ,5968 ,2 +5969,39385 ,0 ,5969 ,2 +5970,59925 ,0 ,5970 ,2 +5971,66225 ,0 ,5971 ,2 +5972,61865 ,0 ,5972 ,2 +5973,46654 ,0 ,5973 ,2 +5974,23444 ,1 ,5974 ,2 +5975,15990 ,0 ,5975 ,2 +5976,59990 ,0 ,5976 ,2 +5977,21625 ,0 ,5977 ,2 +5978,23168 ,0 ,5978 ,2 +5979,28634 ,0 ,5979 ,2 +5980,64199 ,0 ,5980 ,2 +5981,39506 ,0 ,5981 ,2 +5982,54194 ,0 ,5982 ,2 +5983,85067 ,0 ,5983 ,2 +5984,14288 ,0 ,5984 ,2 +5985,65805 ,0 ,5985 ,2 +5986,67140 ,0 ,5986 ,2 +5987,82720 ,0 ,5987 ,2 +5988,16476 ,1 ,5988 ,2 +5989,44152 ,1 ,5989 ,2 +5990,89674 ,1 ,5990 ,2 +5991,62966 ,1 ,5991 ,2 +5992,10388 ,0 ,5992 ,2 +5993,58415 ,0 ,5993 ,2 +5994,16291 ,0 ,5994 ,2 +5995,73598 ,0 ,5995 ,2 +5996,58188 ,0 ,5996 ,2 +5997,38772 ,0 ,5997 ,2 +5998,35650 ,0 ,5998 ,2 +5999,88974 ,0 ,5999 ,2 +6000,40422 ,0 ,6000 ,3 +6001,54184 ,0 ,6001 ,3 +6002,40379 ,0 ,6002 ,3 +6003,88298 ,0 ,6003 ,3 +6004,83442 ,0 ,6004 ,3 +6005,73373 ,0 ,6005 ,3 +6006,86232 ,0 ,6006 ,3 +6007,15570 ,0 ,6007 ,3 +6008,21951 ,0 ,6008 ,3 +6009,26679 ,0 ,6009 ,3 +6010,33623 ,0 ,6010 ,3 +6011,14545 ,0 ,6011 ,3 +6012,76924 ,1 ,6012 ,3 +6013,48111 ,0 ,6013 ,3 +6014,19621 ,0 ,6014 ,3 +6015,36201 ,0 ,6015 ,3 +6016,12854 ,0 ,6016 ,3 +6017,65728 ,0 ,6017 ,3 +6018,88378 ,0 ,6018 ,3 +6019,49610 ,0 ,6019 ,3 +6020,54390 ,0 ,6020 ,3 +6021,22706 ,0 ,6021 ,3 +6022,11076 ,0 ,6022 ,3 +6023,28554 ,0 ,6023 ,3 +6024,84395 ,0 ,6024 ,3 +6025,60192 ,1 ,6025 ,3 +6026,82772 ,0 ,6026 ,3 +6027,15117 ,0 ,6027 ,3 +6028,29349 ,0 ,6028 ,3 +6029,63426 ,0 ,6029 ,3 +6030,42681 ,0 ,6030 ,3 +6031,17396 ,0 ,6031 ,3 +6032,49981 ,1 ,6032 ,3 +6033,74143 ,0 ,6033 ,3 +6034,25418 ,0 ,6034 ,3 +6035,67020 ,0 ,6035 ,3 +6036,40382 ,0 ,6036 ,3 +6037,43906 ,0 ,6037 ,3 +6038,47830 ,0 ,6038 ,3 +6039,37389 ,1 ,6039 ,3 +6040,70410 ,0 ,6040 ,3 +6041,28925 ,0 ,6041 ,3 +6042,49497 ,1 ,6042 ,3 +6043,12250 ,0 ,6043 ,3 +6044,36939 ,0 ,6044 ,3 +6045,73105 ,0 ,6045 ,3 +6046,82207 ,0 ,6046 ,3 +6047,28700 ,0 ,6047 ,3 +6048,70504 ,0 ,6048 ,3 +6049,15460 ,0 ,6049 ,3 +6050,37416 ,0 ,6050 ,3 +6051,10068 ,0 ,6051 ,3 +6052,36079 ,0 ,6052 ,3 +6053,49197 ,1 ,6053 ,3 +6054,78144 ,1 ,6054 ,3 +6055,13950 ,1 ,6055 ,3 +6056,83239 ,0 ,6056 ,3 +6057,72978 ,0 ,6057 ,3 +6058,11972 ,0 ,6058 ,3 +6059,19527 ,0 ,6059 ,3 +6060,35924 ,1 ,6060 ,3 +6061,57088 ,0 ,6061 ,3 +6062,29480 ,1 ,6062 ,3 +6063,72829 ,1 ,6063 ,3 +6064,29946 ,0 ,6064 ,3 +6065,75592 ,0 ,6065 ,3 +6066,68497 ,0 ,6066 ,3 +6067,73763 ,0 ,6067 ,3 +6068,40480 ,0 ,6068 ,3 +6069,26389 ,0 ,6069 ,3 +6070,35910 ,1 ,6070 ,3 +6071,79192 ,0 ,6071 ,3 +6072,82713 ,0 ,6072 ,3 +6073,34648 ,1 ,6073 ,3 +6074,49122 ,0 ,6074 ,3 +6075,62648 ,0 ,6075 ,3 +6076,28983 ,0 ,6076 ,3 +6077,20132 ,0 ,6077 ,3 +6078,44511 ,0 ,6078 ,3 +6079,77772 ,0 ,6079 ,3 +6080,26831 ,1 ,6080 ,3 +6081,17581 ,0 ,6081 ,3 +6082,48532 ,0 ,6082 ,3 +6083,25013 ,0 ,6083 ,3 +6084,67443 ,0 ,6084 ,3 +6085,19399 ,0 ,6085 ,3 +6086,74964 ,0 ,6086 ,3 +6087,50382 ,0 ,6087 ,3 +6088,43606 ,0 ,6088 ,3 +6089,74068 ,0 ,6089 ,3 +6090,49408 ,1 ,6090 ,3 +6091,76136 ,0 ,6091 ,3 +6092,77452 ,0 ,6092 ,3 +6093,86741 ,0 ,6093 ,3 +6094,57484 ,0 ,6094 ,3 +6095,12958 ,0 ,6095 ,3 +6096,70479 ,0 ,6096 ,3 +6097,43023 ,0 ,6097 ,3 +6098,65357 ,0 ,6098 ,3 +6099,38969 ,0 ,6099 ,3 +6100,56006 ,0 ,6100 ,3 +6101,68926 ,0 ,6101 ,3 +6102,50165 ,0 ,6102 ,3 +6103,49558 ,0 ,6103 ,3 +6104,83220 ,0 ,6104 ,3 +6105,14624 ,0 ,6105 ,3 +6106,47536 ,0 ,6106 ,3 +6107,27252 ,0 ,6107 ,3 +6108,54535 ,1 ,6108 ,3 +6109,67112 ,0 ,6109 ,3 +6110,26536 ,0 ,6110 ,3 +6111,73540 ,0 ,6111 ,3 +6112,11263 ,0 ,6112 ,3 +6113,21322 ,1 ,6113 ,3 +6114,13453 ,0 ,6114 ,3 +6115,45145 ,0 ,6115 ,3 +6116,59185 ,0 ,6116 ,3 +6117,58882 ,0 ,6117 ,3 +6118,64774 ,0 ,6118 ,3 +6119,85835 ,0 ,6119 ,3 +6120,40378 ,0 ,6120 ,3 +6121,74165 ,0 ,6121 ,3 +6122,37331 ,0 ,6122 ,3 +6123,38990 ,0 ,6123 ,3 +6124,28576 ,1 ,6124 ,3 +6125,34939 ,0 ,6125 ,3 +6126,13753 ,0 ,6126 ,3 +6127,73942 ,0 ,6127 ,3 +6128,67830 ,0 ,6128 ,3 +6129,86190 ,0 ,6129 ,3 +6130,40549 ,0 ,6130 ,3 +6131,79757 ,0 ,6131 ,3 +6132,53049 ,0 ,6132 ,3 +6133,22866 ,1 ,6133 ,3 +6134,37718 ,0 ,6134 ,3 +6135,60393 ,0 ,6135 ,3 +6136,71580 ,0 ,6136 ,3 +6137,73185 ,0 ,6137 ,3 +6138,50308 ,0 ,6138 ,3 +6139,26979 ,0 ,6139 ,3 +6140,40169 ,0 ,6140 ,3 +6141,55685 ,1 ,6141 ,3 +6142,65211 ,0 ,6142 ,3 +6143,70303 ,0 ,6143 ,3 +6144,42026 ,0 ,6144 ,3 +6145,30591 ,0 ,6145 ,3 +6146,77195 ,0 ,6146 ,3 +6147,89796 ,0 ,6147 ,3 +6148,41653 ,0 ,6148 ,3 +6149,89586 ,0 ,6149 ,3 +6150,41700 ,0 ,6150 ,3 +6151,38339 ,0 ,6151 ,3 +6152,50951 ,0 ,6152 ,3 +6153,10304 ,0 ,6153 ,3 +6154,19829 ,0 ,6154 ,3 +6155,15935 ,1 ,6155 ,3 +6156,45193 ,0 ,6156 ,3 +6157,37422 ,0 ,6157 ,3 +6158,87162 ,1 ,6158 ,3 +6159,31662 ,0 ,6159 ,3 +6160,71301 ,0 ,6160 ,3 +6161,16478 ,1 ,6161 ,3 +6162,55642 ,0 ,6162 ,3 +6163,72719 ,0 ,6163 ,3 +6164,28409 ,0 ,6164 ,3 +6165,64705 ,0 ,6165 ,3 +6166,43858 ,0 ,6166 ,3 +6167,80072 ,0 ,6167 ,3 +6168,47972 ,0 ,6168 ,3 +6169,17826 ,0 ,6169 ,3 +6170,76624 ,0 ,6170 ,3 +6171,46085 ,0 ,6171 ,3 +6172,28161 ,0 ,6172 ,3 +6173,12727 ,0 ,6173 ,3 +6174,64006 ,1 ,6174 ,3 +6175,81851 ,0 ,6175 ,3 +6176,72009 ,0 ,6176 ,3 +6177,82783 ,0 ,6177 ,3 +6178,15527 ,1 ,6178 ,3 +6179,40635 ,0 ,6179 ,3 +6180,85243 ,0 ,6180 ,3 +6181,40788 ,0 ,6181 ,3 +6182,77162 ,0 ,6182 ,3 +6183,52664 ,0 ,6183 ,3 +6184,53938 ,1 ,6184 ,3 +6185,81277 ,1 ,6185 ,3 +6186,36459 ,0 ,6186 ,3 +6187,58552 ,0 ,6187 ,3 +6188,25745 ,1 ,6188 ,3 +6189,54053 ,0 ,6189 ,3 +6190,73077 ,1 ,6190 ,3 +6191,59933 ,1 ,6191 ,3 +6192,78402 ,0 ,6192 ,3 +6193,31373 ,0 ,6193 ,3 +6194,46994 ,0 ,6194 ,3 +6195,27789 ,0 ,6195 ,3 +6196,15768 ,0 ,6196 ,3 +6197,22433 ,0 ,6197 ,3 +6198,28322 ,0 ,6198 ,3 +6199,63483 ,0 ,6199 ,3 +6200,84174 ,0 ,6200 ,3 +6201,45191 ,0 ,6201 ,3 +6202,57649 ,0 ,6202 ,3 +6203,71522 ,0 ,6203 ,3 +6204,18489 ,0 ,6204 ,3 +6205,82232 ,0 ,6205 ,3 +6206,54355 ,1 ,6206 ,3 +6207,13600 ,1 ,6207 ,3 +6208,82448 ,0 ,6208 ,3 +6209,54945 ,0 ,6209 ,3 +6210,75192 ,0 ,6210 ,3 +6211,25193 ,0 ,6211 ,3 +6212,65097 ,0 ,6212 ,3 +6213,34339 ,0 ,6213 ,3 +6214,46178 ,0 ,6214 ,3 +6215,75498 ,0 ,6215 ,3 +6216,72782 ,1 ,6216 ,3 +6217,61239 ,0 ,6217 ,3 +6218,24268 ,0 ,6218 ,3 +6219,30859 ,0 ,6219 ,3 +6220,59239 ,0 ,6220 ,3 +6221,83406 ,0 ,6221 ,3 +6222,82635 ,1 ,6222 ,3 +6223,70136 ,0 ,6223 ,3 +6224,16441 ,0 ,6224 ,3 +6225,23568 ,0 ,6225 ,3 +6226,69568 ,0 ,6226 ,3 +6227,78048 ,0 ,6227 ,3 +6228,55719 ,0 ,6228 ,3 +6229,53398 ,0 ,6229 ,3 +6230,80872 ,0 ,6230 ,3 +6231,44483 ,0 ,6231 ,3 +6232,48501 ,0 ,6232 ,3 +6233,87459 ,1 ,6233 ,3 +6234,54442 ,0 ,6234 ,3 +6235,88473 ,0 ,6235 ,3 +6236,44656 ,0 ,6236 ,3 +6237,11323 ,0 ,6237 ,3 +6238,12291 ,0 ,6238 ,3 +6239,32871 ,0 ,6239 ,3 +6240,57636 ,0 ,6240 ,3 +6241,84251 ,0 ,6241 ,3 +6242,28542 ,0 ,6242 ,3 +6243,51775 ,0 ,6243 ,3 +6244,86253 ,0 ,6244 ,3 +6245,39320 ,0 ,6245 ,3 +6246,53100 ,1 ,6246 ,3 +6247,44662 ,0 ,6247 ,3 +6248,41863 ,0 ,6248 ,3 +6249,53673 ,0 ,6249 ,3 +6250,33077 ,0 ,6250 ,3 +6251,13478 ,0 ,6251 ,3 +6252,23993 ,0 ,6252 ,3 +6253,23045 ,0 ,6253 ,3 +6254,52577 ,0 ,6254 ,3 +6255,44215 ,0 ,6255 ,3 +6256,30552 ,0 ,6256 ,3 +6257,69443 ,0 ,6257 ,3 +6258,29713 ,1 ,6258 ,3 +6259,31542 ,0 ,6259 ,3 +6260,59668 ,0 ,6260 ,3 +6261,69825 ,1 ,6261 ,3 +6262,24206 ,1 ,6262 ,3 +6263,49935 ,0 ,6263 ,3 +6264,84957 ,1 ,6264 ,3 +6265,22329 ,0 ,6265 ,3 +6266,54120 ,0 ,6266 ,3 +6267,38432 ,0 ,6267 ,3 +6268,35425 ,0 ,6268 ,3 +6269,82820 ,0 ,6269 ,3 +6270,18208 ,0 ,6270 ,3 +6271,11620 ,0 ,6271 ,3 +6272,23821 ,0 ,6272 ,3 +6273,56922 ,0 ,6273 ,3 +6274,11622 ,0 ,6274 ,3 +6275,17865 ,0 ,6275 ,3 +6276,12723 ,0 ,6276 ,3 +6277,23874 ,0 ,6277 ,3 +6278,24258 ,0 ,6278 ,3 +6279,33414 ,0 ,6279 ,3 +6280,33674 ,0 ,6280 ,3 +6281,17200 ,0 ,6281 ,3 +6282,42371 ,0 ,6282 ,3 +6283,26046 ,0 ,6283 ,3 +6284,64615 ,0 ,6284 ,3 +6285,61974 ,1 ,6285 ,3 +6286,46395 ,0 ,6286 ,3 +6287,61329 ,1 ,6287 ,3 +6288,78140 ,0 ,6288 ,3 +6289,32094 ,1 ,6289 ,3 +6290,33239 ,0 ,6290 ,3 +6291,75617 ,0 ,6291 ,3 +6292,79313 ,0 ,6292 ,3 +6293,88042 ,0 ,6293 ,3 +6294,70636 ,0 ,6294 ,3 +6295,40563 ,0 ,6295 ,3 +6296,62383 ,0 ,6296 ,3 +6297,48973 ,0 ,6297 ,3 +6298,23262 ,0 ,6298 ,3 +6299,40713 ,0 ,6299 ,3 +6300,65039 ,0 ,6300 ,3 +6301,23547 ,1 ,6301 ,3 +6302,14495 ,0 ,6302 ,3 +6303,22980 ,0 ,6303 ,3 +6304,54913 ,0 ,6304 ,3 +6305,71100 ,0 ,6305 ,3 +6306,11274 ,0 ,6306 ,3 +6307,73131 ,0 ,6307 ,3 +6308,50000 ,0 ,6308 ,3 +6309,17892 ,0 ,6309 ,3 +6310,13758 ,0 ,6310 ,3 +6311,64862 ,0 ,6311 ,3 +6312,48389 ,1 ,6312 ,3 +6313,31294 ,0 ,6313 ,3 +6314,81885 ,0 ,6314 ,3 +6315,27977 ,1 ,6315 ,3 +6316,10417 ,0 ,6316 ,3 +6317,54515 ,0 ,6317 ,3 +6318,29539 ,1 ,6318 ,3 +6319,19896 ,0 ,6319 ,3 +6320,25234 ,1 ,6320 ,3 +6321,85998 ,0 ,6321 ,3 +6322,85663 ,0 ,6322 ,3 +6323,59667 ,0 ,6323 ,3 +6324,32997 ,0 ,6324 ,3 +6325,30112 ,0 ,6325 ,3 +6326,10452 ,0 ,6326 ,3 +6327,21179 ,0 ,6327 ,3 +6328,33473 ,0 ,6328 ,3 +6329,79586 ,0 ,6329 ,3 +6330,58813 ,0 ,6330 ,3 +6331,20127 ,1 ,6331 ,3 +6332,54230 ,1 ,6332 ,3 +6333,62117 ,0 ,6333 ,3 +6334,53510 ,1 ,6334 ,3 +6335,45225 ,0 ,6335 ,3 +6336,54059 ,1 ,6336 ,3 +6337,18115 ,0 ,6337 ,3 +6338,85430 ,0 ,6338 ,3 +6339,63506 ,0 ,6339 ,3 +6340,69523 ,1 ,6340 ,3 +6341,47241 ,0 ,6341 ,3 +6342,77115 ,0 ,6342 ,3 +6343,70930 ,0 ,6343 ,3 +6344,18266 ,0 ,6344 ,3 +6345,15819 ,0 ,6345 ,3 +6346,62312 ,0 ,6346 ,3 +6347,48705 ,0 ,6347 ,3 +6348,67954 ,0 ,6348 ,3 +6349,19404 ,0 ,6349 ,3 +6350,49547 ,0 ,6350 ,3 +6351,76871 ,0 ,6351 ,3 +6352,72974 ,0 ,6352 ,3 +6353,34429 ,0 ,6353 ,3 +6354,15785 ,0 ,6354 ,3 +6355,12531 ,0 ,6355 ,3 +6356,65919 ,1 ,6356 ,3 +6357,71421 ,0 ,6357 ,3 +6358,81016 ,0 ,6358 ,3 +6359,10524 ,1 ,6359 ,3 +6360,78603 ,0 ,6360 ,3 +6361,33706 ,0 ,6361 ,3 +6362,78480 ,0 ,6362 ,3 +6363,89840 ,0 ,6363 ,3 +6364,20359 ,0 ,6364 ,3 +6365,74183 ,1 ,6365 ,3 +6366,50463 ,1 ,6366 ,3 +6367,67290 ,0 ,6367 ,3 +6368,47291 ,0 ,6368 ,3 +6369,42565 ,1 ,6369 ,3 +6370,68268 ,0 ,6370 ,3 +6371,15733 ,0 ,6371 ,3 +6372,32406 ,0 ,6372 ,3 +6373,40353 ,0 ,6373 ,3 +6374,47421 ,0 ,6374 ,3 +6375,78978 ,0 ,6375 ,3 +6376,87799 ,0 ,6376 ,3 +6377,71804 ,0 ,6377 ,3 +6378,20101 ,0 ,6378 ,3 +6379,37001 ,1 ,6379 ,3 +6380,85675 ,0 ,6380 ,3 +6381,40567 ,0 ,6381 ,3 +6382,37287 ,0 ,6382 ,3 +6383,83349 ,0 ,6383 ,3 +6384,38775 ,0 ,6384 ,3 +6385,68374 ,0 ,6385 ,3 +6386,87503 ,0 ,6386 ,3 +6387,41322 ,0 ,6387 ,3 +6388,58647 ,0 ,6388 ,3 +6389,54194 ,0 ,6389 ,3 +6390,19762 ,0 ,6390 ,3 +6391,81433 ,1 ,6391 ,3 +6392,38555 ,0 ,6392 ,3 +6393,40783 ,1 ,6393 ,3 +6394,31816 ,0 ,6394 ,3 +6395,22161 ,0 ,6395 ,3 +6396,32457 ,0 ,6396 ,3 +6397,30449 ,0 ,6397 ,3 +6398,12959 ,0 ,6398 ,3 +6399,57652 ,1 ,6399 ,3 +6400,46955 ,0 ,6400 ,3 +6401,38753 ,0 ,6401 ,3 +6402,22183 ,1 ,6402 ,3 +6403,76156 ,1 ,6403 ,3 +6404,85950 ,0 ,6404 ,3 +6405,13898 ,0 ,6405 ,3 +6406,76478 ,0 ,6406 ,3 +6407,31006 ,0 ,6407 ,3 +6408,69767 ,0 ,6408 ,3 +6409,23350 ,0 ,6409 ,3 +6410,50923 ,0 ,6410 ,3 +6411,76388 ,0 ,6411 ,3 +6412,49266 ,0 ,6412 ,3 +6413,22452 ,0 ,6413 ,3 +6414,22027 ,1 ,6414 ,3 +6415,26718 ,0 ,6415 ,3 +6416,27582 ,0 ,6416 ,3 +6417,61710 ,0 ,6417 ,3 +6418,69037 ,0 ,6418 ,3 +6419,13469 ,1 ,6419 ,3 +6420,20694 ,0 ,6420 ,3 +6421,73809 ,1 ,6421 ,3 +6422,27692 ,0 ,6422 ,3 +6423,11721 ,1 ,6423 ,3 +6424,87896 ,0 ,6424 ,3 +6425,15998 ,0 ,6425 ,3 +6426,83536 ,0 ,6426 ,3 +6427,14558 ,0 ,6427 ,3 +6428,71354 ,0 ,6428 ,3 +6429,84497 ,1 ,6429 ,3 +6430,45092 ,0 ,6430 ,3 +6431,57742 ,0 ,6431 ,3 +6432,70848 ,0 ,6432 ,3 +6433,75179 ,0 ,6433 ,3 +6434,71982 ,1 ,6434 ,3 +6435,47919 ,0 ,6435 ,3 +6436,67508 ,0 ,6436 ,3 +6437,14524 ,1 ,6437 ,3 +6438,87533 ,0 ,6438 ,3 +6439,59964 ,0 ,6439 ,3 +6440,25557 ,0 ,6440 ,3 +6441,36195 ,0 ,6441 ,3 +6442,12809 ,0 ,6442 ,3 +6443,68197 ,0 ,6443 ,3 +6444,33006 ,0 ,6444 ,3 +6445,75320 ,1 ,6445 ,3 +6446,23497 ,0 ,6446 ,3 +6447,86554 ,1 ,6447 ,3 +6448,51394 ,0 ,6448 ,3 +6449,62543 ,0 ,6449 ,3 +6450,12796 ,0 ,6450 ,3 +6451,64606 ,0 ,6451 ,3 +6452,48800 ,0 ,6452 ,3 +6453,19964 ,0 ,6453 ,3 +6454,61563 ,1 ,6454 ,3 +6455,54197 ,0 ,6455 ,3 +6456,28191 ,1 ,6456 ,3 +6457,20464 ,0 ,6457 ,3 +6458,38357 ,0 ,6458 ,3 +6459,34354 ,1 ,6459 ,3 +6460,57776 ,1 ,6460 ,3 +6461,48128 ,1 ,6461 ,3 +6462,34743 ,0 ,6462 ,3 +6463,54053 ,0 ,6463 ,3 +6464,21269 ,1 ,6464 ,3 +6465,27893 ,0 ,6465 ,3 +6466,22265 ,1 ,6466 ,3 +6467,39091 ,0 ,6467 ,3 +6468,66108 ,1 ,6468 ,3 +6469,29211 ,0 ,6469 ,3 +6470,46356 ,0 ,6470 ,3 +6471,20964 ,0 ,6471 ,3 +6472,13572 ,0 ,6472 ,3 +6473,15705 ,0 ,6473 ,3 +6474,32793 ,0 ,6474 ,3 +6475,77589 ,0 ,6475 ,3 +6476,70581 ,0 ,6476 ,3 +6477,10933 ,0 ,6477 ,3 +6478,22740 ,0 ,6478 ,3 +6479,39334 ,0 ,6479 ,3 +6480,83697 ,0 ,6480 ,3 +6481,31501 ,0 ,6481 ,3 +6482,21304 ,1 ,6482 ,3 +6483,19950 ,0 ,6483 ,3 +6484,61099 ,0 ,6484 ,3 +6485,17415 ,1 ,6485 ,3 +6486,45144 ,0 ,6486 ,3 +6487,38230 ,0 ,6487 ,3 +6488,23152 ,0 ,6488 ,3 +6489,18997 ,1 ,6489 ,3 +6490,40079 ,0 ,6490 ,3 +6491,63314 ,0 ,6491 ,3 +6492,73785 ,1 ,6492 ,3 +6493,11766 ,0 ,6493 ,3 +6494,61103 ,0 ,6494 ,3 +6495,80755 ,0 ,6495 ,3 +6496,63342 ,0 ,6496 ,3 +6497,74512 ,1 ,6497 ,3 +6498,19845 ,1 ,6498 ,3 +6499,30294 ,0 ,6499 ,3 +6500,71812 ,0 ,6500 ,3 +6501,39345 ,1 ,6501 ,3 +6502,39336 ,1 ,6502 ,3 +6503,56778 ,0 ,6503 ,3 +6504,69603 ,0 ,6504 ,3 +6505,43979 ,0 ,6505 ,3 +6506,75846 ,1 ,6506 ,3 +6507,73892 ,0 ,6507 ,3 +6508,68332 ,0 ,6508 ,3 +6509,55028 ,0 ,6509 ,3 +6510,53685 ,0 ,6510 ,3 +6511,12121 ,0 ,6511 ,3 +6512,55645 ,0 ,6512 ,3 +6513,59541 ,1 ,6513 ,3 +6514,66513 ,0 ,6514 ,3 +6515,35255 ,0 ,6515 ,3 +6516,25571 ,0 ,6516 ,3 +6517,53965 ,0 ,6517 ,3 +6518,42721 ,0 ,6518 ,3 +6519,65648 ,0 ,6519 ,3 +6520,56903 ,0 ,6520 ,3 +6521,40368 ,0 ,6521 ,3 +6522,44451 ,0 ,6522 ,3 +6523,55078 ,0 ,6523 ,3 +6524,25271 ,1 ,6524 ,3 +6525,29257 ,1 ,6525 ,3 +6526,26389 ,1 ,6526 ,3 +6527,65986 ,1 ,6527 ,3 +6528,30158 ,0 ,6528 ,3 +6529,86221 ,0 ,6529 ,3 +6530,68169 ,0 ,6530 ,3 +6531,55275 ,0 ,6531 ,3 +6532,26438 ,0 ,6532 ,3 +6533,50090 ,0 ,6533 ,3 +6534,55850 ,0 ,6534 ,3 +6535,44926 ,0 ,6535 ,3 +6536,87973 ,0 ,6536 ,3 +6537,14997 ,0 ,6537 ,3 +6538,15566 ,1 ,6538 ,3 +6539,67106 ,1 ,6539 ,3 +6540,35002 ,0 ,6540 ,3 +6541,85117 ,0 ,6541 ,3 +6542,36902 ,0 ,6542 ,3 +6543,78735 ,0 ,6543 ,3 +6544,53232 ,0 ,6544 ,3 +6545,64524 ,1 ,6545 ,3 +6546,64973 ,0 ,6546 ,3 +6547,18091 ,1 ,6547 ,3 +6548,66563 ,0 ,6548 ,3 +6549,69040 ,0 ,6549 ,3 +6550,82364 ,0 ,6550 ,3 +6551,22538 ,0 ,6551 ,3 +6552,29624 ,1 ,6552 ,3 +6553,15594 ,0 ,6553 ,3 +6554,53043 ,0 ,6554 ,3 +6555,35483 ,1 ,6555 ,3 +6556,29366 ,0 ,6556 ,3 +6557,87411 ,0 ,6557 ,3 +6558,69490 ,0 ,6558 ,3 +6559,46879 ,0 ,6559 ,3 +6560,14609 ,0 ,6560 ,3 +6561,32363 ,0 ,6561 ,3 +6562,70415 ,1 ,6562 ,3 +6563,11309 ,0 ,6563 ,3 +6564,80771 ,0 ,6564 ,3 +6565,18102 ,0 ,6565 ,3 +6566,64019 ,0 ,6566 ,3 +6567,21430 ,0 ,6567 ,3 +6568,86516 ,0 ,6568 ,3 +6569,25018 ,0 ,6569 ,3 +6570,86404 ,1 ,6570 ,3 +6571,26980 ,0 ,6571 ,3 +6572,54338 ,0 ,6572 ,3 +6573,55643 ,1 ,6573 ,3 +6574,37481 ,0 ,6574 ,3 +6575,28338 ,0 ,6575 ,3 +6576,71680 ,0 ,6576 ,3 +6577,70039 ,0 ,6577 ,3 +6578,67144 ,0 ,6578 ,3 +6579,16399 ,0 ,6579 ,3 +6580,74036 ,0 ,6580 ,3 +6581,86476 ,1 ,6581 ,3 +6582,37199 ,1 ,6582 ,3 +6583,80195 ,0 ,6583 ,3 +6584,12914 ,0 ,6584 ,3 +6585,41944 ,0 ,6585 ,3 +6586,89090 ,0 ,6586 ,3 +6587,49344 ,1 ,6587 ,3 +6588,49308 ,0 ,6588 ,3 +6589,46839 ,0 ,6589 ,3 +6590,61752 ,1 ,6590 ,3 +6591,52373 ,1 ,6591 ,3 +6592,55068 ,0 ,6592 ,3 +6593,35487 ,0 ,6593 ,3 +6594,37015 ,0 ,6594 ,3 +6595,79008 ,1 ,6595 ,3 +6596,27336 ,0 ,6596 ,3 +6597,70626 ,0 ,6597 ,3 +6598,53217 ,0 ,6598 ,3 +6599,37409 ,0 ,6599 ,3 +6600,72224 ,0 ,6600 ,3 +6601,89739 ,0 ,6601 ,3 +6602,71353 ,0 ,6602 ,3 +6603,47088 ,0 ,6603 ,3 +6604,25031 ,0 ,6604 ,3 +6605,67439 ,0 ,6605 ,3 +6606,58525 ,0 ,6606 ,3 +6607,53133 ,1 ,6607 ,3 +6608,89066 ,0 ,6608 ,3 +6609,70034 ,0 ,6609 ,3 +6610,45065 ,0 ,6610 ,3 +6611,42880 ,0 ,6611 ,3 +6612,46670 ,1 ,6612 ,3 +6613,82538 ,1 ,6613 ,3 +6614,77660 ,0 ,6614 ,3 +6615,29132 ,0 ,6615 ,3 +6616,62546 ,0 ,6616 ,3 +6617,13336 ,0 ,6617 ,3 +6618,14222 ,1 ,6618 ,3 +6619,86927 ,1 ,6619 ,3 +6620,30632 ,0 ,6620 ,3 +6621,29628 ,0 ,6621 ,3 +6622,19273 ,0 ,6622 ,3 +6623,24614 ,0 ,6623 ,3 +6624,36113 ,0 ,6624 ,3 +6625,41427 ,0 ,6625 ,3 +6626,18171 ,1 ,6626 ,3 +6627,35634 ,0 ,6627 ,3 +6628,17991 ,0 ,6628 ,3 +6629,33248 ,0 ,6629 ,3 +6630,78322 ,0 ,6630 ,3 +6631,18266 ,0 ,6631 ,3 +6632,56117 ,0 ,6632 ,3 +6633,25826 ,0 ,6633 ,3 +6634,21649 ,0 ,6634 ,3 +6635,71169 ,0 ,6635 ,3 +6636,76001 ,0 ,6636 ,3 +6637,73489 ,0 ,6637 ,3 +6638,14110 ,0 ,6638 ,3 +6639,81871 ,0 ,6639 ,3 +6640,45441 ,0 ,6640 ,3 +6641,62163 ,0 ,6641 ,3 +6642,54444 ,1 ,6642 ,3 +6643,51684 ,0 ,6643 ,3 +6644,18559 ,0 ,6644 ,3 +6645,88613 ,0 ,6645 ,3 +6646,71676 ,0 ,6646 ,3 +6647,76063 ,1 ,6647 ,3 +6648,37030 ,0 ,6648 ,3 +6649,29226 ,0 ,6649 ,3 +6650,69650 ,0 ,6650 ,3 +6651,70691 ,0 ,6651 ,3 +6652,88494 ,0 ,6652 ,3 +6653,83271 ,0 ,6653 ,3 +6654,33769 ,0 ,6654 ,3 +6655,58274 ,0 ,6655 ,3 +6656,44848 ,0 ,6656 ,3 +6657,15951 ,0 ,6657 ,3 +6658,79368 ,0 ,6658 ,3 +6659,59307 ,0 ,6659 ,3 +6660,43494 ,0 ,6660 ,3 +6661,24918 ,0 ,6661 ,3 +6662,65794 ,0 ,6662 ,3 +6663,61060 ,0 ,6663 ,3 +6664,56964 ,0 ,6664 ,3 +6665,65043 ,0 ,6665 ,3 +6666,54910 ,0 ,6666 ,3 +6667,24812 ,0 ,6667 ,3 +6668,26381 ,0 ,6668 ,3 +6669,71222 ,1 ,6669 ,3 +6670,25505 ,0 ,6670 ,3 +6671,15105 ,0 ,6671 ,3 +6672,44725 ,0 ,6672 ,3 +6673,78414 ,0 ,6673 ,3 +6674,87624 ,0 ,6674 ,3 +6675,81452 ,0 ,6675 ,3 +6676,57250 ,1 ,6676 ,3 +6677,61532 ,0 ,6677 ,3 +6678,25964 ,0 ,6678 ,3 +6679,88808 ,0 ,6679 ,3 +6680,73539 ,0 ,6680 ,3 +6681,67348 ,0 ,6681 ,3 +6682,25429 ,0 ,6682 ,3 +6683,63293 ,0 ,6683 ,3 +6684,81561 ,0 ,6684 ,3 +6685,67453 ,1 ,6685 ,3 +6686,46515 ,0 ,6686 ,3 +6687,29063 ,0 ,6687 ,3 +6688,62911 ,0 ,6688 ,3 +6689,22614 ,0 ,6689 ,3 +6690,71344 ,0 ,6690 ,3 +6691,19545 ,0 ,6691 ,3 +6692,75272 ,0 ,6692 ,3 +6693,12642 ,0 ,6693 ,3 +6694,41372 ,0 ,6694 ,3 +6695,79497 ,0 ,6695 ,3 +6696,72182 ,0 ,6696 ,3 +6697,80187 ,1 ,6697 ,3 +6698,43075 ,0 ,6698 ,3 +6699,20128 ,0 ,6699 ,3 +6700,66737 ,0 ,6700 ,3 +6701,13803 ,1 ,6701 ,3 +6702,50744 ,0 ,6702 ,3 +6703,72656 ,0 ,6703 ,3 +6704,70792 ,0 ,6704 ,3 +6705,27804 ,1 ,6705 ,3 +6706,56987 ,0 ,6706 ,3 +6707,66809 ,0 ,6707 ,3 +6708,81018 ,0 ,6708 ,3 +6709,59234 ,0 ,6709 ,3 +6710,80767 ,0 ,6710 ,3 +6711,23992 ,0 ,6711 ,3 +6712,88151 ,0 ,6712 ,3 +6713,18637 ,0 ,6713 ,3 +6714,86834 ,0 ,6714 ,3 +6715,45402 ,0 ,6715 ,3 +6716,70619 ,1 ,6716 ,3 +6717,70372 ,0 ,6717 ,3 +6718,88906 ,0 ,6718 ,3 +6719,60234 ,1 ,6719 ,3 +6720,54221 ,1 ,6720 ,3 +6721,41740 ,0 ,6721 ,3 +6722,44414 ,0 ,6722 ,3 +6723,58909 ,0 ,6723 ,3 +6724,34659 ,0 ,6724 ,3 +6725,63485 ,0 ,6725 ,3 +6726,59394 ,0 ,6726 ,3 +6727,75285 ,1 ,6727 ,3 +6728,69401 ,1 ,6728 ,3 +6729,12604 ,0 ,6729 ,3 +6730,18358 ,0 ,6730 ,3 +6731,77284 ,0 ,6731 ,3 +6732,81280 ,0 ,6732 ,3 +6733,43016 ,0 ,6733 ,3 +6734,28625 ,0 ,6734 ,3 +6735,23500 ,0 ,6735 ,3 +6736,29487 ,0 ,6736 ,3 +6737,37819 ,0 ,6737 ,3 +6738,22999 ,0 ,6738 ,3 +6739,76397 ,1 ,6739 ,3 +6740,71131 ,0 ,6740 ,3 +6741,63001 ,0 ,6741 ,3 +6742,78412 ,0 ,6742 ,3 +6743,53020 ,0 ,6743 ,3 +6744,15623 ,0 ,6744 ,3 +6745,46387 ,0 ,6745 ,3 +6746,48684 ,0 ,6746 ,3 +6747,36189 ,1 ,6747 ,3 +6748,36589 ,0 ,6748 ,3 +6749,48931 ,0 ,6749 ,3 +6750,53914 ,0 ,6750 ,3 +6751,55382 ,0 ,6751 ,3 +6752,61970 ,0 ,6752 ,3 +6753,11358 ,1 ,6753 ,3 +6754,59782 ,0 ,6754 ,3 +6755,39999 ,0 ,6755 ,3 +6756,51237 ,0 ,6756 ,3 +6757,19486 ,0 ,6757 ,3 +6758,38274 ,0 ,6758 ,3 +6759,34283 ,0 ,6759 ,3 +6760,72722 ,0 ,6760 ,3 +6761,79173 ,0 ,6761 ,3 +6762,73881 ,0 ,6762 ,3 +6763,87104 ,1 ,6763 ,3 +6764,67152 ,0 ,6764 ,3 +6765,70729 ,0 ,6765 ,3 +6766,70335 ,1 ,6766 ,3 +6767,73277 ,0 ,6767 ,3 +6768,77585 ,0 ,6768 ,3 +6769,57105 ,0 ,6769 ,3 +6770,75361 ,0 ,6770 ,3 +6771,46733 ,0 ,6771 ,3 +6772,60876 ,1 ,6772 ,3 +6773,89542 ,0 ,6773 ,3 +6774,26588 ,0 ,6774 ,3 +6775,15039 ,0 ,6775 ,3 +6776,80450 ,0 ,6776 ,3 +6777,52263 ,0 ,6777 ,3 +6778,46851 ,0 ,6778 ,3 +6779,57302 ,0 ,6779 ,3 +6780,66107 ,0 ,6780 ,3 +6781,20352 ,0 ,6781 ,3 +6782,38978 ,0 ,6782 ,3 +6783,61020 ,1 ,6783 ,3 +6784,88001 ,1 ,6784 ,3 +6785,24095 ,0 ,6785 ,3 +6786,52164 ,0 ,6786 ,3 +6787,60196 ,0 ,6787 ,3 +6788,38403 ,0 ,6788 ,3 +6789,84494 ,0 ,6789 ,3 +6790,69643 ,0 ,6790 ,3 +6791,40122 ,0 ,6791 ,3 +6792,20384 ,0 ,6792 ,3 +6793,47899 ,0 ,6793 ,3 +6794,65157 ,0 ,6794 ,3 +6795,80120 ,0 ,6795 ,3 +6796,83604 ,0 ,6796 ,3 +6797,11284 ,0 ,6797 ,3 +6798,44231 ,0 ,6798 ,3 +6799,19734 ,0 ,6799 ,3 +6800,18984 ,0 ,6800 ,3 +6801,85092 ,0 ,6801 ,3 +6802,39762 ,1 ,6802 ,3 +6803,89985 ,0 ,6803 ,3 +6804,74242 ,0 ,6804 ,3 +6805,77179 ,1 ,6805 ,3 +6806,75715 ,1 ,6806 ,3 +6807,43146 ,0 ,6807 ,3 +6808,38728 ,0 ,6808 ,3 +6809,30373 ,0 ,6809 ,3 +6810,40554 ,0 ,6810 ,3 +6811,39985 ,0 ,6811 ,3 +6812,74204 ,0 ,6812 ,3 +6813,88209 ,0 ,6813 ,3 +6814,89950 ,0 ,6814 ,3 +6815,40326 ,0 ,6815 ,3 +6816,62657 ,0 ,6816 ,3 +6817,59535 ,1 ,6817 ,3 +6818,29645 ,0 ,6818 ,3 +6819,82010 ,1 ,6819 ,3 +6820,87178 ,0 ,6820 ,3 +6821,36319 ,0 ,6821 ,3 +6822,18614 ,0 ,6822 ,3 +6823,17952 ,0 ,6823 ,3 +6824,32074 ,0 ,6824 ,3 +6825,36062 ,0 ,6825 ,3 +6826,31593 ,0 ,6826 ,3 +6827,64075 ,0 ,6827 ,3 +6828,20017 ,1 ,6828 ,3 +6829,52572 ,1 ,6829 ,3 +6830,87585 ,0 ,6830 ,3 +6831,88674 ,0 ,6831 ,3 +6832,17729 ,0 ,6832 ,3 +6833,89991 ,0 ,6833 ,3 +6834,34355 ,1 ,6834 ,3 +6835,60021 ,0 ,6835 ,3 +6836,77434 ,1 ,6836 ,3 +6837,89201 ,0 ,6837 ,3 +6838,80367 ,1 ,6838 ,3 +6839,18175 ,1 ,6839 ,3 +6840,36392 ,0 ,6840 ,3 +6841,45871 ,0 ,6841 ,3 +6842,11575 ,0 ,6842 ,3 +6843,22040 ,0 ,6843 ,3 +6844,88613 ,0 ,6844 ,3 +6845,88054 ,0 ,6845 ,3 +6846,30472 ,1 ,6846 ,3 +6847,52501 ,0 ,6847 ,3 +6848,28323 ,0 ,6848 ,3 +6849,74081 ,0 ,6849 ,3 +6850,35179 ,0 ,6850 ,3 +6851,86529 ,0 ,6851 ,3 +6852,23336 ,0 ,6852 ,3 +6853,18404 ,0 ,6853 ,3 +6854,68967 ,0 ,6854 ,3 +6855,19407 ,0 ,6855 ,3 +6856,52985 ,0 ,6856 ,3 +6857,59085 ,0 ,6857 ,3 +6858,69454 ,0 ,6858 ,3 +6859,17295 ,1 ,6859 ,3 +6860,77259 ,1 ,6860 ,3 +6861,10012 ,0 ,6861 ,3 +6862,73503 ,0 ,6862 ,3 +6863,60273 ,0 ,6863 ,3 +6864,26225 ,0 ,6864 ,3 +6865,19172 ,0 ,6865 ,3 +6866,16393 ,0 ,6866 ,3 +6867,17119 ,0 ,6867 ,3 +6868,23598 ,0 ,6868 ,3 +6869,79989 ,0 ,6869 ,3 +6870,38668 ,0 ,6870 ,3 +6871,18240 ,0 ,6871 ,3 +6872,81843 ,1 ,6872 ,3 +6873,20352 ,0 ,6873 ,3 +6874,51379 ,1 ,6874 ,3 +6875,66355 ,0 ,6875 ,3 +6876,33245 ,1 ,6876 ,3 +6877,37576 ,0 ,6877 ,3 +6878,32825 ,0 ,6878 ,3 +6879,14620 ,0 ,6879 ,3 +6880,40236 ,0 ,6880 ,3 +6881,10484 ,0 ,6881 ,3 +6882,50627 ,0 ,6882 ,3 +6883,86393 ,0 ,6883 ,3 +6884,29873 ,0 ,6884 ,3 +6885,18490 ,0 ,6885 ,3 +6886,10639 ,0 ,6886 ,3 +6887,30893 ,0 ,6887 ,3 +6888,49241 ,0 ,6888 ,3 +6889,68025 ,0 ,6889 ,3 +6890,21432 ,0 ,6890 ,3 +6891,27994 ,0 ,6891 ,3 +6892,11933 ,0 ,6892 ,3 +6893,70228 ,0 ,6893 ,3 +6894,74653 ,1 ,6894 ,3 +6895,86927 ,0 ,6895 ,3 +6896,42108 ,0 ,6896 ,3 +6897,45928 ,0 ,6897 ,3 +6898,20769 ,0 ,6898 ,3 +6899,86439 ,0 ,6899 ,3 +6900,22837 ,0 ,6900 ,3 +6901,27524 ,1 ,6901 ,3 +6902,35119 ,1 ,6902 ,3 +6903,71957 ,0 ,6903 ,3 +6904,27046 ,0 ,6904 ,3 +6905,82048 ,0 ,6905 ,3 +6906,19098 ,0 ,6906 ,3 +6907,65558 ,0 ,6907 ,3 +6908,49970 ,0 ,6908 ,3 +6909,60693 ,0 ,6909 ,3 +6910,59378 ,0 ,6910 ,3 +6911,10376 ,0 ,6911 ,3 +6912,42014 ,0 ,6912 ,3 +6913,26441 ,1 ,6913 ,3 +6914,20065 ,0 ,6914 ,3 +6915,50230 ,0 ,6915 ,3 +6916,77158 ,0 ,6916 ,3 +6917,18017 ,0 ,6917 ,3 +6918,31351 ,0 ,6918 ,3 +6919,79920 ,0 ,6919 ,3 +6920,71889 ,0 ,6920 ,3 +6921,45928 ,0 ,6921 ,3 +6922,23334 ,0 ,6922 ,3 +6923,25734 ,0 ,6923 ,3 +6924,21920 ,0 ,6924 ,3 +6925,81671 ,0 ,6925 ,3 +6926,12617 ,0 ,6926 ,3 +6927,23109 ,1 ,6927 ,3 +6928,18850 ,0 ,6928 ,3 +6929,81451 ,0 ,6929 ,3 +6930,88912 ,0 ,6930 ,3 +6931,19071 ,0 ,6931 ,3 +6932,31925 ,0 ,6932 ,3 +6933,59981 ,0 ,6933 ,3 +6934,21640 ,1 ,6934 ,3 +6935,17519 ,0 ,6935 ,3 +6936,69968 ,0 ,6936 ,3 +6937,40580 ,0 ,6937 ,3 +6938,60078 ,0 ,6938 ,3 +6939,80759 ,0 ,6939 ,3 +6940,67932 ,0 ,6940 ,3 +6941,64474 ,0 ,6941 ,3 +6942,22188 ,0 ,6942 ,3 +6943,33789 ,0 ,6943 ,3 +6944,50584 ,0 ,6944 ,3 +6945,64196 ,0 ,6945 ,3 +6946,63411 ,0 ,6946 ,3 +6947,44095 ,0 ,6947 ,3 +6948,19149 ,0 ,6948 ,3 +6949,48904 ,0 ,6949 ,3 +6950,23154 ,1 ,6950 ,3 +6951,23683 ,0 ,6951 ,3 +6952,69966 ,0 ,6952 ,3 +6953,85835 ,0 ,6953 ,3 +6954,79174 ,0 ,6954 ,3 +6955,85566 ,0 ,6955 ,3 +6956,12095 ,0 ,6956 ,3 +6957,31794 ,0 ,6957 ,3 +6958,54574 ,0 ,6958 ,3 +6959,78451 ,0 ,6959 ,3 +6960,16156 ,0 ,6960 ,3 +6961,89571 ,0 ,6961 ,3 +6962,64994 ,1 ,6962 ,3 +6963,78037 ,0 ,6963 ,3 +6964,53990 ,0 ,6964 ,3 +6965,87270 ,0 ,6965 ,3 +6966,19717 ,1 ,6966 ,3 +6967,55380 ,0 ,6967 ,3 +6968,85393 ,0 ,6968 ,3 +6969,37987 ,0 ,6969 ,3 +6970,13185 ,0 ,6970 ,3 +6971,33741 ,0 ,6971 ,3 +6972,22717 ,0 ,6972 ,3 +6973,25249 ,0 ,6973 ,3 +6974,49127 ,1 ,6974 ,3 +6975,18029 ,0 ,6975 ,3 +6976,23368 ,1 ,6976 ,3 +6977,74110 ,0 ,6977 ,3 +6978,14321 ,0 ,6978 ,3 +6979,84669 ,1 ,6979 ,3 +6980,26387 ,0 ,6980 ,3 +6981,79941 ,0 ,6981 ,3 +6982,86902 ,0 ,6982 ,3 +6983,64170 ,0 ,6983 ,3 +6984,56162 ,0 ,6984 ,3 +6985,14666 ,0 ,6985 ,3 +6986,20484 ,0 ,6986 ,3 +6987,22853 ,0 ,6987 ,3 +6988,56574 ,0 ,6988 ,3 +6989,78374 ,0 ,6989 ,3 +6990,65738 ,0 ,6990 ,3 +6991,78467 ,0 ,6991 ,3 +6992,36406 ,0 ,6992 ,3 +6993,65355 ,0 ,6993 ,3 +6994,20584 ,0 ,6994 ,3 +6995,68170 ,0 ,6995 ,3 +6996,53984 ,0 ,6996 ,3 +6997,59367 ,0 ,6997 ,3 +6998,15074 ,0 ,6998 ,3 +6999,56634 ,1 ,6999 ,3 +7000,71927 ,0 ,7000 ,3 +7001,54308 ,1 ,7001 ,3 +7002,39672 ,0 ,7002 ,3 +7003,44831 ,1 ,7003 ,3 +7004,52439 ,1 ,7004 ,3 +7005,31645 ,1 ,7005 ,3 +7006,45089 ,0 ,7006 ,3 +7007,63189 ,0 ,7007 ,3 +7008,64790 ,0 ,7008 ,3 +7009,15976 ,0 ,7009 ,3 +7010,42652 ,0 ,7010 ,3 +7011,22125 ,0 ,7011 ,3 +7012,45100 ,0 ,7012 ,3 +7013,35064 ,1 ,7013 ,3 +7014,79353 ,0 ,7014 ,3 +7015,42673 ,0 ,7015 ,3 +7016,23974 ,0 ,7016 ,3 +7017,43733 ,0 ,7017 ,3 +7018,89450 ,0 ,7018 ,3 +7019,40973 ,0 ,7019 ,3 +7020,64709 ,0 ,7020 ,3 +7021,57957 ,1 ,7021 ,3 +7022,30852 ,1 ,7022 ,3 +7023,79634 ,1 ,7023 ,3 +7024,23461 ,0 ,7024 ,3 +7025,43576 ,1 ,7025 ,3 +7026,65652 ,0 ,7026 ,3 +7027,89226 ,0 ,7027 ,3 +7028,15131 ,1 ,7028 ,3 +7029,34227 ,0 ,7029 ,3 +7030,33838 ,0 ,7030 ,3 +7031,17642 ,0 ,7031 ,3 +7032,87478 ,0 ,7032 ,3 +7033,45886 ,0 ,7033 ,3 +7034,88400 ,0 ,7034 ,3 +7035,16987 ,0 ,7035 ,3 +7036,20307 ,0 ,7036 ,3 +7037,71084 ,0 ,7037 ,3 +7038,77480 ,0 ,7038 ,3 +7039,89847 ,0 ,7039 ,3 +7040,73880 ,0 ,7040 ,3 +7041,33433 ,0 ,7041 ,3 +7042,33999 ,0 ,7042 ,3 +7043,26015 ,0 ,7043 ,3 +7044,31163 ,0 ,7044 ,3 +7045,30904 ,0 ,7045 ,3 +7046,54117 ,0 ,7046 ,3 +7047,62050 ,0 ,7047 ,3 +7048,58675 ,0 ,7048 ,3 +7049,65620 ,0 ,7049 ,3 +7050,21014 ,1 ,7050 ,3 +7051,85712 ,0 ,7051 ,3 +7052,24740 ,1 ,7052 ,3 +7053,43713 ,0 ,7053 ,3 +7054,21855 ,0 ,7054 ,3 +7055,67924 ,0 ,7055 ,3 +7056,81950 ,0 ,7056 ,3 +7057,29083 ,0 ,7057 ,3 +7058,20066 ,0 ,7058 ,3 +7059,34655 ,0 ,7059 ,3 +7060,24895 ,0 ,7060 ,3 +7061,37816 ,0 ,7061 ,3 +7062,34882 ,0 ,7062 ,3 +7063,33447 ,1 ,7063 ,3 +7064,46082 ,0 ,7064 ,3 +7065,56809 ,0 ,7065 ,3 +7066,37427 ,0 ,7066 ,3 +7067,15559 ,0 ,7067 ,3 +7068,58371 ,0 ,7068 ,3 +7069,15265 ,0 ,7069 ,3 +7070,78069 ,1 ,7070 ,3 +7071,37176 ,0 ,7071 ,3 +7072,21436 ,0 ,7072 ,3 +7073,11401 ,0 ,7073 ,3 +7074,70165 ,0 ,7074 ,3 +7075,41809 ,0 ,7075 ,3 +7076,83424 ,0 ,7076 ,3 +7077,28163 ,0 ,7077 ,3 +7078,41499 ,0 ,7078 ,3 +7079,26668 ,1 ,7079 ,3 +7080,13971 ,0 ,7080 ,3 +7081,15920 ,0 ,7081 ,3 +7082,66795 ,0 ,7082 ,3 +7083,33503 ,1 ,7083 ,3 +7084,75870 ,0 ,7084 ,3 +7085,23449 ,0 ,7085 ,3 +7086,22646 ,0 ,7086 ,3 +7087,23233 ,0 ,7087 ,3 +7088,63701 ,0 ,7088 ,3 +7089,32447 ,0 ,7089 ,3 +7090,31959 ,1 ,7090 ,3 +7091,86610 ,0 ,7091 ,3 +7092,48182 ,0 ,7092 ,3 +7093,35209 ,0 ,7093 ,3 +7094,14434 ,0 ,7094 ,3 +7095,17240 ,0 ,7095 ,3 +7096,59292 ,0 ,7096 ,3 +7097,28364 ,0 ,7097 ,3 +7098,26690 ,0 ,7098 ,3 +7099,21366 ,0 ,7099 ,3 +7100,63663 ,0 ,7100 ,3 +7101,59400 ,0 ,7101 ,3 +7102,80592 ,0 ,7102 ,3 +7103,66844 ,0 ,7103 ,3 +7104,39382 ,0 ,7104 ,3 +7105,56789 ,0 ,7105 ,3 +7106,53124 ,0 ,7106 ,3 +7107,59446 ,1 ,7107 ,3 +7108,33312 ,0 ,7108 ,3 +7109,69993 ,0 ,7109 ,3 +7110,30238 ,1 ,7110 ,3 +7111,58892 ,0 ,7111 ,3 +7112,28895 ,0 ,7112 ,3 +7113,85119 ,0 ,7113 ,3 +7114,50314 ,0 ,7114 ,3 +7115,65338 ,1 ,7115 ,3 +7116,42925 ,0 ,7116 ,3 +7117,89553 ,0 ,7117 ,3 +7118,42005 ,0 ,7118 ,3 +7119,25599 ,1 ,7119 ,3 +7120,28833 ,1 ,7120 ,3 +7121,29349 ,0 ,7121 ,3 +7122,31609 ,0 ,7122 ,3 +7123,77872 ,0 ,7123 ,3 +7124,55237 ,1 ,7124 ,3 +7125,13345 ,1 ,7125 ,3 +7126,78129 ,0 ,7126 ,3 +7127,37963 ,0 ,7127 ,3 +7128,47944 ,0 ,7128 ,3 +7129,58262 ,0 ,7129 ,3 +7130,44742 ,1 ,7130 ,3 +7131,37411 ,0 ,7131 ,3 +7132,26133 ,0 ,7132 ,3 +7133,67931 ,0 ,7133 ,3 +7134,18644 ,1 ,7134 ,3 +7135,28372 ,1 ,7135 ,3 +7136,20681 ,0 ,7136 ,3 +7137,86347 ,1 ,7137 ,3 +7138,26977 ,0 ,7138 ,3 +7139,46605 ,0 ,7139 ,3 +7140,70131 ,1 ,7140 ,3 +7141,14791 ,0 ,7141 ,3 +7142,60681 ,0 ,7142 ,3 +7143,12162 ,0 ,7143 ,3 +7144,46708 ,0 ,7144 ,3 +7145,68558 ,1 ,7145 ,3 +7146,88679 ,0 ,7146 ,3 +7147,21163 ,0 ,7147 ,3 +7148,48405 ,0 ,7148 ,3 +7149,29350 ,0 ,7149 ,3 +7150,45797 ,0 ,7150 ,3 +7151,61279 ,0 ,7151 ,3 +7152,27200 ,0 ,7152 ,3 +7153,27537 ,1 ,7153 ,3 +7154,70560 ,0 ,7154 ,3 +7155,78203 ,0 ,7155 ,3 +7156,14838 ,0 ,7156 ,3 +7157,18716 ,0 ,7157 ,3 +7158,53503 ,0 ,7158 ,3 +7159,17105 ,0 ,7159 ,3 +7160,83994 ,0 ,7160 ,3 +7161,25418 ,1 ,7161 ,3 +7162,38659 ,0 ,7162 ,3 +7163,70597 ,0 ,7163 ,3 +7164,30813 ,0 ,7164 ,3 +7165,33717 ,0 ,7165 ,3 +7166,69421 ,0 ,7166 ,3 +7167,39971 ,0 ,7167 ,3 +7168,80489 ,0 ,7168 ,3 +7169,74159 ,0 ,7169 ,3 +7170,32304 ,1 ,7170 ,3 +7171,47122 ,0 ,7171 ,3 +7172,18084 ,0 ,7172 ,3 +7173,78786 ,1 ,7173 ,3 +7174,67860 ,0 ,7174 ,3 +7175,50792 ,1 ,7175 ,3 +7176,10267 ,1 ,7176 ,3 +7177,83058 ,0 ,7177 ,3 +7178,69315 ,0 ,7178 ,3 +7179,22294 ,1 ,7179 ,3 +7180,52138 ,0 ,7180 ,3 +7181,58523 ,0 ,7181 ,3 +7182,23966 ,0 ,7182 ,3 +7183,45563 ,0 ,7183 ,3 +7184,63763 ,0 ,7184 ,3 +7185,82722 ,1 ,7185 ,3 +7186,26183 ,0 ,7186 ,3 +7187,42188 ,1 ,7187 ,3 +7188,34421 ,1 ,7188 ,3 +7189,44678 ,0 ,7189 ,3 +7190,83873 ,0 ,7190 ,3 +7191,42129 ,0 ,7191 ,3 +7192,58047 ,0 ,7192 ,3 +7193,75403 ,0 ,7193 ,3 +7194,82862 ,0 ,7194 ,3 +7195,67578 ,0 ,7195 ,3 +7196,21362 ,1 ,7196 ,3 +7197,32037 ,0 ,7197 ,3 +7198,78758 ,0 ,7198 ,3 +7199,26598 ,0 ,7199 ,3 +7200,62660 ,0 ,7200 ,3 +7201,17294 ,0 ,7201 ,3 +7202,65598 ,0 ,7202 ,3 +7203,50053 ,0 ,7203 ,3 +7204,78917 ,0 ,7204 ,3 +7205,25042 ,0 ,7205 ,3 +7206,55426 ,1 ,7206 ,3 +7207,57751 ,1 ,7207 ,3 +7208,76970 ,0 ,7208 ,3 +7209,20048 ,0 ,7209 ,3 +7210,79515 ,0 ,7210 ,3 +7211,69350 ,0 ,7211 ,3 +7212,37623 ,0 ,7212 ,3 +7213,51321 ,1 ,7213 ,3 +7214,25277 ,0 ,7214 ,3 +7215,45247 ,0 ,7215 ,3 +7216,77515 ,1 ,7216 ,3 +7217,58182 ,0 ,7217 ,3 +7218,48850 ,0 ,7218 ,3 +7219,39555 ,0 ,7219 ,3 +7220,36713 ,0 ,7220 ,3 +7221,86919 ,1 ,7221 ,3 +7222,53429 ,0 ,7222 ,3 +7223,46624 ,0 ,7223 ,3 +7224,82934 ,1 ,7224 ,3 +7225,29577 ,1 ,7225 ,3 +7226,82833 ,0 ,7226 ,3 +7227,87568 ,0 ,7227 ,3 +7228,14222 ,0 ,7228 ,3 +7229,14707 ,0 ,7229 ,3 +7230,76153 ,0 ,7230 ,3 +7231,55720 ,0 ,7231 ,3 +7232,62984 ,0 ,7232 ,3 +7233,63079 ,1 ,7233 ,3 +7234,36828 ,0 ,7234 ,3 +7235,34793 ,0 ,7235 ,3 +7236,85295 ,0 ,7236 ,3 +7237,37731 ,0 ,7237 ,3 +7238,31236 ,0 ,7238 ,3 +7239,50079 ,0 ,7239 ,3 +7240,60717 ,0 ,7240 ,3 +7241,60052 ,0 ,7241 ,3 +7242,75192 ,0 ,7242 ,3 +7243,71846 ,0 ,7243 ,3 +7244,78772 ,0 ,7244 ,3 +7245,17939 ,0 ,7245 ,3 +7246,39595 ,0 ,7246 ,3 +7247,24932 ,0 ,7247 ,3 +7248,53994 ,0 ,7248 ,3 +7249,21743 ,0 ,7249 ,3 +7250,28837 ,1 ,7250 ,3 +7251,55747 ,0 ,7251 ,3 +7252,17544 ,0 ,7252 ,3 +7253,33090 ,0 ,7253 ,3 +7254,79649 ,0 ,7254 ,3 +7255,32672 ,0 ,7255 ,3 +7256,67747 ,1 ,7256 ,3 +7257,79630 ,1 ,7257 ,3 +7258,86288 ,0 ,7258 ,3 +7259,64365 ,0 ,7259 ,3 +7260,45589 ,0 ,7260 ,3 +7261,77124 ,0 ,7261 ,3 +7262,11611 ,0 ,7262 ,3 +7263,46657 ,0 ,7263 ,3 +7264,83732 ,0 ,7264 ,3 +7265,32665 ,0 ,7265 ,3 +7266,21010 ,0 ,7266 ,3 +7267,16191 ,0 ,7267 ,3 +7268,89484 ,0 ,7268 ,3 +7269,71253 ,0 ,7269 ,3 +7270,28957 ,0 ,7270 ,3 +7271,28151 ,0 ,7271 ,3 +7272,33568 ,0 ,7272 ,3 +7273,71319 ,0 ,7273 ,3 +7274,35164 ,0 ,7274 ,3 +7275,83605 ,0 ,7275 ,3 +7276,49432 ,0 ,7276 ,3 +7277,44240 ,0 ,7277 ,3 +7278,23649 ,0 ,7278 ,3 +7279,66477 ,0 ,7279 ,3 +7280,52537 ,0 ,7280 ,3 +7281,18325 ,0 ,7281 ,3 +7282,41647 ,0 ,7282 ,3 +7283,67021 ,0 ,7283 ,3 +7284,59049 ,0 ,7284 ,3 +7285,81512 ,0 ,7285 ,3 +7286,21345 ,0 ,7286 ,3 +7287,73679 ,0 ,7287 ,3 +7288,49556 ,0 ,7288 ,3 +7289,83543 ,1 ,7289 ,3 +7290,49966 ,1 ,7290 ,3 +7291,65367 ,0 ,7291 ,3 +7292,19826 ,0 ,7292 ,3 +7293,25919 ,0 ,7293 ,3 +7294,50836 ,0 ,7294 ,3 +7295,17522 ,0 ,7295 ,3 +7296,40450 ,0 ,7296 ,3 +7297,39128 ,1 ,7297 ,3 +7298,50128 ,0 ,7298 ,3 +7299,42561 ,0 ,7299 ,3 +7300,56702 ,0 ,7300 ,3 +7301,89167 ,0 ,7301 ,3 +7302,68118 ,0 ,7302 ,3 +7303,65425 ,0 ,7303 ,3 +7304,56736 ,0 ,7304 ,3 +7305,23871 ,0 ,7305 ,3 +7306,21774 ,0 ,7306 ,3 +7307,54367 ,1 ,7307 ,3 +7308,77277 ,1 ,7308 ,3 +7309,58092 ,0 ,7309 ,3 +7310,25849 ,0 ,7310 ,3 +7311,22165 ,0 ,7311 ,3 +7312,83932 ,0 ,7312 ,3 +7313,37592 ,0 ,7313 ,3 +7314,67473 ,0 ,7314 ,3 +7315,13741 ,0 ,7315 ,3 +7316,24369 ,0 ,7316 ,3 +7317,36167 ,0 ,7317 ,3 +7318,66621 ,0 ,7318 ,3 +7319,18856 ,1 ,7319 ,3 +7320,30251 ,0 ,7320 ,3 +7321,59298 ,0 ,7321 ,3 +7322,23248 ,0 ,7322 ,3 +7323,63840 ,0 ,7323 ,3 +7324,89493 ,1 ,7324 ,3 +7325,45858 ,0 ,7325 ,3 +7326,20775 ,0 ,7326 ,3 +7327,23520 ,1 ,7327 ,3 +7328,42037 ,0 ,7328 ,3 +7329,66314 ,0 ,7329 ,3 +7330,72006 ,0 ,7330 ,3 +7331,77451 ,0 ,7331 ,3 +7332,24666 ,0 ,7332 ,3 +7333,70917 ,0 ,7333 ,3 +7334,60449 ,0 ,7334 ,3 +7335,62122 ,1 ,7335 ,3 +7336,80096 ,0 ,7336 ,3 +7337,27188 ,0 ,7337 ,3 +7338,69281 ,0 ,7338 ,3 +7339,21924 ,0 ,7339 ,3 +7340,76765 ,0 ,7340 ,3 +7341,39632 ,0 ,7341 ,3 +7342,52491 ,1 ,7342 ,3 +7343,36152 ,0 ,7343 ,3 +7344,38216 ,0 ,7344 ,3 +7345,84633 ,0 ,7345 ,3 +7346,66353 ,0 ,7346 ,3 +7347,11466 ,0 ,7347 ,3 +7348,37370 ,0 ,7348 ,3 +7349,81057 ,0 ,7349 ,3 +7350,11238 ,0 ,7350 ,3 +7351,61892 ,0 ,7351 ,3 +7352,60642 ,0 ,7352 ,3 +7353,24533 ,0 ,7353 ,3 +7354,47236 ,0 ,7354 ,3 +7355,82132 ,1 ,7355 ,3 +7356,39104 ,0 ,7356 ,3 +7357,32275 ,0 ,7357 ,3 +7358,26126 ,0 ,7358 ,3 +7359,86327 ,1 ,7359 ,3 +7360,12506 ,0 ,7360 ,3 +7361,67295 ,0 ,7361 ,3 +7362,18526 ,0 ,7362 ,3 +7363,45033 ,0 ,7363 ,3 +7364,79802 ,1 ,7364 ,3 +7365,21035 ,0 ,7365 ,3 +7366,65541 ,0 ,7366 ,3 +7367,44091 ,0 ,7367 ,3 +7368,61083 ,1 ,7368 ,3 +7369,78831 ,0 ,7369 ,3 +7370,26471 ,0 ,7370 ,3 +7371,59624 ,0 ,7371 ,3 +7372,26991 ,1 ,7372 ,3 +7373,16823 ,0 ,7373 ,3 +7374,40506 ,1 ,7374 ,3 +7375,39691 ,0 ,7375 ,3 +7376,12922 ,1 ,7376 ,3 +7377,89468 ,1 ,7377 ,3 +7378,38100 ,1 ,7378 ,3 +7379,80233 ,0 ,7379 ,3 +7380,60563 ,1 ,7380 ,3 +7381,81217 ,0 ,7381 ,3 +7382,28888 ,0 ,7382 ,3 +7383,57170 ,0 ,7383 ,3 +7384,24741 ,0 ,7384 ,3 +7385,29450 ,0 ,7385 ,3 +7386,39538 ,0 ,7386 ,3 +7387,25531 ,0 ,7387 ,3 +7388,87063 ,0 ,7388 ,3 +7389,24144 ,0 ,7389 ,3 +7390,81863 ,0 ,7390 ,3 +7391,36724 ,1 ,7391 ,3 +7392,81483 ,0 ,7392 ,3 +7393,20589 ,1 ,7393 ,3 +7394,65840 ,0 ,7394 ,3 +7395,73297 ,0 ,7395 ,3 +7396,54100 ,1 ,7396 ,3 +7397,62782 ,0 ,7397 ,3 +7398,75367 ,0 ,7398 ,3 +7399,32173 ,0 ,7399 ,3 +7400,48588 ,1 ,7400 ,3 +7401,31157 ,0 ,7401 ,3 +7402,13545 ,1 ,7402 ,3 +7403,76449 ,0 ,7403 ,3 +7404,28459 ,0 ,7404 ,3 +7405,89366 ,1 ,7405 ,3 +7406,84235 ,0 ,7406 ,3 +7407,44783 ,1 ,7407 ,3 +7408,23770 ,0 ,7408 ,3 +7409,81076 ,0 ,7409 ,3 +7410,40696 ,0 ,7410 ,3 +7411,78077 ,0 ,7411 ,3 +7412,66212 ,0 ,7412 ,3 +7413,10029 ,0 ,7413 ,3 +7414,62853 ,1 ,7414 ,3 +7415,79526 ,1 ,7415 ,3 +7416,68284 ,0 ,7416 ,3 +7417,32920 ,0 ,7417 ,3 +7418,75010 ,0 ,7418 ,3 +7419,19785 ,0 ,7419 ,3 +7420,79495 ,0 ,7420 ,3 +7421,42379 ,0 ,7421 ,3 +7422,59569 ,0 ,7422 ,3 +7423,34266 ,0 ,7423 ,3 +7424,57091 ,0 ,7424 ,3 +7425,18373 ,0 ,7425 ,3 +7426,40010 ,0 ,7426 ,3 +7427,43468 ,0 ,7427 ,3 +7428,86892 ,0 ,7428 ,3 +7429,32883 ,0 ,7429 ,3 +7430,64168 ,1 ,7430 ,3 +7431,59942 ,0 ,7431 ,3 +7432,22431 ,0 ,7432 ,3 +7433,29625 ,1 ,7433 ,3 +7434,45519 ,0 ,7434 ,3 +7435,85087 ,0 ,7435 ,3 +7436,66381 ,0 ,7436 ,3 +7437,64615 ,1 ,7437 ,3 +7438,46000 ,1 ,7438 ,3 +7439,40769 ,0 ,7439 ,3 +7440,80436 ,1 ,7440 ,3 +7441,47131 ,1 ,7441 ,3 +7442,64232 ,0 ,7442 ,3 +7443,45657 ,1 ,7443 ,3 +7444,53331 ,0 ,7444 ,3 +7445,19177 ,1 ,7445 ,3 +7446,70650 ,0 ,7446 ,3 +7447,62087 ,0 ,7447 ,3 +7448,58510 ,0 ,7448 ,3 +7449,60480 ,0 ,7449 ,3 +7450,60378 ,1 ,7450 ,3 +7451,20926 ,0 ,7451 ,3 +7452,73058 ,0 ,7452 ,3 +7453,76165 ,0 ,7453 ,3 +7454,16858 ,1 ,7454 ,3 +7455,43150 ,0 ,7455 ,3 +7456,78435 ,0 ,7456 ,3 +7457,43891 ,1 ,7457 ,3 +7458,80830 ,0 ,7458 ,3 +7459,10018 ,1 ,7459 ,3 +7460,52005 ,1 ,7460 ,3 +7461,56457 ,0 ,7461 ,3 +7462,88800 ,0 ,7462 ,3 +7463,66715 ,0 ,7463 ,3 +7464,45858 ,0 ,7464 ,3 +7465,68425 ,0 ,7465 ,3 +7466,14269 ,0 ,7466 ,3 +7467,28967 ,0 ,7467 ,3 +7468,28610 ,0 ,7468 ,3 +7469,14111 ,1 ,7469 ,3 +7470,13806 ,0 ,7470 ,3 +7471,53585 ,0 ,7471 ,3 +7472,52018 ,1 ,7472 ,3 +7473,69151 ,0 ,7473 ,3 +7474,67939 ,0 ,7474 ,3 +7475,80944 ,0 ,7475 ,3 +7476,84005 ,0 ,7476 ,3 +7477,64060 ,1 ,7477 ,3 +7478,80021 ,0 ,7478 ,3 +7479,84236 ,1 ,7479 ,3 +7480,44258 ,0 ,7480 ,3 +7481,48912 ,0 ,7481 ,3 +7482,59464 ,0 ,7482 ,3 +7483,40399 ,0 ,7483 ,3 +7484,36986 ,0 ,7484 ,3 +7485,78003 ,1 ,7485 ,3 +7486,23055 ,0 ,7486 ,3 +7487,55443 ,1 ,7487 ,3 +7488,62632 ,0 ,7488 ,3 +7489,45521 ,0 ,7489 ,3 +7490,60118 ,1 ,7490 ,3 +7491,76218 ,0 ,7491 ,3 +7492,58121 ,0 ,7492 ,3 +7493,27725 ,0 ,7493 ,3 +7494,67068 ,1 ,7494 ,3 +7495,13729 ,0 ,7495 ,3 +7496,15870 ,0 ,7496 ,3 +7497,37913 ,0 ,7497 ,3 +7498,12095 ,0 ,7498 ,3 +7499,66466 ,0 ,7499 ,3 +7500,40755 ,0 ,7500 ,3 +7501,41139 ,1 ,7501 ,3 +7502,18627 ,0 ,7502 ,3 +7503,11557 ,0 ,7503 ,3 +7504,38882 ,1 ,7504 ,3 +7505,12100 ,0 ,7505 ,3 +7506,36401 ,0 ,7506 ,3 +7507,49763 ,0 ,7507 ,3 +7508,13345 ,1 ,7508 ,3 +7509,58290 ,0 ,7509 ,3 +7510,34386 ,0 ,7510 ,3 +7511,13345 ,0 ,7511 ,3 +7512,81440 ,0 ,7512 ,3 +7513,87322 ,0 ,7513 ,3 +7514,40879 ,0 ,7514 ,3 +7515,68008 ,0 ,7515 ,3 +7516,46246 ,0 ,7516 ,3 +7517,32016 ,0 ,7517 ,3 +7518,35281 ,1 ,7518 ,3 +7519,38542 ,0 ,7519 ,3 +7520,86429 ,0 ,7520 ,3 +7521,45154 ,0 ,7521 ,3 +7522,34701 ,0 ,7522 ,3 +7523,31786 ,0 ,7523 ,3 +7524,76257 ,0 ,7524 ,3 +7525,24560 ,0 ,7525 ,3 +7526,46146 ,0 ,7526 ,3 +7527,54519 ,0 ,7527 ,3 +7528,52119 ,1 ,7528 ,3 +7529,78313 ,0 ,7529 ,3 +7530,52788 ,0 ,7530 ,3 +7531,24158 ,1 ,7531 ,3 +7532,19259 ,0 ,7532 ,3 +7533,63507 ,0 ,7533 ,3 +7534,44952 ,1 ,7534 ,3 +7535,80652 ,0 ,7535 ,3 +7536,68651 ,0 ,7536 ,3 +7537,45782 ,0 ,7537 ,3 +7538,41397 ,1 ,7538 ,3 +7539,64977 ,0 ,7539 ,3 +7540,80183 ,0 ,7540 ,3 +7541,18115 ,0 ,7541 ,3 +7542,27874 ,0 ,7542 ,3 +7543,85648 ,0 ,7543 ,3 +7544,39198 ,0 ,7544 ,3 +7545,29101 ,0 ,7545 ,3 +7546,81141 ,0 ,7546 ,3 +7547,18008 ,0 ,7547 ,3 +7548,18898 ,0 ,7548 ,3 +7549,75879 ,0 ,7549 ,3 +7550,74814 ,0 ,7550 ,3 +7551,46837 ,0 ,7551 ,3 +7552,82634 ,0 ,7552 ,3 +7553,86815 ,0 ,7553 ,3 +7554,19679 ,0 ,7554 ,3 +7555,68391 ,0 ,7555 ,3 +7556,24206 ,0 ,7556 ,3 +7557,78414 ,1 ,7557 ,3 +7558,51740 ,0 ,7558 ,3 +7559,82153 ,0 ,7559 ,3 +7560,87731 ,1 ,7560 ,3 +7561,46501 ,0 ,7561 ,3 +7562,48813 ,0 ,7562 ,3 +7563,23863 ,0 ,7563 ,3 +7564,59388 ,0 ,7564 ,3 +7565,50651 ,0 ,7565 ,3 +7566,43758 ,1 ,7566 ,3 +7567,20077 ,1 ,7567 ,3 +7568,49817 ,0 ,7568 ,3 +7569,51956 ,0 ,7569 ,3 +7570,87868 ,0 ,7570 ,3 +7571,29864 ,0 ,7571 ,3 +7572,57591 ,0 ,7572 ,3 +7573,88796 ,0 ,7573 ,3 +7574,27337 ,0 ,7574 ,3 +7575,28180 ,0 ,7575 ,3 +7576,48749 ,0 ,7576 ,3 +7577,75231 ,1 ,7577 ,3 +7578,66342 ,0 ,7578 ,3 +7579,61537 ,0 ,7579 ,3 +7580,19335 ,0 ,7580 ,3 +7581,28289 ,0 ,7581 ,3 +7582,76283 ,0 ,7582 ,3 +7583,66353 ,0 ,7583 ,3 +7584,82579 ,0 ,7584 ,3 +7585,52869 ,0 ,7585 ,3 +7586,39358 ,0 ,7586 ,3 +7587,42236 ,0 ,7587 ,3 +7588,74538 ,0 ,7588 ,3 +7589,73077 ,0 ,7589 ,3 +7590,23881 ,0 ,7590 ,3 +7591,23462 ,0 ,7591 ,3 +7592,69508 ,0 ,7592 ,3 +7593,56435 ,0 ,7593 ,3 +7594,46659 ,0 ,7594 ,3 +7595,54703 ,1 ,7595 ,3 +7596,43573 ,0 ,7596 ,3 +7597,34900 ,0 ,7597 ,3 +7598,82605 ,0 ,7598 ,3 +7599,71077 ,1 ,7599 ,3 +7600,35040 ,0 ,7600 ,3 +7601,18648 ,0 ,7601 ,3 +7602,68624 ,0 ,7602 ,3 +7603,50659 ,0 ,7603 ,3 +7604,14355 ,0 ,7604 ,3 +7605,28229 ,0 ,7605 ,3 +7606,58584 ,0 ,7606 ,3 +7607,14336 ,0 ,7607 ,3 +7608,55957 ,0 ,7608 ,3 +7609,70991 ,0 ,7609 ,3 +7610,64209 ,0 ,7610 ,3 +7611,26798 ,0 ,7611 ,3 +7612,64805 ,1 ,7612 ,3 +7613,14405 ,0 ,7613 ,3 +7614,77840 ,0 ,7614 ,3 +7615,12950 ,0 ,7615 ,3 +7616,87924 ,0 ,7616 ,3 +7617,14554 ,1 ,7617 ,3 +7618,36275 ,0 ,7618 ,3 +7619,16889 ,0 ,7619 ,3 +7620,80262 ,0 ,7620 ,3 +7621,45441 ,0 ,7621 ,3 +7622,30614 ,0 ,7622 ,3 +7623,88431 ,0 ,7623 ,3 +7624,20089 ,0 ,7624 ,3 +7625,73917 ,0 ,7625 ,3 +7626,15832 ,0 ,7626 ,3 +7627,32733 ,1 ,7627 ,3 +7628,56648 ,0 ,7628 ,3 +7629,30807 ,0 ,7629 ,3 +7630,75572 ,0 ,7630 ,3 +7631,70696 ,0 ,7631 ,3 +7632,11984 ,0 ,7632 ,3 +7633,88128 ,0 ,7633 ,3 +7634,60898 ,0 ,7634 ,3 +7635,19169 ,1 ,7635 ,3 +7636,88483 ,0 ,7636 ,3 +7637,57364 ,0 ,7637 ,3 +7638,63840 ,0 ,7638 ,3 +7639,69462 ,0 ,7639 ,3 +7640,88584 ,1 ,7640 ,3 +7641,71704 ,0 ,7641 ,3 +7642,30461 ,0 ,7642 ,3 +7643,44295 ,0 ,7643 ,3 +7644,40855 ,1 ,7644 ,3 +7645,75570 ,1 ,7645 ,3 +7646,18703 ,0 ,7646 ,3 +7647,75210 ,0 ,7647 ,3 +7648,68725 ,0 ,7648 ,3 +7649,48761 ,1 ,7649 ,3 +7650,15434 ,1 ,7650 ,3 +7651,75010 ,0 ,7651 ,3 +7652,43684 ,0 ,7652 ,3 +7653,82098 ,0 ,7653 ,3 +7654,75704 ,0 ,7654 ,3 +7655,69434 ,0 ,7655 ,3 +7656,75412 ,0 ,7656 ,3 +7657,81199 ,0 ,7657 ,3 +7658,50406 ,0 ,7658 ,3 +7659,85903 ,0 ,7659 ,3 +7660,42266 ,1 ,7660 ,3 +7661,43275 ,0 ,7661 ,3 +7662,40591 ,0 ,7662 ,3 +7663,62964 ,0 ,7663 ,3 +7664,54572 ,1 ,7664 ,3 +7665,43667 ,0 ,7665 ,3 +7666,85426 ,1 ,7666 ,3 +7667,84947 ,0 ,7667 ,3 +7668,72139 ,1 ,7668 ,3 +7669,14735 ,0 ,7669 ,3 +7670,76762 ,0 ,7670 ,3 +7671,88926 ,0 ,7671 ,3 +7672,79296 ,0 ,7672 ,3 +7673,55030 ,0 ,7673 ,3 +7674,54977 ,0 ,7674 ,3 +7675,66332 ,0 ,7675 ,3 +7676,34545 ,1 ,7676 ,3 +7677,30550 ,0 ,7677 ,3 +7678,35909 ,0 ,7678 ,3 +7679,47259 ,0 ,7679 ,3 +7680,68662 ,0 ,7680 ,3 +7681,14201 ,0 ,7681 ,3 +7682,22224 ,0 ,7682 ,3 +7683,34487 ,0 ,7683 ,3 +7684,44827 ,1 ,7684 ,3 +7685,15341 ,0 ,7685 ,3 +7686,35322 ,0 ,7686 ,3 +7687,60838 ,0 ,7687 ,3 +7688,75926 ,0 ,7688 ,3 +7689,35954 ,0 ,7689 ,3 +7690,60949 ,0 ,7690 ,3 +7691,87551 ,0 ,7691 ,3 +7692,27881 ,0 ,7692 ,3 +7693,39084 ,0 ,7693 ,3 +7694,22866 ,0 ,7694 ,3 +7695,47217 ,0 ,7695 ,3 +7696,25521 ,0 ,7696 ,3 +7697,15551 ,0 ,7697 ,3 +7698,11624 ,0 ,7698 ,3 +7699,71121 ,0 ,7699 ,3 +7700,44033 ,0 ,7700 ,3 +7701,82782 ,0 ,7701 ,3 +7702,13589 ,0 ,7702 ,3 +7703,40491 ,0 ,7703 ,3 +7704,14189 ,0 ,7704 ,3 +7705,19880 ,0 ,7705 ,3 +7706,68058 ,0 ,7706 ,3 +7707,38654 ,0 ,7707 ,3 +7708,12950 ,0 ,7708 ,3 +7709,25633 ,1 ,7709 ,3 +7710,87823 ,0 ,7710 ,3 +7711,25612 ,1 ,7711 ,3 +7712,31752 ,0 ,7712 ,3 +7713,61341 ,0 ,7713 ,3 +7714,28100 ,0 ,7714 ,3 +7715,19760 ,1 ,7715 ,3 +7716,86694 ,0 ,7716 ,3 +7717,89434 ,0 ,7717 ,3 +7718,80203 ,0 ,7718 ,3 +7719,10121 ,0 ,7719 ,3 +7720,23868 ,0 ,7720 ,3 +7721,44454 ,0 ,7721 ,3 +7722,53290 ,0 ,7722 ,3 +7723,78567 ,0 ,7723 ,3 +7724,35376 ,1 ,7724 ,3 +7725,34456 ,1 ,7725 ,3 +7726,80811 ,1 ,7726 ,3 +7727,73222 ,1 ,7727 ,3 +7728,39871 ,0 ,7728 ,3 +7729,17319 ,1 ,7729 ,3 +7730,81607 ,0 ,7730 ,3 +7731,72773 ,0 ,7731 ,3 +7732,14303 ,1 ,7732 ,3 +7733,65475 ,1 ,7733 ,3 +7734,24521 ,0 ,7734 ,3 +7735,24630 ,0 ,7735 ,3 +7736,34640 ,0 ,7736 ,3 +7737,27299 ,0 ,7737 ,3 +7738,41356 ,0 ,7738 ,3 +7739,10188 ,0 ,7739 ,3 +7740,41110 ,0 ,7740 ,3 +7741,26491 ,0 ,7741 ,3 +7742,37711 ,0 ,7742 ,3 +7743,20991 ,0 ,7743 ,3 +7744,80259 ,0 ,7744 ,3 +7745,61775 ,0 ,7745 ,3 +7746,56237 ,0 ,7746 ,3 +7747,53869 ,0 ,7747 ,3 +7748,33250 ,0 ,7748 ,3 +7749,64542 ,0 ,7749 ,3 +7750,62182 ,0 ,7750 ,3 +7751,60165 ,0 ,7751 ,3 +7752,42694 ,1 ,7752 ,3 +7753,44508 ,0 ,7753 ,3 +7754,81642 ,0 ,7754 ,3 +7755,21230 ,0 ,7755 ,3 +7756,22591 ,0 ,7756 ,3 +7757,72284 ,0 ,7757 ,3 +7758,31283 ,0 ,7758 ,3 +7759,59989 ,0 ,7759 ,3 +7760,35784 ,0 ,7760 ,3 +7761,30365 ,1 ,7761 ,3 +7762,57569 ,0 ,7762 ,3 +7763,66581 ,0 ,7763 ,3 +7764,53394 ,0 ,7764 ,3 +7765,54215 ,1 ,7765 ,3 +7766,22631 ,0 ,7766 ,3 +7767,13585 ,0 ,7767 ,3 +7768,89834 ,0 ,7768 ,3 +7769,17168 ,0 ,7769 ,3 +7770,88399 ,0 ,7770 ,3 +7771,63090 ,1 ,7771 ,3 +7772,82689 ,0 ,7772 ,3 +7773,82452 ,0 ,7773 ,3 +7774,49164 ,1 ,7774 ,3 +7775,51086 ,0 ,7775 ,3 +7776,85523 ,0 ,7776 ,3 +7777,63227 ,0 ,7777 ,3 +7778,34190 ,0 ,7778 ,3 +7779,63569 ,0 ,7779 ,3 +7780,47993 ,0 ,7780 ,3 +7781,38310 ,0 ,7781 ,3 +7782,58586 ,0 ,7782 ,3 +7783,56286 ,0 ,7783 ,3 +7784,72997 ,0 ,7784 ,3 +7785,70818 ,0 ,7785 ,3 +7786,66064 ,0 ,7786 ,3 +7787,27452 ,0 ,7787 ,3 +7788,55194 ,1 ,7788 ,3 +7789,11875 ,0 ,7789 ,3 +7790,52888 ,0 ,7790 ,3 +7791,48285 ,0 ,7791 ,3 +7792,29775 ,0 ,7792 ,3 +7793,83474 ,0 ,7793 ,3 +7794,80744 ,0 ,7794 ,3 +7795,43289 ,0 ,7795 ,3 +7796,76054 ,0 ,7796 ,3 +7797,84884 ,0 ,7797 ,3 +7798,28801 ,0 ,7798 ,3 +7799,35776 ,1 ,7799 ,3 +7800,35966 ,0 ,7800 ,3 +7801,74674 ,0 ,7801 ,3 +7802,56186 ,0 ,7802 ,3 +7803,45822 ,0 ,7803 ,3 +7804,12138 ,0 ,7804 ,3 +7805,62332 ,0 ,7805 ,3 +7806,71886 ,1 ,7806 ,3 +7807,68364 ,0 ,7807 ,3 +7808,75144 ,0 ,7808 ,3 +7809,24552 ,0 ,7809 ,3 +7810,71640 ,0 ,7810 ,3 +7811,42709 ,0 ,7811 ,3 +7812,45081 ,0 ,7812 ,3 +7813,75800 ,0 ,7813 ,3 +7814,24397 ,0 ,7814 ,3 +7815,61751 ,0 ,7815 ,3 +7816,63329 ,0 ,7816 ,3 +7817,82744 ,0 ,7817 ,3 +7818,15200 ,0 ,7818 ,3 +7819,79885 ,1 ,7819 ,3 +7820,12703 ,1 ,7820 ,3 +7821,56089 ,0 ,7821 ,3 +7822,73615 ,0 ,7822 ,3 +7823,78009 ,1 ,7823 ,3 +7824,83377 ,0 ,7824 ,3 +7825,42745 ,0 ,7825 ,3 +7826,32840 ,0 ,7826 ,3 +7827,84258 ,0 ,7827 ,3 +7828,54682 ,0 ,7828 ,3 +7829,86212 ,0 ,7829 ,3 +7830,60629 ,0 ,7830 ,3 +7831,55813 ,0 ,7831 ,3 +7832,87531 ,0 ,7832 ,3 +7833,70834 ,0 ,7833 ,3 +7834,78372 ,0 ,7834 ,3 +7835,82313 ,0 ,7835 ,3 +7836,38800 ,0 ,7836 ,3 +7837,28597 ,0 ,7837 ,3 +7838,36999 ,0 ,7838 ,3 +7839,87488 ,0 ,7839 ,3 +7840,67980 ,0 ,7840 ,3 +7841,78960 ,0 ,7841 ,3 +7842,36602 ,0 ,7842 ,3 +7843,84274 ,1 ,7843 ,3 +7844,69852 ,0 ,7844 ,3 +7845,89043 ,0 ,7845 ,3 +7846,60008 ,0 ,7846 ,3 +7847,74086 ,0 ,7847 ,3 +7848,63781 ,1 ,7848 ,3 +7849,76990 ,0 ,7849 ,3 +7850,65547 ,1 ,7850 ,3 +7851,43516 ,0 ,7851 ,3 +7852,71140 ,0 ,7852 ,3 +7853,74406 ,0 ,7853 ,3 +7854,68637 ,0 ,7854 ,3 +7855,66959 ,0 ,7855 ,3 +7856,39002 ,0 ,7856 ,3 +7857,68181 ,0 ,7857 ,3 +7858,65648 ,0 ,7858 ,3 +7859,29498 ,1 ,7859 ,3 +7860,22683 ,0 ,7860 ,3 +7861,51932 ,1 ,7861 ,3 +7862,25569 ,0 ,7862 ,3 +7863,36269 ,0 ,7863 ,3 +7864,37362 ,0 ,7864 ,3 +7865,72394 ,1 ,7865 ,3 +7866,79018 ,0 ,7866 ,3 +7867,43641 ,0 ,7867 ,3 +7868,25730 ,0 ,7868 ,3 +7869,34515 ,0 ,7869 ,3 +7870,21374 ,0 ,7870 ,3 +7871,44660 ,0 ,7871 ,3 +7872,16470 ,0 ,7872 ,3 +7873,56244 ,0 ,7873 ,3 +7874,64374 ,0 ,7874 ,3 +7875,22051 ,0 ,7875 ,3 +7876,63795 ,0 ,7876 ,3 +7877,58687 ,0 ,7877 ,3 +7878,64926 ,0 ,7878 ,3 +7879,62132 ,0 ,7879 ,3 +7880,22447 ,0 ,7880 ,3 +7881,78225 ,0 ,7881 ,3 +7882,40797 ,0 ,7882 ,3 +7883,18489 ,0 ,7883 ,3 +7884,80932 ,0 ,7884 ,3 +7885,72240 ,0 ,7885 ,3 +7886,42666 ,0 ,7886 ,3 +7887,46636 ,0 ,7887 ,3 +7888,55923 ,0 ,7888 ,3 +7889,57188 ,0 ,7889 ,3 +7890,42364 ,0 ,7890 ,3 +7891,57399 ,0 ,7891 ,3 +7892,37590 ,0 ,7892 ,3 +7893,50232 ,0 ,7893 ,3 +7894,86832 ,1 ,7894 ,3 +7895,85349 ,0 ,7895 ,3 +7896,78962 ,0 ,7896 ,3 +7897,11449 ,0 ,7897 ,3 +7898,42900 ,0 ,7898 ,3 +7899,86248 ,0 ,7899 ,3 +7900,45819 ,0 ,7900 ,3 +7901,33501 ,0 ,7901 ,3 +7902,20596 ,0 ,7902 ,3 +7903,76538 ,0 ,7903 ,3 +7904,72148 ,0 ,7904 ,3 +7905,42120 ,0 ,7905 ,3 +7906,60905 ,0 ,7906 ,3 +7907,86551 ,0 ,7907 ,3 +7908,53547 ,0 ,7908 ,3 +7909,78079 ,0 ,7909 ,3 +7910,56888 ,0 ,7910 ,3 +7911,65872 ,1 ,7911 ,3 +7912,83038 ,0 ,7912 ,3 +7913,77212 ,0 ,7913 ,3 +7914,75510 ,0 ,7914 ,3 +7915,69713 ,0 ,7915 ,3 +7916,43144 ,0 ,7916 ,3 +7917,52998 ,0 ,7917 ,3 +7918,28549 ,0 ,7918 ,3 +7919,64158 ,0 ,7919 ,3 +7920,55131 ,0 ,7920 ,3 +7921,34427 ,0 ,7921 ,3 +7922,77912 ,1 ,7922 ,3 +7923,40778 ,0 ,7923 ,3 +7924,57929 ,1 ,7924 ,3 +7925,50599 ,0 ,7925 ,3 +7926,68918 ,1 ,7926 ,3 +7927,48882 ,1 ,7927 ,3 +7928,65616 ,0 ,7928 ,3 +7929,78008 ,0 ,7929 ,3 +7930,24420 ,1 ,7930 ,3 +7931,74752 ,0 ,7931 ,3 +7932,29855 ,1 ,7932 ,3 +7933,22055 ,0 ,7933 ,3 +7934,88469 ,1 ,7934 ,3 +7935,57000 ,0 ,7935 ,3 +7936,64063 ,0 ,7936 ,3 +7937,87737 ,0 ,7937 ,3 +7938,39426 ,0 ,7938 ,3 +7939,71502 ,1 ,7939 ,3 +7940,56559 ,0 ,7940 ,3 +7941,75842 ,0 ,7941 ,3 +7942,51535 ,0 ,7942 ,3 +7943,28195 ,0 ,7943 ,3 +7944,76760 ,0 ,7944 ,3 +7945,14489 ,0 ,7945 ,3 +7946,10248 ,0 ,7946 ,3 +7947,80125 ,0 ,7947 ,3 +7948,43381 ,0 ,7948 ,3 +7949,67264 ,0 ,7949 ,3 +7950,50808 ,0 ,7950 ,3 +7951,12475 ,0 ,7951 ,3 +7952,80889 ,0 ,7952 ,3 +7953,13741 ,0 ,7953 ,3 +7954,37657 ,0 ,7954 ,3 +7955,84059 ,0 ,7955 ,3 +7956,32679 ,0 ,7956 ,3 +7957,51198 ,0 ,7957 ,3 +7958,15224 ,0 ,7958 ,3 +7959,39869 ,0 ,7959 ,3 +7960,76500 ,0 ,7960 ,3 +7961,35914 ,1 ,7961 ,3 +7962,11620 ,0 ,7962 ,3 +7963,65249 ,0 ,7963 ,3 +7964,80929 ,0 ,7964 ,3 +7965,41448 ,0 ,7965 ,3 +7966,29157 ,0 ,7966 ,3 +7967,10813 ,0 ,7967 ,3 +7968,22438 ,0 ,7968 ,3 +7969,81089 ,0 ,7969 ,3 +7970,79844 ,0 ,7970 ,3 +7971,28776 ,0 ,7971 ,3 +7972,46516 ,0 ,7972 ,3 +7973,79659 ,1 ,7973 ,3 +7974,76205 ,0 ,7974 ,3 +7975,55967 ,0 ,7975 ,3 +7976,77967 ,0 ,7976 ,3 +7977,47387 ,0 ,7977 ,3 +7978,38374 ,0 ,7978 ,3 +7979,46419 ,1 ,7979 ,3 +7980,22420 ,0 ,7980 ,3 +7981,79411 ,0 ,7981 ,3 +7982,28110 ,1 ,7982 ,3 +7983,20602 ,1 ,7983 ,3 +7984,22756 ,0 ,7984 ,3 +7985,50436 ,0 ,7985 ,3 +7986,85962 ,0 ,7986 ,3 +7987,40298 ,0 ,7987 ,3 +7988,16615 ,0 ,7988 ,3 +7989,31441 ,0 ,7989 ,3 +7990,81087 ,1 ,7990 ,3 +7991,77097 ,1 ,7991 ,3 +7992,39921 ,0 ,7992 ,3 +7993,47892 ,1 ,7993 ,3 +7994,66231 ,0 ,7994 ,3 +7995,40093 ,0 ,7995 ,3 +7996,31923 ,0 ,7996 ,3 +7997,73023 ,0 ,7997 ,3 +7998,13763 ,0 ,7998 ,3 +7999,29077 ,0 ,7999 ,3 diff --git a/examples/example_study/topology.csv b/examples/example_study/topology.csv index e2f2bfb..485c9e7 100644 --- a/examples/example_study/topology.csv +++ b/examples/example_study/topology.csv @@ -1,101 +1,101 @@ layer0_node,layer0_name,layer1_node,layer1_name,layer2_node,layer2_name -0,SNP0,0,HERC2,0,Causal_path -1,SNP1,0,HERC2,0,Causal_path -2,SNP2,0,HERC2,0,Causal_path -3,SNP3,0,HERC2,0,Causal_path -4,SNP4,0,HERC2,0,Causal_path -5,SNP5,1,BRCA2,0,Causal_path -6,SNP6,1,BRCA2,0,Causal_path -7,SNP7,1,BRCA2,0,Causal_path -8,SNP8,1,BRCA2,0,Causal_path -9,SNP9,1,BRCA2,0,Causal_path -10,SNP10,2,ApoE ,0,Causal_path -11,SNP11,2,ApoE ,0,Causal_path -12,SNP12,2,ApoE ,0,Causal_path -13,SNP13,2,ApoE ,0,Causal_path -14,SNP14,2,ApoE ,0,Causal_path -15,SNP15,2,ApoE ,0,Causal_path -16,SNP16,2,ApoE ,0,Causal_path -17,SNP17,2,ApoE ,0,Causal_path -18,SNP18,2,ApoE ,0,Causal_path -19,SNP19,2,ApoE ,0,Causal_path -20,SNP20,3,NRG,0,Causal_path -21,SNP21,3,NRG,0,Causal_path -22,SNP22,3,NRG,0,Causal_path -23,SNP23,3,NRG,0,Causal_path -24,SNP24,3,NRG,0,Causal_path -25,SNP25,3,NRG,0,Causal_path -26,SNP26,3,NRG,0,Causal_path -27,SNP27,3,NRG,0,Causal_path -28,SNP28,3,NRG,0,Causal_path -29,SNP29,3,NRG,0,Causal_path -30,SNP30,4,RGS-4,0,Causal_path -31,SNP31,4,RGS-4,0,Causal_path -32,SNP32,4,RGS-4,0,Causal_path -33,SNP33,4,RGS-4,0,Causal_path -34,SNP34,4,RGS-4,0,Causal_path -35,SNP35,4,RGS-4,0,Causal_path -36,SNP36,4,RGS-4,0,Causal_path -37,SNP37,4,RGS-4,0,Causal_path -38,SNP38,4,RGS-4,0,Causal_path -39,SNP39,4,RGS-4,0,Causal_path -40,SNP40,4,RGS-4,0,Causal_path -41,SNP41,4,RGS-4,0,Causal_path -42,SNP42,4,RGS-4,0,Causal_path -43,SNP43,4,RGS-4,0,Causal_path -44,SNP44,4,RGS-4,0,Causal_path -45,SNP45,4,RGS-4,0,Causal_path -46,SNP46,4,RGS-4,0,Causal_path -47,SNP47,4,RGS-4,0,Causal_path -48,SNP48,4,RGS-4,0,Causal_path -49,SNP49,4,RGS-4,0,Causal_path -50,SNP50,5,VEGFA,1,Control_path -51,SNP51,5,VEGFA,1,Control_path -52,SNP52,5,VEGFA,1,Control_path -53,SNP53,5,VEGFA,1,Control_path -54,SNP54,5,VEGFA,1,Control_path -55,SNP55,5,VEGFA,1,Control_path -56,SNP56,5,VEGFA,1,Control_path -57,SNP57,5,VEGFA,1,Control_path -58,SNP58,5,VEGFA,1,Control_path -59,SNP59,5,VEGFA,1,Control_path -60,SNP60,5,VEGFA,1,Control_path -61,SNP61,5,VEGFA,1,Control_path -62,SNP62,5,VEGFA,1,Control_path -63,SNP63,5,VEGFA,1,Control_path -64,SNP64,5,VEGFA,1,Control_path -65,SNP65,5,VEGFA,1,Control_path -66,SNP66,5,VEGFA,1,Control_path -67,SNP67,5,VEGFA,1,Control_path -68,SNP68,5,VEGFA,1,Control_path -69,SNP69,5,VEGFA,1,Control_path -70,SNP70,6,EGFR,1,Control_path -71,SNP71,6,EGFR,1,Control_path -72,SNP72,6,EGFR,1,Control_path -73,SNP73,6,EGFR,1,Control_path -74,SNP74,6,EGFR,1,Control_path -75,SNP75,6,EGFR,1,Control_path -76,SNP76,6,EGFR,1,Control_path -77,SNP77,6,EGFR,1,Control_path -78,SNP78,6,EGFR,1,Control_path -79,SNP79,6,EGFR,1,Control_path -80,SNP80,7,TGFBI,1,Control_path -81,SNP81,7,TGFBI,1,Control_path -82,SNP82,7,TGFBI,1,Control_path -83,SNP83,7,TGFBI,1,Control_path -84,SNP84,7,TGFBI,1,Control_path -85,SNP85,7,TGFBI,1,Control_path -86,SNP86,7,TGFBI,1,Control_path -87,SNP87,7,TGFBI,1,Control_path -88,SNP88,7,TGFBI,1,Control_path -89,SNP89,7,TGFBI,1,Control_path -90,SNP90,8,TNF,1,Control_path -91,SNP91,8,TNF,1,Control_path -92,SNP92,8,TNF,1,Control_path -93,SNP93,8,TNF,1,Control_path -94,SNP94,8,TNF,1,Control_path -95,SNP95,9,IL6,1,Control_path -96,SNP96,9,IL6,1,Control_path -97,SNP97,9,IL6,1,Control_path -98,SNP98,9,IL6,1,Control_path -99,SNP99,9,IL6,1,Control_path +0 ,SNP0 ,0 ,HERC2 ,0 ,Causal_path +1 ,SNP1 ,0 ,HERC2 ,0 ,Causal_path +2 ,SNP2 ,0 ,HERC2 ,0 ,Causal_path +3 ,SNP3 ,0 ,HERC2 ,0 ,Causal_path +4 ,SNP4 ,0 ,HERC2 ,0 ,Causal_path +5 ,SNP5 ,1 ,BRCA2 ,0 ,Causal_path +6 ,SNP6 ,1 ,BRCA2 ,0 ,Causal_path +7 ,SNP7 ,1 ,BRCA2 ,0 ,Causal_path +8 ,SNP8 ,1 ,BRCA2 ,0 ,Causal_path +9 ,SNP9 ,1 ,BRCA2 ,0 ,Causal_path +10 ,SNP10 ,2 ,ApoE ,0 ,Causal_path +11 ,SNP11 ,2 ,ApoE ,0 ,Causal_path +12 ,SNP12 ,2 ,ApoE ,0 ,Causal_path +13 ,SNP13 ,2 ,ApoE ,0 ,Causal_path +14 ,SNP14 ,2 ,ApoE ,0 ,Causal_path +15 ,SNP15 ,2 ,ApoE ,0 ,Causal_path +16 ,SNP16 ,2 ,ApoE ,0 ,Causal_path +17 ,SNP17 ,2 ,ApoE ,0 ,Causal_path +18 ,SNP18 ,2 ,ApoE ,0 ,Causal_path +19 ,SNP19 ,2 ,ApoE ,0 ,Causal_path +20 ,SNP20 ,3 ,NRG ,0 ,Causal_path +21 ,SNP21 ,3 ,NRG ,0 ,Causal_path +22 ,SNP22 ,3 ,NRG ,0 ,Causal_path +23 ,SNP23 ,3 ,NRG ,0 ,Causal_path +24 ,SNP24 ,3 ,NRG ,0 ,Causal_path +25 ,SNP25 ,3 ,NRG ,0 ,Causal_path +26 ,SNP26 ,3 ,NRG ,0 ,Causal_path +27 ,SNP27 ,3 ,NRG ,0 ,Causal_path +28 ,SNP28 ,3 ,NRG ,0 ,Causal_path +29 ,SNP29 ,3 ,NRG ,0 ,Causal_path +30 ,SNP30 ,4 ,RGS-4 ,0 ,Causal_path +31 ,SNP31 ,4 ,RGS-4 ,0 ,Causal_path +32 ,SNP32 ,4 ,RGS-4 ,0 ,Causal_path +33 ,SNP33 ,4 ,RGS-4 ,0 ,Causal_path +34 ,SNP34 ,4 ,RGS-4 ,0 ,Causal_path +35 ,SNP35 ,4 ,RGS-4 ,0 ,Causal_path +36 ,SNP36 ,4 ,RGS-4 ,0 ,Causal_path +37 ,SNP37 ,4 ,RGS-4 ,0 ,Causal_path +38 ,SNP38 ,4 ,RGS-4 ,0 ,Causal_path +39 ,SNP39 ,4 ,RGS-4 ,0 ,Causal_path +40 ,SNP40 ,4 ,RGS-4 ,0 ,Causal_path +41 ,SNP41 ,4 ,RGS-4 ,0 ,Causal_path +42 ,SNP42 ,4 ,RGS-4 ,0 ,Causal_path +43 ,SNP43 ,4 ,RGS-4 ,0 ,Causal_path +44 ,SNP44 ,4 ,RGS-4 ,0 ,Causal_path +45 ,SNP45 ,4 ,RGS-4 ,0 ,Causal_path +46 ,SNP46 ,4 ,RGS-4 ,0 ,Causal_path +47 ,SNP47 ,4 ,RGS-4 ,0 ,Causal_path +48 ,SNP48 ,4 ,RGS-4 ,0 ,Causal_path +49 ,SNP49 ,4 ,RGS-4 ,0 ,Causal_path +50 ,SNP50 ,5 ,VEGFA ,1 ,Control_path +51 ,SNP51 ,5 ,VEGFA ,1 ,Control_path +52 ,SNP52 ,5 ,VEGFA ,1 ,Control_path +53 ,SNP53 ,5 ,VEGFA ,1 ,Control_path +54 ,SNP54 ,5 ,VEGFA ,1 ,Control_path +55 ,SNP55 ,5 ,VEGFA ,1 ,Control_path +56 ,SNP56 ,5 ,VEGFA ,1 ,Control_path +57 ,SNP57 ,5 ,VEGFA ,1 ,Control_path +58 ,SNP58 ,5 ,VEGFA ,1 ,Control_path +59 ,SNP59 ,5 ,VEGFA ,1 ,Control_path +60 ,SNP60 ,5 ,VEGFA ,1 ,Control_path +61 ,SNP61 ,5 ,VEGFA ,1 ,Control_path +62 ,SNP62 ,5 ,VEGFA ,1 ,Control_path +63 ,SNP63 ,5 ,VEGFA ,1 ,Control_path +64 ,SNP64 ,5 ,VEGFA ,1 ,Control_path +65 ,SNP65 ,5 ,VEGFA ,1 ,Control_path +66 ,SNP66 ,5 ,VEGFA ,1 ,Control_path +67 ,SNP67 ,5 ,VEGFA ,1 ,Control_path +68 ,SNP68 ,5 ,VEGFA ,1 ,Control_path +69 ,SNP69 ,5 ,VEGFA ,1 ,Control_path +70 ,SNP70 ,6 ,EGFR ,1 ,Control_path +71 ,SNP71 ,6 ,EGFR ,1 ,Control_path +72 ,SNP72 ,6 ,EGFR ,1 ,Control_path +73 ,SNP73 ,6 ,EGFR ,1 ,Control_path +74 ,SNP74 ,6 ,EGFR ,1 ,Control_path +75 ,SNP75 ,6 ,EGFR ,1 ,Control_path +76 ,SNP76 ,6 ,EGFR ,1 ,Control_path +77 ,SNP77 ,6 ,EGFR ,1 ,Control_path +78 ,SNP78 ,6 ,EGFR ,1 ,Control_path +79 ,SNP79 ,6 ,EGFR ,1 ,Control_path +80 ,SNP80 ,7 ,TGFBI ,1 ,Control_path +81 ,SNP81 ,7 ,TGFBI ,1 ,Control_path +82 ,SNP82 ,7 ,TGFBI ,1 ,Control_path +83 ,SNP83 ,7 ,TGFBI ,1 ,Control_path +84 ,SNP84 ,7 ,TGFBI ,1 ,Control_path +85 ,SNP85 ,7 ,TGFBI ,1 ,Control_path +86 ,SNP86 ,7 ,TGFBI ,1 ,Control_path +87 ,SNP87 ,7 ,TGFBI ,1 ,Control_path +88 ,SNP88 ,7 ,TGFBI ,1 ,Control_path +89 ,SNP89 ,7 ,TGFBI ,1 ,Control_path +90 ,SNP90 ,8 ,TNF ,1 ,Control_path +91 ,SNP91 ,8 ,TNF ,1 ,Control_path +92 ,SNP92 ,8 ,TNF ,1 ,Control_path +93 ,SNP93 ,8 ,TNF ,1 ,Control_path +94 ,SNP94 ,8 ,TNF ,1 ,Control_path +95 ,SNP95 ,9 ,IL6 ,1 ,Control_path +96 ,SNP96 ,9 ,IL6 ,1 ,Control_path +97 ,SNP97 ,9 ,IL6 ,1 ,Control_path +98 ,SNP98 ,9 ,IL6 ,1 ,Control_path +99 ,SNP99 ,9 ,IL6 ,1 ,Control_path diff --git a/tests/test_GenNet.py b/tests/test_GenNet.py index bec826d..a3fa63b 100644 --- a/tests/test_GenNet.py +++ b/tests/test_GenNet.py @@ -1,11 +1,15 @@ import os from utils.utils import get_paths from utils.Create_plots import plot, plot_layer_weight, manhattan_importance, cicos_plot -import pandas as np import pandas as pd + def test_train_standard(): - value = os.system('cd .. && python GenNet.py train ./processed_data/example_study/ 1') + value = os.system('cd .. && python GenNet.py train ./examples/example_study/ 1000') + assert value == 0 + +def test_train_regression(): + value = os.system('cd .. && python GenNet.py train ./examples/example_regression/ 1001 -problem_type regression') assert value == 0 @@ -30,17 +34,22 @@ def test_convert(): " -study_name BulgarianTrio") assert test1 == 0 + def test_plot(exp_id): - importance_csv = pd.read_csv("/home/avanhilten/PycharmProjects/GenNet/results/GenNet_experiment_"+str(exp_id)+"/connection_weights.csv", index_col = 0 ) + importance_csv = pd.read_csv( + "/home/avanhilten/PycharmProjects/GenNet/results/GenNet_experiment_" + str(exp_id) + "/connection_weights.csv", + index_col=0) resultpath = '/home/avanhilten/PycharmProjects/GenNet/results/GenNet_experiment_' + str(exp_id) + '/' - manhattan_importance(resultpath,importance_csv) + manhattan_importance(resultpath, importance_csv) plot_layer_weight(resultpath, importance_csv, layer=0) plot_layer_weight(resultpath, importance_csv, layer=1) plot_layer_weight(resultpath, importance_csv, layer=2) cicos_plot(resultpath,importance_csv) - plot_layer_weight(resultpath, importance_csv, layer=4) + # plot_layer_weight(resultpath, importance_csv, layer=4) if __name__ == '__main__': - # test_train_standard() - exp_id = 10 - test_plot(exp_id) \ No newline at end of file + + test_train_standard() + test_train_regression() + exp_id = 1000 + test_plot(exp_id) diff --git a/utils/Convert.py b/utils/Convert.py index 0b956d4..3618f87 100644 --- a/utils/Convert.py +++ b/utils/Convert.py @@ -7,6 +7,7 @@ import numpy as np import pandas as pd from utils.hase.config import basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + os.environ['HASEDIR'] = basedir if PYTHON_PATH is not None: for i in PYTHON_PATH: sys.path.insert(0, i) @@ -45,6 +46,8 @@ def hase_convert(args): check_converter(args.out, args.study_name[0]) print(('Time to convert all data: {} sec'.format(t.secs))) return + + def merge_hdf5_hase(args): filepath_hase = args.outfolder + '/genotype/{}_' + args.study_name + '.h5' g = h5py.File(filepath_hase.format(1), 'r')['genotype'] @@ -101,6 +104,7 @@ def impute_hase_hdf5_no_chunk(args): np.save(args.outfolder + args.study_name + '_std.npy', stdSNPs) return hdf5_name + def impute_hase_hdf5(args): t = tables.open_file(args.outfolder + args.study_name + '_genotype.h5', mode='r') print('merged shape =', t.root.data.shape) @@ -140,6 +144,7 @@ def impute_hase_hdf5(args): np.save(args.outfolder + args.study_name + '_std.npy', stdSNPs) return hdf5_name + def exclude_variants(args): print("Selecting the variants..") t = tables.open_file(args.outfolder + args.study_name + '_genotype_imputed.h5', mode='r') @@ -147,7 +152,7 @@ def exclude_variants(args): num_pat = data.shape[1] num_variants = data.shape[0] - used_indices = pd.read_csv(args.variants, header = None) + used_indices = pd.read_csv(args.variants, header=None) hdf5_name = args.study_name + '_genotype_used.h5' @@ -172,9 +177,9 @@ def exclude_variants(args): print('Used indices looks like:', used_indices) exit() -def transpose_genotype(args, hdf_name): - t = tables.open_file(args.outfolder + hdf_name, mode='r') +def transpose_genotype(args, hdf_name): + t = tables.open_file(args.outfolder + hdf_name, mode='r') data = t.root.data num_pat = data.shape[1] num_feat = data.shape[0] @@ -182,12 +187,12 @@ def transpose_genotype(args, hdf_name): chunk = int(np.clip(chunk, 1, num_pat)) f = tables.open_file(args.outfolder + '/genotype.h5', mode='w') f.create_earray(f.root, 'data', tables.IntCol(), (0, num_feat), expectedrows=num_pat, - filters=tables.Filters(complib='zlib', complevel=1)) + filters=tables.Filters(complib='zlib', complevel=1)) f.close() f = tables.open_file(args.outfolder + '/genotype.h5', mode='a') - for pat in tqdm.tqdm(range(int(np.ceil(num_pat / chunk) + 1)) ): + for pat in tqdm.tqdm(range(int(np.ceil(num_pat / chunk) + 1))): begins = pat * chunk tills = min(((pat + 1) * chunk), num_pat) a = np.array(data[:, begins:tills], dtype=int) @@ -198,9 +203,7 @@ def transpose_genotype(args, hdf_name): print("Completed", args.study_name) - def convert(args): - hase_convert(args) if type(args.out) is list: args.outfolder = args.out[0] @@ -215,14 +218,9 @@ def convert(args): merge_hdf5_hase(args) hdf5_name = impute_hase_hdf5(args) - if args.variants is None: pass else: - hdf5_name =exclude_variants(args) + hdf5_name = exclude_variants(args) transpose_genotype(args, hdf_name=hdf5_name) - - - - diff --git a/utils/Create_network.py b/utils/Create_network.py index 4654bec..2c279bf 100644 --- a/utils/Create_network.py +++ b/utils/Create_network.py @@ -2,12 +2,15 @@ import sys import numpy as np import pandas as pd + sys.path.insert(1, os.path.dirname(os.getcwd()) + "/utils/") import matplotlib + matplotlib.use('agg') import tensorflow as tf import tensorflow.keras as K import scipy + tf.keras.backend.set_epsilon(0.0000001) tf_version = tf.__version__ # ToDo use packaging.version if tf_version <= '1.13.1': @@ -19,13 +22,12 @@ from utils.LocallyDirectedConnected_tf2 import LocallyDirected1D - -def create_network_from_csv(datapath, l1_value = 0.01, regression=False): - +def create_network_from_csv(datapath, l1_value=0.01, regression=False): masks = [] - def layer_block(model,mask, i): + + def layer_block(model, mask, i): model = LocallyDirected1D(mask=mask, filters=1, input_shape=(mask.shape[0], 1), - name="LocallyDirected_"+ str(i))(model) + name="LocallyDirected_" + str(i))(model) model = K.layers.Activation("tanh")(model) model = K.layers.BatchNormalization(center=False, scale=False)(model) return model @@ -40,17 +42,16 @@ def layer_block(model,mask, i): input_layer = K.Input((inputsize,), name='input_layer') model = K.layers.Reshape(input_shape=(inputsize,), target_shape=(inputsize, 1))(input_layer) - for i in range(len(columns)-1): + for i in range(len(columns) - 1): network_csv2 = network_csv.drop_duplicates(columns[i]) - matrix_ones = np.ones(len(network_csv2[[columns[i], columns[i+1]]]), np.bool) - matrix_coord = (network_csv2[columns[i]].values, network_csv2[columns[i+1]].values) + matrix_ones = np.ones(len(network_csv2[[columns[i], columns[i + 1]]]), np.bool) + matrix_coord = (network_csv2[columns[i]].values, network_csv2[columns[i + 1]].values) mask = scipy.sparse.coo_matrix(((matrix_ones), matrix_coord), shape=(network_csv2[columns[i]].max() + 1, - network_csv2[columns[i+1]].max() + 1) ) + network_csv2[columns[i + 1]].max() + 1)) masks.append(mask) model = layer_block(model, mask, i) - model = K.layers.Flatten()(model) output_layer = K.layers.Dense(units=1, name="output_layer", @@ -74,4 +75,3 @@ def Lasso(inputsize, l1_value): x1 = K.layers.Activation("sigmoid")(x1) model = K.Model(inputs=inputs, outputs=x1) return model - diff --git a/utils/Create_plots.py b/utils/Create_plots.py index 85a8283..bd5bbc3 100644 --- a/utils/Create_plots.py +++ b/utils/Create_plots.py @@ -8,35 +8,34 @@ from utils.utils import query_yes_no, get_paths import seaborn as sns -def plot(args): +def plot(args): folder, resultpath = get_paths(args.ID) - importance_csv = pd.read_csv(resultpath + "/connection_weights.csv", index_col = 0 ) + importance_csv = pd.read_csv(resultpath + "/connection_weights.csv", index_col=0) layer = args.layer_n if args.type == "layer_weight": plot_layer_weight(resultpath, importance_csv, layer=layer, num_annotated=10) elif args.type == "circos": - cicos_plot(resultpath=resultpath, importance_csv=importance_csv, plot_weights=False, plot_arrows=True ) + cicos_plot(resultpath=resultpath, importance_csv=importance_csv, plot_weights=False, plot_arrows=True) elif args.type == "raw_importance": manhattan_importance(resultpath=resultpath, importance_csv=importance_csv) else: print("invalid type:", args.type) exit() -def cicos_plot(resultpath, importance_csv, plot_weights = True, plot_arrows=False): - print("in progress...") - colormap = ['#7dcfe2','#4b78b5','darkgrey','dimgray']*1000 +def cicos_plot(resultpath, importance_csv, plot_weights=True, plot_arrows=False): + print("in progress...") + colormap = ['#7dcfe2', '#4b78b5', 'darkgrey', 'dimgray'] * 1000 skip_first = False if len(importance_csv) > 50000: - if query_yes_no("Layer 0: There are going to be "+str(len(importance_csv))+" objects plotted, are you sure?"): + if query_yes_no( + "Layer 0: There are going to be " + str(len(importance_csv)) + " objects plotted, are you sure?"): skip_first = False else: skip_first = True - - nodes = importance_csv.filter(like="node_layer") importance_csv["node_layer_" + str(len(nodes.columns))] = np.zeros(len(importance_csv)) @@ -44,50 +43,53 @@ def cicos_plot(resultpath, importance_csv, plot_weights = True, plot_arrows=Fals weights = np.array([]) G = nx.DiGraph() for i in range(len(nodes.columns)): - if (skip_first & (i==0)): + if (skip_first & (i == 0)): pass else: - importance_csv['node_layer_'+str(i+1)] = importance_csv['node_layer_'+str(i+1)] + importance_csv['node_layer_'+str(i)].max()+1 - cur_importance_csv = importance_csv[['node_layer_'+str(i), 'node_layer_'+str(i+1), 'weights_' + str(i)]].drop_duplicates() - coord= list(cur_importance_csv[['node_layer_'+str(i), 'node_layer_'+str(i+1)]].itertuples(index=False, name=None)) + importance_csv['node_layer_' + str(i + 1)] = importance_csv['node_layer_' + str(i + 1)] + importance_csv[ + 'node_layer_' + str(i)].max() + 1 + cur_importance_csv = importance_csv[ + ['node_layer_' + str(i), 'node_layer_' + str(i + 1), 'weights_' + str(i)]].drop_duplicates() + coord = list( + cur_importance_csv[['node_layer_' + str(i), 'node_layer_' + str(i + 1)]].itertuples(index=False, + name=None)) G.add_edges_from(coord, ) - weights = np.append(weights,cur_importance_csv['weights_' + str(i)].values) + weights = np.append(weights, cur_importance_csv['weights_' + str(i)].values) # colors = colors + [colormap[i]]*cur_importance_csv.shape[0] G = nx.relabel.convert_node_labels_to_integers(G) plt.figure(figsize=(8, 8)) plt.grid("off") - pos=nx.nx_pydot.graphviz_layout(G,prog="twopi",root=importance_csv['node_layer_'+str(i+1)].max()) + pos = nx.nx_pydot.graphviz_layout(G, prog="twopi", root=importance_csv['node_layer_' + str(i + 1)].max()) if plot_weights: - nx.draw_networkx(G, pos=pos, with_labels=True,arrows=plot_arrows, width=weights) + nx.draw_networkx(G, pos=pos, with_labels=True, arrows=plot_arrows, width=weights) else: nx.draw_networkx(G, pos=pos, with_labels=True, arrows=plot_arrows) plt.savefig(resultpath + "network_plot.png", format="PNG") -def plot_layer_weight(resultpath, importance_csv, layer = 0, num_annotated = 10 ): - +def plot_layer_weight(resultpath, importance_csv, layer=0, num_annotated=10): csv_file = importance_csv.copy() - if int(layer) < csv_file.filter(like="weights").shape[1]-1: + if int(layer) < csv_file.filter(like="weights").shape[1] - 1: pass - elif int(layer) == csv_file.filter(like="weights").shape[1]-1: - csv_file["node_layer_"+str(csv_file.filter(like="weights").shape[1])] = 0 + elif int(layer) == csv_file.filter(like="weights").shape[1] - 1: + csv_file["node_layer_" + str(csv_file.filter(like="weights").shape[1])] = 0 csv_file["layer" + str(csv_file.filter(like="weights").shape[1]) + '_name'] = "end_node" else: print("error cant plot that many layers, there are not that many layers") sys.exit() - plt.figure(figsize=(20, 10)) colormap = ['#7dcfe2', '#4b78b5', 'darkgrey', 'dimgray'] * 1000 - color_end = np.sort(csv_file.groupby("node_layer_"+str(layer+1))["node_layer_"+str(layer)].max().values) + color_end = np.sort(csv_file.groupby("node_layer_" + str(layer + 1))["node_layer_" + str(layer)].max().values) color_end = np.insert(color_end, 0, 0) - csv_file = csv_file[["node_layer_"+str(layer),"node_layer_"+str(layer+1),"weights_"+str(layer),'layer'+str(layer)+'_name','layer'+str(layer+1)+'_name']] + csv_file = csv_file[["node_layer_" + str(layer), "node_layer_" + str(layer + 1), "weights_" + str(layer), + 'layer' + str(layer) + '_name', 'layer' + str(layer + 1) + '_name']] csv_file = csv_file.drop_duplicates() - weights = abs(csv_file["weights_"+str(layer)].values) - weights = weights/max(weights) + weights = abs(csv_file["weights_" + str(layer)].values) + weights = weights / max(weights) x = np.arange(len(weights)) csv_file["pos"] = x @@ -100,14 +102,14 @@ def plot_layer_weight(resultpath, importance_csv, layer = 0, num_annotated = 10 f, ax = plt.subplots(figsize=(6, 10)) - sns.barplot(x="plot_weights", y='layer'+str(layer)+'_name', data=csv_file, + sns.barplot(x="plot_weights", y='layer' + str(layer) + '_name', data=csv_file, label="Total", color="b") ax.set(ylabel="Layer node", xlabel="Normalized Weights") new_labels = [label for label in ax.get_yticklabels()] - fontsize = int(np.round((-8/90)*len(new_labels) +13.888)) - ax.set_yticklabels(new_labels, fontsize= fontsize ) + fontsize = int(np.round((-8 / 90) * len(new_labels) + 13.888)) + ax.set_yticklabels(new_labels, fontsize=fontsize) sns.despine(left=True, bottom=True) plt.savefig(resultpath + "manhattan_weights_" + str(layer) + ".png", bbox_inches='tight') @@ -116,18 +118,17 @@ def plot_layer_weight(resultpath, importance_csv, layer = 0, num_annotated = 10 plt.scatter(x[color_end[i]:color_end[i + 1]], weights[color_end[i]:color_end[i + 1]], c=colormap[i]) plt.ylim(bottom=0, top=1.2) - plt.xlim(0, len(weights) + int(len(weights)/100)) + plt.xlim(0, len(weights) + int(len(weights) / 100)) plt.title("Trained Network Weights", size=36) plt.xlabel("Node", size=18) plt.ylabel("Weights", size=18) - gene5_overview = csv_file.sort_values("plot_weights", ascending=False).head(num_annotated) if len(gene5_overview) < num_annotated: num_annotated = len(gene5_overview) for i in range(num_annotated): - plt.annotate(gene5_overview['layer'+str(layer)+'_name'].iloc[i], + plt.annotate(gene5_overview['layer' + str(layer) + '_name'].iloc[i], (gene5_overview["pos"].iloc[i], gene5_overview["plot_weights"].iloc[i]), xytext=(gene5_overview["pos"].iloc[i], gene5_overview["plot_weights"].iloc[i]), size=16) @@ -135,11 +136,10 @@ def plot_layer_weight(resultpath, importance_csv, layer = 0, num_annotated = 10 plt.gca().spines['right'].set_color('none') plt.gca().spines['top'].set_color('none') - plt.savefig(resultpath + "manhattan_weights_"+str(layer)+".png", bbox_inches='tight', pad_inches=0) + plt.savefig(resultpath + "manhattan_weights_" + str(layer) + ".png", bbox_inches='tight', pad_inches=0) - -def manhattan_importance(resultpath, importance_csv, num_annotated = 10 ): +def manhattan_importance(resultpath, importance_csv, num_annotated=10): csv_file = importance_csv.copy() plt.figure(figsize=(20, 10)) colormap = ['#7dcfe2', '#4b78b5', 'darkgrey', 'dimgray'] * 1000 @@ -147,39 +147,35 @@ def manhattan_importance(resultpath, importance_csv, num_annotated = 10 ): color_end = np.insert(color_end, 0, 0) weights = abs(csv_file["raw_importance"]) - weights = weights/max(weights) + weights = weights / max(weights) x = np.arange(len(weights)) for i in range(len(color_end) - 1): plt.scatter(x[color_end[i]:color_end[i + 1]], weights[color_end[i]:color_end[i + 1]], c=colormap[i]) plt.ylim(bottom=0, top=1.2) - plt.xlim(0, len(weights) + int(len(weights)/100)) + plt.xlim(0, len(weights) + int(len(weights) / 100)) plt.title("Raw importance for each path", size=36) plt.xlabel("Path", size=18) plt.ylabel("Weights", size=18) csv_file["pos"] = x csv_file["plot_weights"] = weights - offset = len(x)/200 + offset = len(x) / 200 offset = np.clip(offset, 0.1, 100) gene5_overview = csv_file.sort_values("plot_weights", ascending=False).head(num_annotated) - if len(gene5_overview) < num_annotated: num_annotated = len(gene5_overview) for i in range(num_annotated): plt.annotate(gene5_overview['layer0_name'].iloc[i], - (gene5_overview["pos"].iloc[i] , gene5_overview["plot_weights"].iloc[i]), + (gene5_overview["pos"].iloc[i], gene5_overview["plot_weights"].iloc[i]), xytext=(gene5_overview["pos"].iloc[i] + offset, - gene5_overview["plot_weights"].iloc[i]) , size=16) + gene5_overview["plot_weights"].iloc[i]), size=16) plt.gca().spines['right'].set_color('none') plt.gca().spines['top'].set_color('none') plt.savefig(resultpath + "Path_importance.png", bbox_inches='tight', pad_inches=0) plt.show() - - - diff --git a/utils/Dataloader.py b/utils/Dataloader.py index b7b332e..87aa986 100644 --- a/utils/Dataloader.py +++ b/utils/Dataloader.py @@ -31,7 +31,8 @@ def check_data(datapath, mode): if {'patient_id', 'labels', 'genotype_row', 'set'}.issubset(groundtruth.columns): classification_problem = ((groundtruth["labels"].values == 0) | (groundtruth["labels"].values == 1)).all() else: - print("column names missing need 'patient_id', 'labels', 'genotype_row', 'set', got:", groundtruth.columns.values) + print("column names missing need 'patient_id', 'labels', 'genotype_row', 'set', got:", + groundtruth.columns.values) exit() else: print("subjects.csv is missing") @@ -39,7 +40,7 @@ def check_data(datapath, mode): print("mode is", mode) if (mode == "classification") and classification_problem: pass - elif (mode == "regression") and not(classification_problem): + elif (mode == "regression") and not (classification_problem): pass else: print("The labels and the given mode do not correspond. \n" @@ -55,10 +56,6 @@ def check_data(datapath, mode): exit() - - - - def get_labels(datapath, set_number): groundtruth = pd.read_csv(datapath + "/subjects.csv") groundtruth = groundtruth[groundtruth["set"] == set_number] diff --git a/utils/LocallyDirectedConnected.py b/utils/LocallyDirectedConnected.py index c3a10cf..d767806 100644 --- a/utils/LocallyDirectedConnected.py +++ b/utils/LocallyDirectedConnected.py @@ -19,7 +19,6 @@ """LocallyDirected1D layer. """ - from __future__ import absolute_import from __future__ import division from __future__ import print_function @@ -155,18 +154,16 @@ def build(self, input_shape): self.kernel_shape = (input_length, input_dim, self.output_length, self.filters) - - self.kernel = self.add_weight(shape=(len(self.mask.data),), #sum of all nonzero values in mask sum(sum(mask)) + self.kernel = self.add_weight(shape=(len(self.mask.data),), # sum of all nonzero values in mask sum(sum(mask)) initializer=self.kernel_initializer, name='kernel', regularizer=self.kernel_regularizer, constraint=self.kernel_constraint) - self.kernel_mask = get_locallyDirected1D_mask(self.mask,self.kernel, - data_format=self.data_format, - dtype=self.kernel.dtype - ) - + self.kernel_mask = get_locallyDirected1D_mask(self.mask, self.kernel, + data_format=self.data_format, + dtype=self.kernel.dtype + ) if self.use_bias: self.bias = self.add_weight( @@ -184,7 +181,6 @@ def build(self, input_shape): self.input_spec = InputSpec(ndim=3, axes={-1: input_dim}) self.built = True - def call(self, inputs): # output = local_conv_matmul(inputs, self.kernel_mask, @@ -193,8 +189,6 @@ def call(self, inputs): output = local_conv_matmul_sparse(inputs, self.kernel_mask, self.output_length, self.filters) - - if self.use_bias: output = K.bias_add(output, self.bias, data_format=self.data_format) @@ -232,9 +226,8 @@ def get_config(self): # delete this? return dict(list(base_config.items()) + list(config.items())) - def get_locallyDirected1D_mask(mask, kernel, data_format, - dtype): + dtype): """Return a mask representing connectivity of a locally-connected operation. This method returns a masking tensor of 0s and 1s (of type `dtype`) that, @@ -275,7 +268,7 @@ def get_locallyDirected1D_mask(mask, kernel, data_format, ndims = int(mask.ndim / 2) indices = np.mat([mask.row, mask.col]).transpose() print(mask.shape) - mask = tf.SparseTensor(indices, kernel, [mask.shape[0],mask.shape[1]]) + mask = tf.SparseTensor(indices, kernel, [mask.shape[0], mask.shape[1]]) if data_format == 'channels_first': mask = tf.sparse.expand_dims(mask, 0) @@ -336,14 +329,13 @@ def local_conv_matmul_sparse(inputs, kernel_mask, output_length, filters): """ inputs_flat = K.reshape(inputs, (K.shape(inputs)[0], -1)) kernel_mask = make_2d_sparse(kernel_mask, split_dim=K.ndim(kernel_mask) // 2) - output_flat = tf.sparse.matmul(kernel_mask,inputs_flat, adjoint_a=True, adjoint_b=True) + output_flat = tf.sparse.matmul(kernel_mask, inputs_flat, adjoint_a=True, adjoint_b=True) output_flat = tf.transpose(output_flat) output = K.reshape(output_flat, [-1, output_length, filters]) return output - def make_2d_sparse(tensor, split_dim): """Reshapes an N-dimensional tensor into a 2D tensor. @@ -417,7 +409,6 @@ def local_conv_matmul(inputs, kernel_mask, output_length): kernel = make_2d_sparse(kernel_mask, split_dim=K.ndim(kernel_mask) // 2) - output_flat = tf.sparse_tensor_dense_matmul(inputs_flat, kernel, b_is_sparse=True) output = K.reshape(output_flat, [-1, output_length, 1]) return output @@ -448,7 +439,4 @@ def make_2d(tensor, split_dim): return K.array_ops.reshape(tensor, (in_size, out_size)) - # %% - - diff --git a/utils/Train_network.py b/utils/Train_network.py index 133b189..1ba2ecf 100644 --- a/utils/Train_network.py +++ b/utils/Train_network.py @@ -2,17 +2,20 @@ import os import matplotlib import warnings + warnings.filterwarnings('ignore') matplotlib.use('agg') sys.path.insert(1, os.path.dirname(os.getcwd()) + "/utils/") import tensorflow as tf import tensorflow.keras as K + tf.keras.backend.set_epsilon(0.0000001) from utils.Dataloader import * from utils.utils import * from utils.Create_network import * from utils.Create_plots import * + def weighted_binary_crossentropy(y_true, y_pred): y_true = K.backend.clip(y_true, 0.0001, 1) y_pred = K.backend.clip(y_pred, 0.0001, 1) @@ -63,7 +66,6 @@ def train_classification(args): saveBestModel = K.callbacks.ModelCheckpoint(resultpath + "bestweights_job.h5", monitor='val_loss', verbose=1, save_best_only=True, mode='auto') - # %% if os.path.exists(resultpath + '/bestweights_job.h5'): print('Model already Trained') else: @@ -104,10 +106,7 @@ def train_classification(args): auc_test, confusionmatrix_test = evaluate_performance(ytest, ptest) np.save(resultpath + "/ptest.npy", ptest) - - # %% - - with open(resultpath + '/Results_'+str(jobid)+'.txt', 'a') as f: + with open(resultpath + '/Results_' + str(jobid) + '.txt', 'a') as f: f.write('\n Jobid = ' + str(jobid)) f.write('\n Batchsize = ' + str(batch_size)) f.write('\n Weight positive class = ' + str(weight_positive_class)) @@ -153,7 +152,7 @@ def train_regression(args): print("batchsize = " + str(batch_size)) print("lr = " + str(lr_opt)) - model, masks = create_network_from_csv(datapath=datapath, l1_value=l1_value, regression= True) + model, masks = create_network_from_csv(datapath=datapath, l1_value=l1_value, regression=True) model.compile(loss="mse", optimizer=optimizer_model, metrics=["mse"]) @@ -208,10 +207,9 @@ def train_regression(args): np.save(resultpath + "/ptest.npy", ptest) fig.savefig(resultpath + "/test_predictions.png", bbox_inches='tight', pad_inches=0) - # %% - with open(resultpath + '/Results_'+str(jobid)+'.txt', 'a') as f: + with open(resultpath + '/Results_' + str(jobid) + '.txt', 'a') as f: f.write('\n Jobid = ' + str(jobid)) f.write('\n Batchsize = ' + str(batch_size)) f.write('\n Learningrate = ' + str(lr_opt)) diff --git a/utils/hase/config.py b/utils/hase/config.py index d982e04..19626f8 100644 --- a/utils/hase/config.py +++ b/utils/hase/config.py @@ -1,6 +1,6 @@ import os basedir = os.path.abspath(os.path.dirname(__file__)) -MAPPER_CHUNK_SIZE=5000 #TODO (low) move to hase -CONVERTER_SPLIT_SIZE=25000 #TODO (low) move to hase -PYTHON_PATH=None \ No newline at end of file +MAPPER_CHUNK_SIZE = 5000 # TODO (low) move to hase +CONVERTER_SPLIT_SIZE = 25000 # TODO (low) move to hase +PYTHON_PATH = None diff --git a/utils/hase/hase-master/config.py b/utils/hase/hase-master/config.py index d982e04..19626f8 100644 --- a/utils/hase/hase-master/config.py +++ b/utils/hase/hase-master/config.py @@ -1,6 +1,6 @@ import os basedir = os.path.abspath(os.path.dirname(__file__)) -MAPPER_CHUNK_SIZE=5000 #TODO (low) move to hase -CONVERTER_SPLIT_SIZE=25000 #TODO (low) move to hase -PYTHON_PATH=None \ No newline at end of file +MAPPER_CHUNK_SIZE = 5000 # TODO (low) move to hase +CONVERTER_SPLIT_SIZE = 25000 # TODO (low) move to hase +PYTHON_PATH = None diff --git a/utils/hase/hase-master/hase.py b/utils/hase/hase-master/hase.py index e53a861..4717157 100644 --- a/utils/hase/hase-master/hase.py +++ b/utils/hase/hase-master/hase.py @@ -1,17 +1,19 @@ import sys import os import numpy as np -from utils.hase.config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH -os.environ['HASEDIR']=basedir +from utils.hase.config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + +os.environ['HASEDIR'] = basedir if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import tables -from utils.hase.hdgwas.tools import Timer, Checker, study_indexes, Mapper,HaseAnalyser, merge_genotype, Reference, timing, check_np, check_converter -from utils.hase.hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF +from utils.hase.hdgwas.tools import Timer, Checker, study_indexes, Mapper, HaseAnalyser, merge_genotype, Reference, \ + timing, check_np, check_converter +from utils.hase.hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF from utils.hase.hdgwas.data import Reader, MetaParData, MetaPhenotype from utils.hase.hdgwas.fake import Encoder -from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 import argparse import gc from utils.hase.hdgwas.pard import partial_derivatives @@ -19,6 +21,7 @@ import pandas as pd import time from utils.hase.hdgwas.protocol import Protocol + __version__ = '1.1.0' HEAD = "*********************************************************************\n" @@ -29,527 +32,536 @@ HEAD += "* GNU General Public License v3\n" HEAD += "*********************************************************************\n" - - - -if __name__=='__main__': - - start = time.time() - - parser = argparse.ArgumentParser(description='Script to use HASE in command line') - - #MAIN SETTINGS - parser.add_argument("-thr",type=float, - help="predefined threshold for t-value, if not defined save everything") - - parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") - - - parser.add_argument("-mode", required=True,type=str, - choices=['regression','converting','single-meta', 'meta-stage','encoding'], - help='Main argument, specify type of analysis' - '*****************' - 'converting - before start to use any kind of analysis you need to convert data, it could take some time, ' - 'you need to do it ones and then everything will be super fast' - '*****************' - 'single-meta - if you are the part of meta-analysis and will send data to main center, use this mode' - '*****************' - 'encoding - if you are doing HD association, before send data to main center create fake data' - '*****************' - 'meta-stage - if you are the main center of meta-analysis and already got precomputed data from all sites, use it' - '*****************' - 'regression - if you want run everything yourself and do not use precomputed data use it' - - 'If you want to run single site full association analysis run (1) single-meta mode and then (2) meta-stage' - - '*****************' - ) - - parser.add_argument("-g", "--genotype",nargs='+', type=str, help="path/paths to genotype data folder") - parser.add_argument("-ph", "--phenotype", nargs='+',type=str, help="path to phenotype data folder") - parser.add_argument("-cov", "--covariates", type=str, help="path to covariates data folder") - - - parser.add_argument( "-derivatives", nargs='+', type=str, help="path to derivatives data folder") - - parser.add_argument("-protocol", type=str, help="path to study protocol file") - - parser.add_argument('-study_name', type=str, required=True,nargs='+', help=' Name for saved genotype data, without ext') - - parser.add_argument('-mapper', type=str, help='Mapper data folder') - - parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') - - #ADDITIONAL SETTINGS - parser.add_argument("-snp_id_inc", type=str, help="path to file with SNPs id to include to analysis") - parser.add_argument("-snp_id_exc", type=str, help="path to file with SNPs id to exclude from analysis") - parser.add_argument("-ph_id_inc", type=str, help="path to file with phenotype id to exclude from analysis") - parser.add_argument("-ph_id_exc", type=str, help="path to file with phenotype id to exclude from analysis") - - #parser.add_argument("-ind_id_inc", type=str, help="path to file with individuals id to include to analysis") #TODO (low) - #parser.add_argument("-ind_id_exc", type=str, help="path to file with individuals id to exclude from analysis")#TODO (low) - #parser.add_argument("-cov_name_inc", type=str, help="path to file with covariates names to include to analysis")#TODO (low) - #parser.add_argument("-cov_name_exc", type=str, help="path to file with covariates names to exclude from analysis")#TODO (low) - - parser.add_argument('-intercept', type=str, default='y', choices=['y','n'], help='include intercept to regression, default yes') - - parser.add_argument('-maf', type=float, default=0.0, help='MAF for genetics data') - - parser.add_argument('-encoded', nargs='+', type=int, help='Value per every study, 1 - if encoded, 0 - if not') - ### - - #FLAGS - parser.add_argument('-hdf5', action='store_true',default=True, help='flag for genotype data format') - parser.add_argument('-id', action='store_true', default=False, help='Flag to convert minimac data to genotype per subject files first (default False)') - parser.add_argument('-pd_full', action='store_true', default=False, help='For not HD association study') - parser.add_argument('-effect_intercept', action='store_true', default=False, help='Flag for add study effect to PD regression model') - parser.add_argument('-permute_ph', action='store_true', default=False, help='Flag for phenotype permutation') - parser.add_argument('-vcf', action='store_true', default=False, help='Flag for VCF data to convert') - parser.add_argument('-np', action='store_true', default=True, help='Check BLAS/LAPACK/MKL') - - #TODO (low) save genotype after MAF - ### - - ###CLUSTER SETTING - parser.add_argument('-cluster', type=str, default='n', choices=['y','n'], help=' Is it parallel cluster job, default no') - parser.add_argument('-node', nargs='+',type=int,help='number of nodes / this node number, example: 10 2 ') - ### - - #ADVANCED SETTINGS - parser.add_argument('-interaction', type=str, help='path to file with data for genotype interaction test') #TODO (low) - parser.add_argument('-mapper_chunk', type=int, help='Change mapper chunk size from config file') - ### - args = parser.parse_args() - if not args.thr: - print ('WARNING!!! You did not set threshold for t-value, all results will be saved') - if args.mapper_chunk: - MAPPER_CHUNK_SIZE=args.mapper_chunk - ARG_CHECKER=Checker() - print(args) - os.environ['HASEOUT']=args.out - - if args.cluster=='y': - if args.node is not None: - if args.node[1]>args.node[0]: - raise ValueError('Node # {} > {} total number of nodes'.format(args.node[1], args.node[0] )) - - - - if not os.path.isdir(args.out): - print("Creating output folder {}".format(args.out)) - os.mkdir(args.out) - - if args.np: - check_np() - - ################################### CONVERTING ############################## - if args.mode=='converting': - - #ARG_CHECKER.check(args,mode='converting') - - R=Reader('genotype') - R.start(args.genotype[0], vcf=args.vcf) - - with Timer() as t: - if R.format=='PLINK': - G=GenotypePLINK(args.study_name[0],reader=R) - G.split_size=CONVERTER_SPLIT_SIZE - G.plink2hdf5(out=args.out) - - elif R.format=='MINIMAC': - G=GenotypeMINIMAC(args.study_name[0],reader=R) - if args.cluster=='y': - G.cluster=True - G.split_size=CONVERTER_SPLIT_SIZE - G.MACH2hdf5(args.out,id=args.id) - - elif R.format=='VCF': - G = GenotypeVCF(args.study_name[0], reader=R) - if args.cluster=='y': - G.cluster=True - G.split_size=CONVERTER_SPLIT_SIZE - G.VCF2hdf5(args.out) - else: - raise ValueError('Genotype data should be in PLINK/MINIMAC/VCF format and alone in folder') - - check_converter(args.out,args.study_name[0]) - print(('Time to convert all data: {} sec'.format(t.secs))) - - ################################### ENCODING ############################## - - elif args.mode=='encoding': - - #ARG_CHECKER.check(args,mode='encoding') - mapper=Mapper() - mapper.genotype_names=args.study_name - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.reference_name=args.ref_name - mapper.load_flip(args.mapper) - mapper.load(args.mapper) - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - - gen=Reader('genotype') - gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) - - e=Encoder(args.out) - e.study_name=args.study_name[0] - - row_index, ids = study_indexes(phenotype=phen.folder._data,genotype=gen.folder._data) - with Timer() as t: - - e.matrix(len(ids),save=True) - N_snps_read=0 - while True: - with Timer() as t_gen: - genotype = gen.get_next() - if isinstance(genotype, type(None)): - break - - flip=mapper.flip[args.study_name[0]][N_snps_read:N_snps_read+genotype.shape[0]] - N_snps_read+=genotype.shape[0] - flip_index=(flip==-1) - genotype=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,genotype) - genotype=genotype[:,row_index[0]] - encode_genotype=e.encode(genotype, data_type='genotype') - e.save_hdf5(encode_genotype,os.path.join(args.out, 'encode_genotype' ),info= gen.folder , index=row_index[0] ) - encode_genotype=None - gc.collect() - - print(('Time to create fake genotype is {}sec'.format(t_gen.secs))) - - while True: - with Timer() as t_phen: - phenotype=phen.get_next(index=row_index[1]) - if isinstance(phenotype, type(None)): - break - encode_phenotype=e.encode(phenotype, data_type='phenotype') - if phen.folder.format=='.npy': - e.save_npy(encode_phenotype,save_path=os.path.join(args.out, 'encode_phenotype'),info=phen.folder, index=row_index[1]) - if phen.folder.format in ['.csv', '.txt']: - e.save_csv(encode_phenotype,save_path=os.path.join(args.out, 'encode_phenotype'),info=phen.folder, index=row_index[1] ) - encode_phenotype=None - gc.collect() - if phen.folder.format=='.npy': - np.save(os.path.join(os.path.join(args.out, 'encode_phenotype', 'info_dic.npy')),e.phen_info_dic ) - print(('Time to create fake phenotype is {}sec'.format(t_phen.secs))) - - print(('Time to encode all data: {} sec'.format(t.secs))) - - ################################### SINGLE META STAGE ############################## - - elif args.mode=='single-meta': - - #ARG_CHECKER.check(args,mode='single-meta') - mapper=Mapper() - mapper.genotype_names=args.study_name - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.reference_name=args.ref_name - mapper.load_flip(args.mapper) - mapper.load(args.mapper) - mapper.cluster=args.cluster - mapper.node=args.node - - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - - cov=Reader('covariates') - cov.start(args.covariates) - - if cov.folder.n_files>1: - raise ValueError('In covariates folder should be only one file!') - - gen=Reader('genotype') - gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) - - with Timer() as t: - partial_derivatives(save_path=args.out,COV=cov,PHEN=phen, GEN=gen, - MAP=mapper, MAF=args.maf, R2=None, B4_flag=args.pd_full, - study_name=args.study_name[0], intercept=args.intercept) - print(('Time to compute partial derivatives : {} sec'.format(t.secs))) - - ################################### MULTI META STAGE ############################## - - elif args.mode=='meta-stage': - - #ARG_CHECKER.check(args,mode='meta-stage') - - ##### Init data readers ##### - if args.derivatives is None: - raise ValueError('For meta-stage analysis partial derivatives data are required!') - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - if args.snp_id_inc is not None: - mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) - print('Include:') - print(mapper.include.head()) - if 'ID' not in mapper.include.columns and ( - 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) - if args.snp_id_exc is not None: - mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) - print('Exclude:') - print(mapper.exclude.head()) - if 'ID' not in mapper.exclude.columns and ( - 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) - mapper.load(args.mapper) - mapper.load_flip(args.mapper, encode=args.encoded) - mapper.cluster=args.cluster - mapper.node=args.node - - Analyser=HaseAnalyser() - - pard=[] - - with Timer() as t: - for i,j in enumerate(args.derivatives): - pard.append(Reader('partial') ) - pard[i].start(j, study_name=args.study_name[i]) - pard[i].folder.load() - - print("time to set PD is {}s".format(t.secs)) - - - PD=[False if isinstance(i.folder._data.b4, type(None) ) else True for i in pard] - - if np.sum(PD)!=len(pard) and np.sum(PD)!=0: - raise ValueError('All study should have b4 data for partial derivatives!') - - if args.protocol is not None: - protocol=Protocol(args.protocol) - else: - protocol=None - - meta_pard=MetaParData(pard,args.study_name,protocol=protocol) - - if np.sum(PD)==0: - phen=[] - - with Timer() as t: - for i,j in enumerate(args.phenotype): - phen.append(Reader('phenotype')) - phen[i].start(j) - print("Time to set pheno {} s".format(t.secs)) - meta_phen=MetaPhenotype(phen,include=args.ph_id_inc,exclude=args.ph_id_exc) - - N_studies=len(args.genotype) - - gen=[] - with Timer() as t: - for i,j in enumerate(args.genotype): - gen.append(Reader('genotype')) - gen[i].start(j,hdf5=args.hdf5, study_name=args.study_name[i], ID=False) - print("Time to set gen {}s".format(t.secs)) - - row_index, ids = study_indexes(phenotype=tuple(i.folder._data for i in phen),genotype=tuple(i.folder._data for i in gen),covariates=tuple(i.folder._data.metadata for i in pard)) - if row_index[2].shape[0]!=np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]) : - raise ValueError('Partial Derivatives covariates have different number of subjects {} than genotype and phenotype {}'.format(row_index[2].shape[0], - np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]))) - while True: - if mapper.cluster=='n': - SNPs_index, keys=mapper.get() - else: - ch=mapper.chunk_pop() - if ch is None: - SNPs_index=None - break - SNPs_index, keys=mapper.get(chunk_number=ch) - - if isinstance(SNPs_index, type(None)): - break - - Analyser.rsid=keys - if np.sum(PD)==0: - genotype=np.array([]) - with Timer() as t_g: - genotype=merge_genotype(gen, SNPs_index, mapper) - genotype=genotype[:,row_index[0]] - print("Time to get G {}s".format(t_g.secs)) - #TODO (low) add interaction - - a_test=np.array([]) - b_cov=np.array([]) - C=np.array([]) - a_cov=np.array([]) - b4=np.array([]) - - if args.protocol is not None: - if protocol.enable: - regression_model=protocol.regression_model() - else: - regression_model=None - - with Timer() as t_pd: - if np.sum(PD)==0: - a_test, b_cov, C, a_cov = meta_pard.get( SNPs_index=SNPs_index, regression_model=regression_model, random_effect_intercept=args.effect_intercept) - else: - a_test, b_cov, C, a_cov, b4 = meta_pard.get( SNPs_index=SNPs_index, B4=True, regression_model=regression_model, random_effect_intercept=args.effect_intercept) - - print("Time to get PD {}s".format(t_pd.secs)) - - MAF=meta_pard.maf_pard(SNPs_index=SNPs_index) - - if args.maf!=0: - filter=(MAF>args.maf) & (MAF<1-args.maf) & (MAF!=0.5) - a_test=a_test[filter,:] - Analyser.MAF=MAF[filter] - if np.sum(PD)==0: - genotype=genotype[filter,:] - else: - b4=b4[filter,:] - Analyser.rsid=Analyser.rsid[filter] - if a_test.shape[0]==0: - print('NO SNPs > MAF') - continue - else: - Analyser.MAF=MAF - - a_inv=A_inverse(a_cov, a_test) - N_con=a_inv.shape[1] - 1 - print('There are {} subjects in study.'.format(meta_pard.get_n_id())) - DF=( meta_pard.get_n_id()- a_inv.shape[1] ) - - if np.sum(PD)==0: - - while True: - phenotype=np.array([]) - with Timer() as t_ph: - phenotype, phen_names = meta_phen.get() - print("Time to get PH {}s".format(t_ph.secs)) - - if isinstance(phenotype, type(None)): - meta_phen.processed=0 - print('All phenotypes processed!') - break - print(("Merged phenotype shape {}".format(phenotype.shape))) - #TODO (middle) select phen from protocol - phenotype=phenotype[row_index[1],:] - print(("Selected phenotype shape {}".format(phenotype.shape))) - keys=list(meta_pard.phen_mapper.dic.keys()) - phen_ind_dic = { k:i for i,k in enumerate(keys) } - phen_ind=np.array([phen_ind_dic.get(i,-1) for i in phen_names] ) - if np.sum(phen_ind==-1)==len(phen_ind): - print('There is no common ids in phenotype files and PD data!') - break - else: - print('There are {} common ids in phenotype files and PD data!'.format( np.sum(phen_ind!=-1) )) - C_test=C[phen_ind] - b_cov_test=b_cov[:,phen_ind] - - b4 = B4(phenotype,genotype) - print(("B4 shape is {}".format(b4.shape))) - t_stat,SE =HASE(b4, a_inv, b_cov_test, C_test, N_con, DF) - - if mapper.cluster=='y': - Analyser.cluster=True - Analyser.chunk=ch - Analyser.node=mapper.node[1] - Analyser.t_stat=t_stat - Analyser.SE=SE - Analyser.threshold=args.thr - Analyser.out=args.out - Analyser.save_result( phen_names[(phen_ind!=-1) ] ) - - t_stat=None - Analyser.t_stat=None - gc.collect() - - else: - t_stat,SE=HASE(b4, a_inv, b_cov, C, N_con, DF) - - Analyser.t_stat=t_stat - Analyser.SE=SE - Analyser.threshold=args.thr - Analyser.out=args.out - Analyser.save_result( np.array(list(meta_pard.phen_mapper.dic.keys())) ) - - t_stat=None - Analyser.t_stat=None - gc.collect() - - - -################################### TO DO EVERYTHING IN ONE GO ############################## - - elif args.mode=='regression': - - #ARG_CHECKER.check(args,mode='regression') - - print ('START regression mode...') - if args.mapper is None: - os.environ['MAPPER']="False" #need to set it here, before genotype Reader start - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - phen.permutation=args.permute_ph - - cov=Reader('covariates') - cov.start(args.covariates) - - interaction=None - if args.interaction is not None: - interaction=Reader('interaction') - interaction.start(args.interaction) - - if (cov.folder.n_files>1 and cov.folder.format!='.npy') or (cov.folder.n_files>2 and cov.folder.format=='.npy'): #TODO (middle) test - raise ValueError('In covariates folder should be only one file!') - - gen=[] - for i,j in enumerate(args.genotype): - gen.append(Reader('genotype')) - gen[i].start(j,hdf5=args.hdf5, study_name=args.study_name[i], ID=False) - - - if args.mapper is not None: - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - if args.snp_id_inc is not None: - mapper.include=pd.DataFrame.from_csv(args.snp_id_inc,index_col=None) - print('Include:') - print(mapper.include.head()) - if 'ID' not in mapper.include.columns and ('CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) - if args.snp_id_exc is not None: - mapper.exclude=pd.DataFrame.from_csv(args.snp_id_exc,index_col=None) - print('Exclude:') - print(mapper.exclude.head()) - if 'ID' not in mapper.exclude.columns and ('CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) - mapper.load(args.mapper) - mapper.load_flip(args.mapper) - mapper.cluster=args.cluster - mapper.node=args.node - else: - if len(args.genotype)==1: - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - mapper.cluster=args.cluster - mapper.node=args.node - mapper.n_study=1 - mapper.n_keys=gen[0].folder._data.names.shape[0] - mapper.keys=np.array(gen[0].folder._data.names.tolist()) - mapper.values=np.array(list(range(mapper.n_keys))).reshape(-1,1) - mapper.flip[args.study_name[0]]=np.array([1]*mapper.n_keys) - if args.snp_id_exc is not None or args.snp_id_inc is not None: - raise ValueError('You can not exclude or include variants to analysis without mapper!') - else: - raise ValueError('You can not run regression analysis with several genotype data without mapper!') - #mapper=None - - Analyser=HaseAnalyser() - Analyser.threshold=args.thr - Analyser.out=args.out - haseregression(phen,gen,cov, mapper, Analyser,args.maf,intercept=args.intercept, interaction=interaction) +if __name__ == '__main__': + + start = time.time() + + parser = argparse.ArgumentParser(description='Script to use HASE in command line') + + # MAIN SETTINGS + parser.add_argument("-thr", type=float, + help="predefined threshold for t-value, if not defined save everything") + + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + + parser.add_argument("-mode", required=True, type=str, + choices=['regression', 'converting', 'single-meta', 'meta-stage', 'encoding'], + help='Main argument, specify type of analysis' + '*****************' + 'converting - before start to use any kind of analysis you need to convert data, it could take some time, ' + 'you need to do it ones and then everything will be super fast' + '*****************' + 'single-meta - if you are the part of meta-analysis and will send data to main center, use this mode' + '*****************' + 'encoding - if you are doing HD association, before send data to main center create fake data' + '*****************' + 'meta-stage - if you are the main center of meta-analysis and already got precomputed data from all sites, use it' + '*****************' + 'regression - if you want run everything yourself and do not use precomputed data use it' + + 'If you want to run single site full association analysis run (1) single-meta mode and then (2) meta-stage' + + '*****************' + ) + + parser.add_argument("-g", "--genotype", nargs='+', type=str, help="path/paths to genotype data folder") + parser.add_argument("-ph", "--phenotype", nargs='+', type=str, help="path to phenotype data folder") + parser.add_argument("-cov", "--covariates", type=str, help="path to covariates data folder") + + parser.add_argument("-derivatives", nargs='+', type=str, help="path to derivatives data folder") + + parser.add_argument("-protocol", type=str, help="path to study protocol file") + + parser.add_argument('-study_name', type=str, required=True, nargs='+', + help=' Name for saved genotype data, without ext') + + parser.add_argument('-mapper', type=str, help='Mapper data folder') + + parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') + + # ADDITIONAL SETTINGS + parser.add_argument("-snp_id_inc", type=str, help="path to file with SNPs id to include to analysis") + parser.add_argument("-snp_id_exc", type=str, help="path to file with SNPs id to exclude from analysis") + parser.add_argument("-ph_id_inc", type=str, help="path to file with phenotype id to exclude from analysis") + parser.add_argument("-ph_id_exc", type=str, help="path to file with phenotype id to exclude from analysis") + + # parser.add_argument("-ind_id_inc", type=str, help="path to file with individuals id to include to analysis") #TODO (low) + # parser.add_argument("-ind_id_exc", type=str, help="path to file with individuals id to exclude from analysis")#TODO (low) + # parser.add_argument("-cov_name_inc", type=str, help="path to file with covariates names to include to analysis")#TODO (low) + # parser.add_argument("-cov_name_exc", type=str, help="path to file with covariates names to exclude from analysis")#TODO (low) + + parser.add_argument('-intercept', type=str, default='y', choices=['y', 'n'], + help='include intercept to regression, default yes') + + parser.add_argument('-maf', type=float, default=0.0, help='MAF for genetics data') + + parser.add_argument('-encoded', nargs='+', type=int, help='Value per every study, 1 - if encoded, 0 - if not') + ### + + # FLAGS + parser.add_argument('-hdf5', action='store_true', default=True, help='flag for genotype data format') + parser.add_argument('-id', action='store_true', default=False, + help='Flag to convert minimac data to genotype per subject files first (default False)') + parser.add_argument('-pd_full', action='store_true', default=False, help='For not HD association study') + parser.add_argument('-effect_intercept', action='store_true', default=False, + help='Flag for add study effect to PD regression model') + parser.add_argument('-permute_ph', action='store_true', default=False, help='Flag for phenotype permutation') + parser.add_argument('-vcf', action='store_true', default=False, help='Flag for VCF data to convert') + parser.add_argument('-np', action='store_true', default=True, help='Check BLAS/LAPACK/MKL') + + # TODO (low) save genotype after MAF + ### + + ###CLUSTER SETTING + parser.add_argument('-cluster', type=str, default='n', choices=['y', 'n'], + help=' Is it parallel cluster job, default no') + parser.add_argument('-node', nargs='+', type=int, help='number of nodes / this node number, example: 10 2 ') + ### + + # ADVANCED SETTINGS + parser.add_argument('-interaction', type=str, + help='path to file with data for genotype interaction test') # TODO (low) + parser.add_argument('-mapper_chunk', type=int, help='Change mapper chunk size from config file') + ### + args = parser.parse_args() + if not args.thr: + print('WARNING!!! You did not set threshold for t-value, all results will be saved') + if args.mapper_chunk: + MAPPER_CHUNK_SIZE = args.mapper_chunk + ARG_CHECKER = Checker() + print(args) + os.environ['HASEOUT'] = args.out + + if args.cluster == 'y': + if args.node is not None: + if args.node[1] > args.node[0]: + raise ValueError('Node # {} > {} total number of nodes'.format(args.node[1], args.node[0])) + + if not os.path.isdir(args.out): + print("Creating output folder {}".format(args.out)) + os.mkdir(args.out) + + if args.np: + check_np() + + ################################### CONVERTING ############################## + if args.mode == 'converting': + + # ARG_CHECKER.check(args,mode='converting') + + R = Reader('genotype') + R.start(args.genotype[0], vcf=args.vcf) + + with Timer() as t: + if R.format == 'PLINK': + G = GenotypePLINK(args.study_name[0], reader=R) + G.split_size = CONVERTER_SPLIT_SIZE + G.plink2hdf5(out=args.out) + + elif R.format == 'MINIMAC': + G = GenotypeMINIMAC(args.study_name[0], reader=R) + if args.cluster == 'y': + G.cluster = True + G.split_size = CONVERTER_SPLIT_SIZE + G.MACH2hdf5(args.out, id=args.id) + + elif R.format == 'VCF': + G = GenotypeVCF(args.study_name[0], reader=R) + if args.cluster == 'y': + G.cluster = True + G.split_size = CONVERTER_SPLIT_SIZE + G.VCF2hdf5(args.out) + else: + raise ValueError('Genotype data should be in PLINK/MINIMAC/VCF format and alone in folder') + + check_converter(args.out, args.study_name[0]) + print(('Time to convert all data: {} sec'.format(t.secs))) + + ################################### ENCODING ############################## + + elif args.mode == 'encoding': + + # ARG_CHECKER.check(args,mode='encoding') + mapper = Mapper() + mapper.genotype_names = args.study_name + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.reference_name = args.ref_name + mapper.load_flip(args.mapper) + mapper.load(args.mapper) + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + + gen = Reader('genotype') + gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) + + e = Encoder(args.out) + e.study_name = args.study_name[0] + + row_index, ids = study_indexes(phenotype=phen.folder._data, genotype=gen.folder._data) + with Timer() as t: + + e.matrix(len(ids), save=True) + N_snps_read = 0 + while True: + with Timer() as t_gen: + genotype = gen.get_next() + if isinstance(genotype, type(None)): + break + + flip = mapper.flip[args.study_name[0]][N_snps_read:N_snps_read + genotype.shape[0]] + N_snps_read += genotype.shape[0] + flip_index = (flip == -1) + genotype = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, genotype) + genotype = genotype[:, row_index[0]] + encode_genotype = e.encode(genotype, data_type='genotype') + e.save_hdf5(encode_genotype, os.path.join(args.out, 'encode_genotype'), info=gen.folder, + index=row_index[0]) + encode_genotype = None + gc.collect() + + print(('Time to create fake genotype is {}sec'.format(t_gen.secs))) + + while True: + with Timer() as t_phen: + phenotype = phen.get_next(index=row_index[1]) + if isinstance(phenotype, type(None)): + break + encode_phenotype = e.encode(phenotype, data_type='phenotype') + if phen.folder.format == '.npy': + e.save_npy(encode_phenotype, save_path=os.path.join(args.out, 'encode_phenotype'), + info=phen.folder, index=row_index[1]) + if phen.folder.format in ['.csv', '.txt']: + e.save_csv(encode_phenotype, save_path=os.path.join(args.out, 'encode_phenotype'), + info=phen.folder, index=row_index[1]) + encode_phenotype = None + gc.collect() + if phen.folder.format == '.npy': + np.save(os.path.join(os.path.join(args.out, 'encode_phenotype', 'info_dic.npy')), e.phen_info_dic) + print(('Time to create fake phenotype is {}sec'.format(t_phen.secs))) + + print(('Time to encode all data: {} sec'.format(t.secs))) + + ################################### SINGLE META STAGE ############################## + + elif args.mode == 'single-meta': + + # ARG_CHECKER.check(args,mode='single-meta') + mapper = Mapper() + mapper.genotype_names = args.study_name + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.reference_name = args.ref_name + mapper.load_flip(args.mapper) + mapper.load(args.mapper) + mapper.cluster = args.cluster + mapper.node = args.node + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + + cov = Reader('covariates') + cov.start(args.covariates) + + if cov.folder.n_files > 1: + raise ValueError('In covariates folder should be only one file!') + + gen = Reader('genotype') + gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) + + with Timer() as t: + partial_derivatives(save_path=args.out, COV=cov, PHEN=phen, GEN=gen, + MAP=mapper, MAF=args.maf, R2=None, B4_flag=args.pd_full, + study_name=args.study_name[0], intercept=args.intercept) + print(('Time to compute partial derivatives : {} sec'.format(t.secs))) + + ################################### MULTI META STAGE ############################## + + elif args.mode == 'meta-stage': + + # ARG_CHECKER.check(args,mode='meta-stage') + + ##### Init data readers ##### + if args.derivatives is None: + raise ValueError('For meta-stage analysis partial derivatives data are required!') + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + if args.snp_id_inc is not None: + mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) + print('Include:') + print(mapper.include.head()) + if 'ID' not in mapper.include.columns and ( + 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) + if args.snp_id_exc is not None: + mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) + print('Exclude:') + print(mapper.exclude.head()) + if 'ID' not in mapper.exclude.columns and ( + 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) + mapper.load(args.mapper) + mapper.load_flip(args.mapper, encode=args.encoded) + mapper.cluster = args.cluster + mapper.node = args.node + + Analyser = HaseAnalyser() + + pard = [] + + with Timer() as t: + for i, j in enumerate(args.derivatives): + pard.append(Reader('partial')) + pard[i].start(j, study_name=args.study_name[i]) + pard[i].folder.load() + + print("time to set PD is {}s".format(t.secs)) + + PD = [False if isinstance(i.folder._data.b4, type(None)) else True for i in pard] + + if np.sum(PD) != len(pard) and np.sum(PD) != 0: + raise ValueError('All study should have b4 data for partial derivatives!') + + if args.protocol is not None: + protocol = Protocol(args.protocol) + else: + protocol = None + + meta_pard = MetaParData(pard, args.study_name, protocol=protocol) + + if np.sum(PD) == 0: + phen = [] + + with Timer() as t: + for i, j in enumerate(args.phenotype): + phen.append(Reader('phenotype')) + phen[i].start(j) + print("Time to set pheno {} s".format(t.secs)) + meta_phen = MetaPhenotype(phen, include=args.ph_id_inc, exclude=args.ph_id_exc) + + N_studies = len(args.genotype) + + gen = [] + with Timer() as t: + for i, j in enumerate(args.genotype): + gen.append(Reader('genotype')) + gen[i].start(j, hdf5=args.hdf5, study_name=args.study_name[i], ID=False) + print("Time to set gen {}s".format(t.secs)) + + row_index, ids = study_indexes(phenotype=tuple(i.folder._data for i in phen), + genotype=tuple(i.folder._data for i in gen), + covariates=tuple(i.folder._data.metadata for i in pard)) + if row_index[2].shape[0] != np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]): + raise ValueError( + 'Partial Derivatives covariates have different number of subjects {} than genotype and phenotype {}'.format( + row_index[2].shape[0], + np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]))) + while True: + if mapper.cluster == 'n': + SNPs_index, keys = mapper.get() + else: + ch = mapper.chunk_pop() + if ch is None: + SNPs_index = None + break + SNPs_index, keys = mapper.get(chunk_number=ch) + + if isinstance(SNPs_index, type(None)): + break + + Analyser.rsid = keys + if np.sum(PD) == 0: + genotype = np.array([]) + with Timer() as t_g: + genotype = merge_genotype(gen, SNPs_index, mapper) + genotype = genotype[:, row_index[0]] + print("Time to get G {}s".format(t_g.secs)) + # TODO (low) add interaction + + a_test = np.array([]) + b_cov = np.array([]) + C = np.array([]) + a_cov = np.array([]) + b4 = np.array([]) + + if args.protocol is not None: + if protocol.enable: + regression_model = protocol.regression_model() + else: + regression_model = None + + with Timer() as t_pd: + if np.sum(PD) == 0: + a_test, b_cov, C, a_cov = meta_pard.get(SNPs_index=SNPs_index, regression_model=regression_model, + random_effect_intercept=args.effect_intercept) + else: + a_test, b_cov, C, a_cov, b4 = meta_pard.get(SNPs_index=SNPs_index, B4=True, + regression_model=regression_model, + random_effect_intercept=args.effect_intercept) + + print("Time to get PD {}s".format(t_pd.secs)) + + MAF = meta_pard.maf_pard(SNPs_index=SNPs_index) + + if args.maf != 0: + filter = (MAF > args.maf) & (MAF < 1 - args.maf) & (MAF != 0.5) + a_test = a_test[filter, :] + Analyser.MAF = MAF[filter] + if np.sum(PD) == 0: + genotype = genotype[filter, :] + else: + b4 = b4[filter, :] + Analyser.rsid = Analyser.rsid[filter] + if a_test.shape[0] == 0: + print('NO SNPs > MAF') + continue + else: + Analyser.MAF = MAF + + a_inv = A_inverse(a_cov, a_test) + N_con = a_inv.shape[1] - 1 + print('There are {} subjects in study.'.format(meta_pard.get_n_id())) + DF = (meta_pard.get_n_id() - a_inv.shape[1]) + + if np.sum(PD) == 0: + + while True: + phenotype = np.array([]) + with Timer() as t_ph: + phenotype, phen_names = meta_phen.get() + print("Time to get PH {}s".format(t_ph.secs)) + + if isinstance(phenotype, type(None)): + meta_phen.processed = 0 + print('All phenotypes processed!') + break + print(("Merged phenotype shape {}".format(phenotype.shape))) + # TODO (middle) select phen from protocol + phenotype = phenotype[row_index[1], :] + print(("Selected phenotype shape {}".format(phenotype.shape))) + keys = list(meta_pard.phen_mapper.dic.keys()) + phen_ind_dic = {k: i for i, k in enumerate(keys)} + phen_ind = np.array([phen_ind_dic.get(i, -1) for i in phen_names]) + if np.sum(phen_ind == -1) == len(phen_ind): + print('There is no common ids in phenotype files and PD data!') + break + else: + print('There are {} common ids in phenotype files and PD data!'.format(np.sum(phen_ind != -1))) + C_test = C[phen_ind] + b_cov_test = b_cov[:, phen_ind] + + b4 = B4(phenotype, genotype) + print(("B4 shape is {}".format(b4.shape))) + t_stat, SE = HASE(b4, a_inv, b_cov_test, C_test, N_con, DF) + + if mapper.cluster == 'y': + Analyser.cluster = True + Analyser.chunk = ch + Analyser.node = mapper.node[1] + Analyser.t_stat = t_stat + Analyser.SE = SE + Analyser.threshold = args.thr + Analyser.out = args.out + Analyser.save_result(phen_names[(phen_ind != -1)]) + + t_stat = None + Analyser.t_stat = None + gc.collect() + + else: + t_stat, SE = HASE(b4, a_inv, b_cov, C, N_con, DF) + + Analyser.t_stat = t_stat + Analyser.SE = SE + Analyser.threshold = args.thr + Analyser.out = args.out + Analyser.save_result(np.array(list(meta_pard.phen_mapper.dic.keys()))) + + t_stat = None + Analyser.t_stat = None + gc.collect() + + + + ################################### TO DO EVERYTHING IN ONE GO ############################## + + elif args.mode == 'regression': + + # ARG_CHECKER.check(args,mode='regression') + + print('START regression mode...') + if args.mapper is None: + os.environ['MAPPER'] = "False" # need to set it here, before genotype Reader start + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + phen.permutation = args.permute_ph + + cov = Reader('covariates') + cov.start(args.covariates) + + interaction = None + if args.interaction is not None: + interaction = Reader('interaction') + interaction.start(args.interaction) + + if (cov.folder.n_files > 1 and cov.folder.format != '.npy') or ( + cov.folder.n_files > 2 and cov.folder.format == '.npy'): # TODO (middle) test + raise ValueError('In covariates folder should be only one file!') + + gen = [] + for i, j in enumerate(args.genotype): + gen.append(Reader('genotype')) + gen[i].start(j, hdf5=args.hdf5, study_name=args.study_name[i], ID=False) + + if args.mapper is not None: + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + if args.snp_id_inc is not None: + mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) + print('Include:') + print(mapper.include.head()) + if 'ID' not in mapper.include.columns and ( + 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) + if args.snp_id_exc is not None: + mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) + print('Exclude:') + print(mapper.exclude.head()) + if 'ID' not in mapper.exclude.columns and ( + 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) + mapper.load(args.mapper) + mapper.load_flip(args.mapper) + mapper.cluster = args.cluster + mapper.node = args.node + else: + if len(args.genotype) == 1: + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + mapper.cluster = args.cluster + mapper.node = args.node + mapper.n_study = 1 + mapper.n_keys = gen[0].folder._data.names.shape[0] + mapper.keys = np.array(gen[0].folder._data.names.tolist()) + mapper.values = np.array(list(range(mapper.n_keys))).reshape(-1, 1) + mapper.flip[args.study_name[0]] = np.array([1] * mapper.n_keys) + if args.snp_id_exc is not None or args.snp_id_inc is not None: + raise ValueError('You can not exclude or include variants to analysis without mapper!') + else: + raise ValueError('You can not run regression analysis with several genotype data without mapper!') + # mapper=None + + Analyser = HaseAnalyser() + Analyser.threshold = args.thr + Analyser.out = args.out + haseregression(phen, gen, cov, mapper, Analyser, args.maf, intercept=args.intercept, interaction=interaction) end = time.time() -print(('experiment finished in {} s'.format((end-start)))) \ No newline at end of file +print(('experiment finished in {} s'.format((end - start)))) diff --git a/utils/hase/hase-master/hase/__init__.py b/utils/hase/hase-master/hase/__init__.py index 149deea..ee77325 100644 --- a/utils/hase/hase-master/hase/__init__.py +++ b/utils/hase/hase-master/hase/__init__.py @@ -1,110 +1,111 @@ - import sys import os import utils.hase.hdgwas.data -from utils.hase.hdgwas.tools import Timer, Checker, study_indexes, Mapper,HaseAnalyser, merge_genotype, Reference, timing, check_np -from utils.hase.hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF +from utils.hase.hdgwas.tools import Timer, Checker, study_indexes, Mapper, HaseAnalyser, merge_genotype, Reference, \ + timing, check_np +from utils.hase.hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF from utils.hase.hdgwas.data import Reader, MetaParData, MetaPhenotype from utils.hase.hdgwas.fake import Encoder -from utils.hase.hdgwas.hdregression import A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from utils.hase.hdgwas.pard import partial_derivatives from utils.hase.hdgwas.regression import haseregression import time from utils.hase.hdgwas.protocol import Protocol -from utils.hase.config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH +from utils.hase.config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + class HASE: - def __init__(self): - self.cluster = 'n' - self.effect_intercept = False - self.hdf5 = True - self.id = False - self.interaction = None - self.intercept = 'y' - self.maf = 0.0 - self.mapper_chunk = None - self.node = None - self.np = True - self.pd_full = False - self.permute_ph = False - self.protocol = None - self.ref_name = '1000Gp1v3_ref' - self.thr = None - self.vcf = False - - self.ph_id_exc = None - self.ph_id_inc = None - self.snp_id_inc = None - self.snp_id_exc = None - - self.mapper = None - self.mode = None - - self.derivatives = [] - self.encoded = [] - self.genotype = [] - self.phenotype = [] - self.covariates = [] - self.study_name = [] - - #os.environ['HASEDIR'] = '' - #os.environ['HASEOUT'] = '' - - self.flags = {} - - def add_study(self, study): - - if study.__class__.__name__=='Study': - - if study.study_name not in self.study_name: - self.study_name.append(study.study_name) - if study.derivatives is not None: - self.derivatives.append(study.derivatives) - if study.encoded is not None: - self.encoded.append(study.encoded) - else: - raise ValueError('There is no info about study encode status!') - - elif study.covariates is not None: - self.covariates.append(study.covariates) - else: - raise ValueError('Study should have covariates or derivatives!') - if study.genotype is not None: - self.genotype.append(study.genotype) - if study.phenotype is not None: - self.phenotype.append(study.phenotype) - - - else: - raise ValueError('You already added study with name {}'.format(study.study_name)) - - else: - raise ValueError('You can add only Study object!') + def __init__(self): + self.cluster = 'n' + self.effect_intercept = False + self.hdf5 = True + self.id = False + self.interaction = None + self.intercept = 'y' + self.maf = 0.0 + self.mapper_chunk = None + self.node = None + self.np = True + self.pd_full = False + self.permute_ph = False + self.protocol = None + self.ref_name = '1000Gp1v3_ref' + self.thr = None + self.vcf = False + + self.ph_id_exc = None + self.ph_id_inc = None + self.snp_id_inc = None + self.snp_id_exc = None + + self.mapper = None + self.mode = None + + self.derivatives = [] + self.encoded = [] + self.genotype = [] + self.phenotype = [] + self.covariates = [] + self.study_name = [] + + # os.environ['HASEDIR'] = '' + # os.environ['HASEOUT'] = '' + + self.flags = {} + + def add_study(self, study): + + if study.__class__.__name__ == 'Study': + + if study.study_name not in self.study_name: + self.study_name.append(study.study_name) + if study.derivatives is not None: + self.derivatives.append(study.derivatives) + if study.encoded is not None: + self.encoded.append(study.encoded) + else: + raise ValueError('There is no info about study encode status!') + + elif study.covariates is not None: + self.covariates.append(study.covariates) + else: + raise ValueError('Study should have covariates or derivatives!') + if study.genotype is not None: + self.genotype.append(study.genotype) + if study.phenotype is not None: + self.phenotype.append(study.phenotype) + + + else: + raise ValueError('You already added study with name {}'.format(study.study_name)) + + else: + raise ValueError('You can add only Study object!') class Study: - def __init__(self, name): - self.name = name - self.genotype = None - self.phenotype = None - self.derivatives = None - self.covariates = None - self.study_name = None - self.encoded = None - - def add_genotype(self, genotype_path, hdf5=True): - self.genotype = Reader('genotype') - self.genotype.start(genotype_path, hdf5=hdf5, study_name=self.study_name, ID=False) - - def add_phenotype(self, phenotype_path): - self.phenotype = Reader('phenotype') - self.phenotype.start(phenotype_path) - - def add_derivatives(self, derivatives_path): - self.derivatives = Reader('partial') - self.derivatives.start(derivatives_path, study_name=self.study_name) - self.derivatives.folder.load() - - def add_covariates(self, covariates_path): - self.covariates = Reader('covariates') - self.covariates.start(covariates_path) \ No newline at end of file + def __init__(self, name): + self.name = name + self.genotype = None + self.phenotype = None + self.derivatives = None + self.covariates = None + self.study_name = None + self.encoded = None + + def add_genotype(self, genotype_path, hdf5=True): + self.genotype = Reader('genotype') + self.genotype.start(genotype_path, hdf5=hdf5, study_name=self.study_name, ID=False) + + def add_phenotype(self, phenotype_path): + self.phenotype = Reader('phenotype') + self.phenotype.start(phenotype_path) + + def add_derivatives(self, derivatives_path): + self.derivatives = Reader('partial') + self.derivatives.start(derivatives_path, study_name=self.study_name) + self.derivatives.folder.load() + + def add_covariates(self, covariates_path): + self.covariates = Reader('covariates') + self.covariates.start(covariates_path) diff --git a/utils/hase/hase-master/hdgwas/converter.py b/utils/hase/hase-master/hdgwas/converter.py index 9d26b34..d2ea948 100644 --- a/utils/hase/hase-master/hdgwas/converter.py +++ b/utils/hase/hase-master/hdgwas/converter.py @@ -12,365 +12,376 @@ import shutil import glob import signal + + class Genotype(object): - def __init__(self): - self.file_name = None - self.reader=None - self.probes = None - self.individuals = None - self.genotype = None - self.out=None + def __init__(self): + self.file_name = None + self.reader = None + self.probes = None + self.individuals = None + self.genotype = None + self.out = None class GenotypeHDF5(Genotype): - def __init__(self, name,force=True): - super(GenotypeHDF5, self).__init__() - self.h5_name = '%s.h5' % name - self.file_name = name - self.pytable_filters = tables.Filters(complevel=9, complib='zlib') - self.h5_gen_file = None - self.h5_ind_file = None - self.h5_pr_file = None - self.gen_iter=0 - - - def write_data(self, type, overwrite=True): - - type_dic={'gen':['genotype',self.h5_gen_file], - 'ind':['individuals',self.h5_ind_file], - 'pr':['probes',self.h5_pr_file]} - - if (not overwrite) and os.path.isfile( os.path.join(self.out,type_dic[type][0],self.h5_name) ): - print(('File %s found. Please remove manually.' % self.h5_name)) - return - else: - if type=='pr': - self.h5_pr_file = tables.open_file(os.path.join(self.out,type_dic[type][0],self.h5_name), 'w', - title=self.file_name) - self.h5_pr_file.close() #need to close file before join data - elif type=='ind': - self.h5_ind_file = tables.open_file(os.path.join(self.out,type_dic[type][0],self.h5_name), 'w', - title=self.file_name) - elif type=='gen': - self.h5_gen_file = tables.open_file(os.path.join(self.out,type_dic[type][0],str(self.gen_iter)+'_'+self.h5_name), - 'w', title=self.file_name) - self.gen_iter+=1 - - def close(self): - self.h5_gen_file.close() - self.h5_ind_file.close() - self.h5_pr_file.close() - - def summary(self): - raise (NotImplementedError) + def __init__(self, name, force=True): + super(GenotypeHDF5, self).__init__() + self.h5_name = '%s.h5' % name + self.file_name = name + self.pytable_filters = tables.Filters(complevel=9, complib='zlib') + self.h5_gen_file = None + self.h5_ind_file = None + self.h5_pr_file = None + self.gen_iter = 0 + + def write_data(self, type, overwrite=True): + + type_dic = {'gen': ['genotype', self.h5_gen_file], + 'ind': ['individuals', self.h5_ind_file], + 'pr': ['probes', self.h5_pr_file]} + + if (not overwrite) and os.path.isfile(os.path.join(self.out, type_dic[type][0], self.h5_name)): + print(('File %s found. Please remove manually.' % self.h5_name)) + return + else: + if type == 'pr': + self.h5_pr_file = tables.open_file(os.path.join(self.out, type_dic[type][0], self.h5_name), 'w', + title=self.file_name) + self.h5_pr_file.close() # need to close file before join data + elif type == 'ind': + self.h5_ind_file = tables.open_file(os.path.join(self.out, type_dic[type][0], self.h5_name), 'w', + title=self.file_name) + elif type == 'gen': + self.h5_gen_file = tables.open_file( + os.path.join(self.out, type_dic[type][0], str(self.gen_iter) + '_' + self.h5_name), + 'w', title=self.file_name) + self.gen_iter += 1 + + def close(self): + self.h5_gen_file.close() + self.h5_ind_file.close() + self.h5_pr_file.close() + + def summary(self): + raise (NotImplementedError) class GenotypePLINK(GenotypeHDF5): - def __init__(self, name, reader=None): - super(GenotypePLINK, self).__init__(name) - self.reader=reader - self.split_size=None - - - def convert_individuals(self): - - individuals=self.reader.folder.get_fam() - - self.h5_ind_file.create_table(self.h5_ind_file.root, 'individuals', individuals, - title='Individuals', filters=self.pytable_filters) - self.h5_ind_file.root.individuals[:] = individuals - self.individuals = self.h5_ind_file.root.individuals[:] - self.n_ind=len(individuals) - - - #@profile - def convert_probes(self, chunk_size=100000): - - if os.path.isfile(os.path.join(self.out,'probes',self.h5_name)): - os.remove(os.path.join(self.out,'probes',self.h5_name)) - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - i=0 - chunk=np.array([]) - while True: - chunk=self.reader.folder.get_bim(chunk_size) - if isinstance(chunk,type(None)): - break - print(i) - chunk.columns=['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'] - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - # WARNING!!! doesn't work on windows - chunk.to_hdf(os.path.join(self.out,'probes',self.h5_name), key='probes',format='table',data_columns=True, append=True, - complib='zlib',complevel=9, min_itemsize = 45) - gc.collect() - i+=1 - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(self.out,'probes',self.file_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - print(('Number of Probes {} converted'.format(self.reader.folder.N_probes))) - - #@profile - def convert_genotypes(self): - - - chunk_size=self.split_size - if chunk_size is None: - raise ValueError('CONVERTER_SPLIT_SIZE does not define in config file!') - G=np.array([]) - #self.reader.folder.processed=0 - while True: - with Timer() as t: - G=self.reader.folder.get_bed(chunk_size) - if isinstance(G,type(None)): - break - - print(('Time to read {} SNPs is {} s'.format(G.shape[0], t.secs))) - - self.write_data('gen') - atom = tables.Int8Atom() - self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, - (G.shape), - title='Genotype', filters=self.pytable_filters) - with Timer() as t: - self.genotype[:] = G - - print(('Time to write {} SNPs is {} s'.format(G.shape[0], t.secs))) - - self.h5_gen_file.close() - G=None - gc.collect() - - - - def plink2hdf5(self,out, force=True): - - if force: - try: - os.mkdir(os.path.join(out,'genotype') ) - os.mkdir(os.path.join(out,'individuals') ) - os.mkdir(os.path.join(out,'probes') ) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(self.out))) - - self.out=out - self.write_data('ind') - self.convert_individuals() - self.h5_ind_file.close() - - self.reader.folder.processed=0 - self.write_data('pr') - self.convert_probes() - - self.reader.folder.processed=0 - self.convert_genotypes() - - - def _summary(self, head=10): - pass #TODO (low) rewrite to get statistic not load to memory - - print(('Number of Probes: %d' % None)) - print(('Number of Individuals: %d' % None)) - print(('The genotype matrix is of size %d by %d' % None)) + def __init__(self, name, reader=None): + super(GenotypePLINK, self).__init__(name) + self.reader = reader + self.split_size = None + + def convert_individuals(self): + + individuals = self.reader.folder.get_fam() + + self.h5_ind_file.create_table(self.h5_ind_file.root, 'individuals', individuals, + title='Individuals', filters=self.pytable_filters) + self.h5_ind_file.root.individuals[:] = individuals + self.individuals = self.h5_ind_file.root.individuals[:] + self.n_ind = len(individuals) + + # @profile + def convert_probes(self, chunk_size=100000): + + if os.path.isfile(os.path.join(self.out, 'probes', self.h5_name)): + os.remove(os.path.join(self.out, 'probes', self.h5_name)) + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + i = 0 + chunk = np.array([]) + while True: + chunk = self.reader.folder.get_bim(chunk_size) + if isinstance(chunk, type(None)): + break + print(i) + chunk.columns = ['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'] + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + # WARNING!!! doesn't work on windows + chunk.to_hdf(os.path.join(self.out, 'probes', self.h5_name), key='probes', format='table', + data_columns=True, append=True, + complib='zlib', complevel=9, min_itemsize=45) + gc.collect() + i += 1 + pd.DataFrame.from_dict(hash_table).to_csv( + os.path.join(self.out, 'probes', self.file_name + '_hash_table.csv.gz'), index=False, compression='gzip', + sep='\t') + print(('Number of Probes {} converted'.format(self.reader.folder.N_probes))) + + # @profile + def convert_genotypes(self): + + chunk_size = self.split_size + if chunk_size is None: + raise ValueError('CONVERTER_SPLIT_SIZE does not define in config file!') + G = np.array([]) + # self.reader.folder.processed=0 + while True: + with Timer() as t: + G = self.reader.folder.get_bed(chunk_size) + if isinstance(G, type(None)): + break + + print(('Time to read {} SNPs is {} s'.format(G.shape[0], t.secs))) + + self.write_data('gen') + atom = tables.Int8Atom() + self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, + (G.shape), + title='Genotype', filters=self.pytable_filters) + with Timer() as t: + self.genotype[:] = G + + print(('Time to write {} SNPs is {} s'.format(G.shape[0], t.secs))) + + self.h5_gen_file.close() + G = None + gc.collect() + + def plink2hdf5(self, out, force=True): + + if force: + try: + os.mkdir(os.path.join(out, 'genotype')) + os.mkdir(os.path.join(out, 'individuals')) + os.mkdir(os.path.join(out, 'probes')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(self.out))) + + self.out = out + self.write_data('ind') + self.convert_individuals() + self.h5_ind_file.close() + + self.reader.folder.processed = 0 + self.write_data('pr') + self.convert_probes() + + self.reader.folder.processed = 0 + self.convert_genotypes() + + def _summary(self, head=10): + pass # TODO (low) rewrite to get statistic not load to memory + + print(('Number of Probes: %d' % None)) + print(('Number of Individuals: %d' % None)) + print(('The genotype matrix is of size %d by %d' % None)) + class GenotypeMINIMAC(object): - def __init__(self, name, reader=None): - self.reader=reader - self.study_name=name - self.split_size=None - self.hdf5_iter=0 - self.pytable_filter=tables.Filters(complevel=9, complib='zlib') - self.cluster=False - - def save_hdf5_chunk(self,data,out,name): - print('Saving chunk...{}'.format(os.path.join(out,'genotype',str(self.hdf5_iter)+'_'+name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(out,'genotype',str(self.hdf5_iter)+'_'+name+'.h5'), 'w', title=name) - - atom = tables.Float16Atom() # TODO (low) check data format - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=self.pytable_filter) - genotype[:] = data - h5_gen_file.close() - genotype=None - data=None - gc.collect() - self.hdf5_iter+=1 - - def MACH2hdf5(self, out, id=False,remove_id=False): - FNULL = open(os.devnull, 'w') - subprocess.call(['bash',os.path.join(os.environ['HASEDIR'],'tools','minimac2hdf5.sh'), - self.reader.folder.path, out , os.environ['HASEDIR'], self.study_name ], shell=False,stderr=subprocess.STDOUT) - - if id: - if self.cluster: - ind=pd.read_hdf(os.path.join(out,'individuals',self.study_name+'.h5'),'individuals').individual - N=ind.shape[0] - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'id_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'id_convert.sh' ) ], shell=False,stderr=subprocess.STDOUT) - print(proc.communicate()) - self.folder=MINIMACHDF5Folder(out,self.study_name) - self.folder.pool.split_size=self.split_size - self.folder.pool.chunk_size=self.split_size - print('Start to convert id files to chunk files...') - while True: - data=self.folder.get_next() - if data is None: - break - self.save_hdf5_chunk(data,out,self.study_name) - gc.collect() - - print('Finished') - if remove_id: - self.folder.pool.remove(type='all') - else: - try: - os.mkdir(os.path.join(out,'id_genotype') ) - except: - print('id_genotype folder already exist') - - self.folder.pool.move(os.path.join(out,'id_genotype'),type='all') - - shutil.move(os.path.join(out,'id_convert.sh'), os.path.join(out,'tmp_files','id_convert.sh') ) - shutil.move(os.path.join(out,'SUB_FAM.txt'), os.path.join(out,'tmp_files','SUB_FAM.txt') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - - else: - f=open(os.path.join( out,'minimac_convert.sh' ), 'w') - probes=pd.HDFStore(os.path.join(out,'probes', self.study_name +'.h5'),'r') - N_probes=probes.get_storer('probes').nrows - print('There are {} probes'.format(N_probes)) - chunk=np.vstack(((np.arange(0,N_probes,self.split_size)+1)[:-1],np.arange(0,N_probes,self.split_size)[1:])) - N_jobs=chunk.shape[1] - ch=[0,0] - i_ch = -1 - for i_ch in range(chunk.shape[1]): - ch=chunk[:,i_ch] - #print ch - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','minimacGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[0], - ch[1], - i_ch - ) - f.write(l) - if ch[1]!=N_probes: - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','minimacGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[1]+1, - N_probes, - i_ch+1 - ) - f.write(l) - N_jobs+=1 - f.close() - if self.cluster: - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N_jobs,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'minimac_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'minimac_convert.sh' ) ], shell=False,stderr=FNULL) - print(proc.communicate()) - - shutil.move(os.path.join(out,'minimac_convert.sh'), os.path.join(out,'tmp_files','minimac_convert.sh') ) - shutil.move(os.path.join(out,'id_convert.sh'), os.path.join(out,'tmp_files','id_convert.sh') ) - shutil.move(os.path.join(out,'SUB_FAM.txt'), os.path.join(out,'tmp_files','SUB_FAM.txt') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - - shutil.move(os.path.join(out,'files_order.txt'),os.path.join(out,'tmp_files','files_order.txt')) - shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) - - def summary(self): - pass + def __init__(self, name, reader=None): + self.reader = reader + self.study_name = name + self.split_size = None + self.hdf5_iter = 0 + self.pytable_filter = tables.Filters(complevel=9, complib='zlib') + self.cluster = False + + def save_hdf5_chunk(self, data, out, name): + print('Saving chunk...{}'.format(os.path.join(out, 'genotype', str(self.hdf5_iter) + '_' + name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(out, 'genotype', str(self.hdf5_iter) + '_' + name + '.h5'), 'w', title=name) + + atom = tables.Float16Atom() # TODO (low) check data format + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=self.pytable_filter) + genotype[:] = data + h5_gen_file.close() + genotype = None + data = None + gc.collect() + self.hdf5_iter += 1 + + def MACH2hdf5(self, out, id=False, remove_id=False): + FNULL = open(os.devnull, 'w') + subprocess.call(['bash', os.path.join(os.environ['HASEDIR'], 'tools', 'minimac2hdf5.sh'), + self.reader.folder.path, out, os.environ['HASEDIR'], self.study_name], shell=False, + stderr=subprocess.STDOUT) + + if id: + if self.cluster: + ind = pd.read_hdf(os.path.join(out, 'individuals', self.study_name + '.h5'), 'individuals').individual + N = ind.shape[0] + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N, os.path.join(os.environ['HASEDIR'], 'tools', + 'qsub_helper.sh'), + os.path.join(out, 'id_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'id_convert.sh')], shell=False, + stderr=subprocess.STDOUT) + print(proc.communicate()) + self.folder = MINIMACHDF5Folder(out, self.study_name) + self.folder.pool.split_size = self.split_size + self.folder.pool.chunk_size = self.split_size + print('Start to convert id files to chunk files...') + while True: + data = self.folder.get_next() + if data is None: + break + self.save_hdf5_chunk(data, out, self.study_name) + gc.collect() + + print('Finished') + if remove_id: + self.folder.pool.remove(type='all') + else: + try: + os.mkdir(os.path.join(out, 'id_genotype')) + except: + print('id_genotype folder already exist') + + self.folder.pool.move(os.path.join(out, 'id_genotype'), type='all') + + shutil.move(os.path.join(out, 'id_convert.sh'), os.path.join(out, 'tmp_files', 'id_convert.sh')) + shutil.move(os.path.join(out, 'SUB_FAM.txt'), os.path.join(out, 'tmp_files', 'SUB_FAM.txt')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + + else: + f = open(os.path.join(out, 'minimac_convert.sh'), 'w') + probes = pd.HDFStore(os.path.join(out, 'probes', self.study_name + '.h5'), 'r') + N_probes = probes.get_storer('probes').nrows + print('There are {} probes'.format(N_probes)) + chunk = np.vstack( + ((np.arange(0, N_probes, self.split_size) + 1)[:-1], np.arange(0, N_probes, self.split_size)[1:])) + N_jobs = chunk.shape[1] + ch = [0, 0] + i_ch = -1 + for i_ch in range(chunk.shape[1]): + ch = chunk[:, i_ch] + # print ch + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'minimacGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[0], + ch[1], + i_ch + ) + f.write(l) + if ch[1] != N_probes: + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'minimacGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[1] + 1, + N_probes, + i_ch + 1 + ) + f.write(l) + N_jobs += 1 + f.close() + if self.cluster: + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N_jobs, os.path.join(os.environ['HASEDIR'], 'tools', + 'qsub_helper.sh'), + os.path.join(out, 'minimac_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'minimac_convert.sh')], shell=False, stderr=FNULL) + print(proc.communicate()) + + shutil.move(os.path.join(out, 'minimac_convert.sh'), os.path.join(out, 'tmp_files', 'minimac_convert.sh')) + shutil.move(os.path.join(out, 'id_convert.sh'), os.path.join(out, 'tmp_files', 'id_convert.sh')) + shutil.move(os.path.join(out, 'SUB_FAM.txt'), os.path.join(out, 'tmp_files', 'SUB_FAM.txt')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + + shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) + shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) + + def summary(self): + pass + class GenotypeVCF(object): - def __init__(self, name, reader=None): - self.reader=reader - self.study_name=name - self.split_size=None - self.hdf5_iter=0 - self.pytable_filter=tables.Filters(complevel=9, complib='zlib') - self.cluster=False - - def VCF2hdf5(self, out): - - FNULL = open(os.devnull, 'w') - subprocess.call(['bash',os.path.join(os.environ['HASEDIR'],'tools','VCF2hdf5.sh'), - self.reader.folder.path, out , os.environ['HASEDIR'], self.study_name ], shell=False,stderr=subprocess.STDOUT, - preexec_fn=lambda:signal.signal(signal.SIGPIPE, signal.SIG_DFL) - ) - - - f=open(os.path.join( out,'vcf_convert.sh' ), 'w') - probes=pd.HDFStore(os.path.join(out,'probes', self.study_name +'.h5'),'r') - N_probes=probes.get_storer('probes').nrows - print('There are {} probes'.format(N_probes)) - chunk=np.vstack(((np.arange(0,N_probes,self.split_size)+1)[:-1],np.arange(0,N_probes,self.split_size)[1:])) - N_jobs=chunk.shape[1] - ch=[0,0] - i_ch=-1 - for i_ch in range(chunk.shape[1]): - ch=chunk[:,i_ch] - #print ch - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','VCFGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[0], - ch[1], - i_ch - ) - f.write(l) - if ch[1]!=N_probes: - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','VCFGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[1]+1, - N_probes, - i_ch+1 - ) - f.write(l) - N_jobs+=1 - f.close() - if self.cluster: - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N_jobs,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'vcf_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'vcf_convert.sh' ) ], shell=False,stderr=FNULL) - print(proc.communicate()) - - shutil.move(os.path.join(out,'vcf_convert.sh'), os.path.join(out,'tmp_files','vcf_convert.sh') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - shutil.move(os.path.join(out, 'snps_count.txt'), os.path.join(out, 'tmp_files', 'snps_count.txt')) - - shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) - shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) + def __init__(self, name, reader=None): + self.reader = reader + self.study_name = name + self.split_size = None + self.hdf5_iter = 0 + self.pytable_filter = tables.Filters(complevel=9, complib='zlib') + self.cluster = False + + def VCF2hdf5(self, out): + + FNULL = open(os.devnull, 'w') + subprocess.call(['bash', os.path.join(os.environ['HASEDIR'], 'tools', 'VCF2hdf5.sh'), + self.reader.folder.path, out, os.environ['HASEDIR'], self.study_name], shell=False, + stderr=subprocess.STDOUT, + preexec_fn=lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL) + ) + + f = open(os.path.join(out, 'vcf_convert.sh'), 'w') + probes = pd.HDFStore(os.path.join(out, 'probes', self.study_name + '.h5'), 'r') + N_probes = probes.get_storer('probes').nrows + print('There are {} probes'.format(N_probes)) + chunk = np.vstack( + ((np.arange(0, N_probes, self.split_size) + 1)[:-1], np.arange(0, N_probes, self.split_size)[1:])) + N_jobs = chunk.shape[1] + ch = [0, 0] + i_ch = -1 + for i_ch in range(chunk.shape[1]): + ch = chunk[:, i_ch] + # print ch + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'VCFGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[0], + ch[1], + i_ch + ) + f.write(l) + if ch[1] != N_probes: + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'VCFGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[1] + 1, + N_probes, + i_ch + 1 + ) + f.write(l) + N_jobs += 1 + f.close() + if self.cluster: + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N_jobs, + os.path.join(os.environ['HASEDIR'], 'tools', 'qsub_helper.sh'), + os.path.join(out, 'vcf_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'vcf_convert.sh')], shell=False, stderr=FNULL) + print(proc.communicate()) + + shutil.move(os.path.join(out, 'vcf_convert.sh'), os.path.join(out, 'tmp_files', 'vcf_convert.sh')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + shutil.move(os.path.join(out, 'snps_count.txt'), os.path.join(out, 'tmp_files', 'snps_count.txt')) + + shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) + shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) diff --git a/utils/hase/hase-master/hdgwas/data.py b/utils/hase/hase-master/hdgwas/data.py index 6db93bd..42409d4 100644 --- a/utils/hase/hase-master/hdgwas/data.py +++ b/utils/hase/hase-master/hdgwas/data.py @@ -7,1211 +7,1216 @@ import gc from hdgwas.hdregression import A_inverse from numpy import genfromtxt -from subprocess import Popen,PIPE +from subprocess import Popen, PIPE import bitarray as ba import subprocess -from hdgwas.tools import Mapper, timing,Timer +from hdgwas.tools import Mapper, timing, Timer import glob import shutil from collections import OrderedDict + class MINIMACPool(object): - def __init__(self): - self.paths={} - self.id=None - self.max_index=None - self.chunk_size=None - self.finish=0 - self.split_size=None - - - def get_chunk(self, indices=None): - - if self.max_index is None and len(self.path)==0: - raise ValueError('There is no data in pool.') - else: - sample=h5py.File(self.paths[self.id[0]], 'r')[self.id[0]][...] - self.max_index=np.max(sample.shape) - - print(self.finish) - result=[] - if indices is None: - if self.finish!=self.max_index: - n=list(range(self.finish, self.finish + self.chunk_size)) if (self.finish + self.chunk_size)0.1).any(): - raise ValueError('MAF is not consistent between PD data!') - - - def get(self, SNPs_index=None, B4=False, regression_model=None,random_effect_intercept=False ): - - if self.pd is None: - raise ValueError('Data not defined!') - k=list(self.pd.keys()) - if SNPs_index is not None: - if len(self.pd)!=len(SNPs_index): - raise ValueError('There are not equal number od PD and SNPs indexes {}!={}'.format(len(self.pd), len(SNPs_index))) - a_test, b_cov, C, a_cov = self.pd[k[0]].get(gen_order=SNPs_index[0], phen_order=self.phen_order[k[0]], cov_order=self.cov_order[k[0]] ) - if random_effect_intercept and len(self.pd)>1: #TODO (high) - a_test_effect=a_test[:,0:1] - b_cov_effect=b_cov[0:1,:] - a_cov_effect=a_cov[0:1,:] - else: - raise ValueError('Indexes are not defined!') - - if B4: - b4=self.pd[k[0]].folder._data.b4[SNPs_index[0],:] - b4=b4[:,self.phen_order[k[0]]] - - #self.check_maf(SNPs_index) - - for i in range(1, len(self.pd)): - a,b,c,a_c=self.pd[k[i]].get(gen_order=SNPs_index[i], phen_order=self.phen_order[k[i]], cov_order=self.cov_order[k[i]]) - self.check_pd([a_test, b_cov, C, a_cov], [a,b,c,a_c]) - a_test=a_test + a - b_cov=b_cov + b - C=C+c - a_cov=a_cov + a_c - if random_effect_intercept and i<(len(self.pd)-1) : - a_test_effect=np.hstack((a_test_effect,a[:,0:1])) - b_cov_effect=np.vstack((b_cov_effect,b[0:1,:])) - a_cov_effect=np.vstack((a_cov_effect,a_c[0:1,:])) - if B4: - b4_tmp=self.pd[k[i]].folder._data.b4[SNPs_index[i], : ] - b4=b4+b4_tmp[:, self.phen_order[k[i]]] - - if random_effect_intercept and len(self.pd)>1: - a_cov_I=np.zeros((len(self.pd)-1,len(self.pd)-1)) - np.fill_diagonal(a_cov_I,a_cov_effect[:,0]) - a_effect=np.hstack((a_cov_I,a_cov_effect)) - a_test=np.hstack((a_test_effect,a_test)) - b_cov=np.vstack((b_cov_effect,b_cov)) - a_cov=np.vstack((a_cov_effect,a_cov)) - a_cov=np.hstack((a_effect.T,a_cov)) - - if B4: - return a_test, b_cov, C, a_cov, b4 - else: - return a_test, b_cov, C, a_cov - - - def maf_pard(self,SNPs_index=None): - - samples=0 - maf=np.zeros( len(SNPs_index[0]) ) - - for j,i in enumerate(self.pd): - n=len(self.pd[i].folder._data.metadata['id']) - samples+=n - maf=maf+n*np.array(self.pd[i].folder._data.metadata['MAF'])[SNPs_index[j]] - maf=maf/np.float(samples) - return maf - - def get_n_id(self): - return np.sum([len(self.pd[i].folder._data.metadata['id']) for i in self.pd ]) - - def get_phenotype_names(self): - n={} - for i in self.pd: - n[i]=self.pd[i].folder._data.metadata['phenotype'] + def __init__(self, pd, study_names, protocol=None): + # @timing + def _check(map, keys): + values = np.array(list(map.dic.values())) + result = {} + r = (values == -1).any(axis=1) + if np.sum(r) == values.shape[0]: + raise ValueError('There is no common names between studies') + for i, k in enumerate(keys): + result[k] = values[~r, i] + return result + + self.name = None + self.study_names = study_names + self.phen_mapper = Mapper() + self.cov_mapper = Mapper() + self.covariates = OrderedDict() + self.pd = OrderedDict() + for i in pd: + self.pd[i.folder.name] = i + keys = [] + if protocol is None: + for i, k in enumerate(pd): + self.covariates[k] = [n.split(self.study_names[i] + '_')[1] for n in k.folder._data.metadata['names']] + if i == 0: + self.phen_mapper.fill(k.folder._data.metadata['phenotype'], k.folder.name, reference=False) + self.cov_mapper.fill(self.covariates[k], k.folder.name, reference=False) + else: + self.phen_mapper.push(k.folder._data.metadata['phenotype'], name=k.folder.name, new_id=False) + self.cov_mapper.push(self.covariates[k], name=k.folder.name, new_id=False) + keys.append(k.folder.name) + + self.phen_order = _check(self.phen_mapper, keys) + self.cov_order = _check(self.cov_mapper, keys) + + if protocol is not None: + if not protocol.enable: + protocol.parse() + + def check_pd(self, old, new): + + np.set_printoptions(precision=3, suppress=True) + print("*******PD CHECK*********") + print('A covariates...') + print(old[3] / old[3][0, 0]) + print(new[3] / new[3][0, 0]) + print('FREQ TESTs') + N = np.random.randint(0, np.min((old[0].shape[0], new[0].shape[0])), 10) + print(np.array(old[0][:, 0] / old[3][0, 0] / 2)[N]) + print(np.array(new[0][:, 0] / new[3][0, 0] / 2)[N]) + print('FREQ PHENO') + M = np.random.randint(0, np.min((old[1].shape[1], new[1].shape[1])), 10) + print(np.array(old[1][0, :] / old[3][0, 0])[M]) + print(np.array(new[1][0, :] / new[3][0, 0])[M]) + print("****************") + + # @timing + def check_maf(self, SNPs_index): + maf = np.zeros((SNPs_index[0].shape[0], len(self.pd))) + + for i, j in enumerate(self.pd): + maf[:, i] = np.array(self.pd[j].folder._data.metadata['MAF'])[SNPs_index[i].astype(np.int64)] + + if (np.std(maf, axis=1) > 0.1).any(): + raise ValueError('MAF is not consistent between PD data!') + + def get(self, SNPs_index=None, B4=False, regression_model=None, random_effect_intercept=False): + + if self.pd is None: + raise ValueError('Data not defined!') + k = list(self.pd.keys()) + if SNPs_index is not None: + if len(self.pd) != len(SNPs_index): + raise ValueError( + 'There are not equal number od PD and SNPs indexes {}!={}'.format(len(self.pd), len(SNPs_index))) + a_test, b_cov, C, a_cov = self.pd[k[0]].get(gen_order=SNPs_index[0], phen_order=self.phen_order[k[0]], + cov_order=self.cov_order[k[0]]) + if random_effect_intercept and len(self.pd) > 1: # TODO (high) + a_test_effect = a_test[:, 0:1] + b_cov_effect = b_cov[0:1, :] + a_cov_effect = a_cov[0:1, :] + else: + raise ValueError('Indexes are not defined!') + + if B4: + b4 = self.pd[k[0]].folder._data.b4[SNPs_index[0], :] + b4 = b4[:, self.phen_order[k[0]]] + + # self.check_maf(SNPs_index) + + for i in range(1, len(self.pd)): + a, b, c, a_c = self.pd[k[i]].get(gen_order=SNPs_index[i], phen_order=self.phen_order[k[i]], + cov_order=self.cov_order[k[i]]) + self.check_pd([a_test, b_cov, C, a_cov], [a, b, c, a_c]) + a_test = a_test + a + b_cov = b_cov + b + C = C + c + a_cov = a_cov + a_c + if random_effect_intercept and i < (len(self.pd) - 1): + a_test_effect = np.hstack((a_test_effect, a[:, 0:1])) + b_cov_effect = np.vstack((b_cov_effect, b[0:1, :])) + a_cov_effect = np.vstack((a_cov_effect, a_c[0:1, :])) + if B4: + b4_tmp = self.pd[k[i]].folder._data.b4[SNPs_index[i], :] + b4 = b4 + b4_tmp[:, self.phen_order[k[i]]] + + if random_effect_intercept and len(self.pd) > 1: + a_cov_I = np.zeros((len(self.pd) - 1, len(self.pd) - 1)) + np.fill_diagonal(a_cov_I, a_cov_effect[:, 0]) + a_effect = np.hstack((a_cov_I, a_cov_effect)) + a_test = np.hstack((a_test_effect, a_test)) + b_cov = np.vstack((b_cov_effect, b_cov)) + a_cov = np.vstack((a_cov_effect, a_cov)) + a_cov = np.hstack((a_effect.T, a_cov)) + + if B4: + return a_test, b_cov, C, a_cov, b4 + else: + return a_test, b_cov, C, a_cov + + def maf_pard(self, SNPs_index=None): + + samples = 0 + maf = np.zeros(len(SNPs_index[0])) + + for j, i in enumerate(self.pd): + n = len(self.pd[i].folder._data.metadata['id']) + samples += n + maf = maf + n * np.array(self.pd[i].folder._data.metadata['MAF'])[SNPs_index[j]] + maf = maf / np.float(samples) + return maf + + def get_n_id(self): + return np.sum([len(self.pd[i].folder._data.metadata['id']) for i in self.pd]) + + def get_phenotype_names(self): + n = {} + for i in self.pd: + n[i] = self.pd[i].folder._data.metadata['phenotype'] class Folder(object): - def __init__(self,path): - self.path=path - if not os.path.isdir(self.path): - raise ValueError('{} is not a folder'.format(self.path)) - self.format=None - self.protected=[] - self.n_files=None - self.read_files={} - self.files=None - self.processed=0 - self._data=Data() - self._scan() - self.folder_cache={} - self.folder_cache_flag=True - self.cache_buffer_size=10 - self._id=None - - def _scan(self): - l=os.listdir(self.path) - if len(l)==0: - raise ValueError('There is no files in {}'.format(self.path)) - exts=[os.path.splitext(i)[1] for i in l ] - s=set(exts) - if not len(s) <= 1: - if s=={'.fam','.bed','.bim'} : - self.format='PLINK' - else: - raise ValueError('There are different data format {} in {} folder'.format(set(exts) ,self.path)) - else: - N=len(l) - self.n_files=N - self.format=exts[0] - self.files=l - - - def get_next(self,**kwargs): - d=self._data.get_next(**kwargs) - if isinstance(d,type(None)): - file=next(self) - if isinstance(file,type(None)): - return None - self.read(file) - return self._data.get_next(**kwargs) - else: - return d - - - def read(self,*args,**kwargs): - pass - - def __next__(self): - while True: - try: - if self.processed==self.n_files: - print('read all', self.path) - return None - f=self.files[self.processed] - self.processed+=1 - if f not in self.protected: - self.read_files[f]=0 - break - else: - self.read_files[f]=1 - except: - return None - return f - - def get(self,**kwargs): - return self._data.get(**kwargs) + def __init__(self, path): + self.path = path + if not os.path.isdir(self.path): + raise ValueError('{} is not a folder'.format(self.path)) + self.format = None + self.protected = [] + self.n_files = None + self.read_files = {} + self.files = None + self.processed = 0 + self._data = Data() + self._scan() + self.folder_cache = {} + self.folder_cache_flag = True + self.cache_buffer_size = 10 + self._id = None + + def _scan(self): + l = os.listdir(self.path) + if len(l) == 0: + raise ValueError('There is no files in {}'.format(self.path)) + exts = [os.path.splitext(i)[1] for i in l] + s = set(exts) + if not len(s) <= 1: + if s == {'.fam', '.bed', '.bim'}: + self.format = 'PLINK' + else: + raise ValueError('There are different data format {} in {} folder'.format(set(exts), self.path)) + else: + N = len(l) + self.n_files = N + self.format = exts[0] + self.files = l + + def get_next(self, **kwargs): + d = self._data.get_next(**kwargs) + if isinstance(d, type(None)): + file = next(self) + if isinstance(file, type(None)): + return None + self.read(file) + return self._data.get_next(**kwargs) + else: + return d + + def read(self, *args, **kwargs): + pass + + def __next__(self): + while True: + try: + if self.processed == self.n_files: + print('read all', self.path) + return None + f = self.files[self.processed] + self.processed += 1 + if f not in self.protected: + self.read_files[f] = 0 + break + else: + self.read_files[f] = 1 + except: + return None + return f + + def get(self, **kwargs): + return self._data.get(**kwargs) class HDF5Folder(Folder): - def __init__(self,path, name): - super(HDF5Folder, self).__init__(path) + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) - def _scan(self): - pass + def _scan(self): + pass - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass - def read(self, file, index=None, MAF=None): - pass + def read(self, file, index=None, MAF=None): + pass - def get(self, index): - pass + def get(self, index): + pass class PLINKHDF5Folder(HDF5Folder): - def __init__(self,path,name): - super(HDF5Folder, self).__init__(path) - self.name=name - self.path=path - self.format='.h5' - self.pool=Pool() - self.iter=-1 - if not os.path.isdir(os.path.join(self.path,'genotype')) or not os.path.isdir(os.path.join(self.path,'probes')) or not os.path.isdir(os.path.join(self.path,'individuals')): - raise ValueError('in genotype folder should be /genotype; /probes; /individuals folders') - - self.f_names=os.listdir(os.path.join(self.path,'genotype')) #TODO (high) remove this extra attribute - self.files = self.f_names - self.n_files=len(self.f_names) - self.processed=-1 - self.pool.paths={i:os.path.join(self.path,'genotype',str(i)+'_'+self.name +'.h5') for i in range(self.n_files)} - - self._data=Hdf5Data(self.path,self.name) - self._id=self._data.id - self.pool.split_size=self._data.gen_split_size - - def _scan(self): - pass - - def get_next(self,**kwargs): - - self.iter+=1 - if self.iter==self.n_files: - return None - file=os.path.join(self.path,'genotype',str(self.iter)+'_'+self.name +'.h5') - return self.read(file,**kwargs) - - def read(self, file, index=None, MAF=None): - print('reading file {}'.format(file)) - - f=h5py.File(file, 'r') - - d=f['genotype'][...] - - if isinstance(index,type(None)): #TODO (mid) check - return d - else: - return d[:,index] - - def get(self, index, impute=True): - self.processed+=len(index) - result=[] - if True: - #if self.pool.inmem==self.pool.limit: #TODO (high) check the bellow methods, remove get_data from pool? - result=self.pool.get_chunk(index, impute) - else: - result=[self.pool.get_data(i,j) for i,j in index] - return np.array(result) - - def get_info(self,file): - info={} - f = h5py.File(file, 'r') - info['shape']= f['genotype'].shape - f.close() - return info + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) + self.name = name + self.path = path + self.format = '.h5' + self.pool = Pool() + self.iter = -1 + if not os.path.isdir(os.path.join(self.path, 'genotype')) or not os.path.isdir( + os.path.join(self.path, 'probes')) or not os.path.isdir(os.path.join(self.path, 'individuals')): + raise ValueError('in genotype folder should be /genotype; /probes; /individuals folders') + + self.f_names = os.listdir(os.path.join(self.path, 'genotype')) # TODO (high) remove this extra attribute + self.files = self.f_names + self.n_files = len(self.f_names) + self.processed = -1 + self.pool.paths = {i: os.path.join(self.path, 'genotype', str(i) + '_' + self.name + '.h5') for i in + range(self.n_files)} + + self._data = Hdf5Data(self.path, self.name) + self._id = self._data.id + self.pool.split_size = self._data.gen_split_size + + def _scan(self): + pass + + def get_next(self, **kwargs): + + self.iter += 1 + if self.iter == self.n_files: + return None + file = os.path.join(self.path, 'genotype', str(self.iter) + '_' + self.name + '.h5') + return self.read(file, **kwargs) + + def read(self, file, index=None, MAF=None): + print('reading file {}'.format(file)) + + f = h5py.File(file, 'r') + + d = f['genotype'][...] + + if isinstance(index, type(None)): # TODO (mid) check + return d + else: + return d[:, index] + + def get(self, index, impute=True): + self.processed += len(index) + result = [] + if True: + # if self.pool.inmem==self.pool.limit: #TODO (high) check the bellow methods, remove get_data from pool? + result = self.pool.get_chunk(index, impute) + else: + result = [self.pool.get_data(i, j) for i, j in index] + return np.array(result) + + def get_info(self, file): + info = {} + f = h5py.File(file, 'r') + info['shape'] = f['genotype'].shape + f.close() + return info -class MINIMACHDF5Folder(HDF5Folder): - - def __init__(self,path, name): - super(HDF5Folder, self).__init__(path) - self.name=name - self.path=path - self.format='.h5' - self.pool=MINIMACPool() - self.pool.path=self.path - self.f_names=os.listdir(os.path.join(self.path,'genotype')) - self.n_files=len(self.f_names) - self._data=Hdf5Data(self.path,self.name, type='MINIMAC') - self._id=self._data.id - self.pool.id=self._id - self.pool.paths={i:os.path.join(self.path,'genotype',i + '.h5') for i in self._id} +class MINIMACHDF5Folder(HDF5Folder): + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) + self.name = name + self.path = path + self.format = '.h5' + self.pool = MINIMACPool() + self.pool.path = self.path + self.f_names = os.listdir(os.path.join(self.path, 'genotype')) + self.n_files = len(self.f_names) + self._data = Hdf5Data(self.path, self.name, type='MINIMAC') + self._id = self._data.id + self.pool.id = self._id + self.pool.paths = {i: os.path.join(self.path, 'genotype', i + '.h5') for i in self._id} - def _scan(self): - pass + def _scan(self): + pass - def get_next(self,**kwargs): - return self.pool.get_chunk() + def get_next(self, **kwargs): + return self.pool.get_chunk() - def get(self, index): - return self.pool.get_chunk(indices=index) + def get(self, index): + return self.pool.get_chunk(indices=index) - def read(self, file, index=None, MAF=None): - pass + def read(self, file, index=None, MAF=None): + pass - def get(self, index): - pass + def get(self, index): + pass class CSVFolder(Folder): - def __init__(self,path): - super(CSVFolder,self).__init__(path) - try: - self.read(next(self)) - except Exception as e: - raise (e) - self.data_info={} - for i in self.files: - for j in ['\t', ' ']: - df=pd.read_csv(os.path.join(self.path,i), sep=j, index_col=None) - if df.shape[1] > 1: - break - self.data_info[i]=np.array(df.columns[1:]) - - - def read(self,file): - - if self.folder_cache_flag and self.folder_cache.get(file) is not None and len(self.folder_cache)1: - break - else: - raise ValueError('Cant read {} file; default settings: index=None, header=True; sep=tab or space '.format(file)) - - - self._data=Data() - self._data.chunk_size=1000 - self._data._data=df[df.columns[1:]].as_matrix() - self._data.id=np.array(df[df.columns[0]]) - if self._id is None: - self._id=self._data.id - else: - if (self._id!=self._data.id).any(): #TODO (middle) check for not overlapped id (AttributeError: 'bool' object has no attribute 'any') - raise ValueError('id in {} different from previous!'.format(file)) - self._data.type=np.ndarray - self._data.names=np.array(df.columns[1:]) - self._data.shape=self._data._data.shape - self._data.format='csv' - self._data.filename=file - - self._data.test() # check the dim of data - - if self.folder_cache_flag and len(self.folder_cache) 1: + break + self.data_info[i] = np.array(df.columns[1:]) + + def read(self, file): + + if self.folder_cache_flag and self.folder_cache.get(file) is not None and len( + self.folder_cache) < self.cache_buffer_size: + self._data = self.folder_cache[file] + self._data.processed = 0 + print(('There are samples and columns {} in cache {}'.format(self._data.shape, file))) + + else: + print('reading file {}'.format(file)) + for i in ['\t', ' ']: + df = pd.read_csv(os.path.join(self.path, file), sep=i, index_col=None) + if df.shape[1] > 1: + break + else: + raise ValueError( + 'Cant read {} file; default settings: index=None, header=True; sep=tab or space '.format(file)) + + self._data = Data() + self._data.chunk_size = 1000 + self._data._data = df[df.columns[1:]].as_matrix() + self._data.id = np.array(df[df.columns[0]]) + if self._id is None: + self._id = self._data.id + else: + if ( + self._id != self._data.id).any(): # TODO (middle) check for not overlapped id (AttributeError: 'bool' object has no attribute 'any') + raise ValueError('id in {} different from previous!'.format(file)) + self._data.type = np.ndarray + self._data.names = np.array(df.columns[1:]) + self._data.shape = self._data._data.shape + self._data.format = 'csv' + self._data.filename = file + + self._data.test() # check the dim of data + + if self.folder_cache_flag and len(self.folder_cache) < self.cache_buffer_size: + self.folder_cache[file] = self._data + + print(('There are %d ids and %d columns ' % (self._data.shape))) - def __init__(self,path, protected=[]): - super(NPFolder, self).__init__(path) - self._data=Data() - self._data.chunk_size=1000 - self._data.type=np.ndarray - self._data.format='npy' - self.protected=protected - - try: - file_path=os.path.dirname(path) - self.data_info=np.load(os.path.join(file_path, 'info_dic.npy')).item() - self._data.id=np.array(self.data_info['id']) - self.files=[k for k in list(self.data_info.keys()) if k!='id'] - - except Exception as e: - raise ValueError('in directory {} should be data info file info_dic.npy!'.format(self.path) + str(e) ) - - - try: - self.read(next(self)) - except Exception as e: - raise ValueError("Failed to init NPFolder;" + str(e)) - #@timing - def read(self,file): - - if self.folder_cache_flag and self.folder_cache.get(file) is not None and len(self.folder_cache) self.n_probes: - b=(self.n_probes-self._currentSNP) - - print(('next {} SNPs, from {}, need to convert {}'.format(b, self.n_probes, (self.n_probes-self._currentSNP-b)))) - - c = self._currentSNP - n = self.n_ind - nru = self.nru - slice= ba.bitarray(endian="little") - - bit_number=((2*(c+b)*nru)-(2*c*nru))/8 - slice.fromfile(self.bed, bit_number ) - - X = np.array(slice.decode(self._bedcode), dtype="float64").reshape((b, nru)).T - X = X[0:n, :] - - self._currentSNP += b - gc.collect() - return X.T - - - - def get_next(self,**kwargs): - pass - - def read(self): - pass + def __init__(self, path): + super(PLINKFolder, self).__init__(path) + self.scan() + self.names = None + self.bim = None + self.bed = None + self.fam = None + self.N_probes = 0 + self.n_probes = 0 + self.n_probes_dic = {} + self.n_ind_dic = {} + self.n_ind = 0 + self.N_ind = 0 + self._currentSNP = 0 + + self._bedcode = { + 2: ba.bitarray('11'), + 9: ba.bitarray('10'), # TODO (high) NA data handle + 1: ba.bitarray('01'), + 0: ba.bitarray('00') + } + + self.scan() + + def scan(self): + + l = os.listdir(self.path) + self.names = np.unique([os.path.splitext(i)[0] for i in l]) + + for i in self.names: + if i + '.fam' not in l or i + '.bed' not in l or i + '.bim' not in l: + raise ValueError('There are not all plink files for {} in {} folder'.format(i, self.path)) + + self.n_files = len(l) + self.format = 'PLINK' + self.files = self.names + + def get_fam(self): + """Read the FAM file to get information about individuals + Family ID + Individual ID + Paternal ID + Maternal ID + Sex (1=male; 2=female; other=unknown) + Label - phenotype should be in separate file + """ + + individuals = None + + for i in self.names: + ind = genfromtxt(open(os.path.join(self.path, i + '.fam'), 'r'), delimiter=' ', + dtype={'names': ['family', 'individual', 'paternal', 'maternal', 'sex', 'label'], + 'formats': ['S10', 'S16', int, int, int, int]}) + + if isinstance(individuals, type(None)): + individuals = ind + + else: + individuals = np.append(individuals, ind) + self.n_ind_dic[i] = len(ind) + self.N_ind = len(individuals) + print(('Number of Individuals: %d' % self.N_ind)) + + return individuals + + def get_bim(self, chunk_size): + + if isinstance(self.bim, type(None)): + file = next(self) + self.read_bim(file) + try: + d = self.bim.get_chunk(chunk_size) + return d + except: + file = next(self) + if isinstance(file, type(None)): + return None + self.read_bim(file) + d = self.bim.get_chunk(chunk_size) + return d + + def read_bim(self, file): + + N = int(Popen(['wc', '-l', os.path.join(self.path, file + '.bim')], stdout=PIPE).communicate()[0].split(' ')[0]) + + print(('Number of Probes {} in {}'.format(N, file + '.bim'))) + self.N_probes += N + + self.n_probes_dic[file] = N + + self.bim = pd.read_table(os.path.join(self.path, file + '.bim'), sep='\t', header=None, + names=['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'], + iterator=True) + + def get_bed(self, chunk_size): + + d = self.nextSNPs(chunk_size) + + if isinstance(d, type(None)): + file = next(self) + if isinstance(file, type(None)): + return None + else: + self.read_bed(file) + return self.get_bed(chunk_size) + else: + if d.shape[0] == chunk_size: + return d + else: + d_append = self.get_bed(chunk_size - d.shape[0]) + if isinstance(d_append, type(None)): + return d + else: + return np.vstack((d, d_append)) + + def read_bed(self, file): + + self._currentSNP = 0 + self.n_ind = self.n_ind_dic[file] + self.n_probes = self.n_probes_dic[file] + n = self.n_ind + self.bed = open(os.path.join(self.path, file + '.bed'), 'rb') + magicNumber = ba.bitarray(endian="little") + magicNumber.fromfile(self.bed, 2) + bedMode = ba.bitarray(endian="little") + bedMode.fromfile(self.bed, 1) + e = (4 - n % 4) if n % 4 != 0 else 0 + nru = self.n_ind + e + self.nru = nru + # check magic number + if magicNumber != ba.bitarray('0011011011011000'): + raise IOError("Magic number from Plink .bed file not recognized") + + if bedMode != ba.bitarray('10000000'): + raise IOError("Plink .bed file must be in default SNP-major mode") + + def nextSNPs(self, b): + ''' + Unpacks the binary array of genotypes and returns an n x b matrix of floats of + normalized genotypes for the next b SNPs, where n := number of samples. + + Parameters + ---------- + b : int + Number of SNPs to return. + Returns + ------- + X : np.array with dtype float64 with shape (n, b), where n := number of samples + + ''' + if self._currentSNP == self.n_probes: + return None + if self._currentSNP + b > self.n_probes: + b = (self.n_probes - self._currentSNP) + + print(('next {} SNPs, from {}, need to convert {}'.format(b, self.n_probes, + (self.n_probes - self._currentSNP - b)))) + + c = self._currentSNP + n = self.n_ind + nru = self.nru + slice = ba.bitarray(endian="little") + + bit_number = ((2 * (c + b) * nru) - (2 * c * nru)) / 8 + slice.fromfile(self.bed, bit_number) + + X = np.array(slice.decode(self._bedcode), dtype="float64").reshape((b, nru)).T + X = X[0:n, :] + + self._currentSNP += b + gc.collect() + return X.T + + def get_next(self, **kwargs): + pass + + def read(self): + pass class MINIMACFolder(Folder): - def __init__(self, path): - super(MINIMACFolder, self).__init__(path) - self.scan() + def __init__(self, path): + super(MINIMACFolder, self).__init__(path) + self.scan() - def scan(self): - if len(glob.glob(self.path + '*dose.gz'))==0 or len(glob.glob(self.path + '*info.gz'))==0: - raise ValueError('There is no dose.gz or info.gz files in {}, check folder or compression flag'.format(self.path)) + def scan(self): + if len(glob.glob(self.path + '*dose.gz')) == 0 or len(glob.glob(self.path + '*info.gz')) == 0: + raise ValueError( + 'There is no dose.gz or info.gz files in {}, check folder or compression flag'.format(self.path)) - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass class VCFFolder(Folder): - def __init__(self, path): - super(VCFFolder, self).__init__(path) - self.scan() + def __init__(self, path): + super(VCFFolder, self).__init__(path) + self.scan() - def scan(self): #TODO (middle) add checking for correct VCF format (? checkVCF.py) before start shell scripts - pass + def scan(self): # TODO (middle) add checking for correct VCF format (? checkVCF.py) before start shell scripts + pass - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass class Reader(object): - def __init__(self, name): - self.name=name - self.path=None - self._data=None - self.ext=['.npy', '.csv', '.txt','.h5', 'PLINK','.gz','VCF'] - self.pool=None - self.folder=None - self.processed=0 - self.kwargs=None - self.permutation=False - - - def start(self, path, **kwargs): - - self.kwargs=kwargs - if path is None: - raise ValueError('Not defined path for {}'.format(self.name)) - if os.path.isdir(path): + def __init__(self, name): + self.name = name + self.path = None + self._data = None + self.ext = ['.npy', '.csv', '.txt', '.h5', 'PLINK', '.gz', 'VCF'] + self.pool = None + self.folder = None + self.processed = 0 + self.kwargs = None + self.permutation = False - self.folder=Folder(path) - self.path=path + def start(self, path, **kwargs): - self.format=self.folder.format + self.kwargs = kwargs + if path is None: + raise ValueError('Not defined path for {}'.format(self.name)) + if os.path.isdir(path): - if kwargs.get('vcf',0) and kwargs['vcf']: - self.format='VCF' + self.folder = Folder(path) + self.path = path - if self.name=='genotype' and self.format!='PLINK' and self.format!='.gz' and self.format!='VCF': - self.format='.h5' + self.format = self.folder.format - if self.format not in self.ext: - raise ValueError(' {} is not supported format (only {} supported)!'.format(self.format, self.ext)) + if kwargs.get('vcf', 0) and kwargs['vcf']: + self.format = 'VCF' - elif self.format=='.npy' and self.name!='partial': - self.folder=NPFolder(path,protected=['info_dic.npy'] ) - #self.folder.protected=['info_dic.npy'] + if self.name == 'genotype' and self.format != 'PLINK' and self.format != '.gz' and self.format != 'VCF': + self.format = '.h5' - elif self.format=='.npy' and self.name=='partial': - self.folder=PDFolder(path,name=kwargs['study_name']) + if self.format not in self.ext: + raise ValueError(' {} is not supported format (only {} supported)!'.format(self.format, self.ext)) + elif self.format == '.npy' and self.name != 'partial': + self.folder = NPFolder(path, protected=['info_dic.npy']) + # self.folder.protected=['info_dic.npy'] - elif self.format in ['.csv', '.txt']: - self.folder=CSVFolder(path) + elif self.format == '.npy' and self.name == 'partial': + self.folder = PDFolder(path, name=kwargs['study_name']) - elif self.format=='.h5' and self.name=='genotype': - self.folder=PLINKHDF5Folder(path,kwargs['study_name']) - elif self.format=='PLINK': - self.folder=PLINKFolder(path) + elif self.format in ['.csv', '.txt']: + self.folder = CSVFolder(path) - elif self.format=='.gz': - self.folder=MINIMACFolder(path) - self.format="MINIMAC" + elif self.format == '.h5' and self.name == 'genotype': + self.folder = PLINKHDF5Folder(path, kwargs['study_name']) - elif self.format=='VCF': - self.folder = VCFFolder(path) + elif self.format == 'PLINK': + self.folder = PLINKFolder(path) - elif self.format=='.h5' and self.name!='genotype': - raise ValueError('hdf5 format implemented only for converted from genotype data...Sorry') + elif self.format == '.gz': + self.folder = MINIMACFolder(path) + self.format = "MINIMAC" - elif self.format!='.h5' and self.name=='genotype': - raise ValueError('genotype data should be in hdf5 format') + elif self.format == 'VCF': + self.folder = VCFFolder(path) - self._get=self.folder.get_next + elif self.format == '.h5' and self.name != 'genotype': + raise ValueError('hdf5 format implemented only for converted from genotype data...Sorry') - else: - raise ValueError('{} is not a directory'.format(path)) + elif self.format != '.h5' and self.name == 'genotype': + raise ValueError('genotype data should be in hdf5 format') + self._get = self.folder.get_next - def get(self,*args,**kwargs): - if self.format!='.h5' and self.name!='partial': - raise ValueError() - return self.folder.get(*args,**kwargs) + else: + raise ValueError('{} is not a directory'.format(path)) + def get(self, *args, **kwargs): + if self.format != '.h5' and self.name != 'partial': + raise ValueError() + return self.folder.get(*args, **kwargs) - def get_next(self,**kwargs): - return self._get(**kwargs) + def get_next(self, **kwargs): + return self._get(**kwargs) diff --git a/utils/hase/hase-master/hdgwas/fake.py b/utils/hase/hase-master/hdgwas/fake.py index 63f348c..48c3959 100644 --- a/utils/hase/hase-master/hdgwas/fake.py +++ b/utils/hase/hase-master/hdgwas/fake.py @@ -1,111 +1,108 @@ - import numpy as np import os import tables import gc import pandas as pd -class Encoder(object): - - def __init__(self, out): - self.name='Encoder' - self.N_matrix=None - self.F=None - self.F_inv=None - self.encoder_chunks={} - self.hdf5_iter=0 - self.npy_iter=0 - self.pytable_filters = tables.Filters(complevel=9, complib='zlib') - self.out=out - self.metadata=None - self.study_name=None - self.phen_info_dic={} - self.phen_info_dic['id']=None - try: - print ('Creating directories...') - os.mkdir(os.path.join(self.out,'encode_genotype') ) - os.mkdir(os.path.join(self.out,'encode_phenotype') ) - os.mkdir(os.path.join(self.out,'encode_individuals')) - - except: - print(('Directories "encode_genotype","encode_phenotype","encode_individuals" are already exist in {}...'.format(self.out))) - - - def matrix(self,N, save=False): - - self.F=np.random.randint(1,10,N*N).reshape(N,N) - self.F_inv=np.linalg.inv(self.F) - self.F=np.array(self.F,dtype=np.float) - if save: - print(('Saving decoders Matrices to...{}'.format(self.out))) - np.save(os.path.join(self.out,'F.npy'),self.F) - np.save(os.path.join(self.out,'F_inv.npy'),self.F_inv) - - - - def encode(self,data, data_type=None): - - if isinstance(self.F,type(None)): - raise ValueError('Encode matrix is not define') - - x,y=data.shape - #TODO (mid) add to encode_chunk info about data size and/or names indexes - #TODO (mid) check the protocol if exist... all study on single stage - - a,b=self.F.shape - - if isinstance(data_type,type(None)): - raise ValueError('data_type is None') - elif data_type=="genotype": - print ('Decoding genotype') - return np.dot(data,self.F) - elif data_type=='phenotype': - print ('Decoding phenotype') - return np.dot(self.F_inv,data) - - - def save_npy(self,data, save_path=None, info=None, index=None): - #only for phenotype - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - np.save(os.path.join(save_path,str(self.npy_iter)+'_'+self.study_name+ '.npy'),data ) - if self.phen_info_dic['id'] is None: - self.phen_info_dic['id']=np.array(info._data.id)[index] - self.phen_info_dic[str(self.npy_iter)+'_'+self.study_name+ '.npy']=info._data.names[info._data.start:info._data.finish] - self.npy_iter+=1 - - def save_csv(self,data,save_path=None, info=None, index=None): - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - df=pd.DataFrame(data) - df.columns=info._data.names[info._data.start:info._data.finish] - df.insert(0,'id',np.array(info._data.id)[index]) - df.to_csv(os.path.join(save_path,str(self.npy_iter)+'_'+self.study_name+ '.csv'), sep='\t', index=False) - self.npy_iter+=1 - - - - def save_hdf5(self,data, save_path=None,info=None, index=None): - #only for genetics data - print(('Saving data to ... {}'.format(os.path.join(save_path,str(self.hdf5_iter)+'_'+self.study_name+'_encoded.h5')))) - - if not os.path.isfile(os.path.join(self.out,'encode_individuals',self.study_name + '.h5' )): - chunk = pd.DataFrame.from_dict({"individual": info._data.id[index] }) - chunk.to_hdf(os.path.join(self.out,'encode_individuals',self.study_name + '.h5' ), key='individuals', format='table', min_itemsize=25, complib='zlib', complevel=9) - - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - - self.h5_gen_file = tables.open_file( - os.path.join(save_path,str(self.hdf5_iter)+'_'+self.study_name +'.h5'), 'w', title='encode_genotype') - self.hdf5_iter+=1 - - atom = tables.Float64Atom() - self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', filters=self.pytable_filters) - self.genotype[:] = data - self.h5_gen_file.close() - gc.collect() +class Encoder(object): + def __init__(self, out): + self.name = 'Encoder' + self.N_matrix = None + self.F = None + self.F_inv = None + self.encoder_chunks = {} + self.hdf5_iter = 0 + self.npy_iter = 0 + self.pytable_filters = tables.Filters(complevel=9, complib='zlib') + self.out = out + self.metadata = None + self.study_name = None + self.phen_info_dic = {} + self.phen_info_dic['id'] = None + try: + print('Creating directories...') + os.mkdir(os.path.join(self.out, 'encode_genotype')) + os.mkdir(os.path.join(self.out, 'encode_phenotype')) + os.mkdir(os.path.join(self.out, 'encode_individuals')) + + except: + print(( + 'Directories "encode_genotype","encode_phenotype","encode_individuals" are already exist in {}...'.format( + self.out))) + + def matrix(self, N, save=False): + + self.F = np.random.randint(1, 10, N * N).reshape(N, N) + self.F_inv = np.linalg.inv(self.F) + self.F = np.array(self.F, dtype=np.float) + if save: + print(('Saving decoders Matrices to...{}'.format(self.out))) + np.save(os.path.join(self.out, 'F.npy'), self.F) + np.save(os.path.join(self.out, 'F_inv.npy'), self.F_inv) + + def encode(self, data, data_type=None): + + if isinstance(self.F, type(None)): + raise ValueError('Encode matrix is not define') + + x, y = data.shape + # TODO (mid) add to encode_chunk info about data size and/or names indexes + # TODO (mid) check the protocol if exist... all study on single stage + + a, b = self.F.shape + + if isinstance(data_type, type(None)): + raise ValueError('data_type is None') + elif data_type == "genotype": + print('Decoding genotype') + return np.dot(data, self.F) + elif data_type == 'phenotype': + print('Decoding phenotype') + return np.dot(self.F_inv, data) + + def save_npy(self, data, save_path=None, info=None, index=None): + # only for phenotype + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + np.save(os.path.join(save_path, str(self.npy_iter) + '_' + self.study_name + '.npy'), data) + if self.phen_info_dic['id'] is None: + self.phen_info_dic['id'] = np.array(info._data.id)[index] + self.phen_info_dic[str(self.npy_iter) + '_' + self.study_name + '.npy'] = info._data.names[ + info._data.start:info._data.finish] + self.npy_iter += 1 + + def save_csv(self, data, save_path=None, info=None, index=None): + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + df = pd.DataFrame(data) + df.columns = info._data.names[info._data.start:info._data.finish] + df.insert(0, 'id', np.array(info._data.id)[index]) + df.to_csv(os.path.join(save_path, str(self.npy_iter) + '_' + self.study_name + '.csv'), sep='\t', index=False) + self.npy_iter += 1 + + def save_hdf5(self, data, save_path=None, info=None, index=None): + # only for genetics data + print(('Saving data to ... {}'.format( + os.path.join(save_path, str(self.hdf5_iter) + '_' + self.study_name + '_encoded.h5')))) + + if not os.path.isfile(os.path.join(self.out, 'encode_individuals', self.study_name + '.h5')): + chunk = pd.DataFrame.from_dict({"individual": info._data.id[index]}) + chunk.to_hdf(os.path.join(self.out, 'encode_individuals', self.study_name + '.h5'), key='individuals', + format='table', min_itemsize=25, complib='zlib', complevel=9) + + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + + self.h5_gen_file = tables.open_file( + os.path.join(save_path, str(self.hdf5_iter) + '_' + self.study_name + '.h5'), 'w', title='encode_genotype') + self.hdf5_iter += 1 + + atom = tables.Float64Atom() + self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', filters=self.pytable_filters) + self.genotype[:] = data + self.h5_gen_file.close() + gc.collect() diff --git a/utils/hase/hase-master/hdgwas/hash.py b/utils/hase/hase-master/hdgwas/hash.py index 8d63655..2058dcb 100644 --- a/utils/hase/hase-master/hdgwas/hash.py +++ b/utils/hase/hase-master/hdgwas/hash.py @@ -3,275 +3,275 @@ import os - class HashTablePOS(object): def __init__(self): - self.hash_dic={i:{} for i in range(23)} - self.protected=False - self.data_frame=None - self.collisions={i:[] for i in range(23)} - self.type='POS' - self.n_keys=0 - self._print=False - - def fill_id(self,id): + self.hash_dic = {i: {} for i in range(23)} + self.protected = False + self.data_frame = None + self.collisions = {i: [] for i in range(23)} + self.type = 'POS' + self.n_keys = 0 + self._print = False + + def fill_id(self, id): if self.hash_dic[id.CHR].get(id.bp) is not None: if isinstance(self.hash_dic[id.CHR][id.bp], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " - "".format( - "CHR "+str(id.CHR) + " bp "+ str(id.bp), - id.allele1,id.allele2, - self.hash_dic[id.CHR][id.bp][1],self.hash_dic[id.CHR][id.bp][2]) - )) + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " + "".format( + "CHR " + str(id.CHR) + " bp " + str(id.bp), + id.allele1, id.allele2, + self.hash_dic[id.CHR][id.bp][1], self.hash_dic[id.CHR][id.bp][2]) + )) - self.hash_dic[id.CHR][id.bp]=[self.hash_dic[id.CHR][id.bp],(self.n_keys,id.allele1, id.allele2) ] - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp] = [self.hash_dic[id.CHR][id.bp], (self.n_keys, id.allele1, id.allele2)] + self.n_keys += 1 else: - self.hash_dic[id.CHR][id.bp].append((self.n_keys,id.allele1, id.allele2)) - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp].append((self.n_keys, id.allele1, id.allele2)) + self.n_keys += 1 self.collisions[id.CHR].append(id.bp) else: - self.hash_dic[id.CHR][id.bp]=(self.n_keys, id.allele1, id.allele2) - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp] = (self.n_keys, id.allele1, id.allele2) + self.n_keys += 1 - - def fill(self,data_frame): - self.data_frame=data_frame + def fill(self, data_frame): + self.data_frame = data_frame if self.data_frame is None: raise ValueError('Genotype data frame is not defined!') for i in self.data_frame.iterrows(): - self.n_keys+=1 + self.n_keys += 1 if self.hash_dic[i[1].CHR].get(i[1].bp) is not None: if isinstance(self.hash_dic[i[1].CHR][i[1].bp], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " - "".format( - "CHR "+str(i[1].CHR) + " bp "+ str(i[1].bp), - i[1].allele1,i[1].allele2, - self.hash_dic[i[1].CHR][i[1].bp][1],self.hash_dic[i[1].CHR][i[1].bp][2]) - )) - - self.hash_dic[i[1].CHR][i[1].bp]=[self.hash_dic[i[1].CHR][i[1].bp],(i[0],i[1].allele1, i[1].allele2) ] + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " + "".format( + "CHR " + str(i[1].CHR) + " bp " + str(i[1].bp), + i[1].allele1, i[1].allele2, + self.hash_dic[i[1].CHR][i[1].bp][1], self.hash_dic[i[1].CHR][i[1].bp][2]) + )) + + self.hash_dic[i[1].CHR][i[1].bp] = [self.hash_dic[i[1].CHR][i[1].bp], + (i[0], i[1].allele1, i[1].allele2)] else: - self.hash_dic[i[1].CHR][i[1].bp].append((i[0],i[1].allele1, i[1].allele2)) + self.hash_dic[i[1].CHR][i[1].bp].append((i[0], i[1].allele1, i[1].allele2)) self.collisions[i[1].CHR].append(i[1].bp) else: - self.hash_dic[i[1].CHR][i[1].bp]=(i[0], i[1].allele1, i[1].allele2) - self.protected=True + self.hash_dic[i[1].CHR][i[1].bp] = (i[0], i[1].allele1, i[1].allele2) + self.protected = True - def get_index(self,chr, bp): + def get_index(self, chr, bp): - r=self.hash_dic[chr].get(bp) + r = self.hash_dic[chr].get(bp) if r is None: - return -1,'R','R' + return -1, 'R', 'R' else: return r - def get_map(self,info): + def get_map(self, info): - def _map(r,a1,a2): - ind,A1,A2=r - if ind==-1: - result=[-1,0] - elif A1==a1 and A2==a2: - result=[ind, 1] - elif A1==a2 and A2==a1: - result=[ ind, -1] + def _map(r, a1, a2): + ind, A1, A2 = r + if ind == -1: + result = [-1, 0] + elif A1 == a1 and A2 == a2: + result = [ind, 1] + elif A1 == a2 and A2 == a1: + result = [ind, -1] else: - result=[-1,0] + result = [-1, 0] return result - r=self.get_index(info.CHR, info.bp) - if not isinstance(r[0],tuple): - return _map(r,info.allele1,info.allele2) + r = self.get_index(info.CHR, info.bp) + if not isinstance(r[0], tuple): + return _map(r, info.allele1, info.allele2) else: for i in r: - m=_map(i,info.allele1,info.allele2) - if m[0]!=-1: + m = _map(i, info.allele1, info.allele2) + if m[0] != -1: return m - return [-1,0] + return [-1, 0] + class HashTableRSID(object): def __init__(self): - self.hash_table=np.zeros([250*10**6]) - self.list=[] - self.hash_dic={} - self.protected=False - self.type='RSID' - self.n_keys=0 - - - def fill_id(self,id): - #print id + self.hash_table = np.zeros([250 * 10 ** 6]) + self.list = [] + self.hash_dic = {} + self.protected = False + self.type = 'RSID' + self.n_keys = 0 + + def fill_id(self, id): + # print id if not self.protected: - #self.n_keys+=1 + # self.n_keys+=1 try: - if id.ID[:2]=='rs': - m=int(id.ID[2:]) - if self.hash_table[m]!=0: + if id.ID[:2] == 'rs': + m = int(id.ID[2:]) + if self.hash_table[m] != 0: print('collision {}!'.format(id)) - if isinstance(self.list[self.hash_table[m]],tuple): - self.list[self.hash_table[m]]=[self.list[self.hash_table[m]], (self.n_keys,id['allele1'],id['allele2']) ] - self.n_keys+=1 + if isinstance(self.list[self.hash_table[m]], tuple): + self.list[self.hash_table[m]] = [self.list[self.hash_table[m]], + (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.list[self.hash_table[m]].append( (self.n_keys,id['allele1'],id['allele2']) ) - self.n_keys+=1 + self.list[self.hash_table[m]].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 else: - self.list.append( ( self.n_keys,id['allele1'],id['allele2'] ) ) - self.hash_table[m]=len(self.list) - self.n_keys+=1 + self.list.append((self.n_keys, id['allele1'], id['allele2'])) + self.hash_table[m] = len(self.list) + self.n_keys += 1 else: if self.hash_dic.get(id.ID) is None: - self.hash_dic[id.ID]=(self.n_keys,id['allele1'],id['allele2']) - self.n_keys+=1 + self.hash_dic[id.ID] = (self.n_keys, id['allele1'], id['allele2']) + self.n_keys += 1 else: - if isinstance(self.hash_dic[id.ID],tuple): + if isinstance(self.hash_dic[id.ID], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - id.ID, - id['allele1'],id['allele2'], - self.hash_dic[id.ID][1],self.hash_dic[id.ID][2]) + id.ID, + id['allele1'], id['allele2'], + self.hash_dic[id.ID][1], self.hash_dic[id.ID][2]) - )) - self.hash_dic[id.ID]=[self.hash_dic[id.ID], (self.n_keys,id['allele1'],id['allele2'])] - self.n_keys+=1 + )) + self.hash_dic[id.ID] = [self.hash_dic[id.ID], (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.hash_dic[id.ID].append((self.n_keys,id['allele1'],id['allele2'])) - self.n_keys+=1 + self.hash_dic[id.ID].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 except: if self.hash_dic.get(id.ID) is None: - self.hash_dic[id.ID]=[self.n_keys,id['allele1'],id['allele2']] - self.n_keys+=1 + self.hash_dic[id.ID] = [self.n_keys, id['allele1'], id['allele2']] + self.n_keys += 1 else: - if isinstance(self.hash_dic[id[1].ID],tuple): + if isinstance(self.hash_dic[id[1].ID], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - id.ID, - id['allele1'],id['allele2'], - self.hash_dic[id.ID][1],self.hash_dic[id.ID][2]) + id.ID, + id['allele1'], id['allele2'], + self.hash_dic[id.ID][1], self.hash_dic[id.ID][2]) - )) - self.hash_dic[id.ID]=[self.hash_dic[id.ID], (self.n_keys,id['allele1'],id['allele2'])] - self.n_keys+=1 + )) + self.hash_dic[id.ID] = [self.hash_dic[id.ID], (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.hash_dic[id.ID].append((self.n_keys,id['allele1'],id['allele2'])) - self.n_keys+=1 + self.hash_dic[id.ID].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 - #self.protected=True + # self.protected=True else: raise ValueError('Hash table already filled!') - def fill(self,df): + def fill(self, df): if not self.protected: for i in df.iterrows(): try: - if i[1].ID[:2]=='rs': - m=int(i[1].ID[2:]) - if self.hash_table[m]!=0: + if i[1].ID[:2] == 'rs': + m = int(i[1].ID[2:]) + if self.hash_table[m] != 0: print('collision {}!'.format(i)) - if isinstance(self.list[self.hash_table[m]],tuple): - self.list[self.hash_table[m]]=[self.list[self.hash_table[m]], (i[0],i[1]['allele1'],i[1]['allele2']) ] + if isinstance(self.list[self.hash_table[m]], tuple): + self.list[self.hash_table[m]] = [self.list[self.hash_table[m]], + (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.list[self.hash_table[m]].append( (i[0],i[1]['allele1'],i[1]['allele2']) ) + self.list[self.hash_table[m]].append((i[0], i[1]['allele1'], i[1]['allele2'])) else: - self.list.append( ( i[0],i[1]['allele1'],i[1]['allele2'] ) ) - self.hash_table[m]=len(self.list) + self.list.append((i[0], i[1]['allele1'], i[1]['allele2'])) + self.hash_table[m] = len(self.list) else: if self.hash_dic.get(i[1].ID) is None: - self.hash_dic[i[1].ID]=(i[0],i[1]['allele1'],i[1]['allele2']) + self.hash_dic[i[1].ID] = (i[0], i[1]['allele1'], i[1]['allele2']) else: - if isinstance(self.hash_dic[i],tuple): + if isinstance(self.hash_dic[i], tuple): print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - i[1].ID, - i[1]['allele1'],i['allele2'], - self.hash_dic[i[1].ID][1],self.hash_dic[i[1].ID][2]) + i[1].ID, + i[1]['allele1'], i['allele2'], + self.hash_dic[i[1].ID][1], self.hash_dic[i[1].ID][2]) - )) - self.hash_dic[i[1].ID]=[self.hash_dic[i[1].ID], (i[0],i[1]['allele1'],i[1]['allele2'])] + )) + self.hash_dic[i[1].ID] = [self.hash_dic[i[1].ID], + (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.hash_dic[i[1].ID].append((i[0],i[1]['allele1'],i[1]['allele2'])) + self.hash_dic[i[1].ID].append((i[0], i[1]['allele1'], i[1]['allele2'])) except: if self.hash_dic.get(i[1].ID) is None: - self.hash_dic[i[1].ID]=[i[0],i[1]['allele1'],i[1]['allele2']] + self.hash_dic[i[1].ID] = [i[0], i[1]['allele1'], i[1]['allele2']] else: - if isinstance(self.hash_dic[i[1].ID],tuple): + if isinstance(self.hash_dic[i[1].ID], tuple): print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - i[1].ID, - i[1]['allele1'],i[1]['allele2'], - self.hash_dic[i[1].ID][1],self.hash_dic[i[1].ID][2]) + i[1].ID, + i[1]['allele1'], i[1]['allele2'], + self.hash_dic[i[1].ID][1], self.hash_dic[i[1].ID][2]) - )) - self.hash_dic[i[1].ID]=[self.hash_dic[i[1].ID], (i[0],i[1]['allele1'],i[1]['allele2'])] + )) + self.hash_dic[i[1].ID] = [self.hash_dic[i[1].ID], (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.hash_dic[i[1].ID].append((i[0],i[1]['allele1'],i[1]['allele2'])) + self.hash_dic[i[1].ID].append((i[0], i[1]['allele1'], i[1]['allele2'])) - self.protected=True + self.protected = True else: raise ValueError('Hash table already filled!') - - def get_index(self,value): + def get_index(self, value): try: - if value[:2]=='rs': - v=int(value[2:]) - r=int(self.hash_table[v]) - if r==0: - return -1,'R','R' + if value[:2] == 'rs': + v = int(value[2:]) + r = int(self.hash_table[v]) + if r == 0: + return -1, 'R', 'R' else: - return self.list[r-1] + return self.list[r - 1] else: return self.hash_dic[value] except: - return -1,'R','R' - - def get_map(self,info): - - def _map(r,a1,a2): - ind,A1,A2=r - if ind==-1: - result=[-1,0] - elif A1==a1 and A2==a2: - result=[ind, 1] - elif A1==a2 and A2==a1: - result=[ ind, -1] + return -1, 'R', 'R' + + def get_map(self, info): + + def _map(r, a1, a2): + ind, A1, A2 = r + if ind == -1: + result = [-1, 0] + elif A1 == a1 and A2 == a2: + result = [ind, 1] + elif A1 == a2 and A2 == a1: + result = [ind, -1] else: - result=[-1,0] + result = [-1, 0] return result - r=self.get_index(info.ID) - if not isinstance(r[0],tuple): - return _map(r,info.allele1,info.allele2) + r = self.get_index(info.ID) + if not isinstance(r[0], tuple): + return _map(r, info.allele1, info.allele2) else: for i in r: - m=_map(i,info.allele1,info.allele2) - if m[0]!=-1: + m = _map(i, info.allele1, info.allele2) + if m[0] != -1: return m - return [-1,0] + return [-1, 0] - def save(self,path, filename): - with open(os.path.join(path,filename), 'wb') as output: + def save(self, path, filename): + with open(os.path.join(path, filename), 'wb') as output: pickle.dump(self, output, -1) -if __name__=="__main__": - print('Hash') - +if __name__ == "__main__": + print('Hash') diff --git a/utils/hase/hase-master/hdgwas/hdregression.py b/utils/hase/hase-master/hdgwas/hdregression.py index 4cd6a17..8a28973 100644 --- a/utils/hase/hase-master/hdgwas/hdregression.py +++ b/utils/hase/hase-master/hdgwas/hdregression.py @@ -1,138 +1,130 @@ - import numpy as np import os import sys -from .tools import Timer, timer, timing,save_parameters +from .tools import Timer, timer, timing, save_parameters import scipy.linalg.blas as FB import h5py import gc import tables -#@timing +# @timing def A_covariates(covariates, intercept=True): + ''' + :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) + :param intercept: default True, add intercept to model + :return: matrix (n_cavariates, n_covariates), constant part for the rest of the study + ''' - ''' - :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) - :param intercept: default True, add intercept to model - :return: matrix (n_cavariates, n_covariates), constant part for the rest of the study - ''' - - S,N=covariates.shape - if intercept: - I=np.ones(S).reshape(S,1) - covariates=np.hstack((I,covariates)) - a_cov=np.dot(covariates.T,covariates) - return a_cov -#@timing -def B4(phenotype,genotype): - b4=np.tensordot(genotype, phenotype, axes=([1], [0])) - return b4 - -def interaction(genotype,factor): - g=genotype*factor.T - return g - -#@timing -def A_tests(covariates, genotype, intercept=True): #TODO (low) extend for any number of tests in model - ''' - :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) - :param genotype: (n_tests, n_subjects) - test could be any kind of quantitative covariance - :return: (1,n_covariates + intercept) - ''' - - if intercept: - fst=np.sum(genotype, axis=1).reshape(-1,1) - sec=np.dot(genotype, covariates) - tr=np.sum(np.power(genotype,2), axis=1).reshape(-1,1) - return np.hstack((fst, sec, tr)) - - else: - sec=np.dot(genotype, covariates) - tr=np.sum(np.power(genotype,2), axis=1).reshape(-1,1) - return np.hstack(( sec, tr)) - -#@timing -def B_covariates(covariates, phenotype, intercept=True): - - S,N=covariates.shape + S, N = covariates.shape + if intercept: + I = np.ones(S).reshape(S, 1) + covariates = np.hstack((I, covariates)) + a_cov = np.dot(covariates.T, covariates) + return a_cov - b_cov = np.dot(covariates.T, phenotype) - if intercept: - b1 = np.sum(phenotype, axis=0).reshape(1, phenotype.shape[1]) - B13 = np.append(b1, b_cov, axis=0) - return B13 - else: - return b_cov +# @timing +def B4(phenotype, genotype): + b4 = np.tensordot(genotype, phenotype, axes=([1], [0])) + return b4 -#@timing -def A_inverse(a_covariates, a_test): #TODO (low) extend for any number of tests in model - A_inv=[] - n,m=a_covariates.shape - k=n+1 - for i in range(a_test.shape[0]): #TODO (low) not in for loop - inv=np.zeros(k*k).reshape(k,k) - inv[ 0:k-1,0:k-1 ]=a_covariates - inv[k-1,:]=a_test[i,:] - inv[0:k,k-1]=a_test[i,0:k] - try: - A_inv.append(np.linalg.inv(inv)) - except: - A_inv.append(np.zeros(k*k).reshape(k,k)) #TODO (high) test; check influence on results; warning; +def interaction(genotype, factor): + g = genotype * factor.T + return g - return np.array(A_inv) -#@timing -def C_matrix(phenotype): - C=np.einsum('ij,ji->i', phenotype.T, phenotype) - return C +# @timing +def A_tests(covariates, genotype, intercept=True): # TODO (low) extend for any number of tests in model + ''' + :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) + :param genotype: (n_tests, n_subjects) - test could be any kind of quantitative covariance + :return: (1,n_covariates + intercept) + ''' -#@timing -#@save_parameters -def HASE(b4, A_inverse, b_cov, C, N_con, DF): + if intercept: + fst = np.sum(genotype, axis=1).reshape(-1, 1) + sec = np.dot(genotype, covariates) + tr = np.sum(np.power(genotype, 2), axis=1).reshape(-1, 1) + return np.hstack((fst, sec, tr)) - with Timer() as t: + else: + sec = np.dot(genotype, covariates) + tr = np.sum(np.power(genotype, 2), axis=1).reshape(-1, 1) + return np.hstack((sec, tr)) - B13=b_cov - B4 = b4 - A1_B_constant = np.tensordot(A_inverse[:, :, 0:(N_con)], B13, axes=([2], [0])) +# @timing +def B_covariates(covariates, phenotype, intercept=True): + S, N = covariates.shape - A1_B_nonconstant = np.einsum('ijk,il->ijl', A_inverse[:, :, N_con:N_con+1], B4) + b_cov = np.dot(covariates.T, phenotype) + if intercept: + b1 = np.sum(phenotype, axis=0).reshape(1, phenotype.shape[1]) + B13 = np.append(b1, b_cov, axis=0) + return B13 + else: + return b_cov - A1_B_full = A1_B_constant + A1_B_nonconstant - BT_A1B_const = np.einsum('ij,lji->li', B13.T, A1_B_full[:, 0:(N_con), :]) +# @timing +def A_inverse(a_covariates, a_test): # TODO (low) extend for any number of tests in model - BT_A1B_nonconst = np.einsum('ijk,ijk->ijk', B4[:, None, :], A1_B_full[:, (N_con):N_con+1, :]) + A_inv = [] + n, m = a_covariates.shape + k = n + 1 + for i in range(a_test.shape[0]): # TODO (low) not in for loop + inv = np.zeros(k * k).reshape(k, k) + inv[0:k - 1, 0:k - 1] = a_covariates + inv[k - 1, :] = a_test[i, :] + inv[0:k, k - 1] = a_test[i, 0:k] + try: + A_inv.append(np.linalg.inv(inv)) + except: + A_inv.append(np.zeros(k * k).reshape(k, k)) # TODO (high) test; check influence on results; warning; - BT_A1B_full = BT_A1B_const[:, None, :] + BT_A1B_nonconst + return np.array(A_inv) - C_BTA1B = BT_A1B_full - C.reshape(1, -1) - C_BTA1B = np.abs(C_BTA1B) +# @timing +def C_matrix(phenotype): + C = np.einsum('ij,ji->i', phenotype.T, phenotype) + return C - a44_C_BTA1B = C_BTA1B * A_inverse[:, (N_con):N_con+1, (N_con):N_con+1] - a44_C_BTA1B = np.sqrt( (a44_C_BTA1B) ) +# @timing +# @save_parameters +def HASE(b4, A_inverse, b_cov, C, N_con, DF): + with Timer() as t: + B13 = b_cov + B4 = b4 - t_stat = np.sqrt(DF) * np.divide(A1_B_full[:, (N_con):N_con+1, :], a44_C_BTA1B) + A1_B_constant = np.tensordot(A_inverse[:, :, 0:(N_con)], B13, axes=([2], [0])) - SE = a44_C_BTA1B/np.sqrt(DF) + A1_B_nonconstant = np.einsum('ijk,il->ijl', A_inverse[:, :, N_con:N_con + 1], B4) + A1_B_full = A1_B_constant + A1_B_nonconstant - print("time to compute GWAS for {} phenotypes and {} SNPs .... {} sec".format(b4.shape[1], - A_inverse.shape[0], - t.secs)) - return t_stat, SE + BT_A1B_const = np.einsum('ij,lji->li', B13.T, A1_B_full[:, 0:(N_con), :]) + BT_A1B_nonconst = np.einsum('ijk,ijk->ijk', B4[:, None, :], A1_B_full[:, (N_con):N_con + 1, :]) + BT_A1B_full = BT_A1B_const[:, None, :] + BT_A1B_nonconst + C_BTA1B = BT_A1B_full - C.reshape(1, -1) + C_BTA1B = np.abs(C_BTA1B) + a44_C_BTA1B = C_BTA1B * A_inverse[:, (N_con):N_con + 1, (N_con):N_con + 1] + a44_C_BTA1B = np.sqrt((a44_C_BTA1B)) + t_stat = np.sqrt(DF) * np.divide(A1_B_full[:, (N_con):N_con + 1, :], a44_C_BTA1B) + SE = a44_C_BTA1B / np.sqrt(DF) + print("time to compute GWAS for {} phenotypes and {} SNPs .... {} sec".format(b4.shape[1], + A_inverse.shape[0], + t.secs)) + return t_stat, SE diff --git a/utils/hase/hase-master/hdgwas/pard.py b/utils/hase/hase-master/hdgwas/pard.py index 5801fc5..cae68d5 100644 --- a/utils/hase/hase-master/hdgwas/pard.py +++ b/utils/hase/hase-master/hdgwas/pard.py @@ -1,169 +1,162 @@ - - -from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from utils.hase.hdgwas.tools import study_indexes, Timer import numpy as np import os import time + def merge_PD(path, max_node, study_name): - print ('Merging PD...') + print('Merging PD...') while True: time.sleep(10) - if np.sum( [ os.path.isfile(os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name) )) for i in range(1,max_node+1) ] )==max_node: - if np.sum( [ os.path.isfile(os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) )) for i in range(1,max_node+1) ] )==max_node: + if np.sum([os.path.isfile(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))) for i in + range(1, max_node + 1)]) == max_node: + if np.sum([os.path.isfile(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) for i in + range(1, max_node + 1)]) == max_node: break print('All files found...') - b4_flag=os.path.isfile(os.path.join(path,'node_{}_{}_b4.npy'.format(1,study_name) ) ) - for i in range(1,max_node+1): + b4_flag = os.path.isfile(os.path.join(path, 'node_{}_{}_b4.npy'.format(1, study_name))) + for i in range(1, max_node + 1): print('node_{}'.format(i)) - if i==1: - metadata=np.load(os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) ).item() - a_test=np.load( os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) )) + if i == 1: + metadata = np.load(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))).item() + a_test = np.load(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) if b4_flag: - b4=np.load( os.path.join(path,'node_{}_{}_b4.npy'.format(i,study_name) )) + b4 = np.load(os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name))) else: - metadata_tmp=np.load((os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) )).item() - a_test_tmp=np.load( (os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) ))) - metadata['MAF']=metadata['MAF'] + metadata_tmp['MAF'] - a_test=np.vstack(( a_test, a_test_tmp ) ) + metadata_tmp = np.load((os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name)))).item() + a_test_tmp = np.load((os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name)))) + metadata['MAF'] = metadata['MAF'] + metadata_tmp['MAF'] + a_test = np.vstack((a_test, a_test_tmp)) if b4_flag: - b4_tmp=np.load((os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name)))) - b4 = np.vstack((b4, b4_tmp )) - + b4_tmp = np.load((os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name)))) + b4 = np.vstack((b4, b4_tmp)) np.save(os.path.join(path, study_name + '_a_test.npy'), a_test) np.save(os.path.join(path, study_name + '_metadata.npy'), metadata) if b4_flag: - np.save(os.path.join(path, study_name + '_b4.npy'),b4) + np.save(os.path.join(path, study_name + '_b4.npy'), b4) - for i in range(1,max_node+1): - os.remove( os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) ) - os.remove(os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name))) + for i in range(1, max_node + 1): + os.remove(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))) + os.remove(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) if b4_flag: os.remove(os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name))) +def partial_derivatives(save_path=None, COV=None, PHEN=None, GEN=None, + MAP=None, MAF=None, R2=None, B4_flag=False, study_name=None, intercept=True): + row_index, ids = study_indexes(phenotype=PHEN.folder._data, genotype=GEN.folder._data, covariates=COV.folder._data) -def partial_derivatives(save_path=None,COV=None,PHEN=None, GEN=None, - MAP=None, MAF=None, R2=None, B4_flag=False, study_name=None,intercept=True): - - row_index, ids = study_indexes(phenotype=PHEN.folder._data,genotype=GEN.folder._data,covariates=COV.folder._data) + metadata = {} - metadata={} + # TODO (mid) add parameter to compute PD only for new phenotypes or cov + metadata['id'] = ids + metadata['MAF'] = [] + metadata['filter'] = [] + metadata['names'] = [] # TODO (low) change to cov_names + metadata['phenotype'] = [] + b_cov = [] + C = [] + a_test = [] + b4 = [] - - - #TODO (mid) add parameter to compute PD only for new phenotypes or cov - metadata['id']=ids - metadata['MAF']=[] - metadata['filter']=[] - metadata['names']=[] #TODO (low) change to cov_names - metadata['phenotype']=[] - b_cov=[] - C=[] - a_test=[] - b4=[] - - covariates=COV.get_next(index=row_index[2]) + covariates = COV.get_next(index=row_index[2]) if MAP.cluster == 'n' or MAP.node[1] == 1: if intercept: - metadata['names'].append(study_name+ '_intercept') - metadata['names']=metadata['names']+[ study_name+ '_' + i for i in COV.folder._data.get_names() ] - - a_cov=A_covariates(covariates,intercept=intercept) - np.save(os.path.join(save_path,study_name+'_a_cov.npy'),a_cov) + metadata['names'].append(study_name + '_intercept') + metadata['names'] = metadata['names'] + [study_name + '_' + i for i in COV.folder._data.get_names()] + a_cov = A_covariates(covariates, intercept=intercept) + np.save(os.path.join(save_path, study_name + '_a_cov.npy'), a_cov) with Timer() as t_phen: while True: - phenotype=PHEN.get_next(index=row_index[1]) + phenotype = PHEN.get_next(index=row_index[1]) if isinstance(phenotype, type(None)): - b_cov=np.concatenate(b_cov, axis=1) - C=np.concatenate(C, axis=0) - np.save(os.path.join(save_path,study_name+'_b_cov.npy'),b_cov) - np.save(os.path.join(save_path,study_name+'_C.npy'),C) + b_cov = np.concatenate(b_cov, axis=1) + C = np.concatenate(C, axis=0) + np.save(os.path.join(save_path, study_name + '_b_cov.npy'), b_cov) + np.save(os.path.join(save_path, study_name + '_C.npy'), C) break - metadata['phenotype']=metadata['phenotype']+ list(PHEN.folder._data.get_names()) - b_cov.append(B_covariates(covariates,phenotype,intercept=intercept)) + metadata['phenotype'] = metadata['phenotype'] + list(PHEN.folder._data.get_names()) + b_cov.append(B_covariates(covariates, phenotype, intercept=intercept)) C.append(C_matrix(phenotype)) print(('Time to PD phenotype {} is {} s'.format(np.array(C).shape, t_phen.secs))) if MAP.cluster == 'y': - f_max=np.max([ int(f.split('_')[0]) for f in GEN.folder.files ]) - files2read=[ '{}_{}.h5'.format(i,study_name) for i in np.array_split(list(range(f_max+1)),MAP.node[0])[MAP.node[1] -1 ] ][::-1] - filesdone=[] - for i in range(MAP.node[1] -1): - filesdone=filesdone + [ '{}_{}.h5'.format(i,study_name) for i in np.array_split(list(range(f_max+1)),MAP.node[0])[ i ] ] - - N_snps_read=0 + f_max = np.max([int(f.split('_')[0]) for f in GEN.folder.files]) + files2read = ['{}_{}.h5'.format(i, study_name) for i in + np.array_split(list(range(f_max + 1)), MAP.node[0])[MAP.node[1] - 1]][::-1] + filesdone = [] + for i in range(MAP.node[1] - 1): + filesdone = filesdone + ['{}_{}.h5'.format(i, study_name) for i in + np.array_split(list(range(f_max + 1)), MAP.node[0])[i]] + + N_snps_read = 0 for f in filesdone: file = os.path.join(GEN.folder.path, 'genotype', f) - N_snps_read+=GEN.folder.get_info(file)['shape'][0] + N_snps_read += GEN.folder.get_info(file)['shape'][0] else: - N_snps_read=0 + N_snps_read = 0 while True: with Timer() as t_gen: if MAP.cluster == 'y': - if len(files2read)!=0: - file = os.path.join(GEN.folder.path, 'genotype',files2read.pop() ) - genotype=GEN.folder.read(file) + if len(files2read) != 0: + file = os.path.join(GEN.folder.path, 'genotype', files2read.pop()) + genotype = GEN.folder.read(file) else: - genotype=None + genotype = None else: - genotype=GEN.get_next() + genotype = GEN.get_next() if isinstance(genotype, type(None)): if MAP.cluster == 'y': - np.save(os.path.join(save_path,'node_{}_'.format(MAP.node[1]) + study_name + '_a_test.npy'), np.concatenate(a_test).astype(np.float64)) - np.save(os.path.join(save_path,'node_{}_'.format(MAP.node[1]) + study_name + '_metadata.npy'), metadata) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_a_test.npy'), + np.concatenate(a_test).astype(np.float64)) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_metadata.npy'), + metadata) if B4_flag: b4 = np.concatenate(b4, axis=0) - np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_b4.npy'), b4.astype(np.float64)) - if MAP.node[1]==MAP.node[0]: - merge_PD(save_path, MAP.node[0],study_name) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_b4.npy'), + b4.astype(np.float64)) + if MAP.node[1] == MAP.node[0]: + merge_PD(save_path, MAP.node[0], study_name) else: - np.save(os.path.join(save_path,study_name+'_a_test.npy'), np.concatenate(a_test) ) - np.save(os.path.join(save_path,study_name+'_metadata.npy'),metadata) + np.save(os.path.join(save_path, study_name + '_a_test.npy'), np.concatenate(a_test)) + np.save(os.path.join(save_path, study_name + '_metadata.npy'), metadata) if B4_flag: - b4=np.concatenate(b4, axis=0) + b4 = np.concatenate(b4, axis=0) np.save(os.path.join(save_path, study_name + '_b4.npy'), b4) break flip = MAP.flip[GEN.folder.name][N_snps_read:N_snps_read + genotype.shape[0]] N_snps_read += genotype.shape[0] - flip_index=(flip==-1) - genotype=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,genotype) - genotype=genotype[:,row_index[0]] - maf=np.mean(genotype, axis=1)/2 - metadata['MAF']=metadata['MAF']+list(maf) + flip_index = (flip == -1) + genotype = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, genotype) + genotype = genotype[:, row_index[0]] + maf = np.mean(genotype, axis=1) / 2 + metadata['MAF'] = metadata['MAF'] + list(maf) - #TODO (low) add interaction - a_test.append(A_tests(covariates,genotype,intercept=intercept)) + # TODO (low) add interaction + a_test.append(A_tests(covariates, genotype, intercept=intercept)) if B4_flag: - #works only when all phenotypes in one chunk, if not, do not use this option! - #it would use to much disk space anyway - if len([f for f in PHEN.folder.files if f!='info_dic.npy' ])>1: + # works only when all phenotypes in one chunk, if not, do not use this option! + # it would use to much disk space anyway + if len([f for f in PHEN.folder.files if f != 'info_dic.npy']) > 1: print('pd_full flag disabled!') - B4_flag=False + B4_flag = False continue - PHEN.folder.processed=0 - phenotype=PHEN.get_next(index=row_index[1]) - b4.append(B4(phenotype,genotype)) + PHEN.folder.processed = 0 + phenotype = PHEN.get_next(index=row_index[1]) + b4.append(B4(phenotype, genotype)) print(('Time to PD genotype {} is {} s'.format(genotype.shape, t_gen.secs))) - - - - - - - diff --git a/utils/hase/hase-master/hdgwas/protocol.py b/utils/hase/hase-master/hdgwas/protocol.py index 92d5792..509dc5d 100644 --- a/utils/hase/hase-master/hdgwas/protocol.py +++ b/utils/hase/hase-master/hdgwas/protocol.py @@ -1,31 +1,27 @@ - - import os import sys import string - - -class Protocol: #TODO (mid) write class - - def __init__(self, path): - self.name=None - self.model=None - self.covariates=None - self.MAF=None - self.QC=None - self.genotype_format=None - self.phenotype_format=None - self.type=None #meta,single etc - self.enable=False - self.path=path - if os.path.isfile(self.path): - self.enable=True - self.parse() - - def parse(self): - print('Not implemented!') - - def regression_model(self): - pass \ No newline at end of file +class Protocol: # TODO (mid) write class + + def __init__(self, path): + self.name = None + self.model = None + self.covariates = None + self.MAF = None + self.QC = None + self.genotype_format = None + self.phenotype_format = None + self.type = None # meta,single etc + self.enable = False + self.path = path + if os.path.isfile(self.path): + self.enable = True + self.parse() + + def parse(self): + print('Not implemented!') + + def regression_model(self): + pass diff --git a/utils/hase/hase-master/hdgwas/regression.py b/utils/hase/hase-master/hdgwas/regression.py index ed62537..81468a4 100644 --- a/utils/hase/hase-master/hdgwas/regression.py +++ b/utils/hase/hase-master/hdgwas/regression.py @@ -4,132 +4,126 @@ import os import sys import gc -from utils.hase.hdgwas.tools import study_indexes, Mapper, HaseAnalyser, Timer,merge_genotype +from utils.hase.hdgwas.tools import study_indexes, Mapper, HaseAnalyser, Timer, merge_genotype from utils.hase.hdgwas.data import MetaParData -from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from scipy import stats import bitarray as ba from utils.hase.hdgwas.pard import partial_derivatives import tables - - -def haseregression(phen,gen,cov, mapper, Analyser, maf,intercept=True, interaction=None): - - g=tuple( [i.folder._data for i in gen ] ) - - row_index, ids = study_indexes(phenotype=phen.folder._data, - genotype=g, - covariates=cov.folder._data) - - if mapper is not None: - SNP=[0,0,mapper.n_keys] - else: - SNP=[0,0,'unknown'] - - covariates=cov.get_next(index=row_index[2]) - a_cov=A_covariates(covariates,intercept=intercept) - - while True: - gc.collect() - if mapper is not None: - if mapper.cluster=='n': - SNPs_index, keys=mapper.get() - else: - ch=mapper.chunk_pop() - if ch is None: - SNPs_index=None - break - SNPs_index, keys=mapper.get(chunk_number=ch) - if isinstance(SNPs_index, type(None)): - break - Analyser.rsid=keys - else: - SNPs_index=None - - with Timer() as t: - genotype=merge_genotype(gen, SNPs_index, mapper) - print(('time to read and merge genotype {}s'.format(t.secs))) - gc.collect() - if genotype is None: - print('All genotype processed!') - break - SNP[0]+=genotype.shape[0] - genotype=genotype[:,row_index[0]] - - if mapper is None: - Analyser.rsid=np.array(list(range(genotype.shape[0]))) - - - MAF=np.mean(genotype, axis=1)/2 - STD=np.std(genotype, axis=1) - - if maf!=0: - - filter=(MAF>maf) & (MAF<1-maf) & (MAF!=0.5) - genotype=genotype[filter,:] - Analyser.MAF=MAF[filter] - Analyser.rsid=Analyser.rsid[filter] - - if genotype.shape[0]==0: - print('NO SNPs > MAF') - continue - - else: - Analyser.MAF=MAF - - SNP[1]+=genotype.shape[0] - - while True: - phenotype=phen.get_next(index=row_index[1]) - - if isinstance(phenotype, type(None)): - phen.folder.processed=0 - print('All phenotypes processed!') - break - - if phen.permutation: - np.random.shuffle(phenotype) - - b_cov=B_covariates(covariates,phenotype,intercept=intercept) - - C=C_matrix(phenotype) - - if interaction is not None: - pass - - - a_test=A_tests(covariates,genotype,intercept=intercept) - a_inv=A_inverse(a_cov,a_test) - - N_con=a_inv.shape[1] - 1 - - DF=(phenotype.shape[0] - a_inv.shape[1]) - - b4=B4(phenotype,genotype) - - - t_stat, SE=HASE(b4, a_inv, b_cov, C, N_con, DF) - print(('Read {}, processed {}, total {}'.format(SNP[0],SNP[1],SNP[2] ))) - Analyser.t_stat=t_stat - Analyser.SE=SE - if mapper is not None and mapper.cluster == 'y': - Analyser.cluster=True - Analyser.chunk=ch - Analyser.node=mapper.node[1] - if phen.permutation: - Analyser.permutation=True - Analyser.save_result( phen.folder._data.names[phen.folder._data.start:phen.folder._data.finish]) - t_stat=None - Analyser.t_stat=None - del b4 - del C - del b_cov - del a_inv - del a_test - del t_stat - gc.collect() - - if Analyser.cluster: - np.save(os.path.join(Analyser.out,str(Analyser.node)+'_node_RSID.npy'),Analyser.rsid_dic) +def haseregression(phen, gen, cov, mapper, Analyser, maf, intercept=True, interaction=None): + g = tuple([i.folder._data for i in gen]) + + row_index, ids = study_indexes(phenotype=phen.folder._data, + genotype=g, + covariates=cov.folder._data) + + if mapper is not None: + SNP = [0, 0, mapper.n_keys] + else: + SNP = [0, 0, 'unknown'] + + covariates = cov.get_next(index=row_index[2]) + a_cov = A_covariates(covariates, intercept=intercept) + + while True: + gc.collect() + if mapper is not None: + if mapper.cluster == 'n': + SNPs_index, keys = mapper.get() + else: + ch = mapper.chunk_pop() + if ch is None: + SNPs_index = None + break + SNPs_index, keys = mapper.get(chunk_number=ch) + if isinstance(SNPs_index, type(None)): + break + Analyser.rsid = keys + else: + SNPs_index = None + + with Timer() as t: + genotype = merge_genotype(gen, SNPs_index, mapper) + print(('time to read and merge genotype {}s'.format(t.secs))) + gc.collect() + if genotype is None: + print('All genotype processed!') + break + SNP[0] += genotype.shape[0] + genotype = genotype[:, row_index[0]] + + if mapper is None: + Analyser.rsid = np.array(list(range(genotype.shape[0]))) + + MAF = np.mean(genotype, axis=1) / 2 + STD = np.std(genotype, axis=1) + + if maf != 0: + + filter = (MAF > maf) & (MAF < 1 - maf) & (MAF != 0.5) + genotype = genotype[filter, :] + Analyser.MAF = MAF[filter] + Analyser.rsid = Analyser.rsid[filter] + + if genotype.shape[0] == 0: + print('NO SNPs > MAF') + continue + + else: + Analyser.MAF = MAF + + SNP[1] += genotype.shape[0] + + while True: + phenotype = phen.get_next(index=row_index[1]) + + if isinstance(phenotype, type(None)): + phen.folder.processed = 0 + print('All phenotypes processed!') + break + + if phen.permutation: + np.random.shuffle(phenotype) + + b_cov = B_covariates(covariates, phenotype, intercept=intercept) + + C = C_matrix(phenotype) + + if interaction is not None: + pass + + a_test = A_tests(covariates, genotype, intercept=intercept) + a_inv = A_inverse(a_cov, a_test) + + N_con = a_inv.shape[1] - 1 + + DF = (phenotype.shape[0] - a_inv.shape[1]) + + b4 = B4(phenotype, genotype) + + t_stat, SE = HASE(b4, a_inv, b_cov, C, N_con, DF) + print(('Read {}, processed {}, total {}'.format(SNP[0], SNP[1], SNP[2]))) + Analyser.t_stat = t_stat + Analyser.SE = SE + if mapper is not None and mapper.cluster == 'y': + Analyser.cluster = True + Analyser.chunk = ch + Analyser.node = mapper.node[1] + if phen.permutation: + Analyser.permutation = True + Analyser.save_result(phen.folder._data.names[phen.folder._data.start:phen.folder._data.finish]) + t_stat = None + Analyser.t_stat = None + del b4 + del C + del b_cov + del a_inv + del a_test + del t_stat + gc.collect() + + if Analyser.cluster: + np.save(os.path.join(Analyser.out, str(Analyser.node) + '_node_RSID.npy'), Analyser.rsid_dic) diff --git a/utils/hase/hase-master/hdgwas/tools.py b/utils/hase/hase-master/hdgwas/tools.py index 4a9e742..0a1a15a 100644 --- a/utils/hase/hase-master/hdgwas/tools.py +++ b/utils/hase/hase-master/hdgwas/tools.py @@ -1,4 +1,3 @@ - import time import numpy as np import pandas as pd @@ -13,63 +12,66 @@ import glob import inspect, itertools + def timer(func): - def f(*args,**kwargs): - with Timer(verbose=True) as t: - return func(*args,**kwargs) - return f + def f(*args, **kwargs): + with Timer(verbose=True) as t: + return func(*args, **kwargs) + + return f class Timer(object): - def __init__(self, verbose=False): - self.verbose = verbose + def __init__(self, verbose=False): + self.verbose = verbose + + def __enter__(self): + self.start = time.time() + return self - def __enter__(self): - self.start = time.time() - return self + def __exit__(self, *args): + self.end = time.time() + self.secs = self.end - self.start + self.msecs = self.secs * 1000 # millisecs + if self.verbose: + print('elapsed time: %f ms' % self.msecs) - def __exit__(self, *args): - self.end = time.time() - self.secs = self.end - self.start - self.msecs = self.secs * 1000 # millisecs - if self.verbose: - print('elapsed time: %f ms' % self.msecs) def timing(f): - def wrap(*args,**kwargs): - time1 = time.time() - ret = f(*args,**kwargs) - time2 = time.time() - print('%s function took %0.3f s' % (f.__name__, (time2 - time1) )) - return ret + def wrap(*args, **kwargs): + time1 = time.time() + ret = f(*args, **kwargs) + time2 = time.time() + print('%s function took %0.3f s' % (f.__name__, (time2 - time1))) + return ret - return wrap + return wrap def save_parameters(f): - def wrap(*args, **kwargs): - args_name = inspect.getargspec(f)[0] - args_dict = dict(zip(args_name, args)) - np.save('{}.npy'.format(f.__name__),args_dict ) - ret = f(*args, **kwargs) - return ret + def wrap(*args, **kwargs): + args_name = inspect.getargspec(f)[0] + args_dict = dict(zip(args_name, args)) + np.save('{}.npy'.format(f.__name__), args_dict) + ret = f(*args, **kwargs) + return ret - return wrap + return wrap -def check_np(): - for i in ['atlas_blas_info', 'openblas_info', 'lapack_opt_info', - 'atlas_info', 'lapack_mkl_info', 'blas_mkl_info', - 'atlas_blas_info', 'mkl_info']: - try: - if len(getattr(np.__config__, i)) >0: - print(('Numpy linked to {}'.format(i))) - return 0 - except: - continue +def check_np(): + for i in ['atlas_blas_info', 'openblas_info', 'lapack_opt_info', + 'atlas_info', 'lapack_mkl_info', 'blas_mkl_info', + 'atlas_blas_info', 'mkl_info']: + try: + if len(getattr(np.__config__, i)) > 0: + print(('Numpy linked to {}'.format(i))) + return 0 + except: + continue - raise ValueError('NO BLAS/LAPACK/MKL found!' - 'To restart with slow speed use -np False') + raise ValueError('NO BLAS/LAPACK/MKL found!' + 'To restart with slow speed use -np False') ######################################################################## @@ -78,260 +80,262 @@ def check_np(): class Analyser(object): - def __init__(self,name): - self.name=name + def __init__(self, name): + self.name = name class HaseAnalyser(Analyser): - def __init__(self): - self.name=None - self.t_stat=None - self.p_value=None - self.betas=None - self.SE=None - self.DF=None - self.n_studies=None - self.probes_path={} - self.results=OrderedDict() - self.split_size=None - self.threshold=None - self.result_path=None - self.result_index=1 - self.out=None - self.MAF=None - self.rsid=None - self.reference=None - self.cluster=False - self.permutation=False - self.rsid_dic={} - self.result_folder=None - self.result_dump_size=3 - self.file_number=None - - - def summary(self): - - if isinstance(self.result_path,type(None)): - raise ValueError('Please set result pathway to Analyser!') - - if isinstance(self.DF,type(None)): - print ('DF is not defined. Forced to use z_score statistics!') - - if self.result_folder is None: - self.result_folder=[ i for i in glob.glob( os.path.join(self.result_path, '*.npy') ) if 'RSID' not in i] - - self.results['RSID']=np.array([]) - self.results['p_value']=np.array([]) - self.results['t-stat']=np.array([]) - self.results['phenotype']=np.array([]) - self.results['SE']=np.array([]) - self.results['MAF']=np.array([]) - self.results['BETA'] = np.array([]) - - files=[] - - if self.file_number is not None: - try: - d = np.load(os.path.join(self.result_path, '{}result.npy'.format(self.file_number))).item() - except: - print("Can't read {}".format(i)) - - p_value = self.get_p_value(d['t-stat'], df=self.DF) - self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) - self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) - self.results['RSID'] = np.append(self.results['RSID'], d['index']) - self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) - self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) - self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) - self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) - - else: - - for i in range(self.result_dump_size): - try: - files.append(self.result_folder.pop()) - except: - break - if len(files)!=0: - for i in files: - print(i) - try: - d=np.load(i).item() - except: - print("Can't read {}".format(i)) - continue - p_value=self.get_p_value(d['t-stat'],df=self.DF) - self.results['t-stat']=np.append(self.results['t-stat'],d['t-stat'].flatten()) - self.results['SE']=np.append(self.results['SE'],d['SE'].flatten()) - self.results['RSID']=np.append(self.results['RSID'],d['index']) - self.results['phenotype']=np.append(self.results['phenotype'],d['phenotype']) - self.results['MAF']=np.append(self.results['MAF'],d['MAF']) - self.results['p_value']=np.append(self.results['p_value'],p_value.flatten()) - self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten() ) - else: - self.results=None - - def get_p_value(self,t_stat,df=None): - if df is None: - return stats.norm.sf(np.abs(t_stat))*2 - else: - return stats.t.sf(np.abs(t_stat),df)*2 - - def save_result(self , phen_names): - - t_threshold=self.threshold - save_path=self.out - - mask=([],[],[]) - - if t_threshold: - mask = np.where(np.abs(self.t_stat) > t_threshold) - else: - mask = np.where(np.abs(self.t_stat) > 0) - - if (len(mask[0]) != 0): - print(('Saving results to {}'.format(save_path))) - t_save = self.t_stat[mask[0],mask[1],mask[2]] - se=self.SE[mask[0],mask[1],mask[2]] - result = {'phenotype': phen_names[mask[2]], 't-stat': t_save,'index':self.rsid[mask[0]],'SE':se, 'MAF':self.MAF[mask[0]]} - - if not self.cluster: - np.save(os.path.join(save_path, str(self.result_index) + 'result.npy'), result) - else: - if self.permutation: - result=self.t_stat - self.rsid_dic[str(self.chunk[0])+'_' +str(self.chunk[1])]=self.rsid - np.save(os.path.join(save_path,'node'+str(self.node)+'_'+ str(self.chunk[0])+'_' +str(self.chunk[1])+'_'+ str(self.result_index) + 'result.npy'),result) - self.result_index+=1 - + def __init__(self): + self.name = None + self.t_stat = None + self.p_value = None + self.betas = None + self.SE = None + self.DF = None + self.n_studies = None + self.probes_path = {} + self.results = OrderedDict() + self.split_size = None + self.threshold = None + self.result_path = None + self.result_index = 1 + self.out = None + self.MAF = None + self.rsid = None + self.reference = None + self.cluster = False + self.permutation = False + self.rsid_dic = {} + self.result_folder = None + self.result_dump_size = 3 + self.file_number = None + + def summary(self): + + if isinstance(self.result_path, type(None)): + raise ValueError('Please set result pathway to Analyser!') + + if isinstance(self.DF, type(None)): + print('DF is not defined. Forced to use z_score statistics!') + + if self.result_folder is None: + self.result_folder = [i for i in glob.glob(os.path.join(self.result_path, '*.npy')) if 'RSID' not in i] + + self.results['RSID'] = np.array([]) + self.results['p_value'] = np.array([]) + self.results['t-stat'] = np.array([]) + self.results['phenotype'] = np.array([]) + self.results['SE'] = np.array([]) + self.results['MAF'] = np.array([]) + self.results['BETA'] = np.array([]) + + files = [] + + if self.file_number is not None: + try: + d = np.load(os.path.join(self.result_path, '{}result.npy'.format(self.file_number))).item() + except: + print("Can't read {}".format(i)) + + p_value = self.get_p_value(d['t-stat'], df=self.DF) + self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) + self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) + self.results['RSID'] = np.append(self.results['RSID'], d['index']) + self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) + self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) + self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) + self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) + + else: + + for i in range(self.result_dump_size): + try: + files.append(self.result_folder.pop()) + except: + break + if len(files) != 0: + for i in files: + print(i) + try: + d = np.load(i).item() + except: + print("Can't read {}".format(i)) + continue + p_value = self.get_p_value(d['t-stat'], df=self.DF) + self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) + self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) + self.results['RSID'] = np.append(self.results['RSID'], d['index']) + self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) + self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) + self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) + self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) + else: + self.results = None + + def get_p_value(self, t_stat, df=None): + if df is None: + return stats.norm.sf(np.abs(t_stat)) * 2 + else: + return stats.t.sf(np.abs(t_stat), df) * 2 + + def save_result(self, phen_names): + + t_threshold = self.threshold + save_path = self.out + + mask = ([], [], []) + + if t_threshold: + mask = np.where(np.abs(self.t_stat) > t_threshold) + else: + mask = np.where(np.abs(self.t_stat) > 0) + + if (len(mask[0]) != 0): + print(('Saving results to {}'.format(save_path))) + t_save = self.t_stat[mask[0], mask[1], mask[2]] + se = self.SE[mask[0], mask[1], mask[2]] + result = {'phenotype': phen_names[mask[2]], 't-stat': t_save, 'index': self.rsid[mask[0]], 'SE': se, + 'MAF': self.MAF[mask[0]]} + + if not self.cluster: + np.save(os.path.join(save_path, str(self.result_index) + 'result.npy'), result) + else: + if self.permutation: + result = self.t_stat + self.rsid_dic[str(self.chunk[0]) + '_' + str(self.chunk[1])] = self.rsid + np.save(os.path.join(save_path, 'node' + str(self.node) + '_' + str(self.chunk[0]) + '_' + str( + self.chunk[1]) + '_' + str(self.result_index) + 'result.npy'), result) + self.result_index += 1 ######################################################################## ######################################################################## ######################################################################## -class Log (object): #TODO (low) write this class +class Log(object): # TODO (low) write this class - def __init__(self): - pass + def __init__(self): + pass ######################################################################## ######################################################################## ######################################################################## -class Checker(object): #TODO (mid) finish or remove this class - - def __init__(self): - self.mode=None - self.name=None - self.args=None - - def check(self,args, mode=None): - - if mode=='converting': - return self.converting(args) - elif mode=='encoding': - self.encoding(args) - elif mode=='single-meta': - self.single_meta(args) - elif mode=='meta-stage': - self.meta_stage(args) - elif mode=='regression': - self.regression(args) - - - def system_check(self,args): - pass - - def converting(self,args): +class Checker(object): # TODO (mid) finish or remove this class + def __init__(self): + self.mode = None + self.name = None + self.args = None - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + def check(self, args, mode=None): - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if mode == 'converting': + return self.converting(args) + elif mode == 'encoding': + self.encoding(args) + elif mode == 'single-meta': + self.single_meta(args) + elif mode == 'meta-stage': + self.meta_stage(args) + elif mode == 'regression': + self.regression(args) - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + def system_check(self, args): + pass - args.genotype=args.genotype[0] - if not os.path.isdir(args.genotype): - raise ValueError('{} is not a directory!'.format(args.genotype)) + def converting(self, args): - def encoding(self,args): + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + args.genotype = args.genotype[0] + if not os.path.isdir(args.genotype): + raise ValueError('{} is not a directory!'.format(args.genotype)) - args.genotype=args.genotype[0] - args.study_name=args.study_name[0] + def encoding(self, args): - if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.out): - raise ValueError('{},{} or {} is not a directory'.format(args.genotype, args.phenotype, args.out)) + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if not os.path.isdir(os.path.join(args.out, 'encode_genotype' )) or not os.path.isdir(os.path.join(args.out, 'encode_phenotype' )): - raise ValueError('{} or {} not exist it is up to you to create these directory'.format( - (os.path.join(args.out, 'encode_genotype' )), - (os.path.join(args.out, 'encode_phenotype' )) - ) - ) + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - id=np.array(pd.read_hdf(os.path.join(args.genotype,'individuals',args.study_name+'.h5'),'individuals').individual.tolist(), dtype=np.int) + args.genotype = args.genotype[0] + args.study_name = args.study_name[0] + if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.out): + raise ValueError('{},{} or {} is not a directory'.format(args.genotype, args.phenotype, args.out)) + if not os.path.isdir(os.path.join(args.out, 'encode_genotype')) or not os.path.isdir( + os.path.join(args.out, 'encode_phenotype')): + raise ValueError('{} or {} not exist it is up to you to create these directory'.format( + (os.path.join(args.out, 'encode_genotype')), + (os.path.join(args.out, 'encode_phenotype')) + ) + ) - def single_meta(self,args): + id = np.array(pd.read_hdf(os.path.join(args.genotype, 'individuals', args.study_name + '.h5'), + 'individuals').individual.tolist(), dtype=np.int) + def single_meta(self, args): - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - args.genotype=args.genotype[0] - args.study_name=args.study_name[0] + args.genotype = args.genotype[0] + args.study_name = args.study_name[0] - if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.covariates) : - raise ValueError('{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.covariates )) ) + if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.covariates): + raise ValueError( + '{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.covariates))) + def meta_stage(self, args): + if isinstance(args.mapper, type(None)): + raise ValueError( + 'You should define mapper folder --mapper, if it does not exist you should first run Mapper script') - def meta_stage(self,args): + if isinstance(args.mapper_name, type(None)): + raise ValueError( + 'You should define mapper name --mapper_name, if it does not exist you should first run Mapper script') - if isinstance(args.mapper, type(None)): - raise ValueError('You should define mapper folder --mapper, if it does not exist you should first run Mapper script') + if len(args.genotype) <= 1: + raise ValueError('Should be only one directory for genotype!') - if isinstance(args.mapper_name, type(None)): - raise ValueError('You should define mapper name --mapper_name, if it does not exist you should first run Mapper script') + g = [os.path.isdir(i) for i in args.genotype] + d = [os.path.isdir(i) for i in args.derivatives] - if len(args.genotype)<=1: - raise ValueError('Should be only one directory for genotype!') + if np.sum(g) != len(args.genotype) or not os.path.isdir(args.phenotype) or np.sum(d) != len(args.derivatives): + raise ValueError( + '{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.derivatives))) - g=[os.path.isdir(i) for i in args.genotype ] - d=[os.path.isdir(i) for i in args.derivatives ] + def regression(self, args): - if np.sum(g)!=len(args.genotype) or not os.path.isdir(args.phenotype) or np.sum(d)!=len(args.derivatives) : - raise ValueError('{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.derivatives )) ) + g = [os.path.isdir(i) for i in args.genotype] - - def regression(self,args): - - g=[os.path.isdir(i) for i in args.genotype ] - - if np.sum(g)!=len(args.genotype) or not os.path.isdir(args.phenotype[0]) or not os.path.isdir(args.covariates) : - raise ValueError('{},{} or {} is not a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.derivatives )) ) + if np.sum(g) != len(args.genotype) or not os.path.isdir(args.phenotype[0]) or not os.path.isdir( + args.covariates): + raise ValueError( + '{},{} or {} is not a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.derivatives))) ######################################################################## @@ -339,318 +343,321 @@ def regression(self,args): ######################################################################## class Mapper(object): - def __init__(self): - - self.name=None - self.genotype_names=[] - self.dic=OrderedDict() - self.n_study=0 - self.values=[] # array (N_study, N_keys), where N_keys = number of ID in reference table - self.keys=None - self.n_keys=None - self.processed=0 - self._limit=None - self.reference=False - self.include=None - self.exclude=None - self.include_ind=np.array([]) - self.exclude_ind=np.array([]) - #self.hash=HashTable() - self.cluster=None - self.node=None - self.chunk_pool=None - self.chunk_size=None - self.column_names=[] - self.flip={} # keys - study names; values - array, with length equal to number of probes - self.probes=None - self.encoded={} - - - def chunk_pop(self): - if self.chunk_pool is None and self.cluster is None: - raise ValueError('Cluster settings are not defined!') - - if self.chunk_pool is None: - self.chunk_pool=[] - if self.node is None: - raise ValueError('cluster setting not defined! (number of nodes / this node number) ') - self.node=[int(i) for i in self.node] - N=self.n_keys/self.node[0] - n=N/self.chunk_size - if N<1: - raise ValueError('Too many nodes! Change chunk size in mapper') - elif N==1: - self.chunk_pool=[[self.node[1]-1,self.node[1]]] - else: - if n==0: - self.chunk_pool=[[N*(self.node[1]-1),N*(self.node[1]-1)+N]] - else: - self.chunk_pool=[] - for i in range(n): - self.chunk_pool.append( [N*(self.node[1]-1)+ self.chunk_size*i, N*(self.node[1]-1) + self.chunk_size*(i+1) ] ) - if (N-n*self.chunk_size)!=0: - self.chunk_pool.append( [N*(self.node[1]-1) + self.chunk_size*(n), N*(self.node[1]-1) + self.chunk_size*(n)+ (N-n*self.chunk_size) ] ) - - - if self.node[1]==self.node[0]: - if (self.n_keys-N*self.node[0])!=0: - self.chunk_pool.append([self.chunk_pool[-1][1],self.n_keys]) - self.chunk_pool=self.chunk_pool[::-1] - - print(self.chunk_pool) - - if len(self.chunk_pool)!=0: - ch=self.chunk_pool.pop() - print(ch) - return ch - else: - return None - - #@timing - def fill(self, keys, name ,repeats=False, reference=False):#TODO (middle) remove - self.reference=reference - self.reference_name=name - self.column_names.append(name) - l=len(keys) - uniq=np.unique(keys) - u=len(uniq) - if not repeats: - if l!=u: - raise ValueError('length of keys {} does not = {} number of uniq values!!!'.format(l,u)) - else: - l=u - keys=uniq - self.n_keys=l - if isinstance(self._limit, type(None)): - for i,j in enumerate(keys): - self.dic[j]=[i] - else: - for i,j in enumerate(keys): - if i==self._limit: - break - self.dic[j]=[i] - - #@timing - def push(self, new_keys,name=None, new_id=True):#TODO (middle) remove - if not self.reference and len(self.dic)==0: - raise ValueError('You should fill mapper first with ref panel or your own rsids!') - self.n_study+=1 - if name is not None: - try: - self.genotype_names.index(name) - raise ValueError('Trying to push the same study to mapper') - except: - self.genotype_names.append(name) - self.column_names.append(name) - - if isinstance(self._limit, type(None)): - for i,j in enumerate(new_keys): - if self.dic.get(j): - self.dic[j]=self.dic[j] + [i] - else: - if new_id: - print(('WARNING! You are pushing ID {} which is not present in reference panel!'.format(j))) - self.dic[j]=[-1]*(self.n_study+1) - self.dic[j][self.n_study]=i - else: - continue - else: - for i,j in enumerate(new_keys): - if i==self._limit: - break - if self.dic.get(j): - self.dic[j]=self.dic[j] + [i] - else: - self.dic[j]=[-1]*(self.n_study+1) - self.dic[j][self.n_study]=i - - for k in self.dic: - if len(self.dic[k])1: - raise ValueError('There are more than one reference keys in folder {}'.format(folder)) - - self.keys=np.load(os.path.join(keys[0]) )#TODO (middle) not safety to load only one file - self.n_keys=self.keys.shape[0] - - values=glob.glob(folder+ 'values_*') - if len(values)==0: - raise ValueError('There is no mapper data in folder {}'.format(folder)) - - if self.genotype_names is None: - raise ValueError('Genotype names are not defined!') - - self.values=np.zeros(( self.n_keys , len(self.genotype_names) )) - for j,i in enumerate(self.genotype_names): - self.values[:,j]=np.load(os.path.join(folder, 'values_'+self.reference_name+'_'+i+'.npy')) - - if self.n_keys!=self.values.shape[0]: - raise ValueError('Number of indexes {} in mapper values is different from keys length {}!'.format(self.values.shape[0],self.n_keys )) - - self.n_study=self.values.shape[1] - if self.n_keys1.5*self.chunk_size: - - if chunk_number is None: - self.processed = self.processed - len(np.arange(start,finish)) - break - else: - print('Added back chunk {}'.format(ch)) - self.chunk_pool.append(ch) - break - else: - ind=np.append( ind, np.intersect1d(np.arange(start, finish), self.include_ind) ) - ind=ind.astype('int') - indexes=self.values[ind,:] - r=(indexes==-1).any(axis=1) - ind=ind[~r] - indexes = indexes[~r] - keys = self.keys[ind] - - if len(ind)==0: - return None,None - - - return [indexes[:,i].astype(np.int64) for i in range(self.n_study)], keys - - - - def get_all(self, name, nonempty=True): - ind=self.genotype_names.index(name) - indexes=self.values[:,ind] - if nonempty: - r=(self.values==-1).any(axis=1) - if len(r)==self.values.shape[0]: - raise ValueError('There is no common names between studies') - indexes=indexes[~r] - return indexes + def __init__(self): + + self.name = None + self.genotype_names = [] + self.dic = OrderedDict() + self.n_study = 0 + self.values = [] # array (N_study, N_keys), where N_keys = number of ID in reference table + self.keys = None + self.n_keys = None + self.processed = 0 + self._limit = None + self.reference = False + self.include = None + self.exclude = None + self.include_ind = np.array([]) + self.exclude_ind = np.array([]) + # self.hash=HashTable() + self.cluster = None + self.node = None + self.chunk_pool = None + self.chunk_size = None + self.column_names = [] + self.flip = {} # keys - study names; values - array, with length equal to number of probes + self.probes = None + self.encoded = {} + + def chunk_pop(self): + if self.chunk_pool is None and self.cluster is None: + raise ValueError('Cluster settings are not defined!') + + if self.chunk_pool is None: + self.chunk_pool = [] + if self.node is None: + raise ValueError('cluster setting not defined! (number of nodes / this node number) ') + self.node = [int(i) for i in self.node] + N = self.n_keys / self.node[0] + n = N / self.chunk_size + if N < 1: + raise ValueError('Too many nodes! Change chunk size in mapper') + elif N == 1: + self.chunk_pool = [[self.node[1] - 1, self.node[1]]] + else: + if n == 0: + self.chunk_pool = [[N * (self.node[1] - 1), N * (self.node[1] - 1) + N]] + else: + self.chunk_pool = [] + for i in range(n): + self.chunk_pool.append([N * (self.node[1] - 1) + self.chunk_size * i, + N * (self.node[1] - 1) + self.chunk_size * (i + 1)]) + if (N - n * self.chunk_size) != 0: + self.chunk_pool.append([N * (self.node[1] - 1) + self.chunk_size * (n), + N * (self.node[1] - 1) + self.chunk_size * (n) + ( + N - n * self.chunk_size)]) + + if self.node[1] == self.node[0]: + if (self.n_keys - N * self.node[0]) != 0: + self.chunk_pool.append([self.chunk_pool[-1][1], self.n_keys]) + self.chunk_pool = self.chunk_pool[::-1] + + print(self.chunk_pool) + + if len(self.chunk_pool) != 0: + ch = self.chunk_pool.pop() + print(ch) + return ch + else: + return None + + # @timing + def fill(self, keys, name, repeats=False, reference=False): # TODO (middle) remove + self.reference = reference + self.reference_name = name + self.column_names.append(name) + l = len(keys) + uniq = np.unique(keys) + u = len(uniq) + if not repeats: + if l != u: + raise ValueError('length of keys {} does not = {} number of uniq values!!!'.format(l, u)) + else: + l = u + keys = uniq + self.n_keys = l + if isinstance(self._limit, type(None)): + for i, j in enumerate(keys): + self.dic[j] = [i] + else: + for i, j in enumerate(keys): + if i == self._limit: + break + self.dic[j] = [i] + + # @timing + def push(self, new_keys, name=None, new_id=True): # TODO (middle) remove + if not self.reference and len(self.dic) == 0: + raise ValueError('You should fill mapper first with ref panel or your own rsids!') + self.n_study += 1 + if name is not None: + try: + self.genotype_names.index(name) + raise ValueError('Trying to push the same study to mapper') + except: + self.genotype_names.append(name) + self.column_names.append(name) + + if isinstance(self._limit, type(None)): + for i, j in enumerate(new_keys): + if self.dic.get(j): + self.dic[j] = self.dic[j] + [i] + else: + if new_id: + print(('WARNING! You are pushing ID {} which is not present in reference panel!'.format(j))) + self.dic[j] = [-1] * (self.n_study + 1) + self.dic[j][self.n_study] = i + else: + continue + else: + for i, j in enumerate(new_keys): + if i == self._limit: + break + if self.dic.get(j): + self.dic[j] = self.dic[j] + [i] + else: + self.dic[j] = [-1] * (self.n_study + 1) + self.dic[j][self.n_study] = i + + for k in self.dic: + if len(self.dic[k]) < self.n_study + 1: + self.dic[k] = self.dic[k] + [-1] + + # @timing + def load_flip(self, folder, encode=None): + + if folder is None: + raise ValueError('Mapper is not defined!') + if not os.path.isdir(folder): + raise ValueError('{} is not a folder'.format(folder)) + + if self.reference_name is None: + raise ValueError('Reference name for mapper is not defined!') + + if len(glob.glob(folder + 'flip_*')) == 0: + raise ValueError('There is no flip mapper data in folder {}'.format(folder)) + + for j, i in enumerate(self.genotype_names): + if encode is not None: + self.encoded[i] = encode[j] + if encode[j] == 0: + self.flip[i] = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + elif encode[j] == 1: + flip = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + self.flip[i] = np.ones(flip.shape[0]) + else: + self.flip[i] = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + + # @timing + def load(self, folder): + if folder is None: + raise ValueError('Mapper is not defined!') + if not os.path.isdir(folder): + raise ValueError('{} is not a folder'.format(folder)) + + if self.reference_name is None: + raise ValueError('Reference name for mapper is not defined!') + + if len(glob.glob(folder + 'keys_*')) == 0: + raise ValueError('There is no mapper data in folder {}'.format(folder)) + + keys = glob.glob(folder + 'keys_*') + if len(keys) > 1: + raise ValueError('There are more than one reference keys in folder {}'.format(folder)) + + self.keys = np.load(os.path.join(keys[0])) # TODO (middle) not safety to load only one file + self.n_keys = self.keys.shape[0] + + values = glob.glob(folder + 'values_*') + if len(values) == 0: + raise ValueError('There is no mapper data in folder {}'.format(folder)) + + if self.genotype_names is None: + raise ValueError('Genotype names are not defined!') + + self.values = np.zeros((self.n_keys, len(self.genotype_names))) + for j, i in enumerate(self.genotype_names): + self.values[:, j] = np.load(os.path.join(folder, 'values_' + self.reference_name + '_' + i + '.npy')) + + if self.n_keys != self.values.shape[0]: + raise ValueError( + 'Number of indexes {} in mapper values is different from keys length {}!'.format(self.values.shape[0], + self.n_keys)) + + self.n_study = self.values.shape[1] + if self.n_keys < self.n_study: + print('WARNING!!! Normally should be more test values that studies! Check your saved data for Mapper') + + print(('You loaded values for {} studies and {} test values'.format(self.n_study, self.n_keys))) + + if self.include is not None or self.exclude is not None: + self.reference = Reference() + self.reference.name = self.reference_name + self.reference.load_index() + + # @timing + def get(self, chunk_number=None): + + if isinstance(self.keys, type(None)) and isinstance(self.values, type(None)): + raise ValueError('mapper data is not loaded!') + + if isinstance(self.chunk_size, type(None)): + raise ValueError('chunk_size and should be defined') + + if self.processed == self.n_keys: + return None, None + + if chunk_number is not None: + start = chunk_number[0] + finish = chunk_number[1] + else: + start = self.processed + finish = self.processed + self.chunk_size if ( + self.processed + self.chunk_size) < self.n_keys else self.n_keys + self.processed = finish + + with Timer() as t_q: + if self.include is not None: + if len(self.include_ind) == 0: + if 'ID' in self.include.columns: + self.include_ind = np.in1d(self.keys, self.include.ID) + self.include_ind = np.where(self.include_ind == True)[0] + # self.query_include=self.reference.index.select('reference',where='ID=self.include.ID') + # self.include_ind=self.query_include.index + elif 'CHR' in self.include.columns and 'bp' in self.include.columns: + self.query_include = self.reference.index.select('reference', + where='CHR=self.include.CHR & bp=self.include.bp') + self.include_ind = self.query_include.index + + if self.exclude is not None: + if len(self.exclude_ind) == 0: + if 'ID' in self.exclude.columns: + self.exclude_ind = np.in1d(self.keys, self.exclude.ID) + self.exclude_ind = np.where(self.exclude_ind == True)[0] + # self.query_exclude=self.reference.index.select('reference',where='ID=self.exclude.ID') + # self.exclude_ind=self.query_exclude.index + elif 'CHR' in self.exclude.columns and 'bp' in self.exclude.columns: + self.query_exclude = self.reference.index.select('reference', + where='CHR=self.exclude.CHR & bp=self.exclude.bp') + self.exclude_ind = self.query_exclude.index + + print("Time to select SNPs {}s".format(t_q.secs)) + + if self.exclude is not None or self.include is not None: + self.include_ind = np.setxor1d(self.include_ind, self.exclude_ind) + if len(self.include_ind) == 0: + print('None of included ID found in genotype data!') + return None, None + else: + ind = np.intersect1d(np.arange(start, finish), self.include_ind) + else: + ind = np.arange(start, finish) + self.include_ind = np.arange(len(self.values)) + + ind = ind.astype('int') + indexes = self.values[ind, :] + r = (indexes == -1).any(axis=1) + ind = ind[~r] + indexes = indexes[~r] + keys = self.keys[ind] + + while len(ind) < self.chunk_size: + if self.processed == self.n_keys: + break + if chunk_number is None: + start = self.processed + finish = self.processed + self.chunk_size if ( + self.processed + self.chunk_size) < self.n_keys else self.n_keys + self.processed = finish + else: + ch = self.chunk_pop() + if ch is not None: + start = ch[0] + finish = ch[1] + else: + break + if len(np.append(ind, np.intersect1d(np.arange(start, finish), self.include_ind))) > 1.5 * self.chunk_size: + + if chunk_number is None: + self.processed = self.processed - len(np.arange(start, finish)) + break + else: + print('Added back chunk {}'.format(ch)) + self.chunk_pool.append(ch) + break + else: + ind = np.append(ind, np.intersect1d(np.arange(start, finish), self.include_ind)) + ind = ind.astype('int') + indexes = self.values[ind, :] + r = (indexes == -1).any(axis=1) + ind = ind[~r] + indexes = indexes[~r] + keys = self.keys[ind] + + if len(ind) == 0: + return None, None + + return [indexes[:, i].astype(np.int64) for i in range(self.n_study)], keys + + def get_all(self, name, nonempty=True): + ind = self.genotype_names.index(name) + indexes = self.values[:, ind] + if nonempty: + r = (self.values == -1).any(axis=1) + if len(r) == self.values.shape[0]: + raise ValueError('There is no common names between studies') + indexes = indexes[~r] + return indexes ######################################################################## @@ -659,242 +666,227 @@ def get_all(self, name, nonempty=True): class Reference(object): - def __init__(self): - self.name=None - self.path_default=os.path.join(os.environ['HASEDIR'], 'data') - self.path={ - '1000Gp1v3_ref':{'table':os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref.gz'), - 'index':os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref_info.h5') } - } - self.dataframe=None - self.loaded=False - self.chunk=10000 - self.read=0 - self.columns=['ID','allele1','allele2','CHR','bp'] - self.index=None - - - - def load(self): - if self.name is not None: - if self.path.get(self.name) is not None: - try: - self.dataframe=pd.read_csv(self.path[self.name]['table'], compression='gzip', sep=' ',chunksize=self.chunk) - except: - self.dataframe=pd.read_csv(self.path[self.name]['table'], sep=' ',chunksize=self.chunk) - self.loaded=True - else: - if os.path.isfile(os.path.join(self.path_default,self.name)): - try: - self.dataframe=pd.read_csv(os.path.join(self.path_default,self.name), compression='gzip', sep=' ',chunksize=self.chunk) - except: - self.dataframe=pd.read_csv(os.path.join(self.path_default,self.name), sep=' ',chunksize=self.chunk) - self.loaded=True - self.name=os.path.basename(self.name) - else: - raise ValueError('Unknown reference {}!'.format((self.name))) - else: - raise ValueError('Reference name is not define!') - - - def load_index(self): - try: - self.index=pd.HDFStore( os.path.join( self.path[self.name]['index'] ), 'r' ) - except: - if os.path.isfile(os.path.join(self.path_default,self.name)): - self.index=pd.HDFStore(os.path.join(self.path_default,self.name), 'r' ) - else: - raise ValueError('There is {} no index file {}'.format(self.path_default, self.name)) - - - def __next__(self): - df=self.dataframe.get_chunk() - self.read+=df.shape[0] - return df - - - - - - - - - - - - + def __init__(self): + self.name = None + self.path_default = os.path.join(os.environ['HASEDIR'], 'data') + self.path = { + '1000Gp1v3_ref': {'table': os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref.gz'), + 'index': os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref_info.h5')} + } + self.dataframe = None + self.loaded = False + self.chunk = 10000 + self.read = 0 + self.columns = ['ID', 'allele1', 'allele2', 'CHR', 'bp'] + self.index = None + + def load(self): + if self.name is not None: + if self.path.get(self.name) is not None: + try: + self.dataframe = pd.read_csv(self.path[self.name]['table'], compression='gzip', sep=' ', + chunksize=self.chunk) + except: + self.dataframe = pd.read_csv(self.path[self.name]['table'], sep=' ', chunksize=self.chunk) + self.loaded = True + else: + if os.path.isfile(os.path.join(self.path_default, self.name)): + try: + self.dataframe = pd.read_csv(os.path.join(self.path_default, self.name), compression='gzip', + sep=' ', chunksize=self.chunk) + except: + self.dataframe = pd.read_csv(os.path.join(self.path_default, self.name), sep=' ', + chunksize=self.chunk) + self.loaded = True + self.name = os.path.basename(self.name) + else: + raise ValueError('Unknown reference {}!'.format((self.name))) + else: + raise ValueError('Reference name is not define!') + + def load_index(self): + try: + self.index = pd.HDFStore(os.path.join(self.path[self.name]['index']), 'r') + except: + if os.path.isfile(os.path.join(self.path_default, self.name)): + self.index = pd.HDFStore(os.path.join(self.path_default, self.name), 'r') + else: + raise ValueError('There is {} no index file {}'.format(self.path_default, self.name)) + + def __next__(self): + df = self.dataframe.get_chunk() + self.read += df.shape[0] + return df ######################################################################## ######################################################################## ######################################################################## -def study_indexes( args=None, genotype=None,phenotype=None,covariates=None): - - def _get_id(notype): - if isinstance(notype,type(None)): - id_p=np.array([],dtype=np.str) - else: - if isinstance(notype,tuple): - id_p=np.array([],dtype=np.str) - for i in notype: - if isinstance(i,dict): - id_p=np.append(id_p,i['id']) - else: - id_p=np.append(id_p,i.get_id()) - else: - id_p=notype.get_id() - return id_p.astype(np.str) - - id_c=_get_id(covariates) - id_p=_get_id(phenotype) - id_g=_get_id(genotype) - - index_g=np.array([]) - index_p=np.array([]) - index_c=np.array([]) - - if args is not None: - if not isinstance(args.ind_id_inc,type(None)) or not isinstance(args.ind_id_exc,type(None)): - pass - if not isinstance(args.cov_name_inc,type(None)) or not isinstance(args.cov_name_exc,type(None)): - pass - - if len(id_g)!=0 and len(id_p)!=0 and len(id_c)!=0: - common_id=(np.intersect1d(np.intersect1d(id_g,id_p),id_c)) - - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - elif len(id_g)==0: - common_id=(np.intersect1d(id_p,id_c)) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - elif len(id_c)==0: - common_id=(np.intersect1d(id_p,id_g)) - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - - else: - common_id=(np.intersect1d(id_g,id_c)) - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - print(('There are {} common ids'.format(len(common_id)))) - np.savetxt(os.path.join(os.environ['HASEOUT'],'study_common_id.txt'),common_id, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'gen_id.txt'), index_g, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'phen_id.txt'), index_p, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'cov_id.txt'), index_c, fmt='%s') - if len(common_id)==0: - exit(0) - - return [index_g,index_p,index_c], np.array(common_id) - -#@timing -def merge_genotype(genotype, SNPs_index , mapper, flip_flag=True): - - if SNPs_index is None: - gen=genotype[0].get_next() - if gen is not None: - for i in range(1, len(genotype)): - gen=np.hstack( (gen,genotype[i].get_next() ) ) - return gen - else: - if len(genotype)!=len(SNPs_index): - raise ValueError('There are not equal number of genotypes and SNPs indexes {}!={}'.format(len(genotype), len(SNPs_index))) - gen=np.zeros( ( len(SNPs_index[0]), np.sum( [i.folder._data.id.shape[0] for i in genotype] ) ) ) - a,b=0,genotype[0].folder._data.id.shape[0] - gen[:,a:b]=genotype[0].get(SNPs_index[0],impute=mapper.encoded.get(genotype[0].folder.name,0) ) - a=b - print(gen.shape) - if flip_flag: - if not mapper.encoded.get(genotype[0].folder.name, 0): - flip=mapper.flip[genotype[0].folder.name][SNPs_index[0]] - flip_index=(flip==-1) - gen=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,gen) - for i in range(1, len(genotype)): - g=genotype[i].get(SNPs_index[i],impute=mapper.encoded.get(genotype[i].folder.name,0)) - print(g.shape) - b+=g.shape[1] - if flip_flag: - if not mapper.encoded.get(genotype[i].folder.name,0): - flip=mapper.flip[genotype[i].folder.name][SNPs_index[i]] - flip_index=(flip==-1) - g=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,g) - - gen[:,a:b]=g - a=b - - return gen +def study_indexes(args=None, genotype=None, phenotype=None, covariates=None): + def _get_id(notype): + if isinstance(notype, type(None)): + id_p = np.array([], dtype=np.str) + else: + if isinstance(notype, tuple): + id_p = np.array([], dtype=np.str) + for i in notype: + if isinstance(i, dict): + id_p = np.append(id_p, i['id']) + else: + id_p = np.append(id_p, i.get_id()) + else: + id_p = notype.get_id() + return id_p.astype(np.str) + + id_c = _get_id(covariates) + id_p = _get_id(phenotype) + id_g = _get_id(genotype) + + index_g = np.array([]) + index_p = np.array([]) + index_c = np.array([]) + + if args is not None: + if not isinstance(args.ind_id_inc, type(None)) or not isinstance(args.ind_id_exc, type(None)): + pass + if not isinstance(args.cov_name_inc, type(None)) or not isinstance(args.cov_name_exc, type(None)): + pass + + if len(id_g) != 0 and len(id_p) != 0 and len(id_c) != 0: + common_id = (np.intersect1d(np.intersect1d(id_g, id_p), id_c)) + + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + elif len(id_g) == 0: + common_id = (np.intersect1d(id_p, id_c)) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + elif len(id_c) == 0: + common_id = (np.intersect1d(id_p, id_g)) + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + + else: + common_id = (np.intersect1d(id_g, id_c)) + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + print(('There are {} common ids'.format(len(common_id)))) + np.savetxt(os.path.join(os.environ['HASEOUT'], 'study_common_id.txt'), common_id, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'gen_id.txt'), index_g, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'phen_id.txt'), index_p, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'cov_id.txt'), index_c, fmt='%s') + if len(common_id) == 0: + exit(0) + + return [index_g, index_p, index_c], np.array(common_id) + + +# @timing +def merge_genotype(genotype, SNPs_index, mapper, flip_flag=True): + if SNPs_index is None: + gen = genotype[0].get_next() + if gen is not None: + for i in range(1, len(genotype)): + gen = np.hstack((gen, genotype[i].get_next())) + return gen + else: + if len(genotype) != len(SNPs_index): + raise ValueError('There are not equal number of genotypes and SNPs indexes {}!={}'.format(len(genotype), + len(SNPs_index))) + gen = np.zeros((len(SNPs_index[0]), np.sum([i.folder._data.id.shape[0] for i in genotype]))) + a, b = 0, genotype[0].folder._data.id.shape[0] + gen[:, a:b] = genotype[0].get(SNPs_index[0], impute=mapper.encoded.get(genotype[0].folder.name, 0)) + a = b + print(gen.shape) + if flip_flag: + if not mapper.encoded.get(genotype[0].folder.name, 0): + flip = mapper.flip[genotype[0].folder.name][SNPs_index[0]] + flip_index = (flip == -1) + gen = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, gen) + for i in range(1, len(genotype)): + g = genotype[i].get(SNPs_index[i], impute=mapper.encoded.get(genotype[i].folder.name, 0)) + print(g.shape) + b += g.shape[1] + if flip_flag: + if not mapper.encoded.get(genotype[i].folder.name, 0): + flip = mapper.flip[genotype[i].folder.name][SNPs_index[i]] + flip_index = (flip == -1) + g = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, g) + + gen[:, a:b] = g + a = b + + return gen def check_converter(converted_folder, study_name): - l_ind = os.listdir( os.path.join(converted_folder, 'individuals') ) - l_probes = os.listdir(os.path.join(converted_folder, 'probes')) - l_genotype = os.listdir(os.path.join(converted_folder, 'genotype')) - - if os.path.isdir(os.path.join(converted_folder, 'tmp_files')): - l_tmp=os.listdir(os.path.join(converted_folder, 'tmp_files')) - if len(l_tmp)==0: - print ('There is no tmp files!') - else: - try: - df_tmp=pd.read_csv( os.path.join(converted_folder, 'tmp_files', 'info.txt') , header=None) - except: - df_tmp=None - - else: - df_tmp=None - - if len(l_ind)!=1 or '.h5' not in l_ind[0]: - print ('There should be 1 hdf5 file in individuals folder!') - - else: - df_ind = pd.read_hdf(os.path.join(converted_folder, 'individuals',study_name + '.h5'),'individuals') - if df_tmp is not None and int(df_tmp[0][0])!=df_ind.shape[0]: - print(('Converted number of IDs {} != {} original number'.format( df_ind.shape[0] , df_tmp[0][0] ))) - else: - print(('Number of individuals {} '.format(df_ind.shape[0]))) - print(df_ind.head()) - - if len(l_probes)!=2: - print(('There should be 2 files in probes folder, you have {}!'.format(len(l_probes)))) - probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') - N_probs = probes.get_storer('probes').nrows - - else: - probes = pd.HDFStore(os.path.join(converted_folder, 'probes',study_name + '.h5'), 'r') - N_probs=probes.get_storer('probes').nrows - - if df_tmp is not None and int(df_tmp[0][1])!=N_probs: - print(("Converted number of variants {} diff from original number {}".format(N_probs,df_tmp[0][1] ))) - - else: - print(('Converted number of variants {}'.format(N_probs))) - - print(probes.select('probes', start=0, stop=10)) - probes.close() - - if len(l_genotype)==0: - print('There is no genotype data converted!') - else: - index = 0 - for i in l_genotype: - n, m = h5py.File(os.path.join(converted_folder, 'genotype',i), 'r')['genotype'].shape - index += n - - if index!=N_probs: - print(('Number of variants in genotype folder {} != {} number in probes file'.format(index, N_probs))) - - else: - print(('Number of variants in genotype folder {}'.format(index))) - - print(h5py.File(os.path.join(converted_folder, 'genotype',l_genotype[0]), 'r')['genotype'][...]) - - -if __name__=='__main__': - print('tools') - - + l_ind = os.listdir(os.path.join(converted_folder, 'individuals')) + l_probes = os.listdir(os.path.join(converted_folder, 'probes')) + l_genotype = os.listdir(os.path.join(converted_folder, 'genotype')) + + if os.path.isdir(os.path.join(converted_folder, 'tmp_files')): + l_tmp = os.listdir(os.path.join(converted_folder, 'tmp_files')) + if len(l_tmp) == 0: + print('There is no tmp files!') + else: + try: + df_tmp = pd.read_csv(os.path.join(converted_folder, 'tmp_files', 'info.txt'), header=None) + except: + df_tmp = None + + else: + df_tmp = None + + if len(l_ind) != 1 or '.h5' not in l_ind[0]: + print('There should be 1 hdf5 file in individuals folder!') + + else: + df_ind = pd.read_hdf(os.path.join(converted_folder, 'individuals', study_name + '.h5'), 'individuals') + if df_tmp is not None and int(df_tmp[0][0]) != df_ind.shape[0]: + print(('Converted number of IDs {} != {} original number'.format(df_ind.shape[0], df_tmp[0][0]))) + else: + print(('Number of individuals {} '.format(df_ind.shape[0]))) + print(df_ind.head()) + + if len(l_probes) != 2: + print(('There should be 2 files in probes folder, you have {}!'.format(len(l_probes)))) + probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') + N_probs = probes.get_storer('probes').nrows + + else: + probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') + N_probs = probes.get_storer('probes').nrows + + if df_tmp is not None and int(df_tmp[0][1]) != N_probs: + print(("Converted number of variants {} diff from original number {}".format(N_probs, df_tmp[0][1]))) + + else: + print(('Converted number of variants {}'.format(N_probs))) + + print(probes.select('probes', start=0, stop=10)) + probes.close() + + if len(l_genotype) == 0: + print('There is no genotype data converted!') + else: + index = 0 + for i in l_genotype: + n, m = h5py.File(os.path.join(converted_folder, 'genotype', i), 'r')['genotype'].shape + index += n + + if index != N_probs: + print(('Number of variants in genotype folder {} != {} number in probes file'.format(index, N_probs))) + + else: + print(('Number of variants in genotype folder {}'.format(index))) + + print(h5py.File(os.path.join(converted_folder, 'genotype', l_genotype[0]), 'r')['genotype'][...]) + + +if __name__ == '__main__': + print('tools') diff --git a/utils/hase/hase-master/setup.py b/utils/hase/hase-master/setup.py index 0bb9f76..fc4fbf2 100644 --- a/utils/hase/hase-master/setup.py +++ b/utils/hase/hase-master/setup.py @@ -1,7 +1,7 @@ #!/usr/bin/python import os, subprocess, sys -f=open('requirements.txt') -p=f.readlines() -for i in [j.split('\n')[0] for j in p ]: - subprocess.call(['pip', 'install', i]) \ No newline at end of file +f = open('requirements.txt') +p = f.readlines() +for i in [j.split('\n')[0] for j in p]: + subprocess.call(['pip', 'install', i]) diff --git a/utils/hase/hase-master/tools/VCF2hdf5.py b/utils/hase/hase-master/tools/VCF2hdf5.py index 2b8d92c..4d48f60 100644 --- a/utils/hase/hase-master/tools/VCF2hdf5.py +++ b/utils/hase/hase-master/tools/VCF2hdf5.py @@ -1,10 +1,11 @@ - import os import sys + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils.hase.config import PYTHON_PATH + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import argparse import h5py import pandas as pd @@ -14,93 +15,90 @@ import glob -def probes_VCF2hdf5(data_path, save_path,study_name, chunk_size=1000000): - - if os.path.isfile(os.path.join(save_path,'probes',study_name+'.h5')): - os.remove(os.path.join(save_path,'probes',study_name+'.h5')) - - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - - df=pd.read_csv(data_path,sep='\t',chunksize=chunk_size, header=None,index_col=None) - for i,chunk in enumerate(df): - print('add chunk {}'.format(i)) - print(chunk.head()) - chunk.columns=[ "CHR","bp" ,"ID",'allele1','allele2','QUAL','FILTER','INFO'] #TODO (high) parse INFO - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - chunk.to_hdf(os.path.join(save_path,'probes',study_name+'.h5'),data_columns=["CHR","bp" ,"ID",'allele1','allele2'], key='probes',format='table',append=True, - min_itemsize = 25, complib='zlib',complevel=9 ) - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path,'probes',study_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - -def ind_VCF2hdf5(data_path, save_path,study_name): - - if os.path.isfile(os.path.join(save_path,'individuals',study_name+'.h5')): - os.remove(os.path.join(save_path,'individuals',study_name+'.h5')) - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - n.append((j[:-1])) - f.close() - n=np.array(n) - chunk=pd.DataFrame.from_dict({"individual":n}) - chunk.to_hdf(os.path.join(save_path,'individuals',study_name+'.h5'), key='individuals',format='table', - min_itemsize = 25, complib='zlib',complevel=9 ) - -def genotype_VCF2hdf5(data_path,id, save_path, study_name): - - - df=pd.read_csv(data_path, header=None, index_col=None,sep='\t', dtype=np.float16) - data=df.as_matrix() - print(data.shape) - print('Saving chunk...{}'.format(os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'), 'w', title=study_name) - - atom = tables.Float16Atom() - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=tables.Filters(complevel=9, complib='zlib')) - genotype[:] = data - h5_gen_file.close() - os.remove(data_path) - - -if __name__=="__main__": - - parser = argparse.ArgumentParser(description='Script to convert VCF data') - parser.add_argument("-study_name", required=True, type=str, help="Study specific name") - parser.add_argument("-id", type=str, help="subject id") - parser.add_argument("-data",required=True, type=str, help="path to file") - parser.add_argument("-out",required=True, type=str, help="path to results save folder") - parser.add_argument("-flag",required=True,type=str,choices=['individuals','probes','chunk'], help="path to file with SNPs info") - - - args = parser.parse_args() - - print(args) - try: - print ('Creating directories...') - os.mkdir(os.path.join(args.out,'genotype') ) - os.mkdir(os.path.join(args.out,'individuals') ) - os.mkdir(os.path.join(args.out,'probes') ) - os.mkdir(os.path.join(args.out,'tmp_files')) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) - - if args.flag=='probes': - probes_VCF2hdf5(args.data, args.out, args.study_name) - elif args.flag=='individuals': - ind_VCF2hdf5(args.data, args.out,args.study_name) - elif args.flag=='chunk': - genotype_VCF2hdf5(args.data,args.id, args.out,args.study_name) - - - +def probes_VCF2hdf5(data_path, save_path, study_name, chunk_size=1000000): + if os.path.isfile(os.path.join(save_path, 'probes', study_name + '.h5')): + os.remove(os.path.join(save_path, 'probes', study_name + '.h5')) + + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + + df = pd.read_csv(data_path, sep='\t', chunksize=chunk_size, header=None, index_col=None) + for i, chunk in enumerate(df): + print('add chunk {}'.format(i)) + print(chunk.head()) + chunk.columns = ["CHR", "bp", "ID", 'allele1', 'allele2', 'QUAL', 'FILTER', 'INFO'] # TODO (high) parse INFO + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + chunk.to_hdf(os.path.join(save_path, 'probes', study_name + '.h5'), + data_columns=["CHR", "bp", "ID", 'allele1', 'allele2'], key='probes', format='table', append=True, + min_itemsize=25, complib='zlib', complevel=9) + pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path, 'probes', study_name + '_hash_table.csv.gz'), + index=False, compression='gzip', sep='\t') + + +def ind_VCF2hdf5(data_path, save_path, study_name): + if os.path.isfile(os.path.join(save_path, 'individuals', study_name + '.h5')): + os.remove(os.path.join(save_path, 'individuals', study_name + '.h5')) + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + n.append((j[:-1])) + f.close() + n = np.array(n) + chunk = pd.DataFrame.from_dict({"individual": n}) + chunk.to_hdf(os.path.join(save_path, 'individuals', study_name + '.h5'), key='individuals', format='table', + min_itemsize=25, complib='zlib', complevel=9) + + +def genotype_VCF2hdf5(data_path, id, save_path, study_name): + df = pd.read_csv(data_path, header=None, index_col=None, sep='\t', dtype=np.float16) + data = df.as_matrix() + print(data.shape) + print('Saving chunk...{}'.format(os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'), 'w', title=study_name) + + atom = tables.Float16Atom() + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=tables.Filters(complevel=9, complib='zlib')) + genotype[:] = data + h5_gen_file.close() + os.remove(data_path) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Script to convert VCF data') + parser.add_argument("-study_name", required=True, type=str, help="Study specific name") + parser.add_argument("-id", type=str, help="subject id") + parser.add_argument("-data", required=True, type=str, help="path to file") + parser.add_argument("-out", required=True, type=str, help="path to results save folder") + parser.add_argument("-flag", required=True, type=str, choices=['individuals', 'probes', 'chunk'], + help="path to file with SNPs info") + + args = parser.parse_args() + + print(args) + try: + print('Creating directories...') + os.mkdir(os.path.join(args.out, 'genotype')) + os.mkdir(os.path.join(args.out, 'individuals')) + os.mkdir(os.path.join(args.out, 'probes')) + os.mkdir(os.path.join(args.out, 'tmp_files')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) + + if args.flag == 'probes': + probes_VCF2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'individuals': + ind_VCF2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'chunk': + genotype_VCF2hdf5(args.data, args.id, args.out, args.study_name) diff --git a/utils/hase/hase-master/tools/addProbesInfo.py b/utils/hase/hase-master/tools/addProbesInfo.py index 2ce8675..dff68d7 100644 --- a/utils/hase/hase-master/tools/addProbesInfo.py +++ b/utils/hase/hase-master/tools/addProbesInfo.py @@ -7,64 +7,61 @@ import tables import argparse - parser = argparse.ArgumentParser(description='') parser.add_argument("-i", type=str, required=True, help="path to results file") parser.add_argument("-p", type=str, required=True, help="path to probes file") parser.add_argument("-o", type=str, required=True, help="path to output folder") -parser.add_argument("-split_ph", action='store_true', default=False, help="flag to split result in separate files per phenotype") +parser.add_argument("-split_ph", action='store_true', default=False, + help="flag to split result in separate files per phenotype") parser.add_argument("-chunk", type=int, default=1000000, help="chunk size to read results file") args = parser.parse_args() - -store=pd.HDFStore(args.p,'r') -df_probes_tmp=store.select('probes',start=0, stop=1) -probes_columns=df_probes_tmp.columns +store = pd.HDFStore(args.p, 'r') +df_probes_tmp = store.select('probes', start=0, stop=1) +probes_columns = df_probes_tmp.columns if 'Rsq' in probes_columns: - probes_columns=['ID','Rsq','allele1', 'allele2'] + probes_columns = ['ID', 'Rsq', 'allele1', 'allele2'] else: probes_columns = ['ID', 'allele1', 'allele2'] - -df_probes=store.select('probes',columns=probes_columns) +df_probes = store.select('probes', columns=probes_columns) print('Probes shape {}'.format(df_probes.shape)) -if os.path.isfile( args.p.split('.h5')[0] + '_hash_table.csv.gz'): +if os.path.isfile(args.p.split('.h5')[0] + '_hash_table.csv.gz'): try: - df_hash = pd.read_csv( args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', + df_hash = pd.read_csv(args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', compression='gzip', index_col=False) except: - df_hash = pd.read_csv( args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', + df_hash = pd.read_csv(args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', index_col=False) print('Hash table found!') - df_probes = pd.merge(df_probes,df_hash, right_on='keys', left_on='allele1') + df_probes = pd.merge(df_probes, df_hash, right_on='keys', left_on='allele1') df_probes['allele1'] = df_probes['allele'] del df_probes['allele'] - df_probes = pd.merge(df_probes,df_hash, right_on='keys', left_on='allele2') + df_probes = pd.merge(df_probes, df_hash, right_on='keys', left_on='allele2') df_probes['allele2'] = df_probes['allele'] - df_probes=df_probes[probes_columns] + df_probes = df_probes[probes_columns] else: print('Hash table is not found!!!') +df = pd.read_csv(args.i, compression='infer', sep=" ", chunksize=args.chunk) -df = pd.read_csv(args.i, compression='infer', sep=" ",chunksize=args.chunk ) - -phenotypes=[] -for i,df_chunk in enumerate(df): +phenotypes = [] +for i, df_chunk in enumerate(df): print('Chunk number {}'.format(i)) df_chunk = pd.merge(df_chunk, df_probes, left_on='RSID', right_on='ID') - df_chunk= df_chunk[probes_columns + [ 'MAF', 'BETA', 'SE', 'p_value', 'phenotype', 't-stat' ]] + df_chunk = df_chunk[probes_columns + ['MAF', 'BETA', 'SE', 'p_value', 'phenotype', 't-stat']] df_chunk.rename(columns={'MAF': 'AF_coded'}, inplace=True) if not args.split_ph: - hdr= False if os.path.isfile(os.path.join(args.o, os.path.basename(args.i))) else True + hdr = False if os.path.isfile(os.path.join(args.o, os.path.basename(args.i))) else True df_chunk.to_csv(os.path.join(args.o, os.path.basename(args.i)), sep=' ', index=None, mode='a', header=hdr) else: - phenotypes = np.unique( np.append( phenotypes, df_chunk.phenotype ) ) + phenotypes = np.unique(np.append(phenotypes, df_chunk.phenotype)) for ph in phenotypes: df_tmp = df_chunk.query('phenotype=={}'.format(ph)) - if df_tmp.shape[0]!=0: + if df_tmp.shape[0] != 0: hdr = False if os.path.isfile(os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i))) else True df_tmp[probes_columns + ['AF_coded', 'BETA', 'SE', 'p_value', 't-stat']].to_csv( - os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i)), sep=' ', index=None,mode='a', header=hdr) - + os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i)), sep=' ', index=None, mode='a', + header=hdr) diff --git a/utils/hase/hase-master/tools/analyzer.py b/utils/hase/hase-master/tools/analyzer.py index a668c8a..179abff 100644 --- a/utils/hase/hase-master/tools/analyzer.py +++ b/utils/hase/hase-master/tools/analyzer.py @@ -1,55 +1,55 @@ import sys import os + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from utils.hase.config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH -os.environ['HASEDIR']=basedir +from utils.hase.config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + +os.environ['HASEDIR'] = basedir if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import tables -from utils.hase.hdgwas.tools import Timer,HaseAnalyser, Reference +from utils.hase.hdgwas.tools import Timer, HaseAnalyser, Reference import argparse import pandas as pd import numpy as np from collections import OrderedDict - -if __name__=="__main__": - - os.environ['HASEDIR']=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - parser = argparse.ArgumentParser(description='Script analyse results of HASE') - parser.add_argument("-r", required=True,help="path to hase results") - parser.add_argument("-o", "--out", type=str, required=True,help="path to save result folder") - parser.add_argument("-df", type=float,default=None, help="degree of freedom = ( #subjects in study - #covariates - 1 )") - parser.add_argument("-N", type=int,default=None, help="file number to read") - #TODO (low) add reference panel - args = parser.parse_args() - Analyser=HaseAnalyser() - print(args) - - Analyser.DF=args.df - Analyser.result_path=args.r - Analyser.file_number = args.N - - results=OrderedDict() - results['RSID']=np.array([]) - results['p_value']=np.array([]) - results['t-stat']=np.array([]) - results['phenotype']=np.array([]) - results['SE']=np.array([]) - results['MAF']=np.array([]) - results['BETA'] = np.array([]) - - while True: - Analyser.summary() - if Analyser.results is None: - break - print('Saving data...') - if not os.path.exists(os.path.join(args.out,'results'+'.csv')): - df=pd.DataFrame.from_dict(results) - df.to_csv( os.path.join(args.out,'results'+'.csv'), sep=" ", index=None ) - df=pd.DataFrame.from_dict(Analyser.results) - with open(os.path.join(args.out,'results'+'.csv'), 'a') as f: - df.to_csv(f, sep=" ",header=False,index=None) - - +if __name__ == "__main__": + + os.environ['HASEDIR'] = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser = argparse.ArgumentParser(description='Script analyse results of HASE') + parser.add_argument("-r", required=True, help="path to hase results") + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + parser.add_argument("-df", type=float, default=None, + help="degree of freedom = ( #subjects in study - #covariates - 1 )") + parser.add_argument("-N", type=int, default=None, help="file number to read") + # TODO (low) add reference panel + args = parser.parse_args() + Analyser = HaseAnalyser() + print(args) + + Analyser.DF = args.df + Analyser.result_path = args.r + Analyser.file_number = args.N + + results = OrderedDict() + results['RSID'] = np.array([]) + results['p_value'] = np.array([]) + results['t-stat'] = np.array([]) + results['phenotype'] = np.array([]) + results['SE'] = np.array([]) + results['MAF'] = np.array([]) + results['BETA'] = np.array([]) + + while True: + Analyser.summary() + if Analyser.results is None: + break + print('Saving data...') + if not os.path.exists(os.path.join(args.out, 'results' + '.csv')): + df = pd.DataFrame.from_dict(results) + df.to_csv(os.path.join(args.out, 'results' + '.csv'), sep=" ", index=None) + df = pd.DataFrame.from_dict(Analyser.results) + with open(os.path.join(args.out, 'results' + '.csv'), 'a') as f: + df.to_csv(f, sep=" ", header=False, index=None) diff --git a/utils/hase/hase-master/tools/fix_pheno_id.py b/utils/hase/hase-master/tools/fix_pheno_id.py index db51477..e8ed203 100644 --- a/utils/hase/hase-master/tools/fix_pheno_id.py +++ b/utils/hase/hase-master/tools/fix_pheno_id.py @@ -4,49 +4,46 @@ import sys import argparse - parser = argparse.ArgumentParser(description='Script to edit phenotypes ids for HASE') -parser.add_argument("-i",required=True, type=str, help="path to nparrays of phenotypes") -parser.add_argument("-ids",type=str, help="path to one column data frame without headers" - "with a list of ids to exclude from analysis") -parser.add_argument("-out",required=True, type=str, help="path to save new phenotypes") +parser.add_argument("-i", required=True, type=str, help="path to nparrays of phenotypes") +parser.add_argument("-ids", type=str, help="path to one column data frame without headers" + "with a list of ids to exclude from analysis") +parser.add_argument("-out", required=True, type=str, help="path to save new phenotypes") args = parser.parse_args() print(args) -df_path=args.ids -pheno_path=args.i -out_path=args.out +df_path = args.ids +pheno_path = args.i +out_path = args.out if not os.path.isdir(out_path): print("Creating directory {}".format(out_path)) os.mkdir(out_path) else: - if len(os.listdir(out_path))!=0: + if len(os.listdir(out_path)) != 0: raise ValueError('Output folder is not empty!') print("Crating soft link for original pheno files in {}".format(out_path)) - for i in os.listdir(pheno_path): if 'info_dic' not in i: - os.symlink(os.path.join(pheno_path,i) , os.path.join(out_path,i) ) - + os.symlink(os.path.join(pheno_path, i), os.path.join(out_path, i)) -info_dic=np.load(os.path.join(pheno_path, 'info_dic.npy' ) ).item() +info_dic = np.load(os.path.join(pheno_path, 'info_dic.npy')).item() -df=pd.read_csv(df_path,header=None, sep=',') -df.columns=['ID'] -df['ID']=df.ID.astype('str') +df = pd.read_csv(df_path, header=None, sep=',') +df.columns = ['ID'] +df['ID'] = df.ID.astype('str') -index=pd.Series(info_dic['id']).isin(df.ID) -index=np.where(index==True)[0] +index = pd.Series(info_dic['id']).isin(df.ID) +index = np.where(index == True)[0] -if len(index)!=0: +if len(index) != 0: print('There are {} ids to remove!'.format(len(index))) - for i in index: - info_dic['id'][i]= "remove_"+ info_dic['id'][i] + for i in index: + info_dic['id'][i] = "remove_" + info_dic['id'][i] else: print('No ids to remove!') - -np.save(os.path.join(out_path,'info_dic.npy'),info_dic) + +np.save(os.path.join(out_path, 'info_dic.npy'), info_dic) diff --git a/utils/hase/hase-master/tools/generator.py b/utils/hase/hase-master/tools/generator.py index 16bac57..b2c6511 100644 --- a/utils/hase/hase-master/tools/generator.py +++ b/utils/hase/hase-master/tools/generator.py @@ -3,15 +3,11 @@ import argparse import numpy as np - - - parser = argparse.ArgumentParser(description='Script to generate data') -parser.add_argument('-type', type=str,required=True, choices=['phenotype'], +parser.add_argument('-type', type=str, required=True, choices=['phenotype'], help=' Choose what kind of data do you want to generate') - parser.add_argument("-s", type=int, help="number of subject") parser.add_argument("-ph", type=int, help="number of phenotypes") parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") @@ -20,6 +16,6 @@ args = parser.parse_args() print(args) -def random_phenotype(Ns,Np): - pass +def random_phenotype(Ns, Np): + pass diff --git a/utils/hase/hase-master/tools/make_hase_phen.py b/utils/hase/hase-master/tools/make_hase_phen.py index 191a6ca..b820a84 100644 --- a/utils/hase/hase-master/tools/make_hase_phen.py +++ b/utils/hase/hase-master/tools/make_hase_phen.py @@ -5,44 +5,45 @@ import gc parser = argparse.ArgumentParser(description='Make phenotype folder ready for HASE analysis') -parser.add_argument("-i",required=True, type=str, help="path to nparrays") -parser.add_argument("-id",type=str, help="csv data frame with two columns:" - "1)id: ids identical to ids in genotype data" - "2) exclude: 1 if exclude, 0 if include to analysis") +parser.add_argument("-i", required=True, type=str, help="path to nparrays") +parser.add_argument("-id", type=str, help="csv data frame with two columns:" + "1)id: ids identical to ids in genotype data" + "2) exclude: 1 if exclude, 0 if include to analysis") args = parser.parse_args() print(args) - -df=pd.read_csv(args.id, index_col=0) +df = pd.read_csv(args.id, index_col=0) print(df.head()) -subject_id=[] +subject_id = [] for i in df.iterrows(): - if i[1].exclude==1: - subject_id.append('remove_'+str(i[1].id)) + if i[1].exclude == 1: + subject_id.append('remove_' + str(i[1].id)) else: subject_id.append(str(i[1].id)) -dic={} -dic['id']=subject_id +dic = {} +dic['id'] = subject_id -files=os.listdir(args.i) +files = os.listdir(args.i) for f in files: print(f) - if f.split('.')[-1]!='npy': - raise ValueError('In {} should be only nparrays, not {}'.format(args.i,f)) - - d=np.load(os.path.join(args.i,f)) - ch=f.split('_')[0].split('reg')[1] - index=f.split('_')[1].split('.npy')[0] - n,m=d.shape - if n!=len(subject_id): - raise ValueError('Number of ids {} from data frame not equal to number of ids {} from file {} '.format(len(subject_id),n,f)) - dic[f]=[ch+"_"+index+"_"+str(i) for i in range(m)] - d=None + if f.split('.')[-1] != 'npy': + raise ValueError('In {} should be only nparrays, not {}'.format(args.i, f)) + + d = np.load(os.path.join(args.i, f)) + ch = f.split('_')[0].split('reg')[1] + index = f.split('_')[1].split('.npy')[0] + n, m = d.shape + if n != len(subject_id): + raise ValueError( + 'Number of ids {} from data frame not equal to number of ids {} from file {} '.format(len(subject_id), n, + f)) + dic[f] = [ch + "_" + index + "_" + str(i) for i in range(m)] + d = None gc.collect() -np.save(os.path.join(args.i,'info_dic.npy'),dic) \ No newline at end of file +np.save(os.path.join(args.i, 'info_dic.npy'), dic) diff --git a/utils/hase/hase-master/tools/mapper.py b/utils/hase/hase-master/tools/mapper.py index 6beb105..24559d3 100644 --- a/utils/hase/hase-master/tools/mapper.py +++ b/utils/hase/hase-master/tools/mapper.py @@ -1,9 +1,11 @@ import sys import os + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils.hase.config import * + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import pandas as pd import numpy as np @@ -12,232 +14,236 @@ from utils.hase.hdgwas.hash import * import gc -if __name__=='__main__': - - os.environ['HASEDIR']=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - parser = argparse.ArgumentParser(description='Script to map studies for meta-stage') - parser.add_argument("-g",required=True, type=str, help="path/paths to genotype data folder") - parser.add_argument('-study_name',type=str,required=True, default=None, help=' Study names') - parser.add_argument("-o", "--out", type=str,required=True, help="path to save result folder") - parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') - parser.add_argument('-mismatch_table',action='store_true',default=False, help='Save table with mismatch IDs') - parser.add_argument('-flipped_table',action='store_true',default=False, help='Save table with mismatch IDs') - parser.add_argument('-probe_chunk',type=int,default=10000, help='Probes chunk') - parser.add_argument('-ref_chunk',type=int,default=10000, help='Reference chunk') - parser.add_argument('-chunk',type=int,default=2000000, help='Chunk size') - args = parser.parse_args() - print(args) - - try: - print ('Creating directories...') - os.mkdir(args.out) - except: - print(('Directory {} is already exist!'.format(args.out))) - - probes=pd.HDFStore(os.path.join(args.g,'probes', args.study_name+'.h5'),'r') - probes_n_rows=probes.get_storer('probes').nrows - chunk_size = np.min([args.chunk,probes_n_rows]) - - print(('Merge chunk size {}'.format(chunk_size))) - match_key=np.array([],dtype=np.int32) - match_index=np.array([],dtype=np.int32) - flip_key=np.array([],dtype=np.int32) - flip_index=np.array([],dtype=np.int32) - ID=np.array([]) - - del_counter_ref={} - ID2CHR=False - IDconv=False - hashing=False - merge_on={ - 'ID':{ - 'straight':["ID",'allele1','allele2'], - 'reverse':["ID",'allele2','allele1'] - }, - - 'CHR':{ - 'straight':["CHR",'bp','allele1','allele2'], - 'reverse':["CHR",'bp','allele2','allele1'] - - } - } - - for p in range(int(np.ceil(probes_n_rows / float(chunk_size)))): - print('p',p) - - p_start_i = p * chunk_size - p_stop_i = min((p + 1) * chunk_size, probes_n_rows) - - a = probes.select('probes', start = p_start_i, stop = p_stop_i) - - if p==0: - print(a.head()) - if issubclass(type(a.iloc[0]['allele1']), np.str): - hashing=True - if "CHR" in a.columns and 'bp' in a.columns: - ID2CHR=True - merge=merge_on['CHR'] - print ('Merge on CHR/bp') - else: - if ':' in a.ID.iloc[0] and ':' in a.ID.iloc[1]: - CHR=[] - bp=[] - for i in a.ID: - s=i.split(":") - CHR.append(s[0]) - bp.append(s[1]) - CHR=np.array(CHR,dtype=np.int8) - bp=np.array(bp) - if np.max(CHR)<23 and np.min(CHR)>0: - a['CHR']=CHR - a['bp']=bp - a.CHR = a.CHR.astype(np.int64) - a.bp = a.bp.astype(np.int64) - ID2CHR=True - IDconv=True - merge=merge_on['CHR'] - print ('Merge on CHR/bp from ID') - print(a.head()) - else: - print('No CHR and bp info...') - merge=merge_on['ID'] - print ('Merge on ID') - else: - print('No CHR and bp info...') - merge=merge_on['ID'] - print ('Merge on ID') - - elif IDconv: - def f(x): - s=x.ID.split(':') - return s[0],s[1] - CHR_bp=a.apply(f, axis=1 ) - a['CHR'],a['bp']=list(zip(*CHR_bp)) - a.CHR=a.CHR.astype(np.int64) - a.bp= a.bp.astype(np.int64) - print(a.head()) - a['counter_prob']=np.arange(p_start_i,p_stop_i,dtype='int32') - - reference=Reference() - reference.name=args.ref_name - reference.chunk=args.ref_chunk - reference.load() - counter_ref=0 - if hashing: - print('Hashing...') - a.allele1=a.allele1.apply(hash) - a.allele2=a.allele2.apply(hash) - for r,b in enumerate(reference.dataframe): - if r==0: - if np.sum(np.array([ 1 if i in reference.columns else 0 for i in b.columns.tolist() ]))!=len(reference.columns): - raise ValueError('Reference table should have {} columns'.format(reference.columns)) - if r==0 and p==0: - print ('********************************') - print(('Use {} as a reference panel'.format(args.ref_name))) - print(b.head()) - print ('********************************') - - print('r',r) - if p==0: - ID=np.append(ID,b.ID) - - b['counter_ref']=np.arange(counter_ref,counter_ref+b.shape[0],dtype='int32') - counter_ref+=b.shape[0] - - if len(match_index) or len(flip_index): - print('matched {}'.format(match_index.shape[0])) - print('flipped {}'.format(flip_index.shape[0])) - if del_counter_ref.get(r) is not None: - with Timer() as t: - b=b[~b.counter_ref.isin(del_counter_ref[r])] - print('time {}'.format(t.secs)) - - match_df = pd.merge(b,a, left_on=merge['straight'], right_on=merge['straight']) - flip_df=pd.merge(b[~b.counter_ref.isin(match_df.counter_ref)],a, left_on=merge['reverse'], right_on=merge['straight']) - - if len(match_df): - match_key=np.append(match_key,match_df.counter_ref) - match_index=np.append(match_index,match_df.counter_prob) - if del_counter_ref.get(r) is None: - del_counter_ref[r]=match_key - else: - del_counter_ref[r]=np.append(del_counter_ref[r], match_key) - if len(flip_df): - flip_key=np.append(flip_key,flip_df.counter_ref) - flip_index=np.append(flip_index,flip_df.counter_prob) - if del_counter_ref.get(r) is None: - del_counter_ref[r]=flip_key - else: - del_counter_ref[r]=np.append(del_counter_ref[r], flip_key) - gc.collect() - - index=np.ones(ID.shape[0],dtype='int')*-1 - flip=np.ones(probes_n_rows,dtype='int') - index[match_key]=match_index - index[flip_key]=flip_index - flip[flip_index]=-1 - print(('Saving results for {} to {} ...'.format(args.study_name,args.out))) - np.save(os.path.join(args.out,'values_'+reference.name+'_'+args.study_name+'.npy'),index) - np.save(os.path.join(args.out,'flip_'+reference.name+'_'+args.study_name+'.npy'),flip) - np.save(os.path.join(args.out,'keys_'+reference.name+'.npy'),ID) - print ('Data successfully saved') - - mismatch_index=np.setdiff1d(np.arange(probes_n_rows),np.append(match_index,flip_index) ) - - if os.path.isfile(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz')): - try: - df_hash=pd.read_csv(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz'),sep='\t', compression='gzip', index_col=False) - except: - df_hash=pd.read_csv(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz'),sep='\t', index_col=False) - - - else: - df_hash=None - print(('You do not have hash_table for alleles in your probes folder! ' - 'You used old version of HASE to convert your genotype data.' - 'To see original codes for allele you can make hash_table using script' - '{}/tools/tools.py -hash -g "original genotype folder" '.format(os.environ['HASEDIR']))) - - print('There are {} common variances with reference panel, which will be included in study'.format(np.where(index!=-1)[0].shape[0] )) - print('There are {} variances from reference panel, which were not found in probes'.format(np.where(index==-1)[0].shape[0] )) - print('There are {} variances excluded from study (not found in reference panel)'.format( probes_n_rows-np.where(index!=-1)[0].shape[0] )) - if args.mismatch_table and mismatch_index.shape[0]!=0: - df_mismatch=probes.select('probes',where=mismatch_index) - if df_hash is not None and not hashing: - df_mismatch=pd.merge(df_hash,df_mismatch,left_on='keys', right_on='allele1') - df_mismatch['str_allele1']=df_mismatch['allele'] - del df_mismatch['allele'] - df_mismatch=pd.merge(df_hash,df_mismatch,left_on='keys', right_on='allele2') - df_mismatch['str_allele2']=df_mismatch['allele'] - del df_mismatch['allele'] - del df_mismatch['keys_x'] - del df_mismatch['keys_y'] - df_mismatch.to_csv(os.path.join(args.out,'mismatch_ID_info.csv')) - print('Mismatch ID info saved to {}'.format(os.path.join(args.out,args.study_name+'_mismatch_ID_info.csv'))) - elif mismatch_index.shape[0]!=0: - print ('Mismatch examples:') - print(probes.select('probes',where=mismatch_index[:10])) - - print('There are {} flipped variances'.format(len(flip_index))) - if args.flipped_table and flip_index.shape[0]!=0: - df_flipped=probes.select('probes',where=flip_index) - if df_hash is not None and not hashing: - df_flipped=pd.merge(df_hash,df_flipped,left_on='keys', right_on='allele1') - df_flipped['str_allele1']=df_flipped['allele'] - del df_flipped['allele'] - df_flipped=pd.merge(df_hash,df_flipped,left_on='keys', right_on='allele2') - df_flipped['str_allele2']=df_flipped['allele'] - del df_flipped['allele'] - del df_flipped['keys_x'] - del df_flipped['keys_y'] - df_flipped.to_csv(os.path.join(args.out,'flipped_ID_info.csv')) - print('Flipped ID info saved to {}'.format(os.path.join(args.out,args.study_name + '_flipped_ID_info.csv'))) - elif flip_index.shape[0]!=0: - print ('Flipped examples:') - print(probes.select('probes',where=flip_index[:10])) - - - - - +if __name__ == '__main__': + + os.environ['HASEDIR'] = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + parser = argparse.ArgumentParser(description='Script to map studies for meta-stage') + parser.add_argument("-g", required=True, type=str, help="path/paths to genotype data folder") + parser.add_argument('-study_name', type=str, required=True, default=None, help=' Study names') + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') + parser.add_argument('-mismatch_table', action='store_true', default=False, help='Save table with mismatch IDs') + parser.add_argument('-flipped_table', action='store_true', default=False, help='Save table with mismatch IDs') + parser.add_argument('-probe_chunk', type=int, default=10000, help='Probes chunk') + parser.add_argument('-ref_chunk', type=int, default=10000, help='Reference chunk') + parser.add_argument('-chunk', type=int, default=2000000, help='Chunk size') + args = parser.parse_args() + print(args) + + try: + print('Creating directories...') + os.mkdir(args.out) + except: + print(('Directory {} is already exist!'.format(args.out))) + + probes = pd.HDFStore(os.path.join(args.g, 'probes', args.study_name + '.h5'), 'r') + probes_n_rows = probes.get_storer('probes').nrows + chunk_size = np.min([args.chunk, probes_n_rows]) + + print(('Merge chunk size {}'.format(chunk_size))) + match_key = np.array([], dtype=np.int32) + match_index = np.array([], dtype=np.int32) + flip_key = np.array([], dtype=np.int32) + flip_index = np.array([], dtype=np.int32) + ID = np.array([]) + + del_counter_ref = {} + ID2CHR = False + IDconv = False + hashing = False + merge_on = { + 'ID': { + 'straight': ["ID", 'allele1', 'allele2'], + 'reverse': ["ID", 'allele2', 'allele1'] + }, + + 'CHR': { + 'straight': ["CHR", 'bp', 'allele1', 'allele2'], + 'reverse': ["CHR", 'bp', 'allele2', 'allele1'] + + } + } + + for p in range(int(np.ceil(probes_n_rows / float(chunk_size)))): + print('p', p) + + p_start_i = p * chunk_size + p_stop_i = min((p + 1) * chunk_size, probes_n_rows) + + a = probes.select('probes', start=p_start_i, stop=p_stop_i) + + if p == 0: + print(a.head()) + if issubclass(type(a.iloc[0]['allele1']), np.str): + hashing = True + if "CHR" in a.columns and 'bp' in a.columns: + ID2CHR = True + merge = merge_on['CHR'] + print('Merge on CHR/bp') + else: + if ':' in a.ID.iloc[0] and ':' in a.ID.iloc[1]: + CHR = [] + bp = [] + for i in a.ID: + s = i.split(":") + CHR.append(s[0]) + bp.append(s[1]) + CHR = np.array(CHR, dtype=np.int8) + bp = np.array(bp) + if np.max(CHR) < 23 and np.min(CHR) > 0: + a['CHR'] = CHR + a['bp'] = bp + a.CHR = a.CHR.astype(np.int64) + a.bp = a.bp.astype(np.int64) + ID2CHR = True + IDconv = True + merge = merge_on['CHR'] + print('Merge on CHR/bp from ID') + print(a.head()) + else: + print('No CHR and bp info...') + merge = merge_on['ID'] + print('Merge on ID') + else: + print('No CHR and bp info...') + merge = merge_on['ID'] + print('Merge on ID') + + elif IDconv: + def f(x): + s = x.ID.split(':') + return s[0], s[1] + + + CHR_bp = a.apply(f, axis=1) + a['CHR'], a['bp'] = list(zip(*CHR_bp)) + a.CHR = a.CHR.astype(np.int64) + a.bp = a.bp.astype(np.int64) + print(a.head()) + a['counter_prob'] = np.arange(p_start_i, p_stop_i, dtype='int32') + + reference = Reference() + reference.name = args.ref_name + reference.chunk = args.ref_chunk + reference.load() + counter_ref = 0 + if hashing: + print('Hashing...') + a.allele1 = a.allele1.apply(hash) + a.allele2 = a.allele2.apply(hash) + for r, b in enumerate(reference.dataframe): + if r == 0: + if np.sum(np.array([1 if i in reference.columns else 0 for i in b.columns.tolist()])) != len( + reference.columns): + raise ValueError('Reference table should have {} columns'.format(reference.columns)) + if r == 0 and p == 0: + print('********************************') + print(('Use {} as a reference panel'.format(args.ref_name))) + print(b.head()) + print('********************************') + + print('r', r) + if p == 0: + ID = np.append(ID, b.ID) + + b['counter_ref'] = np.arange(counter_ref, counter_ref + b.shape[0], dtype='int32') + counter_ref += b.shape[0] + + if len(match_index) or len(flip_index): + print('matched {}'.format(match_index.shape[0])) + print('flipped {}'.format(flip_index.shape[0])) + if del_counter_ref.get(r) is not None: + with Timer() as t: + b = b[~b.counter_ref.isin(del_counter_ref[r])] + print('time {}'.format(t.secs)) + + match_df = pd.merge(b, a, left_on=merge['straight'], right_on=merge['straight']) + flip_df = pd.merge(b[~b.counter_ref.isin(match_df.counter_ref)], a, left_on=merge['reverse'], + right_on=merge['straight']) + + if len(match_df): + match_key = np.append(match_key, match_df.counter_ref) + match_index = np.append(match_index, match_df.counter_prob) + if del_counter_ref.get(r) is None: + del_counter_ref[r] = match_key + else: + del_counter_ref[r] = np.append(del_counter_ref[r], match_key) + if len(flip_df): + flip_key = np.append(flip_key, flip_df.counter_ref) + flip_index = np.append(flip_index, flip_df.counter_prob) + if del_counter_ref.get(r) is None: + del_counter_ref[r] = flip_key + else: + del_counter_ref[r] = np.append(del_counter_ref[r], flip_key) + gc.collect() + + index = np.ones(ID.shape[0], dtype='int') * -1 + flip = np.ones(probes_n_rows, dtype='int') + index[match_key] = match_index + index[flip_key] = flip_index + flip[flip_index] = -1 + print(('Saving results for {} to {} ...'.format(args.study_name, args.out))) + np.save(os.path.join(args.out, 'values_' + reference.name + '_' + args.study_name + '.npy'), index) + np.save(os.path.join(args.out, 'flip_' + reference.name + '_' + args.study_name + '.npy'), flip) + np.save(os.path.join(args.out, 'keys_' + reference.name + '.npy'), ID) + print('Data successfully saved') + + mismatch_index = np.setdiff1d(np.arange(probes_n_rows), np.append(match_index, flip_index)) + + if os.path.isfile(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz')): + try: + df_hash = pd.read_csv(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz'), sep='\t', + compression='gzip', index_col=False) + except: + df_hash = pd.read_csv(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz'), sep='\t', + index_col=False) + + + else: + df_hash = None + print(('You do not have hash_table for alleles in your probes folder! ' + 'You used old version of HASE to convert your genotype data.' + 'To see original codes for allele you can make hash_table using script' + '{}/tools/tools.py -hash -g "original genotype folder" '.format(os.environ['HASEDIR']))) + + print('There are {} common variances with reference panel, which will be included in study'.format( + np.where(index != -1)[0].shape[0])) + print('There are {} variances from reference panel, which were not found in probes'.format( + np.where(index == -1)[0].shape[0])) + print('There are {} variances excluded from study (not found in reference panel)'.format( + probes_n_rows - np.where(index != -1)[0].shape[0])) + if args.mismatch_table and mismatch_index.shape[0] != 0: + df_mismatch = probes.select('probes', where=mismatch_index) + if df_hash is not None and not hashing: + df_mismatch = pd.merge(df_hash, df_mismatch, left_on='keys', right_on='allele1') + df_mismatch['str_allele1'] = df_mismatch['allele'] + del df_mismatch['allele'] + df_mismatch = pd.merge(df_hash, df_mismatch, left_on='keys', right_on='allele2') + df_mismatch['str_allele2'] = df_mismatch['allele'] + del df_mismatch['allele'] + del df_mismatch['keys_x'] + del df_mismatch['keys_y'] + df_mismatch.to_csv(os.path.join(args.out, 'mismatch_ID_info.csv')) + print('Mismatch ID info saved to {}'.format(os.path.join(args.out, args.study_name + '_mismatch_ID_info.csv'))) + elif mismatch_index.shape[0] != 0: + print('Mismatch examples:') + print(probes.select('probes', where=mismatch_index[:10])) + + print('There are {} flipped variances'.format(len(flip_index))) + if args.flipped_table and flip_index.shape[0] != 0: + df_flipped = probes.select('probes', where=flip_index) + if df_hash is not None and not hashing: + df_flipped = pd.merge(df_hash, df_flipped, left_on='keys', right_on='allele1') + df_flipped['str_allele1'] = df_flipped['allele'] + del df_flipped['allele'] + df_flipped = pd.merge(df_hash, df_flipped, left_on='keys', right_on='allele2') + df_flipped['str_allele2'] = df_flipped['allele'] + del df_flipped['allele'] + del df_flipped['keys_x'] + del df_flipped['keys_y'] + df_flipped.to_csv(os.path.join(args.out, 'flipped_ID_info.csv')) + print('Flipped ID info saved to {}'.format(os.path.join(args.out, args.study_name + '_flipped_ID_info.csv'))) + elif flip_index.shape[0] != 0: + print('Flipped examples:') + print(probes.select('probes', where=flip_index[:10])) diff --git a/utils/hase/hase-master/tools/merge_genotype.py b/utils/hase/hase-master/tools/merge_genotype.py index 9233b50..c607964 100644 --- a/utils/hase/hase-master/tools/merge_genotype.py +++ b/utils/hase/hase-master/tools/merge_genotype.py @@ -1,6 +1,6 @@ import sys import h5py -from utils.hase.hdgwas.tools import Timer,Mapper, merge_genotype +from utils.hase.hdgwas.tools import Timer, Mapper, merge_genotype import os from utils.hase.hdgwas.data import Reader import argparse @@ -8,92 +8,89 @@ import tables import numpy as np - - - parser = argparse.ArgumentParser(description='Script to merge genotype') -parser.add_argument("-g", "--genotype",nargs='+', type=str, help="path/paths to genotype data folder") +parser.add_argument("-g", "--genotype", nargs='+', type=str, help="path/paths to genotype data folder") parser.add_argument('-mapper', type=str, help='Mapper data folder') parser.add_argument('-mapper_name', type=str, help='Mapper name') parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") parser.add_argument("-save_name", type=str, required=True, help="merge study name") -parser.add_argument('-study_name', type=str, required=True,nargs='+', help=' Name for saved genotype data, without ext') - -parser.add_argument('-cluster', type=str, default='n', choices=['y','n'], help=' Is it parallel cluster job, default no') -parser.add_argument('-node', nargs='+',help='number of nodes / this node number, example: 10 2 ') -parser.add_argument('-split',type=int,help='Split size for merge genotypes') +parser.add_argument('-study_name', type=str, required=True, nargs='+', + help=' Name for saved genotype data, without ext') +parser.add_argument('-cluster', type=str, default='n', choices=['y', 'n'], + help=' Is it parallel cluster job, default no') +parser.add_argument('-node', nargs='+', help='number of nodes / this node number, example: 10 2 ') +parser.add_argument('-split', type=int, help='Split size for merge genotypes') args = parser.parse_args() print(args) if __name__ == '__main__': + print('Not implemented!') - print ('Not implemented!') - - # mapper=Mapper(args.mapper_name) - # mapper.load(args.mapper) - # mapper.chunk_size=args.split - # - # - # hdf5_iter=0 - # h5_name=args.save_name - # pytable_filter=tables.Filters(complevel=9, complib='zlib') - # gen=[] - # for i,j in enumerate(args.genotype): - # gen.append(Reader('genotype')) - # gen[i].start(j,hdf5=True, study_name=args.study_name[i], ID=False) - # - # RSID=[] - # SUB_ID=[] - # for i in gen: - # SUB_ID.append(i.folder._data.get_id()) - # mapper.cluster=args.cluster - # mapper.node=args.node - # - # while True: - # if args.cluster=='n': - # SNPs_index, keys=mapper.get_next() - # else: - # chunk=mapper.chunk_pop() - # if chunk is None: - # SNPs_index=None - # break - # print chunk - # SNPs_index, keys=mapper.get_chunk(chunk) - # - # if SNPs_index is None: - # break - # RSID.append(keys) - # - # data=merge_genotype(gen, SNPs_index) #TODO (high) add mapper - # print data.shape - # if args.cluster=='n': - # h5_gen_file = tables.open_file( - # os.path.join(args.out,str(hdf5_iter)+'_'+h5_name+'.h5'), 'w', title=args.save_name) - # else:#TODO (high) check! - # h5_gen_file = tables.open_file( - # os.path.join(args.out,str(chunk[0])+'_' +str(chunk[1])+'_'+h5_name+'.h5'), 'w', title=args.save_name) - # hdf5_iter+=1 - # - # atom = tables.Int8Atom() # TODO (low) check data format - # genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - # (data.shape), - # title='Genotype', - # filters=pytable_filter) - # genotype[:] = data - # h5_gen_file.close() - # genotype=None - # data=None - # gc.collect() - # print hdf5_iter - # - # RSID=np.array(RSID) - # SUB_ID=np.array(SUB_ID) - # if args.cluster=='n': - # np.save(os.path.join(args.out,'RSID.npy'),RSID) - # np.save(os.path.join(args.out,'SUB_ID.npy'),SUB_ID) - # - # else: - # np.save(os.path.join(args.out,str(args.node[1])+'_RSID.npy'),RSID) - # np.save(os.path.join(args.out,str(args.node[1])+'_SUB_ID.npy'),SUB_ID) +# mapper=Mapper(args.mapper_name) +# mapper.load(args.mapper) +# mapper.chunk_size=args.split +# +# +# hdf5_iter=0 +# h5_name=args.save_name +# pytable_filter=tables.Filters(complevel=9, complib='zlib') +# gen=[] +# for i,j in enumerate(args.genotype): +# gen.append(Reader('genotype')) +# gen[i].start(j,hdf5=True, study_name=args.study_name[i], ID=False) +# +# RSID=[] +# SUB_ID=[] +# for i in gen: +# SUB_ID.append(i.folder._data.get_id()) +# mapper.cluster=args.cluster +# mapper.node=args.node +# +# while True: +# if args.cluster=='n': +# SNPs_index, keys=mapper.get_next() +# else: +# chunk=mapper.chunk_pop() +# if chunk is None: +# SNPs_index=None +# break +# print chunk +# SNPs_index, keys=mapper.get_chunk(chunk) +# +# if SNPs_index is None: +# break +# RSID.append(keys) +# +# data=merge_genotype(gen, SNPs_index) #TODO (high) add mapper +# print data.shape +# if args.cluster=='n': +# h5_gen_file = tables.open_file( +# os.path.join(args.out,str(hdf5_iter)+'_'+h5_name+'.h5'), 'w', title=args.save_name) +# else:#TODO (high) check! +# h5_gen_file = tables.open_file( +# os.path.join(args.out,str(chunk[0])+'_' +str(chunk[1])+'_'+h5_name+'.h5'), 'w', title=args.save_name) +# hdf5_iter+=1 +# +# atom = tables.Int8Atom() # TODO (low) check data format +# genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, +# (data.shape), +# title='Genotype', +# filters=pytable_filter) +# genotype[:] = data +# h5_gen_file.close() +# genotype=None +# data=None +# gc.collect() +# print hdf5_iter +# +# RSID=np.array(RSID) +# SUB_ID=np.array(SUB_ID) +# if args.cluster=='n': +# np.save(os.path.join(args.out,'RSID.npy'),RSID) +# np.save(os.path.join(args.out,'SUB_ID.npy'),SUB_ID) +# +# else: +# np.save(os.path.join(args.out,str(args.node[1])+'_RSID.npy'),RSID) +# np.save(os.path.join(args.out,str(args.node[1])+'_SUB_ID.npy'),SUB_ID) diff --git a/utils/hase/hase-master/tools/minimac2hdf5.py b/utils/hase/hase-master/tools/minimac2hdf5.py index b148608..6ef85f1 100644 --- a/utils/hase/hase-master/tools/minimac2hdf5.py +++ b/utils/hase/hase-master/tools/minimac2hdf5.py @@ -1,10 +1,11 @@ - import os import sys + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils.hase.config import PYTHON_PATH + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import argparse import h5py import pandas as pd @@ -14,128 +15,123 @@ import glob -def probes_minimac2hdf5(data_path, save_path,study_name, chunk_size=1000000): - - if os.path.isfile(os.path.join(save_path,'probes',study_name+'.h5')): - os.remove(os.path.join(save_path,'probes',study_name+'.h5')) - - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - - df=pd.read_csv(data_path,sep=' ',chunksize=chunk_size, header=None,index_col=None) - for i,chunk in enumerate(df): - print('add chunk {}'.format(i)) - chunk.columns=["ID",'allele1','allele2','MAF','Rsq'] - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - chunk.to_hdf(os.path.join(save_path,'probes',study_name+'.h5'),data_columns=True, key='probes',format='table',append=True, - min_itemsize = 25, complib='zlib',complevel=9 ) - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path,'probes',study_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - -def ind_minimac2hdf5(data_path, save_path,study_name): - - if os.path.isfile(os.path.join(save_path,'individuals',study_name+'.h5')): - os.remove(os.path.join(save_path,'individuals',study_name+'.h5')) - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - n.append((j[:-1])) - f.close() - n=np.array(n) - chunk=pd.DataFrame.from_dict({"individual":n}) - chunk.to_hdf(os.path.join(save_path,'individuals',study_name+'.h5'), key='individuals',format='table', - min_itemsize = 25, complib='zlib',complevel=9 ) - -def id_minimac2hdf5(data_path,id, save_path): - - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - try: - n.append(np.float(j)) - except: - n.append(np.float(-1)) - n=np.array(n) - f.close() - store=h5py.File(os.path.join(save_path,'genotype',id+'.h5'), 'w') - with Timer() as t: - store.create_dataset(id,data=n,compression='gzip',compression_opts=9 ) - print('standard save gzip 9...', t.secs) - store.close() - - - -def id_minimac2hdf5_pandas(data_path,id, save_path): - - df=pd.read_csv(data_path, header=None, index_col=None) - df.columns=["genotype"] - n=df["genotype"].as_matrix() - store=h5py.File(os.path.join(save_path,'genotype',id+'.h5'), 'w') - with Timer() as t: - store.create_dataset(id,data=n,compression='gzip',compression_opts=9 ) - print('pandas save gzip 9...', t.secs) - store.close() - df=None - -def genotype_minimac2hdf5(data_path,id, save_path, study_name): - - - df=pd.read_csv(data_path, header=None, index_col=None,sep='\t', dtype=np.float16) - data=df.as_matrix() - data=data.T - print(data.shape) - print('Saving chunk...{}'.format(os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'), 'w', title=study_name) - - atom = tables.Float16Atom() - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=tables.Filters(complevel=9, complib='zlib')) - genotype[:] = data - h5_gen_file.close() - os.remove(data_path) - - -if __name__=="__main__": - - parser = argparse.ArgumentParser(description='Script to convert Minimac data') - parser.add_argument("-study_name", required=True, type=str, help="Study specific name") - parser.add_argument("-id", type=str, help="subject id") - parser.add_argument("-data",required=True, type=str, help="path to file") - parser.add_argument("-out",required=True, type=str, help="path to results save folder") - parser.add_argument("-flag",required=True,type=str,choices=['genotype','individuals','probes','chunk'], help="path to file with SNPs info") - - - args = parser.parse_args() - - print(args) - try: - print ('Creating directories...') - os.mkdir(os.path.join(args.out,'genotype') ) - os.mkdir(os.path.join(args.out,'individuals') ) - os.mkdir(os.path.join(args.out,'probes') ) - os.mkdir(os.path.join(args.out,'tmp_files')) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) - - if args.id is not None and args.flag=='genotype': - with Timer() as t: - id_minimac2hdf5_pandas(args.data, args.id, args.out) - print('time pandas...',t.secs) - elif args.flag=='probes': - probes_minimac2hdf5(args.data, args.out, args.study_name) - elif args.flag=='individuals': - ind_minimac2hdf5(args.data, args.out,args.study_name) - elif args.flag=='chunk': - genotype_minimac2hdf5(args.data,args.id, args.out,args.study_name) - - - +def probes_minimac2hdf5(data_path, save_path, study_name, chunk_size=1000000): + if os.path.isfile(os.path.join(save_path, 'probes', study_name + '.h5')): + os.remove(os.path.join(save_path, 'probes', study_name + '.h5')) + + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + + df = pd.read_csv(data_path, sep=' ', chunksize=chunk_size, header=None, index_col=None) + for i, chunk in enumerate(df): + print('add chunk {}'.format(i)) + chunk.columns = ["ID", 'allele1', 'allele2', 'MAF', 'Rsq'] + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + chunk.to_hdf(os.path.join(save_path, 'probes', study_name + '.h5'), data_columns=True, key='probes', + format='table', append=True, + min_itemsize=25, complib='zlib', complevel=9) + pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path, 'probes', study_name + '_hash_table.csv.gz'), + index=False, compression='gzip', sep='\t') + + +def ind_minimac2hdf5(data_path, save_path, study_name): + if os.path.isfile(os.path.join(save_path, 'individuals', study_name + '.h5')): + os.remove(os.path.join(save_path, 'individuals', study_name + '.h5')) + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + n.append((j[:-1])) + f.close() + n = np.array(n) + chunk = pd.DataFrame.from_dict({"individual": n}) + chunk.to_hdf(os.path.join(save_path, 'individuals', study_name + '.h5'), key='individuals', format='table', + min_itemsize=25, complib='zlib', complevel=9) + + +def id_minimac2hdf5(data_path, id, save_path): + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + try: + n.append(np.float(j)) + except: + n.append(np.float(-1)) + n = np.array(n) + f.close() + store = h5py.File(os.path.join(save_path, 'genotype', id + '.h5'), 'w') + with Timer() as t: + store.create_dataset(id, data=n, compression='gzip', compression_opts=9) + print('standard save gzip 9...', t.secs) + store.close() + + +def id_minimac2hdf5_pandas(data_path, id, save_path): + df = pd.read_csv(data_path, header=None, index_col=None) + df.columns = ["genotype"] + n = df["genotype"].as_matrix() + store = h5py.File(os.path.join(save_path, 'genotype', id + '.h5'), 'w') + with Timer() as t: + store.create_dataset(id, data=n, compression='gzip', compression_opts=9) + print('pandas save gzip 9...', t.secs) + store.close() + df = None + + +def genotype_minimac2hdf5(data_path, id, save_path, study_name): + df = pd.read_csv(data_path, header=None, index_col=None, sep='\t', dtype=np.float16) + data = df.as_matrix() + data = data.T + print(data.shape) + print('Saving chunk...{}'.format(os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'), 'w', title=study_name) + + atom = tables.Float16Atom() + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=tables.Filters(complevel=9, complib='zlib')) + genotype[:] = data + h5_gen_file.close() + os.remove(data_path) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Script to convert Minimac data') + parser.add_argument("-study_name", required=True, type=str, help="Study specific name") + parser.add_argument("-id", type=str, help="subject id") + parser.add_argument("-data", required=True, type=str, help="path to file") + parser.add_argument("-out", required=True, type=str, help="path to results save folder") + parser.add_argument("-flag", required=True, type=str, choices=['genotype', 'individuals', 'probes', 'chunk'], + help="path to file with SNPs info") + + args = parser.parse_args() + + print(args) + try: + print('Creating directories...') + os.mkdir(os.path.join(args.out, 'genotype')) + os.mkdir(os.path.join(args.out, 'individuals')) + os.mkdir(os.path.join(args.out, 'probes')) + os.mkdir(os.path.join(args.out, 'tmp_files')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) + + if args.id is not None and args.flag == 'genotype': + with Timer() as t: + id_minimac2hdf5_pandas(args.data, args.id, args.out) + print('time pandas...', t.secs) + elif args.flag == 'probes': + probes_minimac2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'individuals': + ind_minimac2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'chunk': + genotype_minimac2hdf5(args.data, args.id, args.out, args.study_name) diff --git a/utils/hase/hase-master/tools/rm_subj.py b/utils/hase/hase-master/tools/rm_subj.py index de710f7..5bb2bab 100644 --- a/utils/hase/hase-master/tools/rm_subj.py +++ b/utils/hase/hase-master/tools/rm_subj.py @@ -58,6 +58,3 @@ filters=tables.Filters(complevel=9, complib='zlib')) genotype[:] = data h5_gen_file.close() - - - diff --git a/utils/hase/hase-master/tools/tools.py b/utils/hase/hase-master/tools/tools.py index 47ed7f8..8e56b60 100644 --- a/utils/hase/hase-master/tools/tools.py +++ b/utils/hase/hase-master/tools/tools.py @@ -5,36 +5,37 @@ _proc_status = '/proc/%d/status' % os.getpid() -_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, - 'KB': 1024.0, 'MB': 1024.0*1024.0} +_scale = {'kB': 1024.0, 'mB': 1024.0 * 1024.0, + 'KB': 1024.0, 'MB': 1024.0 * 1024.0} + def _VmB(VmKey): - '''Private. + '''Private. ''' - global _proc_status, _scale - # get pseudo file /proc//status - try: - t = open(_proc_status) - v = t.read() - t.close() - except: - return 0.0 # non-Linux? - # get VmKey line e.g. 'VmRSS: 9999 kB\n ...' - i = v.index(VmKey) - v = v[i:].split(None, 3) # whitespace - if len(v) < 3: - return 0.0 # invalid format? - # convert Vm value to bytes - return float(v[1]) * _scale[v[2]] + global _proc_status, _scale + # get pseudo file /proc//status + try: + t = open(_proc_status) + v = t.read() + t.close() + except: + return 0.0 # non-Linux? + # get VmKey line e.g. 'VmRSS: 9999 kB\n ...' + i = v.index(VmKey) + v = v[i:].split(None, 3) # whitespace + if len(v) < 3: + return 0.0 # invalid format? + # convert Vm value to bytes + return float(v[1]) * _scale[v[2]] def memory(since=0.0): - '''Return memory usage in bytes. + '''Return memory usage in bytes. ''' - return _VmB('VmSize:') - since + return _VmB('VmSize:') - since def resident(since=0.0): - '''Return resident memory usage in bytes. + '''Return resident memory usage in bytes. ''' - return _VmB('VmRSS:') - since \ No newline at end of file + return _VmB('VmRSS:') - since diff --git a/utils/hase/hase.py b/utils/hase/hase.py index 588abea..2d02163 100644 --- a/utils/hase/hase.py +++ b/utils/hase/hase.py @@ -1,17 +1,19 @@ import sys import os import numpy as np -from config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH -os.environ['HASEDIR']=basedir +from config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + +os.environ['HASEDIR'] = basedir if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import tables -from hdgwas.tools import Timer, Checker, study_indexes, Mapper,HaseAnalyser, merge_genotype, Reference, timing, check_np, check_converter -from hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF +from hdgwas.tools import Timer, Checker, study_indexes, Mapper, HaseAnalyser, merge_genotype, Reference, timing, \ + check_np, check_converter +from hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF from hdgwas.data import Reader, MetaParData, MetaPhenotype from hdgwas.fake import Encoder -from hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 import argparse import gc from hdgwas.pard import partial_derivatives @@ -19,6 +21,7 @@ import pandas as pd import time from hdgwas.protocol import Protocol + __version__ = '1.1.0' HEAD = "*********************************************************************\n" @@ -29,527 +32,536 @@ HEAD += "* GNU General Public License v3\n" HEAD += "*********************************************************************\n" - - - -if __name__=='__main__': - - start = time.time() - - parser = argparse.ArgumentParser(description='Script to use HASE in command line') - - #MAIN SETTINGS - parser.add_argument("-thr",type=float, - help="predefined threshold for t-value, if not defined save everything") - - parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") - - - parser.add_argument("-mode", required=True,type=str, - choices=['regression','converting','single-meta', 'meta-stage','encoding'], - help='Main argument, specify type of analysis' - '*****************' - 'converting - before start to use any kind of analysis you need to convert data, it could take some time, ' - 'you need to do it ones and then everything will be super fast' - '*****************' - 'single-meta - if you are the part of meta-analysis and will send data to main center, use this mode' - '*****************' - 'encoding - if you are doing HD association, before send data to main center create fake data' - '*****************' - 'meta-stage - if you are the main center of meta-analysis and already got precomputed data from all sites, use it' - '*****************' - 'regression - if you want run everything yourself and do not use precomputed data use it' - - 'If you want to run single site full association analysis run (1) single-meta mode and then (2) meta-stage' - - '*****************' - ) - - parser.add_argument("-g", "--genotype",nargs='+', type=str, help="path/paths to genotype data folder") - parser.add_argument("-ph", "--phenotype", nargs='+',type=str, help="path to phenotype data folder") - parser.add_argument("-cov", "--covariates", type=str, help="path to covariates data folder") - - - parser.add_argument( "-derivatives", nargs='+', type=str, help="path to derivatives data folder") - - parser.add_argument("-protocol", type=str, help="path to study protocol file") - - parser.add_argument('-study_name', type=str, required=True,nargs='+', help=' Name for saved genotype data, without ext') - - parser.add_argument('-mapper', type=str, help='Mapper data folder') - - parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') - - #ADDITIONAL SETTINGS - parser.add_argument("-snp_id_inc", type=str, help="path to file with SNPs id to include to analysis") - parser.add_argument("-snp_id_exc", type=str, help="path to file with SNPs id to exclude from analysis") - parser.add_argument("-ph_id_inc", type=str, help="path to file with phenotype id to exclude from analysis") - parser.add_argument("-ph_id_exc", type=str, help="path to file with phenotype id to exclude from analysis") - - #parser.add_argument("-ind_id_inc", type=str, help="path to file with individuals id to include to analysis") #TODO (low) - #parser.add_argument("-ind_id_exc", type=str, help="path to file with individuals id to exclude from analysis")#TODO (low) - #parser.add_argument("-cov_name_inc", type=str, help="path to file with covariates names to include to analysis")#TODO (low) - #parser.add_argument("-cov_name_exc", type=str, help="path to file with covariates names to exclude from analysis")#TODO (low) - - parser.add_argument('-intercept', type=str, default='y', choices=['y','n'], help='include intercept to regression, default yes') - - parser.add_argument('-maf', type=float, default=0.0, help='MAF for genetics data') - - parser.add_argument('-encoded', nargs='+', type=int, help='Value per every study, 1 - if encoded, 0 - if not') - ### - - #FLAGS - parser.add_argument('-hdf5', action='store_true',default=True, help='flag for genotype data format') - parser.add_argument('-id', action='store_true', default=False, help='Flag to convert minimac data to genotype per subject files first (default False)') - parser.add_argument('-pd_full', action='store_true', default=False, help='For not HD association study') - parser.add_argument('-effect_intercept', action='store_true', default=False, help='Flag for add study effect to PD regression model') - parser.add_argument('-permute_ph', action='store_true', default=False, help='Flag for phenotype permutation') - parser.add_argument('-vcf', action='store_true', default=False, help='Flag for VCF data to convert') - parser.add_argument('-np', action='store_true', default=True, help='Check BLAS/LAPACK/MKL') - - #TODO (low) save genotype after MAF - ### - - ###CLUSTER SETTING - parser.add_argument('-cluster', type=str, default='n', choices=['y','n'], help=' Is it parallel cluster job, default no') - parser.add_argument('-node', nargs='+',type=int,help='number of nodes / this node number, example: 10 2 ') - ### - - #ADVANCED SETTINGS - parser.add_argument('-interaction', type=str, help='path to file with data for genotype interaction test') #TODO (low) - parser.add_argument('-mapper_chunk', type=int, help='Change mapper chunk size from config file') - ### - args = parser.parse_args() - if not args.thr: - print ('WARNING!!! You did not set threshold for t-value, all results will be saved') - if args.mapper_chunk: - MAPPER_CHUNK_SIZE=args.mapper_chunk - ARG_CHECKER=Checker() - print(args) - os.environ['HASEOUT']=args.out - - if args.cluster=='y': - if args.node is not None: - if args.node[1]>args.node[0]: - raise ValueError('Node # {} > {} total number of nodes'.format(args.node[1], args.node[0] )) - - - - if not os.path.isdir(args.out): - print("Creating output folder {}".format(args.out)) - os.mkdir(args.out) - - if args.np: - check_np() - - ################################### CONVERTING ############################## - if args.mode=='converting': - - #ARG_CHECKER.check(args,mode='converting') - - R=Reader('genotype') - R.start(args.genotype[0], vcf=args.vcf) - - with Timer() as t: - if R.format=='PLINK': - G=GenotypePLINK(args.study_name[0],reader=R) - G.split_size=CONVERTER_SPLIT_SIZE - G.plink2hdf5(out=args.out) - - elif R.format=='MINIMAC': - G=GenotypeMINIMAC(args.study_name[0],reader=R) - if args.cluster=='y': - G.cluster=True - G.split_size=CONVERTER_SPLIT_SIZE - G.MACH2hdf5(args.out,id=args.id) - - elif R.format=='VCF': - G = GenotypeVCF(args.study_name[0], reader=R) - if args.cluster=='y': - G.cluster=True - G.split_size=CONVERTER_SPLIT_SIZE - G.VCF2hdf5(args.out) - else: - raise ValueError('Genotype data should be in PLINK/MINIMAC/VCF format and alone in folder') - - check_converter(args.out,args.study_name[0]) - print(('Time to convert all data: {} sec'.format(t.secs))) - - ################################### ENCODING ############################## - - elif args.mode=='encoding': - - #ARG_CHECKER.check(args,mode='encoding') - mapper=Mapper() - mapper.genotype_names=args.study_name - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.reference_name=args.ref_name - mapper.load_flip(args.mapper) - mapper.load(args.mapper) - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - - gen=Reader('genotype') - gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) - - e=Encoder(args.out) - e.study_name=args.study_name[0] - - row_index, ids = study_indexes(phenotype=phen.folder._data,genotype=gen.folder._data) - with Timer() as t: - - e.matrix(len(ids),save=True) - N_snps_read=0 - while True: - with Timer() as t_gen: - genotype = gen.get_next() - if isinstance(genotype, type(None)): - break - - flip=mapper.flip[args.study_name[0]][N_snps_read:N_snps_read+genotype.shape[0]] - N_snps_read+=genotype.shape[0] - flip_index=(flip==-1) - genotype=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,genotype) - genotype=genotype[:,row_index[0]] - encode_genotype=e.encode(genotype, data_type='genotype') - e.save_hdf5(encode_genotype,os.path.join(args.out, 'encode_genotype' ),info= gen.folder , index=row_index[0] ) - encode_genotype=None - gc.collect() - - print(('Time to create fake genotype is {}sec'.format(t_gen.secs))) - - while True: - with Timer() as t_phen: - phenotype=phen.get_next(index=row_index[1]) - if isinstance(phenotype, type(None)): - break - encode_phenotype=e.encode(phenotype, data_type='phenotype') - if phen.folder.format=='.npy': - e.save_npy(encode_phenotype,save_path=os.path.join(args.out, 'encode_phenotype'),info=phen.folder, index=row_index[1]) - if phen.folder.format in ['.csv', '.txt']: - e.save_csv(encode_phenotype,save_path=os.path.join(args.out, 'encode_phenotype'),info=phen.folder, index=row_index[1] ) - encode_phenotype=None - gc.collect() - if phen.folder.format=='.npy': - np.save(os.path.join(os.path.join(args.out, 'encode_phenotype', 'info_dic.npy')),e.phen_info_dic ) - print(('Time to create fake phenotype is {}sec'.format(t_phen.secs))) - - print(('Time to encode all data: {} sec'.format(t.secs))) - - ################################### SINGLE META STAGE ############################## - - elif args.mode=='single-meta': - - #ARG_CHECKER.check(args,mode='single-meta') - mapper=Mapper() - mapper.genotype_names=args.study_name - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.reference_name=args.ref_name - mapper.load_flip(args.mapper) - mapper.load(args.mapper) - mapper.cluster=args.cluster - mapper.node=args.node - - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - - cov=Reader('covariates') - cov.start(args.covariates) - - if cov.folder.n_files>1: - raise ValueError('In covariates folder should be only one file!') - - gen=Reader('genotype') - gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) - - with Timer() as t: - partial_derivatives(save_path=args.out,COV=cov,PHEN=phen, GEN=gen, - MAP=mapper, MAF=args.maf, R2=None, B4_flag=args.pd_full, - study_name=args.study_name[0], intercept=args.intercept) - print(('Time to compute partial derivatives : {} sec'.format(t.secs))) - - ################################### MULTI META STAGE ############################## - - elif args.mode=='meta-stage': - - #ARG_CHECKER.check(args,mode='meta-stage') - - ##### Init data readers ##### - if args.derivatives is None: - raise ValueError('For meta-stage analysis partial derivatives data are required!') - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - if args.snp_id_inc is not None: - mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) - print('Include:') - print(mapper.include.head()) - if 'ID' not in mapper.include.columns and ( - 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) - if args.snp_id_exc is not None: - mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) - print('Exclude:') - print(mapper.exclude.head()) - if 'ID' not in mapper.exclude.columns and ( - 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) - mapper.load(args.mapper) - mapper.load_flip(args.mapper, encode=args.encoded) - mapper.cluster=args.cluster - mapper.node=args.node - - Analyser=HaseAnalyser() - - pard=[] - - with Timer() as t: - for i,j in enumerate(args.derivatives): - pard.append(Reader('partial') ) - pard[i].start(j, study_name=args.study_name[i]) - pard[i].folder.load() - - print("time to set PD is {}s".format(t.secs)) - - - PD=[False if isinstance(i.folder._data.b4, type(None) ) else True for i in pard] - - if np.sum(PD)!=len(pard) and np.sum(PD)!=0: - raise ValueError('All study should have b4 data for partial derivatives!') - - if args.protocol is not None: - protocol=Protocol(args.protocol) - else: - protocol=None - - meta_pard=MetaParData(pard,args.study_name,protocol=protocol) - - if np.sum(PD)==0: - phen=[] - - with Timer() as t: - for i,j in enumerate(args.phenotype): - phen.append(Reader('phenotype')) - phen[i].start(j) - print("Time to set pheno {} s".format(t.secs)) - meta_phen=MetaPhenotype(phen,include=args.ph_id_inc,exclude=args.ph_id_exc) - - N_studies=len(args.genotype) - - gen=[] - with Timer() as t: - for i,j in enumerate(args.genotype): - gen.append(Reader('genotype')) - gen[i].start(j,hdf5=args.hdf5, study_name=args.study_name[i], ID=False) - print("Time to set gen {}s".format(t.secs)) - - row_index, ids = study_indexes(phenotype=tuple(i.folder._data for i in phen),genotype=tuple(i.folder._data for i in gen),covariates=tuple(i.folder._data.metadata for i in pard)) - if row_index[2].shape[0]!=np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]) : - raise ValueError('Partial Derivatives covariates have different number of subjects {} than genotype and phenotype {}'.format(row_index[2].shape[0], - np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]))) - while True: - if mapper.cluster=='n': - SNPs_index, keys=mapper.get() - else: - ch=mapper.chunk_pop() - if ch is None: - SNPs_index=None - break - SNPs_index, keys=mapper.get(chunk_number=ch) - - if isinstance(SNPs_index, type(None)): - break - - Analyser.rsid=keys - if np.sum(PD)==0: - genotype=np.array([]) - with Timer() as t_g: - genotype=merge_genotype(gen, SNPs_index, mapper) - genotype=genotype[:,row_index[0]] - print("Time to get G {}s".format(t_g.secs)) - #TODO (low) add interaction - - a_test=np.array([]) - b_cov=np.array([]) - C=np.array([]) - a_cov=np.array([]) - b4=np.array([]) - - if args.protocol is not None: - if protocol.enable: - regression_model=protocol.regression_model() - else: - regression_model=None - - with Timer() as t_pd: - if np.sum(PD)==0: - a_test, b_cov, C, a_cov = meta_pard.get( SNPs_index=SNPs_index, regression_model=regression_model, random_effect_intercept=args.effect_intercept) - else: - a_test, b_cov, C, a_cov, b4 = meta_pard.get( SNPs_index=SNPs_index, B4=True, regression_model=regression_model, random_effect_intercept=args.effect_intercept) - - print("Time to get PD {}s".format(t_pd.secs)) - - MAF=meta_pard.maf_pard(SNPs_index=SNPs_index) - - if args.maf!=0: - filter=(MAF>args.maf) & (MAF<1-args.maf) & (MAF!=0.5) - a_test=a_test[filter,:] - Analyser.MAF=MAF[filter] - if np.sum(PD)==0: - genotype=genotype[filter,:] - else: - b4=b4[filter,:] - Analyser.rsid=Analyser.rsid[filter] - if a_test.shape[0]==0: - print('NO SNPs > MAF') - continue - else: - Analyser.MAF=MAF - - a_inv=A_inverse(a_cov, a_test) - N_con=a_inv.shape[1] - 1 - print('There are {} subjects in study.'.format(meta_pard.get_n_id())) - DF=( meta_pard.get_n_id()- a_inv.shape[1] ) - - if np.sum(PD)==0: - - while True: - phenotype=np.array([]) - with Timer() as t_ph: - phenotype, phen_names = meta_phen.get() - print("Time to get PH {}s".format(t_ph.secs)) - - if isinstance(phenotype, type(None)): - meta_phen.processed=0 - print('All phenotypes processed!') - break - print(("Merged phenotype shape {}".format(phenotype.shape))) - #TODO (middle) select phen from protocol - phenotype=phenotype[row_index[1],:] - print(("Selected phenotype shape {}".format(phenotype.shape))) - keys=list(meta_pard.phen_mapper.dic.keys()) - phen_ind_dic = { k:i for i,k in enumerate(keys) } - phen_ind=np.array([phen_ind_dic.get(i,-1) for i in phen_names] ) - if np.sum(phen_ind==-1)==len(phen_ind): - print('There is no common ids in phenotype files and PD data!') - break - else: - print('There are {} common ids in phenotype files and PD data!'.format( np.sum(phen_ind!=-1) )) - C_test=C[phen_ind] - b_cov_test=b_cov[:,phen_ind] - - b4 = B4(phenotype,genotype) - print(("B4 shape is {}".format(b4.shape))) - t_stat,SE =HASE(b4, a_inv, b_cov_test, C_test, N_con, DF) - - if mapper.cluster=='y': - Analyser.cluster=True - Analyser.chunk=ch - Analyser.node=mapper.node[1] - Analyser.t_stat=t_stat - Analyser.SE=SE - Analyser.threshold=args.thr - Analyser.out=args.out - Analyser.save_result( phen_names[(phen_ind!=-1) ] ) - - t_stat=None - Analyser.t_stat=None - gc.collect() - - else: - t_stat,SE=HASE(b4, a_inv, b_cov, C, N_con, DF) - - Analyser.t_stat=t_stat - Analyser.SE=SE - Analyser.threshold=args.thr - Analyser.out=args.out - Analyser.save_result( np.array(list(meta_pard.phen_mapper.dic.keys())) ) - - t_stat=None - Analyser.t_stat=None - gc.collect() - - - -################################### TO DO EVERYTHING IN ONE GO ############################## - - elif args.mode=='regression': - - #ARG_CHECKER.check(args,mode='regression') - - print ('START regression mode...') - if args.mapper is None: - os.environ['MAPPER']="False" #need to set it here, before genotype Reader start - - phen=Reader('phenotype') - phen.start(args.phenotype[0]) - phen.permutation=args.permute_ph - - cov=Reader('covariates') - cov.start(args.covariates) - - interaction=None - if args.interaction is not None: - interaction=Reader('interaction') - interaction.start(args.interaction) - - if (cov.folder.n_files>1 and cov.folder.format!='.npy') or (cov.folder.n_files>2 and cov.folder.format=='.npy'): #TODO (middle) test - raise ValueError('In covariates folder should be only one file!') - - gen=[] - for i,j in enumerate(args.genotype): - gen.append(Reader('genotype')) - gen[i].start(j,hdf5=args.hdf5, study_name=args.study_name[i], ID=False) - - - if args.mapper is not None: - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - if args.snp_id_inc is not None: - mapper.include=pd.DataFrame.from_csv(args.snp_id_inc,index_col=None) - print('Include:') - print(mapper.include.head()) - if 'ID' not in mapper.include.columns and ('CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) - if args.snp_id_exc is not None: - mapper.exclude=pd.DataFrame.from_csv(args.snp_id_exc,index_col=None) - print('Exclude:') - print(mapper.exclude.head()) - if 'ID' not in mapper.exclude.columns and ('CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): - raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) - mapper.load(args.mapper) - mapper.load_flip(args.mapper) - mapper.cluster=args.cluster - mapper.node=args.node - else: - if len(args.genotype)==1: - mapper=Mapper() - mapper.chunk_size=MAPPER_CHUNK_SIZE - mapper.genotype_names=args.study_name - mapper.reference_name=args.ref_name - mapper.cluster=args.cluster - mapper.node=args.node - mapper.n_study=1 - mapper.n_keys=gen[0].folder._data.names.shape[0] - mapper.keys=np.array(gen[0].folder._data.names.tolist()) - mapper.values=np.array(list(range(mapper.n_keys))).reshape(-1,1) - mapper.flip[args.study_name[0]]=np.array([1]*mapper.n_keys) - if args.snp_id_exc is not None or args.snp_id_inc is not None: - raise ValueError('You can not exclude or include variants to analysis without mapper!') - else: - raise ValueError('You can not run regression analysis with several genotype data without mapper!') - #mapper=None - - Analyser=HaseAnalyser() - Analyser.threshold=args.thr - Analyser.out=args.out - haseregression(phen,gen,cov, mapper, Analyser,args.maf,intercept=args.intercept, interaction=interaction) +if __name__ == '__main__': + + start = time.time() + + parser = argparse.ArgumentParser(description='Script to use HASE in command line') + + # MAIN SETTINGS + parser.add_argument("-thr", type=float, + help="predefined threshold for t-value, if not defined save everything") + + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + + parser.add_argument("-mode", required=True, type=str, + choices=['regression', 'converting', 'single-meta', 'meta-stage', 'encoding'], + help='Main argument, specify type of analysis' + '*****************' + 'converting - before start to use any kind of analysis you need to convert data, it could take some time, ' + 'you need to do it ones and then everything will be super fast' + '*****************' + 'single-meta - if you are the part of meta-analysis and will send data to main center, use this mode' + '*****************' + 'encoding - if you are doing HD association, before send data to main center create fake data' + '*****************' + 'meta-stage - if you are the main center of meta-analysis and already got precomputed data from all sites, use it' + '*****************' + 'regression - if you want run everything yourself and do not use precomputed data use it' + + 'If you want to run single site full association analysis run (1) single-meta mode and then (2) meta-stage' + + '*****************' + ) + + parser.add_argument("-g", "--genotype", nargs='+', type=str, help="path/paths to genotype data folder") + parser.add_argument("-ph", "--phenotype", nargs='+', type=str, help="path to phenotype data folder") + parser.add_argument("-cov", "--covariates", type=str, help="path to covariates data folder") + + parser.add_argument("-derivatives", nargs='+', type=str, help="path to derivatives data folder") + + parser.add_argument("-protocol", type=str, help="path to study protocol file") + + parser.add_argument('-study_name', type=str, required=True, nargs='+', + help=' Name for saved genotype data, without ext') + + parser.add_argument('-mapper', type=str, help='Mapper data folder') + + parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') + + # ADDITIONAL SETTINGS + parser.add_argument("-snp_id_inc", type=str, help="path to file with SNPs id to include to analysis") + parser.add_argument("-snp_id_exc", type=str, help="path to file with SNPs id to exclude from analysis") + parser.add_argument("-ph_id_inc", type=str, help="path to file with phenotype id to exclude from analysis") + parser.add_argument("-ph_id_exc", type=str, help="path to file with phenotype id to exclude from analysis") + + # parser.add_argument("-ind_id_inc", type=str, help="path to file with individuals id to include to analysis") #TODO (low) + # parser.add_argument("-ind_id_exc", type=str, help="path to file with individuals id to exclude from analysis")#TODO (low) + # parser.add_argument("-cov_name_inc", type=str, help="path to file with covariates names to include to analysis")#TODO (low) + # parser.add_argument("-cov_name_exc", type=str, help="path to file with covariates names to exclude from analysis")#TODO (low) + + parser.add_argument('-intercept', type=str, default='y', choices=['y', 'n'], + help='include intercept to regression, default yes') + + parser.add_argument('-maf', type=float, default=0.0, help='MAF for genetics data') + + parser.add_argument('-encoded', nargs='+', type=int, help='Value per every study, 1 - if encoded, 0 - if not') + ### + + # FLAGS + parser.add_argument('-hdf5', action='store_true', default=True, help='flag for genotype data format') + parser.add_argument('-id', action='store_true', default=False, + help='Flag to convert minimac data to genotype per subject files first (default False)') + parser.add_argument('-pd_full', action='store_true', default=False, help='For not HD association study') + parser.add_argument('-effect_intercept', action='store_true', default=False, + help='Flag for add study effect to PD regression model') + parser.add_argument('-permute_ph', action='store_true', default=False, help='Flag for phenotype permutation') + parser.add_argument('-vcf', action='store_true', default=False, help='Flag for VCF data to convert') + parser.add_argument('-np', action='store_true', default=True, help='Check BLAS/LAPACK/MKL') + + # TODO (low) save genotype after MAF + ### + + ###CLUSTER SETTING + parser.add_argument('-cluster', type=str, default='n', choices=['y', 'n'], + help=' Is it parallel cluster job, default no') + parser.add_argument('-node', nargs='+', type=int, help='number of nodes / this node number, example: 10 2 ') + ### + + # ADVANCED SETTINGS + parser.add_argument('-interaction', type=str, + help='path to file with data for genotype interaction test') # TODO (low) + parser.add_argument('-mapper_chunk', type=int, help='Change mapper chunk size from config file') + ### + args = parser.parse_args() + if not args.thr: + print('WARNING!!! You did not set threshold for t-value, all results will be saved') + if args.mapper_chunk: + MAPPER_CHUNK_SIZE = args.mapper_chunk + ARG_CHECKER = Checker() + print(args) + os.environ['HASEOUT'] = args.out + + if args.cluster == 'y': + if args.node is not None: + if args.node[1] > args.node[0]: + raise ValueError('Node # {} > {} total number of nodes'.format(args.node[1], args.node[0])) + + if not os.path.isdir(args.out): + print("Creating output folder {}".format(args.out)) + os.mkdir(args.out) + + if args.np: + check_np() + + ################################### CONVERTING ############################## + if args.mode == 'converting': + + # ARG_CHECKER.check(args,mode='converting') + + R = Reader('genotype') + R.start(args.genotype[0], vcf=args.vcf) + + with Timer() as t: + if R.format == 'PLINK': + G = GenotypePLINK(args.study_name[0], reader=R) + G.split_size = CONVERTER_SPLIT_SIZE + G.plink2hdf5(out=args.out) + + elif R.format == 'MINIMAC': + G = GenotypeMINIMAC(args.study_name[0], reader=R) + if args.cluster == 'y': + G.cluster = True + G.split_size = CONVERTER_SPLIT_SIZE + G.MACH2hdf5(args.out, id=args.id) + + elif R.format == 'VCF': + G = GenotypeVCF(args.study_name[0], reader=R) + if args.cluster == 'y': + G.cluster = True + G.split_size = CONVERTER_SPLIT_SIZE + G.VCF2hdf5(args.out) + else: + raise ValueError('Genotype data should be in PLINK/MINIMAC/VCF format and alone in folder') + + check_converter(args.out, args.study_name[0]) + print(('Time to convert all data: {} sec'.format(t.secs))) + + ################################### ENCODING ############################## + + elif args.mode == 'encoding': + + # ARG_CHECKER.check(args,mode='encoding') + mapper = Mapper() + mapper.genotype_names = args.study_name + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.reference_name = args.ref_name + mapper.load_flip(args.mapper) + mapper.load(args.mapper) + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + + gen = Reader('genotype') + gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) + + e = Encoder(args.out) + e.study_name = args.study_name[0] + + row_index, ids = study_indexes(phenotype=phen.folder._data, genotype=gen.folder._data) + with Timer() as t: + + e.matrix(len(ids), save=True) + N_snps_read = 0 + while True: + with Timer() as t_gen: + genotype = gen.get_next() + if isinstance(genotype, type(None)): + break + + flip = mapper.flip[args.study_name[0]][N_snps_read:N_snps_read + genotype.shape[0]] + N_snps_read += genotype.shape[0] + flip_index = (flip == -1) + genotype = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, genotype) + genotype = genotype[:, row_index[0]] + encode_genotype = e.encode(genotype, data_type='genotype') + e.save_hdf5(encode_genotype, os.path.join(args.out, 'encode_genotype'), info=gen.folder, + index=row_index[0]) + encode_genotype = None + gc.collect() + + print(('Time to create fake genotype is {}sec'.format(t_gen.secs))) + + while True: + with Timer() as t_phen: + phenotype = phen.get_next(index=row_index[1]) + if isinstance(phenotype, type(None)): + break + encode_phenotype = e.encode(phenotype, data_type='phenotype') + if phen.folder.format == '.npy': + e.save_npy(encode_phenotype, save_path=os.path.join(args.out, 'encode_phenotype'), + info=phen.folder, index=row_index[1]) + if phen.folder.format in ['.csv', '.txt']: + e.save_csv(encode_phenotype, save_path=os.path.join(args.out, 'encode_phenotype'), + info=phen.folder, index=row_index[1]) + encode_phenotype = None + gc.collect() + if phen.folder.format == '.npy': + np.save(os.path.join(os.path.join(args.out, 'encode_phenotype', 'info_dic.npy')), e.phen_info_dic) + print(('Time to create fake phenotype is {}sec'.format(t_phen.secs))) + + print(('Time to encode all data: {} sec'.format(t.secs))) + + ################################### SINGLE META STAGE ############################## + + elif args.mode == 'single-meta': + + # ARG_CHECKER.check(args,mode='single-meta') + mapper = Mapper() + mapper.genotype_names = args.study_name + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.reference_name = args.ref_name + mapper.load_flip(args.mapper) + mapper.load(args.mapper) + mapper.cluster = args.cluster + mapper.node = args.node + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + + cov = Reader('covariates') + cov.start(args.covariates) + + if cov.folder.n_files > 1: + raise ValueError('In covariates folder should be only one file!') + + gen = Reader('genotype') + gen.start(args.genotype[0], hdf5=args.hdf5, study_name=args.study_name[0], ID=False) + + with Timer() as t: + partial_derivatives(save_path=args.out, COV=cov, PHEN=phen, GEN=gen, + MAP=mapper, MAF=args.maf, R2=None, B4_flag=args.pd_full, + study_name=args.study_name[0], intercept=args.intercept) + print(('Time to compute partial derivatives : {} sec'.format(t.secs))) + + ################################### MULTI META STAGE ############################## + + elif args.mode == 'meta-stage': + + # ARG_CHECKER.check(args,mode='meta-stage') + + ##### Init data readers ##### + if args.derivatives is None: + raise ValueError('For meta-stage analysis partial derivatives data are required!') + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + if args.snp_id_inc is not None: + mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) + print('Include:') + print(mapper.include.head()) + if 'ID' not in mapper.include.columns and ( + 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) + if args.snp_id_exc is not None: + mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) + print('Exclude:') + print(mapper.exclude.head()) + if 'ID' not in mapper.exclude.columns and ( + 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) + mapper.load(args.mapper) + mapper.load_flip(args.mapper, encode=args.encoded) + mapper.cluster = args.cluster + mapper.node = args.node + + Analyser = HaseAnalyser() + + pard = [] + + with Timer() as t: + for i, j in enumerate(args.derivatives): + pard.append(Reader('partial')) + pard[i].start(j, study_name=args.study_name[i]) + pard[i].folder.load() + + print("time to set PD is {}s".format(t.secs)) + + PD = [False if isinstance(i.folder._data.b4, type(None)) else True for i in pard] + + if np.sum(PD) != len(pard) and np.sum(PD) != 0: + raise ValueError('All study should have b4 data for partial derivatives!') + + if args.protocol is not None: + protocol = Protocol(args.protocol) + else: + protocol = None + + meta_pard = MetaParData(pard, args.study_name, protocol=protocol) + + if np.sum(PD) == 0: + phen = [] + + with Timer() as t: + for i, j in enumerate(args.phenotype): + phen.append(Reader('phenotype')) + phen[i].start(j) + print("Time to set pheno {} s".format(t.secs)) + meta_phen = MetaPhenotype(phen, include=args.ph_id_inc, exclude=args.ph_id_exc) + + N_studies = len(args.genotype) + + gen = [] + with Timer() as t: + for i, j in enumerate(args.genotype): + gen.append(Reader('genotype')) + gen[i].start(j, hdf5=args.hdf5, study_name=args.study_name[i], ID=False) + print("Time to set gen {}s".format(t.secs)) + + row_index, ids = study_indexes(phenotype=tuple(i.folder._data for i in phen), + genotype=tuple(i.folder._data for i in gen), + covariates=tuple(i.folder._data.metadata for i in pard)) + if row_index[2].shape[0] != np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]): + raise ValueError( + 'Partial Derivatives covariates have different number of subjects {} than genotype and phenotype {}'.format( + row_index[2].shape[0], + np.sum([i.folder._data.metadata['id'].shape[0] for i in pard]))) + while True: + if mapper.cluster == 'n': + SNPs_index, keys = mapper.get() + else: + ch = mapper.chunk_pop() + if ch is None: + SNPs_index = None + break + SNPs_index, keys = mapper.get(chunk_number=ch) + + if isinstance(SNPs_index, type(None)): + break + + Analyser.rsid = keys + if np.sum(PD) == 0: + genotype = np.array([]) + with Timer() as t_g: + genotype = merge_genotype(gen, SNPs_index, mapper) + genotype = genotype[:, row_index[0]] + print("Time to get G {}s".format(t_g.secs)) + # TODO (low) add interaction + + a_test = np.array([]) + b_cov = np.array([]) + C = np.array([]) + a_cov = np.array([]) + b4 = np.array([]) + + if args.protocol is not None: + if protocol.enable: + regression_model = protocol.regression_model() + else: + regression_model = None + + with Timer() as t_pd: + if np.sum(PD) == 0: + a_test, b_cov, C, a_cov = meta_pard.get(SNPs_index=SNPs_index, regression_model=regression_model, + random_effect_intercept=args.effect_intercept) + else: + a_test, b_cov, C, a_cov, b4 = meta_pard.get(SNPs_index=SNPs_index, B4=True, + regression_model=regression_model, + random_effect_intercept=args.effect_intercept) + + print("Time to get PD {}s".format(t_pd.secs)) + + MAF = meta_pard.maf_pard(SNPs_index=SNPs_index) + + if args.maf != 0: + filter = (MAF > args.maf) & (MAF < 1 - args.maf) & (MAF != 0.5) + a_test = a_test[filter, :] + Analyser.MAF = MAF[filter] + if np.sum(PD) == 0: + genotype = genotype[filter, :] + else: + b4 = b4[filter, :] + Analyser.rsid = Analyser.rsid[filter] + if a_test.shape[0] == 0: + print('NO SNPs > MAF') + continue + else: + Analyser.MAF = MAF + + a_inv = A_inverse(a_cov, a_test) + N_con = a_inv.shape[1] - 1 + print('There are {} subjects in study.'.format(meta_pard.get_n_id())) + DF = (meta_pard.get_n_id() - a_inv.shape[1]) + + if np.sum(PD) == 0: + + while True: + phenotype = np.array([]) + with Timer() as t_ph: + phenotype, phen_names = meta_phen.get() + print("Time to get PH {}s".format(t_ph.secs)) + + if isinstance(phenotype, type(None)): + meta_phen.processed = 0 + print('All phenotypes processed!') + break + print(("Merged phenotype shape {}".format(phenotype.shape))) + # TODO (middle) select phen from protocol + phenotype = phenotype[row_index[1], :] + print(("Selected phenotype shape {}".format(phenotype.shape))) + keys = list(meta_pard.phen_mapper.dic.keys()) + phen_ind_dic = {k: i for i, k in enumerate(keys)} + phen_ind = np.array([phen_ind_dic.get(i, -1) for i in phen_names]) + if np.sum(phen_ind == -1) == len(phen_ind): + print('There is no common ids in phenotype files and PD data!') + break + else: + print('There are {} common ids in phenotype files and PD data!'.format(np.sum(phen_ind != -1))) + C_test = C[phen_ind] + b_cov_test = b_cov[:, phen_ind] + + b4 = B4(phenotype, genotype) + print(("B4 shape is {}".format(b4.shape))) + t_stat, SE = HASE(b4, a_inv, b_cov_test, C_test, N_con, DF) + + if mapper.cluster == 'y': + Analyser.cluster = True + Analyser.chunk = ch + Analyser.node = mapper.node[1] + Analyser.t_stat = t_stat + Analyser.SE = SE + Analyser.threshold = args.thr + Analyser.out = args.out + Analyser.save_result(phen_names[(phen_ind != -1)]) + + t_stat = None + Analyser.t_stat = None + gc.collect() + + else: + t_stat, SE = HASE(b4, a_inv, b_cov, C, N_con, DF) + + Analyser.t_stat = t_stat + Analyser.SE = SE + Analyser.threshold = args.thr + Analyser.out = args.out + Analyser.save_result(np.array(list(meta_pard.phen_mapper.dic.keys()))) + + t_stat = None + Analyser.t_stat = None + gc.collect() + + + + ################################### TO DO EVERYTHING IN ONE GO ############################## + + elif args.mode == 'regression': + + # ARG_CHECKER.check(args,mode='regression') + + print('START regression mode...') + if args.mapper is None: + os.environ['MAPPER'] = "False" # need to set it here, before genotype Reader start + + phen = Reader('phenotype') + phen.start(args.phenotype[0]) + phen.permutation = args.permute_ph + + cov = Reader('covariates') + cov.start(args.covariates) + + interaction = None + if args.interaction is not None: + interaction = Reader('interaction') + interaction.start(args.interaction) + + if (cov.folder.n_files > 1 and cov.folder.format != '.npy') or ( + cov.folder.n_files > 2 and cov.folder.format == '.npy'): # TODO (middle) test + raise ValueError('In covariates folder should be only one file!') + + gen = [] + for i, j in enumerate(args.genotype): + gen.append(Reader('genotype')) + gen[i].start(j, hdf5=args.hdf5, study_name=args.study_name[i], ID=False) + + if args.mapper is not None: + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + if args.snp_id_inc is not None: + mapper.include = pd.DataFrame.from_csv(args.snp_id_inc, index_col=None) + print('Include:') + print(mapper.include.head()) + if 'ID' not in mapper.include.columns and ( + 'CHR' not in mapper.include.columns or 'bp' not in mapper.include.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_inc)) + if args.snp_id_exc is not None: + mapper.exclude = pd.DataFrame.from_csv(args.snp_id_exc, index_col=None) + print('Exclude:') + print(mapper.exclude.head()) + if 'ID' not in mapper.exclude.columns and ( + 'CHR' not in mapper.exclude.columns or 'bp' not in mapper.exclude.columns): + raise ValueError('{} table does not have ID or CHR,bp columns'.format(args.snp_id_exc)) + mapper.load(args.mapper) + mapper.load_flip(args.mapper) + mapper.cluster = args.cluster + mapper.node = args.node + else: + if len(args.genotype) == 1: + mapper = Mapper() + mapper.chunk_size = MAPPER_CHUNK_SIZE + mapper.genotype_names = args.study_name + mapper.reference_name = args.ref_name + mapper.cluster = args.cluster + mapper.node = args.node + mapper.n_study = 1 + mapper.n_keys = gen[0].folder._data.names.shape[0] + mapper.keys = np.array(gen[0].folder._data.names.tolist()) + mapper.values = np.array(list(range(mapper.n_keys))).reshape(-1, 1) + mapper.flip[args.study_name[0]] = np.array([1] * mapper.n_keys) + if args.snp_id_exc is not None or args.snp_id_inc is not None: + raise ValueError('You can not exclude or include variants to analysis without mapper!') + else: + raise ValueError('You can not run regression analysis with several genotype data without mapper!') + # mapper=None + + Analyser = HaseAnalyser() + Analyser.threshold = args.thr + Analyser.out = args.out + haseregression(phen, gen, cov, mapper, Analyser, args.maf, intercept=args.intercept, interaction=interaction) end = time.time() -print(('experiment finished in {} s'.format((end-start)))) \ No newline at end of file +print(('experiment finished in {} s'.format((end - start)))) diff --git a/utils/hase/hase/__init__.py b/utils/hase/hase/__init__.py index 318f9cd..f17f2c8 100644 --- a/utils/hase/hase/__init__.py +++ b/utils/hase/hase/__init__.py @@ -1,110 +1,111 @@ - import sys import os import hdgwas.data -from hdgwas.tools import Timer, Checker, study_indexes, Mapper,HaseAnalyser, merge_genotype, Reference, timing, check_np -from hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF +from hdgwas.tools import Timer, Checker, study_indexes, Mapper, HaseAnalyser, merge_genotype, Reference, timing, \ + check_np +from hdgwas.converter import GenotypePLINK, GenotypeMINIMAC, GenotypeVCF from hdgwas.data import Reader, MetaParData, MetaPhenotype from hdgwas.fake import Encoder -from hdgwas.hdregression import A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from hdgwas.hdregression import A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from hdgwas.pard import partial_derivatives from hdgwas.regression import haseregression import time from hdgwas.protocol import Protocol -from config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH +from config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + class HASE: - def __init__(self): - self.cluster = 'n' - self.effect_intercept = False - self.hdf5 = True - self.id = False - self.interaction = None - self.intercept = 'y' - self.maf = 0.0 - self.mapper_chunk = None - self.node = None - self.np = True - self.pd_full = False - self.permute_ph = False - self.protocol = None - self.ref_name = '1000Gp1v3_ref' - self.thr = None - self.vcf = False - - self.ph_id_exc = None - self.ph_id_inc = None - self.snp_id_inc = None - self.snp_id_exc = None - - self.mapper = None - self.mode = None - - self.derivatives = [] - self.encoded = [] - self.genotype = [] - self.phenotype = [] - self.covariates = [] - self.study_name = [] - - #os.environ['HASEDIR'] = '' - #os.environ['HASEOUT'] = '' - - self.flags = {} - - def add_study(self, study): - - if study.__class__.__name__=='Study': - - if study.study_name not in self.study_name: - self.study_name.append(study.study_name) - if study.derivatives is not None: - self.derivatives.append(study.derivatives) - if study.encoded is not None: - self.encoded.append(study.encoded) - else: - raise ValueError('There is no info about study encode status!') - - elif study.covariates is not None: - self.covariates.append(study.covariates) - else: - raise ValueError('Study should have covariates or derivatives!') - if study.genotype is not None: - self.genotype.append(study.genotype) - if study.phenotype is not None: - self.phenotype.append(study.phenotype) - - - else: - raise ValueError('You already added study with name {}'.format(study.study_name)) - - else: - raise ValueError('You can add only Study object!') + def __init__(self): + self.cluster = 'n' + self.effect_intercept = False + self.hdf5 = True + self.id = False + self.interaction = None + self.intercept = 'y' + self.maf = 0.0 + self.mapper_chunk = None + self.node = None + self.np = True + self.pd_full = False + self.permute_ph = False + self.protocol = None + self.ref_name = '1000Gp1v3_ref' + self.thr = None + self.vcf = False + + self.ph_id_exc = None + self.ph_id_inc = None + self.snp_id_inc = None + self.snp_id_exc = None + + self.mapper = None + self.mode = None + + self.derivatives = [] + self.encoded = [] + self.genotype = [] + self.phenotype = [] + self.covariates = [] + self.study_name = [] + + # os.environ['HASEDIR'] = '' + # os.environ['HASEOUT'] = '' + + self.flags = {} + + def add_study(self, study): + + if study.__class__.__name__ == 'Study': + + if study.study_name not in self.study_name: + self.study_name.append(study.study_name) + if study.derivatives is not None: + self.derivatives.append(study.derivatives) + if study.encoded is not None: + self.encoded.append(study.encoded) + else: + raise ValueError('There is no info about study encode status!') + + elif study.covariates is not None: + self.covariates.append(study.covariates) + else: + raise ValueError('Study should have covariates or derivatives!') + if study.genotype is not None: + self.genotype.append(study.genotype) + if study.phenotype is not None: + self.phenotype.append(study.phenotype) + + + else: + raise ValueError('You already added study with name {}'.format(study.study_name)) + + else: + raise ValueError('You can add only Study object!') class Study: - def __init__(self, name): - self.name = name - self.genotype = None - self.phenotype = None - self.derivatives = None - self.covariates = None - self.study_name = None - self.encoded = None - - def add_genotype(self, genotype_path, hdf5=True): - self.genotype = Reader('genotype') - self.genotype.start(genotype_path, hdf5=hdf5, study_name=self.study_name, ID=False) - - def add_phenotype(self, phenotype_path): - self.phenotype = Reader('phenotype') - self.phenotype.start(phenotype_path) - - def add_derivatives(self, derivatives_path): - self.derivatives = Reader('partial') - self.derivatives.start(derivatives_path, study_name=self.study_name) - self.derivatives.folder.load() - - def add_covariates(self, covariates_path): - self.covariates = Reader('covariates') - self.covariates.start(covariates_path) \ No newline at end of file + def __init__(self, name): + self.name = name + self.genotype = None + self.phenotype = None + self.derivatives = None + self.covariates = None + self.study_name = None + self.encoded = None + + def add_genotype(self, genotype_path, hdf5=True): + self.genotype = Reader('genotype') + self.genotype.start(genotype_path, hdf5=hdf5, study_name=self.study_name, ID=False) + + def add_phenotype(self, phenotype_path): + self.phenotype = Reader('phenotype') + self.phenotype.start(phenotype_path) + + def add_derivatives(self, derivatives_path): + self.derivatives = Reader('partial') + self.derivatives.start(derivatives_path, study_name=self.study_name) + self.derivatives.folder.load() + + def add_covariates(self, covariates_path): + self.covariates = Reader('covariates') + self.covariates.start(covariates_path) diff --git a/utils/hase/hdgwas/converter.py b/utils/hase/hdgwas/converter.py index 40bd175..e7f0a99 100644 --- a/utils/hase/hdgwas/converter.py +++ b/utils/hase/hdgwas/converter.py @@ -9,364 +9,374 @@ import shutil import signal + class Genotype(object): - def __init__(self): - self.file_name = None - self.reader=None - self.probes = None - self.individuals = None - self.genotype = None - self.out=None + def __init__(self): + self.file_name = None + self.reader = None + self.probes = None + self.individuals = None + self.genotype = None + self.out = None class GenotypeHDF5(Genotype): - def __init__(self, name,force=True): - super(GenotypeHDF5, self).__init__() - self.h5_name = '%s.h5' % name - self.file_name = name - self.pytable_filters = tables.Filters(complevel=9, complib='zlib') - self.h5_gen_file = None - self.h5_ind_file = None - self.h5_pr_file = None - self.gen_iter=0 - - - def write_data(self, type, overwrite=True): - - type_dic={'gen':['genotype',self.h5_gen_file], - 'ind':['individuals',self.h5_ind_file], - 'pr':['probes',self.h5_pr_file]} - - if (not overwrite) and os.path.isfile( os.path.join(self.out,type_dic[type][0],self.h5_name) ): - print(('File %s found. Please remove manually.' % self.h5_name)) - return - else: - if type=='pr': - self.h5_pr_file = tables.open_file(os.path.join(self.out,type_dic[type][0],self.h5_name), 'w', - title=self.file_name) - self.h5_pr_file.close() #need to close file before join data - elif type=='ind': - self.h5_ind_file = tables.open_file(os.path.join(self.out,type_dic[type][0],self.h5_name), 'w', - title=self.file_name) - elif type=='gen': - self.h5_gen_file = tables.open_file(os.path.join(self.out,type_dic[type][0],str(self.gen_iter)+'_'+self.h5_name), - 'w', title=self.file_name) - self.gen_iter+=1 - - def close(self): - self.h5_gen_file.close() - self.h5_ind_file.close() - self.h5_pr_file.close() - - def summary(self): - raise (NotImplementedError) + def __init__(self, name, force=True): + super(GenotypeHDF5, self).__init__() + self.h5_name = '%s.h5' % name + self.file_name = name + self.pytable_filters = tables.Filters(complevel=9, complib='zlib') + self.h5_gen_file = None + self.h5_ind_file = None + self.h5_pr_file = None + self.gen_iter = 0 + + def write_data(self, type, overwrite=True): + + type_dic = {'gen': ['genotype', self.h5_gen_file], + 'ind': ['individuals', self.h5_ind_file], + 'pr': ['probes', self.h5_pr_file]} + + if (not overwrite) and os.path.isfile(os.path.join(self.out, type_dic[type][0], self.h5_name)): + print(('File %s found. Please remove manually.' % self.h5_name)) + return + else: + if type == 'pr': + self.h5_pr_file = tables.open_file(os.path.join(self.out, type_dic[type][0], self.h5_name), 'w', + title=self.file_name) + self.h5_pr_file.close() # need to close file before join data + elif type == 'ind': + self.h5_ind_file = tables.open_file(os.path.join(self.out, type_dic[type][0], self.h5_name), 'w', + title=self.file_name) + elif type == 'gen': + self.h5_gen_file = tables.open_file( + os.path.join(self.out, type_dic[type][0], str(self.gen_iter) + '_' + self.h5_name), + 'w', title=self.file_name) + self.gen_iter += 1 + + def close(self): + self.h5_gen_file.close() + self.h5_ind_file.close() + self.h5_pr_file.close() + + def summary(self): + raise (NotImplementedError) class GenotypePLINK(GenotypeHDF5): - def __init__(self, name, reader=None): - super(GenotypePLINK, self).__init__(name) - self.reader=reader - self.split_size=None - - - def convert_individuals(self): - - individuals=self.reader.folder.get_fam() - - self.h5_ind_file.create_table(self.h5_ind_file.root, 'individuals', individuals, - title='Individuals', filters=self.pytable_filters) - self.h5_ind_file.root.individuals[:] = individuals - self.individuals = self.h5_ind_file.root.individuals[:] - self.n_ind=len(individuals) - - - #@profile - def convert_probes(self, chunk_size=100000): - - if os.path.isfile(os.path.join(self.out,'probes',self.h5_name)): - os.remove(os.path.join(self.out,'probes',self.h5_name)) - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - i=0 - chunk=np.array([]) - while True: - chunk=self.reader.folder.get_bim(chunk_size) - if isinstance(chunk,type(None)): - break - chunk.columns=['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'] - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - # WARNING!!! doesn't work on windows - chunk.to_hdf(os.path.join(self.out,'probes',self.h5_name), key='probes',format='table',data_columns=True, append=True, - complib='zlib',complevel=9, min_itemsize = 45) - gc.collect() - i+=1 - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(self.out,'probes',self.file_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - print(('Number of Probes {} converted'.format(self.reader.folder.N_probes))) - - #@profile - def convert_genotypes(self): - - - chunk_size=self.split_size - if chunk_size is None: - raise ValueError('CONVERTER_SPLIT_SIZE does not define in config file!') - G=np.array([]) - #self.reader.folder.processed=0 - while True: - with Timer() as t: - G=self.reader.folder.get_bed(chunk_size) - if isinstance(G,type(None)): - break - - print(('Time to read {} SNPs is {} s'.format(G.shape[0], t.secs))) - - self.write_data('gen') - atom = tables.Int8Atom() - self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, - (G.shape), - title='Genotype', filters=self.pytable_filters) - with Timer() as t: - self.genotype[:] = G - - print(('Time to write {} SNPs is {} s'.format(G.shape[0], t.secs))) - - self.h5_gen_file.close() - G=None - gc.collect() - - - - def plink2hdf5(self,out, force=True): - - if force: - try: - os.mkdir(os.path.join(out,'genotype') ) - os.mkdir(os.path.join(out,'individuals') ) - os.mkdir(os.path.join(out,'probes') ) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(self.out))) - - self.out=out - self.write_data('ind') - self.convert_individuals() - self.h5_ind_file.close() - - self.reader.folder.processed=0 - self.write_data('pr') - self.convert_probes() - - self.reader.folder.processed=0 - self.convert_genotypes() - - - def _summary(self, head=10): - pass #TODO (low) rewrite to get statistic not load to memory - - print(('Number of Probes: %d' % None)) - print(('Number of Individuals: %d' % None)) - print(('The genotype matrix is of size %d by %d' % None)) + def __init__(self, name, reader=None): + super(GenotypePLINK, self).__init__(name) + self.reader = reader + self.split_size = None + + def convert_individuals(self): + + individuals = self.reader.folder.get_fam() + + self.h5_ind_file.create_table(self.h5_ind_file.root, 'individuals', individuals, + title='Individuals', filters=self.pytable_filters) + self.h5_ind_file.root.individuals[:] = individuals + self.individuals = self.h5_ind_file.root.individuals[:] + self.n_ind = len(individuals) + + # @profile + def convert_probes(self, chunk_size=100000): + + if os.path.isfile(os.path.join(self.out, 'probes', self.h5_name)): + os.remove(os.path.join(self.out, 'probes', self.h5_name)) + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + i = 0 + chunk = np.array([]) + while True: + chunk = self.reader.folder.get_bim(chunk_size) + if isinstance(chunk, type(None)): + break + chunk.columns = ['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'] + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + # WARNING!!! doesn't work on windows + chunk.to_hdf(os.path.join(self.out, 'probes', self.h5_name), key='probes', format='table', + data_columns=True, append=True, + complib='zlib', complevel=9, min_itemsize=45) + gc.collect() + i += 1 + pd.DataFrame.from_dict(hash_table).to_csv( + os.path.join(self.out, 'probes', self.file_name + '_hash_table.csv.gz'), index=False, compression='gzip', + sep='\t') + print(('Number of Probes {} converted'.format(self.reader.folder.N_probes))) + + # @profile + def convert_genotypes(self): + + chunk_size = self.split_size + if chunk_size is None: + raise ValueError('CONVERTER_SPLIT_SIZE does not define in config file!') + G = np.array([]) + # self.reader.folder.processed=0 + while True: + with Timer() as t: + G = self.reader.folder.get_bed(chunk_size) + if isinstance(G, type(None)): + break + + print(('Time to read {} SNPs is {} s'.format(G.shape[0], t.secs))) + + self.write_data('gen') + atom = tables.Int8Atom() + self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, + (G.shape), + title='Genotype', filters=self.pytable_filters) + with Timer() as t: + self.genotype[:] = G + + print(('Time to write {} SNPs is {} s'.format(G.shape[0], t.secs))) + + self.h5_gen_file.close() + G = None + gc.collect() + + def plink2hdf5(self, out, force=True): + + if force: + try: + os.mkdir(os.path.join(out, 'genotype')) + os.mkdir(os.path.join(out, 'individuals')) + os.mkdir(os.path.join(out, 'probes')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(self.out))) + + self.out = out + self.write_data('ind') + self.convert_individuals() + self.h5_ind_file.close() + + self.reader.folder.processed = 0 + self.write_data('pr') + self.convert_probes() + + self.reader.folder.processed = 0 + self.convert_genotypes() + + def _summary(self, head=10): + pass # TODO (low) rewrite to get statistic not load to memory + + print(('Number of Probes: %d' % None)) + print(('Number of Individuals: %d' % None)) + print(('The genotype matrix is of size %d by %d' % None)) + class GenotypeMINIMAC(object): - def __init__(self, name, reader=None): - self.reader=reader - self.study_name=name - self.split_size=None - self.hdf5_iter=0 - self.pytable_filter=tables.Filters(complevel=9, complib='zlib') - self.cluster=False - - def save_hdf5_chunk(self,data,out,name): - print('Saving chunk...{}'.format(os.path.join(out,'genotype',str(self.hdf5_iter)+'_'+name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(out,'genotype',str(self.hdf5_iter)+'_'+name+'.h5'), 'w', title=name) - - atom = tables.Float16Atom() # TODO (low) check data format - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=self.pytable_filter) - genotype[:] = data - h5_gen_file.close() - genotype=None - data=None - gc.collect() - self.hdf5_iter+=1 - - def MACH2hdf5(self, out, id=False,remove_id=False): - FNULL = open(os.devnull, 'w') - subprocess.call(['bash',os.path.join(os.environ['HASEDIR'],'tools','minimac2hdf5.sh'), - self.reader.folder.path, out , os.environ['HASEDIR'], self.study_name ], shell=False,stderr=subprocess.STDOUT) - - if id: - if self.cluster: - ind=pd.read_hdf(os.path.join(out,'individuals',self.study_name+'.h5'),'individuals').individual - N=ind.shape[0] - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'id_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'id_convert.sh' ) ], shell=False,stderr=subprocess.STDOUT) - print(proc.communicate()) - self.folder=MINIMACHDF5Folder(out,self.study_name) - self.folder.pool.split_size=self.split_size - self.folder.pool.chunk_size=self.split_size - print('Start to convert id files to chunk files...') - while True: - data=self.folder.get_next() - if data is None: - break - self.save_hdf5_chunk(data,out,self.study_name) - gc.collect() - - print('Finished') - if remove_id: - self.folder.pool.remove(type='all') - else: - try: - os.mkdir(os.path.join(out,'id_genotype') ) - except: - print('id_genotype folder already exist') - - self.folder.pool.move(os.path.join(out,'id_genotype'),type='all') - - shutil.move(os.path.join(out,'id_convert.sh'), os.path.join(out,'tmp_files','id_convert.sh') ) - shutil.move(os.path.join(out,'SUB_FAM.txt'), os.path.join(out,'tmp_files','SUB_FAM.txt') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - - else: - f=open(os.path.join( out,'minimac_convert.sh' ), 'w') - probes=pd.HDFStore(os.path.join(out,'probes', self.study_name +'.h5'),'r') - N_probes=probes.get_storer('probes').nrows - print('There are {} probes'.format(N_probes)) - chunk=np.vstack(((np.arange(0,N_probes,self.split_size)+1)[:-1],np.arange(0,N_probes,self.split_size)[1:])) - N_jobs=chunk.shape[1] - ch=[0,0] - i_ch = -1 - for i_ch in range(chunk.shape[1]): - ch=chunk[:,i_ch] - #print ch - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','minimacGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[0], - ch[1], - i_ch - ) - f.write(l) - if ch[1]!=N_probes: - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','minimacGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[1]+1, - N_probes, - i_ch+1 - ) - f.write(l) - N_jobs+=1 - f.close() - if self.cluster: - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N_jobs,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'minimac_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'minimac_convert.sh' ) ], shell=False,stderr=FNULL) - print(proc.communicate()) - - shutil.move(os.path.join(out,'minimac_convert.sh'), os.path.join(out,'tmp_files','minimac_convert.sh') ) - shutil.move(os.path.join(out,'id_convert.sh'), os.path.join(out,'tmp_files','id_convert.sh') ) - shutil.move(os.path.join(out,'SUB_FAM.txt'), os.path.join(out,'tmp_files','SUB_FAM.txt') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - - shutil.move(os.path.join(out,'files_order.txt'),os.path.join(out,'tmp_files','files_order.txt')) - shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) - - def summary(self): - pass + def __init__(self, name, reader=None): + self.reader = reader + self.study_name = name + self.split_size = None + self.hdf5_iter = 0 + self.pytable_filter = tables.Filters(complevel=9, complib='zlib') + self.cluster = False + + def save_hdf5_chunk(self, data, out, name): + print('Saving chunk...{}'.format(os.path.join(out, 'genotype', str(self.hdf5_iter) + '_' + name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(out, 'genotype', str(self.hdf5_iter) + '_' + name + '.h5'), 'w', title=name) + + atom = tables.Float16Atom() # TODO (low) check data format + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=self.pytable_filter) + genotype[:] = data + h5_gen_file.close() + genotype = None + data = None + gc.collect() + self.hdf5_iter += 1 + + def MACH2hdf5(self, out, id=False, remove_id=False): + FNULL = open(os.devnull, 'w') + subprocess.call(['bash', os.path.join(os.environ['HASEDIR'], 'tools', 'minimac2hdf5.sh'), + self.reader.folder.path, out, os.environ['HASEDIR'], self.study_name], shell=False, + stderr=subprocess.STDOUT) + + if id: + if self.cluster: + ind = pd.read_hdf(os.path.join(out, 'individuals', self.study_name + '.h5'), 'individuals').individual + N = ind.shape[0] + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N, os.path.join(os.environ['HASEDIR'], 'tools', + 'qsub_helper.sh'), + os.path.join(out, 'id_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'id_convert.sh')], shell=False, + stderr=subprocess.STDOUT) + print(proc.communicate()) + self.folder = MINIMACHDF5Folder(out, self.study_name) + self.folder.pool.split_size = self.split_size + self.folder.pool.chunk_size = self.split_size + print('Start to convert id files to chunk files...') + while True: + data = self.folder.get_next() + if data is None: + break + self.save_hdf5_chunk(data, out, self.study_name) + gc.collect() + + print('Finished') + if remove_id: + self.folder.pool.remove(type='all') + else: + try: + os.mkdir(os.path.join(out, 'id_genotype')) + except: + print('id_genotype folder already exist') + + self.folder.pool.move(os.path.join(out, 'id_genotype'), type='all') + + shutil.move(os.path.join(out, 'id_convert.sh'), os.path.join(out, 'tmp_files', 'id_convert.sh')) + shutil.move(os.path.join(out, 'SUB_FAM.txt'), os.path.join(out, 'tmp_files', 'SUB_FAM.txt')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + + else: + f = open(os.path.join(out, 'minimac_convert.sh'), 'w') + probes = pd.HDFStore(os.path.join(out, 'probes', self.study_name + '.h5'), 'r') + N_probes = probes.get_storer('probes').nrows + print('There are {} probes'.format(N_probes)) + chunk = np.vstack( + ((np.arange(0, N_probes, self.split_size) + 1)[:-1], np.arange(0, N_probes, self.split_size)[1:])) + N_jobs = chunk.shape[1] + ch = [0, 0] + i_ch = -1 + for i_ch in range(chunk.shape[1]): + ch = chunk[:, i_ch] + # print ch + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'minimacGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[0], + ch[1], + i_ch + ) + f.write(l) + if ch[1] != N_probes: + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'minimacGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[1] + 1, + N_probes, + i_ch + 1 + ) + f.write(l) + N_jobs += 1 + f.close() + if self.cluster: + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N_jobs, os.path.join(os.environ['HASEDIR'], 'tools', + 'qsub_helper.sh'), + os.path.join(out, 'minimac_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'minimac_convert.sh')], shell=False, stderr=FNULL) + print(proc.communicate()) + + shutil.move(os.path.join(out, 'minimac_convert.sh'), os.path.join(out, 'tmp_files', 'minimac_convert.sh')) + shutil.move(os.path.join(out, 'id_convert.sh'), os.path.join(out, 'tmp_files', 'id_convert.sh')) + shutil.move(os.path.join(out, 'SUB_FAM.txt'), os.path.join(out, 'tmp_files', 'SUB_FAM.txt')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + + shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) + shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) + + def summary(self): + pass + class GenotypeVCF(object): - def __init__(self, name, reader=None): - self.reader=reader - self.study_name=name - self.split_size=None - self.hdf5_iter=0 - self.pytable_filter=tables.Filters(complevel=9, complib='zlib') - self.cluster=False - - def VCF2hdf5(self, out): - - FNULL = open(os.devnull, 'w') - subprocess.call(['bash',os.path.join(os.environ['HASEDIR'],'tools','VCF2hdf5.sh'), - self.reader.folder.path, out , os.environ['HASEDIR'], self.study_name ], shell=False,stderr=subprocess.STDOUT, - preexec_fn=lambda:signal.signal(signal.SIGPIPE, signal.SIG_DFL) - ) - - - f=open(os.path.join( out,'vcf_convert.sh' ), 'w') - probes=pd.HDFStore(os.path.join(out,'probes', self.study_name +'.h5'),'r') - N_probes=probes.get_storer('probes').nrows - print('There are {} probes'.format(N_probes)) - chunk=np.vstack(((np.arange(0,N_probes,self.split_size)+1)[:-1],np.arange(0,N_probes,self.split_size)[1:])) - N_jobs=chunk.shape[1] - ch=[0,0] - i_ch=-1 - for i_ch in range(chunk.shape[1]): - ch=chunk[:,i_ch] - #print ch - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','VCFGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[0], - ch[1], - i_ch - ) - f.write(l) - if ch[1]!=N_probes: - l='bash {} {} {} {} {} {} {} {} \n'.format( - os.path.join(os.environ['HASEDIR'],'tools','VCFGenotype2hdf5.sh'), - self.reader.folder.path, - out, - os.environ['HASEDIR'], - self.study_name, - ch[1]+1, - N_probes, - i_ch+1 - ) - f.write(l) - N_jobs+=1 - f.close() - if self.cluster: - print('Submit to cluster!') - cmd="qsub -sync y -t 1-{} {} {}".format(N_jobs,os.path.join(os.environ['HASEDIR'],'tools','qsub_helper.sh'),os.path.join( out,'vcf_convert.sh' )) - print(cmd) - proc=subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE).communicate() - else: - proc=subprocess.Popen(['bash',os.path.join( out,'vcf_convert.sh' ) ], shell=False,stderr=FNULL) - print(proc.communicate()) - - shutil.move(os.path.join(out,'vcf_convert.sh'), os.path.join(out,'tmp_files','vcf_convert.sh') ) - shutil.move(os.path.join(out,'SUB_ID.txt'), os.path.join(out,'tmp_files','SUB_ID.txt') ) - shutil.move(os.path.join(out, 'snps_count.txt'), os.path.join(out, 'tmp_files', 'snps_count.txt')) - - shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) - shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) + def __init__(self, name, reader=None): + self.reader = reader + self.study_name = name + self.split_size = None + self.hdf5_iter = 0 + self.pytable_filter = tables.Filters(complevel=9, complib='zlib') + self.cluster = False + + def VCF2hdf5(self, out): + + FNULL = open(os.devnull, 'w') + subprocess.call(['bash', os.path.join(os.environ['HASEDIR'], 'tools', 'VCF2hdf5.sh'), + self.reader.folder.path, out, os.environ['HASEDIR'], self.study_name], shell=False, + stderr=subprocess.STDOUT, + preexec_fn=lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL) + ) + + f = open(os.path.join(out, 'vcf_convert.sh'), 'w') + probes = pd.HDFStore(os.path.join(out, 'probes', self.study_name + '.h5'), 'r') + N_probes = probes.get_storer('probes').nrows + print('There are {} probes'.format(N_probes)) + chunk = np.vstack( + ((np.arange(0, N_probes, self.split_size) + 1)[:-1], np.arange(0, N_probes, self.split_size)[1:])) + N_jobs = chunk.shape[1] + ch = [0, 0] + i_ch = -1 + for i_ch in range(chunk.shape[1]): + ch = chunk[:, i_ch] + # print ch + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'VCFGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[0], + ch[1], + i_ch + ) + f.write(l) + if ch[1] != N_probes: + l = 'bash {} {} {} {} {} {} {} {} \n'.format( + os.path.join(os.environ['HASEDIR'], 'tools', 'VCFGenotype2hdf5.sh'), + self.reader.folder.path, + out, + os.environ['HASEDIR'], + self.study_name, + ch[1] + 1, + N_probes, + i_ch + 1 + ) + f.write(l) + N_jobs += 1 + f.close() + if self.cluster: + print('Submit to cluster!') + cmd = "qsub -sync y -t 1-{} {} {}".format(N_jobs, + os.path.join(os.environ['HASEDIR'], 'tools', 'qsub_helper.sh'), + os.path.join(out, 'vcf_convert.sh')) + print(cmd) + proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate() + else: + proc = subprocess.Popen(['bash', os.path.join(out, 'vcf_convert.sh')], shell=False, stderr=FNULL) + print(proc.communicate()) + + shutil.move(os.path.join(out, 'vcf_convert.sh'), os.path.join(out, 'tmp_files', 'vcf_convert.sh')) + shutil.move(os.path.join(out, 'SUB_ID.txt'), os.path.join(out, 'tmp_files', 'SUB_ID.txt')) + shutil.move(os.path.join(out, 'snps_count.txt'), os.path.join(out, 'tmp_files', 'snps_count.txt')) + + shutil.move(os.path.join(out, 'files_order.txt'), os.path.join(out, 'tmp_files', 'files_order.txt')) + shutil.move(os.path.join(out, 'info.txt'), os.path.join(out, 'tmp_files', 'info.txt')) diff --git a/utils/hase/hdgwas/data.py b/utils/hase/hdgwas/data.py index bbdf777..e1b548e 100644 --- a/utils/hase/hdgwas/data.py +++ b/utils/hase/hdgwas/data.py @@ -10,1212 +10,1216 @@ import shutil from collections import OrderedDict + class MINIMACPool(object): - def __init__(self): - self.paths={} - self.id=None - self.max_index=None - self.chunk_size=None - self.finish=0 - self.split_size=None - - - def get_chunk(self, indices=None): - - if self.max_index is None and len(self.path)==0: - raise ValueError('There is no data in pool.') - else: - sample=h5py.File(self.paths[self.id[0]], 'r')[self.id[0]][...] - self.max_index=np.max(sample.shape) - - print(self.finish) - result=[] - if indices is None: - if self.finish!=self.max_index: - n=list(range(self.finish, self.finish + self.chunk_size)) if (self.finish + self.chunk_size)0.1).any(): - raise ValueError('MAF is not consistent between PD data!') - - - def get(self, SNPs_index=None, B4=False, regression_model=None,random_effect_intercept=False ): - - if self.pd is None: - raise ValueError('Data not defined!') - k=list(self.pd.keys()) - if SNPs_index is not None: - if len(self.pd)!=len(SNPs_index): - raise ValueError('There are not equal number od PD and SNPs indexes {}!={}'.format(len(self.pd), len(SNPs_index))) - a_test, b_cov, C, a_cov = self.pd[k[0]].get(gen_order=SNPs_index[0], phen_order=self.phen_order[k[0]], cov_order=self.cov_order[k[0]] ) - if random_effect_intercept and len(self.pd)>1: #TODO (high) - a_test_effect=a_test[:,0:1] - b_cov_effect=b_cov[0:1,:] - a_cov_effect=a_cov[0:1,:] - else: - raise ValueError('Indexes are not defined!') - - if B4: - b4=self.pd[k[0]].folder._data.b4[SNPs_index[0],:] - b4=b4[:,self.phen_order[k[0]]] - - #self.check_maf(SNPs_index) - - for i in range(1, len(self.pd)): - a,b,c,a_c=self.pd[k[i]].get(gen_order=SNPs_index[i], phen_order=self.phen_order[k[i]], cov_order=self.cov_order[k[i]]) - self.check_pd([a_test, b_cov, C, a_cov], [a,b,c,a_c]) - a_test=a_test + a - b_cov=b_cov + b - C=C+c - a_cov=a_cov + a_c - if random_effect_intercept and i<(len(self.pd)-1) : - a_test_effect=np.hstack((a_test_effect,a[:,0:1])) - b_cov_effect=np.vstack((b_cov_effect,b[0:1,:])) - a_cov_effect=np.vstack((a_cov_effect,a_c[0:1,:])) - if B4: - b4_tmp=self.pd[k[i]].folder._data.b4[SNPs_index[i], : ] - b4=b4+b4_tmp[:, self.phen_order[k[i]]] - - if random_effect_intercept and len(self.pd)>1: - a_cov_I=np.zeros((len(self.pd)-1,len(self.pd)-1)) - np.fill_diagonal(a_cov_I,a_cov_effect[:,0]) - a_effect=np.hstack((a_cov_I,a_cov_effect)) - a_test=np.hstack((a_test_effect,a_test)) - b_cov=np.vstack((b_cov_effect,b_cov)) - a_cov=np.vstack((a_cov_effect,a_cov)) - a_cov=np.hstack((a_effect.T,a_cov)) - - if B4: - return a_test, b_cov, C, a_cov, b4 - else: - return a_test, b_cov, C, a_cov - - - def maf_pard(self,SNPs_index=None): - - samples=0 - maf=np.zeros( len(SNPs_index[0]) ) - - for j,i in enumerate(self.pd): - n=len(self.pd[i].folder._data.metadata['id']) - samples+=n - maf=maf+n*np.array(self.pd[i].folder._data.metadata['MAF'])[SNPs_index[j]] - maf=maf/np.float(samples) - return maf - - def get_n_id(self): - return np.sum([len(self.pd[i].folder._data.metadata['id']) for i in self.pd ]) - - def get_phenotype_names(self): - n={} - for i in self.pd: - n[i]=self.pd[i].folder._data.metadata['phenotype'] + def __init__(self, pd, study_names, protocol=None): + # @timing + def _check(map, keys): + values = np.array(list(map.dic.values())) + result = {} + r = (values == -1).any(axis=1) + if np.sum(r) == values.shape[0]: + raise ValueError('There is no common names between studies') + for i, k in enumerate(keys): + result[k] = values[~r, i] + return result + + self.name = None + self.study_names = study_names + self.phen_mapper = Mapper() + self.cov_mapper = Mapper() + self.covariates = OrderedDict() + self.pd = OrderedDict() + for i in pd: + self.pd[i.folder.name] = i + keys = [] + if protocol is None: + for i, k in enumerate(pd): + self.covariates[k] = [n.split(self.study_names[i] + '_')[1] for n in k.folder._data.metadata['names']] + if i == 0: + self.phen_mapper.fill(k.folder._data.metadata['phenotype'], k.folder.name, reference=False) + self.cov_mapper.fill(self.covariates[k], k.folder.name, reference=False) + else: + self.phen_mapper.push(k.folder._data.metadata['phenotype'], name=k.folder.name, new_id=False) + self.cov_mapper.push(self.covariates[k], name=k.folder.name, new_id=False) + keys.append(k.folder.name) + + self.phen_order = _check(self.phen_mapper, keys) + self.cov_order = _check(self.cov_mapper, keys) + + if protocol is not None: + if not protocol.enable: + protocol.parse() + + def check_pd(self, old, new): + + np.set_printoptions(precision=3, suppress=True) + print("*******PD CHECK*********") + print('A covariates...') + print(old[3] / old[3][0, 0]) + print(new[3] / new[3][0, 0]) + print('FREQ TESTs') + N = np.random.randint(0, np.min((old[0].shape[0], new[0].shape[0])), 10) + print(np.array(old[0][:, 0] / old[3][0, 0] / 2)[N]) + print(np.array(new[0][:, 0] / new[3][0, 0] / 2)[N]) + print('FREQ PHENO') + M = np.random.randint(0, np.min((old[1].shape[1], new[1].shape[1])), 10) + print(np.array(old[1][0, :] / old[3][0, 0])[M]) + print(np.array(new[1][0, :] / new[3][0, 0])[M]) + print("****************") + + # @timing + def check_maf(self, SNPs_index): + maf = np.zeros((SNPs_index[0].shape[0], len(self.pd))) + + for i, j in enumerate(self.pd): + maf[:, i] = np.array(self.pd[j].folder._data.metadata['MAF'])[SNPs_index[i].astype(np.int64)] + + if (np.std(maf, axis=1) > 0.1).any(): + raise ValueError('MAF is not consistent between PD data!') + + def get(self, SNPs_index=None, B4=False, regression_model=None, random_effect_intercept=False): + + if self.pd is None: + raise ValueError('Data not defined!') + k = list(self.pd.keys()) + if SNPs_index is not None: + if len(self.pd) != len(SNPs_index): + raise ValueError( + 'There are not equal number od PD and SNPs indexes {}!={}'.format(len(self.pd), len(SNPs_index))) + a_test, b_cov, C, a_cov = self.pd[k[0]].get(gen_order=SNPs_index[0], phen_order=self.phen_order[k[0]], + cov_order=self.cov_order[k[0]]) + if random_effect_intercept and len(self.pd) > 1: # TODO (high) + a_test_effect = a_test[:, 0:1] + b_cov_effect = b_cov[0:1, :] + a_cov_effect = a_cov[0:1, :] + else: + raise ValueError('Indexes are not defined!') + + if B4: + b4 = self.pd[k[0]].folder._data.b4[SNPs_index[0], :] + b4 = b4[:, self.phen_order[k[0]]] + + # self.check_maf(SNPs_index) + + for i in range(1, len(self.pd)): + a, b, c, a_c = self.pd[k[i]].get(gen_order=SNPs_index[i], phen_order=self.phen_order[k[i]], + cov_order=self.cov_order[k[i]]) + self.check_pd([a_test, b_cov, C, a_cov], [a, b, c, a_c]) + a_test = a_test + a + b_cov = b_cov + b + C = C + c + a_cov = a_cov + a_c + if random_effect_intercept and i < (len(self.pd) - 1): + a_test_effect = np.hstack((a_test_effect, a[:, 0:1])) + b_cov_effect = np.vstack((b_cov_effect, b[0:1, :])) + a_cov_effect = np.vstack((a_cov_effect, a_c[0:1, :])) + if B4: + b4_tmp = self.pd[k[i]].folder._data.b4[SNPs_index[i], :] + b4 = b4 + b4_tmp[:, self.phen_order[k[i]]] + + if random_effect_intercept and len(self.pd) > 1: + a_cov_I = np.zeros((len(self.pd) - 1, len(self.pd) - 1)) + np.fill_diagonal(a_cov_I, a_cov_effect[:, 0]) + a_effect = np.hstack((a_cov_I, a_cov_effect)) + a_test = np.hstack((a_test_effect, a_test)) + b_cov = np.vstack((b_cov_effect, b_cov)) + a_cov = np.vstack((a_cov_effect, a_cov)) + a_cov = np.hstack((a_effect.T, a_cov)) + + if B4: + return a_test, b_cov, C, a_cov, b4 + else: + return a_test, b_cov, C, a_cov + + def maf_pard(self, SNPs_index=None): + + samples = 0 + maf = np.zeros(len(SNPs_index[0])) + + for j, i in enumerate(self.pd): + n = len(self.pd[i].folder._data.metadata['id']) + samples += n + maf = maf + n * np.array(self.pd[i].folder._data.metadata['MAF'])[SNPs_index[j]] + maf = maf / np.float(samples) + return maf + + def get_n_id(self): + return np.sum([len(self.pd[i].folder._data.metadata['id']) for i in self.pd]) + + def get_phenotype_names(self): + n = {} + for i in self.pd: + n[i] = self.pd[i].folder._data.metadata['phenotype'] class Folder(object): - def __init__(self,path): - self.path=path - if not os.path.isdir(self.path): - raise ValueError('{} is not a folder'.format(self.path)) - self.format=None - self.protected=[] - self.n_files=None - self.read_files={} - self.files=None - self.processed=0 - self._data=Data() - self._scan() - self.folder_cache={} - self.folder_cache_flag=True - self.cache_buffer_size=10 - self._id=None - - def _scan(self): - l=os.listdir(self.path) - if len(l)==0: - raise ValueError('There is no files in {}'.format(self.path)) - exts=[os.path.splitext(i)[1] for i in l ] - s=set(exts) - if not len(s) <= 1: - if s=={'.fam','.bed','.bim'} : - self.format='PLINK' - else: - print("path",self.path) - print(l) - raise ValueError('There are different data format {} in {} folder'.format(set(exts) ,self.path)) - else: - N=len(l) - self.n_files=N - self.format=exts[0] - self.files=l - - - def get_next(self,**kwargs): - d=self._data.get_next(**kwargs) - if isinstance(d,type(None)): - file=next(self) - if isinstance(file,type(None)): - return None - self.read(file) - return self._data.get_next(**kwargs) - else: - return d - - - def read(self,*args,**kwargs): - pass - - def __next__(self): - while True: - try: - if self.processed==self.n_files: - print('read all', self.path) - return None - f=self.files[self.processed] - self.processed+=1 - if f not in self.protected: - self.read_files[f]=0 - break - else: - self.read_files[f]=1 - except: - return None - return f - - def get(self,**kwargs): - return self._data.get(**kwargs) + def __init__(self, path): + self.path = path + if not os.path.isdir(self.path): + raise ValueError('{} is not a folder'.format(self.path)) + self.format = None + self.protected = [] + self.n_files = None + self.read_files = {} + self.files = None + self.processed = 0 + self._data = Data() + self._scan() + self.folder_cache = {} + self.folder_cache_flag = True + self.cache_buffer_size = 10 + self._id = None + + def _scan(self): + l = os.listdir(self.path) + if len(l) == 0: + raise ValueError('There is no files in {}'.format(self.path)) + exts = [os.path.splitext(i)[1] for i in l] + s = set(exts) + if not len(s) <= 1: + if s == {'.fam', '.bed', '.bim'}: + self.format = 'PLINK' + else: + print("path", self.path) + print(l) + raise ValueError('There are different data format {} in {} folder'.format(set(exts), self.path)) + else: + N = len(l) + self.n_files = N + self.format = exts[0] + self.files = l + + def get_next(self, **kwargs): + d = self._data.get_next(**kwargs) + if isinstance(d, type(None)): + file = next(self) + if isinstance(file, type(None)): + return None + self.read(file) + return self._data.get_next(**kwargs) + else: + return d + + def read(self, *args, **kwargs): + pass + + def __next__(self): + while True: + try: + if self.processed == self.n_files: + print('read all', self.path) + return None + f = self.files[self.processed] + self.processed += 1 + if f not in self.protected: + self.read_files[f] = 0 + break + else: + self.read_files[f] = 1 + except: + return None + return f + + def get(self, **kwargs): + return self._data.get(**kwargs) class HDF5Folder(Folder): - def __init__(self,path, name): - super(HDF5Folder, self).__init__(path) + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) - def _scan(self): - pass + def _scan(self): + pass - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass - def read(self, file, index=None, MAF=None): - pass + def read(self, file, index=None, MAF=None): + pass - def get(self, index): - pass + def get(self, index): + pass class PLINKHDF5Folder(HDF5Folder): - def __init__(self,path,name): - super(HDF5Folder, self).__init__(path) - self.name=name - self.path=path - self.format='.h5' - self.pool=Pool() - self.iter=-1 - if not os.path.isdir(os.path.join(self.path,'genotype')) or not os.path.isdir(os.path.join(self.path,'probes')) or not os.path.isdir(os.path.join(self.path,'individuals')): - raise ValueError('in genotype folder should be /genotype; /probes; /individuals folders') - - self.f_names=os.listdir(os.path.join(self.path,'genotype')) #TODO (high) remove this extra attribute - self.files = self.f_names - self.n_files=len(self.f_names) - self.processed=-1 - self.pool.paths={i:os.path.join(self.path,'genotype',str(i)+'_'+self.name +'.h5') for i in range(self.n_files)} - - self._data=Hdf5Data(self.path,self.name) - self._id=self._data.id - self.pool.split_size=self._data.gen_split_size - - def _scan(self): - pass - - def get_next(self,**kwargs): - - self.iter+=1 - if self.iter==self.n_files: - return None - file=os.path.join(self.path,'genotype',str(self.iter)+'_'+self.name +'.h5') - return self.read(file,**kwargs) - - def read(self, file, index=None, MAF=None): - print('reading file {}'.format(file)) - - f=h5py.File(file, 'r') - - d=f['genotype'][...] - - if isinstance(index,type(None)): #TODO (mid) check - return d - else: - return d[:,index] - - def get(self, index, impute=True): - self.processed+=len(index) - result=[] - if True: - #if self.pool.inmem==self.pool.limit: #TODO (high) check the bellow methods, remove get_data from pool? - result=self.pool.get_chunk(index, impute) - else: - result=[self.pool.get_data(i,j) for i,j in index] - return np.array(result) - - def get_info(self,file): - info={} - f = h5py.File(file, 'r') - info['shape']= f['genotype'].shape - f.close() - return info + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) + self.name = name + self.path = path + self.format = '.h5' + self.pool = Pool() + self.iter = -1 + if not os.path.isdir(os.path.join(self.path, 'genotype')) or not os.path.isdir( + os.path.join(self.path, 'probes')) or not os.path.isdir(os.path.join(self.path, 'individuals')): + raise ValueError('in genotype folder should be /genotype; /probes; /individuals folders') + + self.f_names = os.listdir(os.path.join(self.path, 'genotype')) # TODO (high) remove this extra attribute + self.files = self.f_names + self.n_files = len(self.f_names) + self.processed = -1 + self.pool.paths = {i: os.path.join(self.path, 'genotype', str(i) + '_' + self.name + '.h5') for i in + range(self.n_files)} + + self._data = Hdf5Data(self.path, self.name) + self._id = self._data.id + self.pool.split_size = self._data.gen_split_size + + def _scan(self): + pass + + def get_next(self, **kwargs): + + self.iter += 1 + if self.iter == self.n_files: + return None + file = os.path.join(self.path, 'genotype', str(self.iter) + '_' + self.name + '.h5') + return self.read(file, **kwargs) + + def read(self, file, index=None, MAF=None): + print('reading file {}'.format(file)) + + f = h5py.File(file, 'r') + + d = f['genotype'][...] + + if isinstance(index, type(None)): # TODO (mid) check + return d + else: + return d[:, index] + + def get(self, index, impute=True): + self.processed += len(index) + result = [] + if True: + # if self.pool.inmem==self.pool.limit: #TODO (high) check the bellow methods, remove get_data from pool? + result = self.pool.get_chunk(index, impute) + else: + result = [self.pool.get_data(i, j) for i, j in index] + return np.array(result) + + def get_info(self, file): + info = {} + f = h5py.File(file, 'r') + info['shape'] = f['genotype'].shape + f.close() + return info -class MINIMACHDF5Folder(HDF5Folder): - - def __init__(self,path, name): - super(HDF5Folder, self).__init__(path) - self.name=name - self.path=path - self.format='.h5' - self.pool=MINIMACPool() - self.pool.path=self.path - self.f_names=os.listdir(os.path.join(self.path,'genotype')) - self.n_files=len(self.f_names) - self._data=Hdf5Data(self.path,self.name, type='MINIMAC') - self._id=self._data.id - self.pool.id=self._id - self.pool.paths={i:os.path.join(self.path,'genotype',i + '.h5') for i in self._id} +class MINIMACHDF5Folder(HDF5Folder): + def __init__(self, path, name): + super(HDF5Folder, self).__init__(path) + self.name = name + self.path = path + self.format = '.h5' + self.pool = MINIMACPool() + self.pool.path = self.path + self.f_names = os.listdir(os.path.join(self.path, 'genotype')) + self.n_files = len(self.f_names) + self._data = Hdf5Data(self.path, self.name, type='MINIMAC') + self._id = self._data.id + self.pool.id = self._id + self.pool.paths = {i: os.path.join(self.path, 'genotype', i + '.h5') for i in self._id} - def _scan(self): - pass + def _scan(self): + pass - def get_next(self,**kwargs): - return self.pool.get_chunk() + def get_next(self, **kwargs): + return self.pool.get_chunk() - def get(self, index): - return self.pool.get_chunk(indices=index) + def get(self, index): + return self.pool.get_chunk(indices=index) - def read(self, file, index=None, MAF=None): - pass + def read(self, file, index=None, MAF=None): + pass - def get(self, index): - pass + def get(self, index): + pass class CSVFolder(Folder): - def __init__(self,path): - super(CSVFolder,self).__init__(path) - try: - self.read(next(self)) - except Exception as e: - raise (e) - self.data_info={} - for i in self.files: - for j in ['\t', ' ']: - df=pd.read_csv(os.path.join(self.path,i), sep=j, index_col=None) - if df.shape[1] > 1: - break - self.data_info[i]=np.array(df.columns[1:]) - - - def read(self,file): - - if self.folder_cache_flag and self.folder_cache.get(file) is not None and len(self.folder_cache)1: - break - else: - raise ValueError('Cant read {} file; default settings: index=None, header=True; sep=tab or space '.format(file)) - - - self._data=Data() - self._data.chunk_size=1000 - self._data._data=df[df.columns[1:]].as_matrix() - self._data.id=np.array(df[df.columns[0]]) - if self._id is None: - self._id=self._data.id - else: - if (self._id!=self._data.id).any(): #TODO (middle) check for not overlapped id (AttributeError: 'bool' object has no attribute 'any') - raise ValueError('id in {} different from previous!'.format(file)) - self._data.type=np.ndarray - self._data.names=np.array(df.columns[1:]) - self._data.shape=self._data._data.shape - self._data.format='csv' - self._data.filename=file - - self._data.test() # check the dim of data - - if self.folder_cache_flag and len(self.folder_cache) 1: + break + self.data_info[i] = np.array(df.columns[1:]) + + def read(self, file): + + if self.folder_cache_flag and self.folder_cache.get(file) is not None and len( + self.folder_cache) < self.cache_buffer_size: + self._data = self.folder_cache[file] + self._data.processed = 0 + print(('There are samples and columns {} in cache {}'.format(self._data.shape, file))) + + else: + print('reading file {}'.format(file)) + for i in ['\t', ' ']: + df = pd.read_csv(os.path.join(self.path, file), sep=i, index_col=None) + if df.shape[1] > 1: + break + else: + raise ValueError( + 'Cant read {} file; default settings: index=None, header=True; sep=tab or space '.format(file)) + + self._data = Data() + self._data.chunk_size = 1000 + self._data._data = df[df.columns[1:]].as_matrix() + self._data.id = np.array(df[df.columns[0]]) + if self._id is None: + self._id = self._data.id + else: + if ( + self._id != self._data.id).any(): # TODO (middle) check for not overlapped id (AttributeError: 'bool' object has no attribute 'any') + raise ValueError('id in {} different from previous!'.format(file)) + self._data.type = np.ndarray + self._data.names = np.array(df.columns[1:]) + self._data.shape = self._data._data.shape + self._data.format = 'csv' + self._data.filename = file + + self._data.test() # check the dim of data + + if self.folder_cache_flag and len(self.folder_cache) < self.cache_buffer_size: + self.folder_cache[file] = self._data + + print(('There are %d ids and %d columns ' % (self._data.shape))) - def __init__(self,path, protected=[]): - super(NPFolder, self).__init__(path) - self._data=Data() - self._data.chunk_size=1000 - self._data.type=np.ndarray - self._data.format='npy' - self.protected=protected - - try: - file_path=os.path.dirname(path) - self.data_info=np.load(os.path.join(file_path, 'info_dic.npy')).item() - self._data.id=np.array(self.data_info['id']) - self.files=[k for k in list(self.data_info.keys()) if k!='id'] - - except Exception as e: - raise ValueError('in directory {} should be data info file info_dic.npy!'.format(self.path) + str(e) ) - - - try: - self.read(next(self)) - except Exception as e: - raise ValueError("Failed to init NPFolder;" + str(e)) - #@timing - def read(self,file): - - if self.folder_cache_flag and self.folder_cache.get(file) is not None and len(self.folder_cache) self.n_probes: - b=(self.n_probes-self._currentSNP) - - print(('next {} SNPs, from {}, need to convert {}'.format(b, self.n_probes, (self.n_probes-self._currentSNP-b)))) - - c = self._currentSNP - n = self.n_ind - nru = self.nru - slice= ba.bitarray(endian="little") - - bit_number=((2*(c+b)*nru)-(2*c*nru))//8 - - slice.fromfile(self.bed, bit_number ) - - X = np.array(slice.decode(self._bedcode), dtype="float64").reshape((b, nru)).T - X = X[0:n, :] - - self._currentSNP += b - gc.collect() - return X.T - - - - def get_next(self,**kwargs): - pass - - def read(self): - pass + def __init__(self, path): + super(PLINKFolder, self).__init__(path) + self.scan() + self.names = None + self.bim = None + self.bed = None + self.fam = None + self.N_probes = 0 + self.n_probes = 0 + self.n_probes_dic = {} + self.n_ind_dic = {} + self.n_ind = 0 + self.N_ind = 0 + self._currentSNP = 0 + + self._bedcode = { + 2: ba.bitarray('11'), + 9: ba.bitarray('10'), # TODO (high) NA data handle + 1: ba.bitarray('01'), + 0: ba.bitarray('00') + } + + self.scan() + + def scan(self): + + l = os.listdir(self.path) + self.names = np.unique([os.path.splitext(i)[0] for i in l]) + + for i in self.names: + if i + '.fam' not in l or i + '.bed' not in l or i + '.bim' not in l: + raise ValueError('There are not all plink files for {} in {} folder'.format(i, self.path)) + + self.n_files = len(l) + self.format = 'PLINK' + self.files = self.names + + def get_fam(self): + """Read the FAM file to get information about individuals + Family ID + Individual ID + Paternal ID + Maternal ID + Sex (1=male; 2=female; other=unknown) + Label - phenotype should be in separate file + """ + + individuals = None + + for i in self.names: + ind = genfromtxt(open(os.path.join(self.path, i + '.fam'), 'r'), delimiter=' ', + dtype={'names': ['family', 'individual', 'paternal', 'maternal', 'sex', 'label'], + 'formats': ['S10', 'S16', int, int, int, int]}) + + if isinstance(individuals, type(None)): + individuals = ind + + else: + individuals = np.append(individuals, ind) + self.n_ind_dic[i] = len(ind) + self.N_ind = len(individuals) + print(('Number of Individuals: %d' % self.N_ind)) + + return individuals + + def get_bim(self, chunk_size): + + if isinstance(self.bim, type(None)): + file = next(self) + self.read_bim(file) + try: + d = self.bim.get_chunk(chunk_size) + return d + except: + file = next(self) + if isinstance(file, type(None)): + return None + self.read_bim(file) + d = self.bim.get_chunk(chunk_size) + return d + + def read_bim(self, file): + + # bim_lines= Popen(['wc','-l',os.path.join(self.path,file +'.bim')], stdout=PIPE) + # bim_lines_com = bim_lines.communicate() + # print("------------------------------------------") + # print(bim_lines_com[0]) + # N=int(bim_lines_com[0].split(' ')[0]) + N = int(sum(1 for line in open(os.path.join(self.path, file + '.bim')))) + + print(('Number of Probes {} in {}'.format(N, file + '.bim'))) + self.N_probes += N + + self.n_probes_dic[file] = N + + self.bim = pd.read_table(os.path.join(self.path, file + '.bim'), sep='\t', header=None, + names=['CHR', 'ID', 'distance', 'bp', 'allele1', 'allele2'], + iterator=True) + + def get_bed(self, chunk_size): + + d = self.nextSNPs(chunk_size) + + if isinstance(d, type(None)): + file = next(self) + if isinstance(file, type(None)): + return None + else: + self.read_bed(file) + return self.get_bed(chunk_size) + else: + if d.shape[0] == chunk_size: + return d + else: + d_append = self.get_bed(chunk_size - d.shape[0]) + if isinstance(d_append, type(None)): + return d + else: + return np.vstack((d, d_append)) + + def read_bed(self, file): + + self._currentSNP = 0 + self.n_ind = self.n_ind_dic[file] + self.n_probes = self.n_probes_dic[file] + n = self.n_ind + self.bed = open(os.path.join(self.path, file + '.bed'), 'rb') + magicNumber = ba.bitarray(endian="little") + magicNumber.fromfile(self.bed, 2) + bedMode = ba.bitarray(endian="little") + bedMode.fromfile(self.bed, 1) + e = (4 - n % 4) if n % 4 != 0 else 0 + nru = self.n_ind + e + self.nru = nru + # check magic number + if magicNumber != ba.bitarray('0011011011011000'): + raise IOError("Magic number from Plink .bed file not recognized") + + if bedMode != ba.bitarray('10000000'): + raise IOError("Plink .bed file must be in default SNP-major mode") + + def nextSNPs(self, b): + ''' + Unpacks the binary array of genotypes and returns an n x b matrix of floats of + normalized genotypes for the next b SNPs, where n := number of samples. + + Parameters + ---------- + b : int + Number of SNPs to return. + Returns + ------- + X : np.array with dtype float64 with shape (n, b), where n := number of samples + + ''' + if self._currentSNP == self.n_probes: + return None + if self._currentSNP + b > self.n_probes: + b = (self.n_probes - self._currentSNP) + + print(('next {} SNPs, from {}, need to convert {}'.format(b, self.n_probes, + (self.n_probes - self._currentSNP - b)))) + + c = self._currentSNP + n = self.n_ind + nru = self.nru + slice = ba.bitarray(endian="little") + + bit_number = ((2 * (c + b) * nru) - (2 * c * nru)) // 8 + + slice.fromfile(self.bed, bit_number) + + X = np.array(slice.decode(self._bedcode), dtype="float64").reshape((b, nru)).T + X = X[0:n, :] + + self._currentSNP += b + gc.collect() + return X.T + + def get_next(self, **kwargs): + pass + + def read(self): + pass class MINIMACFolder(Folder): - def __init__(self, path): - super(MINIMACFolder, self).__init__(path) - self.scan() + def __init__(self, path): + super(MINIMACFolder, self).__init__(path) + self.scan() - def scan(self): - if len(glob.glob(self.path + '*dose.gz'))==0 or len(glob.glob(self.path + '*info.gz'))==0: - raise ValueError('There is no dose.gz or info.gz files in {}, check folder or compression flag'.format(self.path)) + def scan(self): + if len(glob.glob(self.path + '*dose.gz')) == 0 or len(glob.glob(self.path + '*info.gz')) == 0: + raise ValueError( + 'There is no dose.gz or info.gz files in {}, check folder or compression flag'.format(self.path)) - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass class VCFFolder(Folder): - def __init__(self, path): - super(VCFFolder, self).__init__(path) - self.scan() + def __init__(self, path): + super(VCFFolder, self).__init__(path) + self.scan() - def scan(self): #TODO (middle) add checking for correct VCF format (? checkVCF.py) before start shell scripts - pass + def scan(self): # TODO (middle) add checking for correct VCF format (? checkVCF.py) before start shell scripts + pass - def get_next(self,**kwargs): - pass + def get_next(self, **kwargs): + pass class Reader(object): - def __init__(self, name): - self.name=name - self.path=None - self._data=None - self.ext=['.npy', '.csv', '.txt','.h5', 'PLINK','.gz','VCF'] - self.pool=None - self.folder=None - self.processed=0 - self.kwargs=None - self.permutation=False - - - def start(self, path, **kwargs): - - self.kwargs=kwargs - if path is None: - raise ValueError('Not defined path for {}'.format(self.name)) - if os.path.isdir(path): + def __init__(self, name): + self.name = name + self.path = None + self._data = None + self.ext = ['.npy', '.csv', '.txt', '.h5', 'PLINK', '.gz', 'VCF'] + self.pool = None + self.folder = None + self.processed = 0 + self.kwargs = None + self.permutation = False - self.folder=Folder(path) - self.path=path + def start(self, path, **kwargs): - self.format=self.folder.format + self.kwargs = kwargs + if path is None: + raise ValueError('Not defined path for {}'.format(self.name)) + if os.path.isdir(path): - if kwargs.get('vcf',0) and kwargs['vcf']: - self.format='VCF' + self.folder = Folder(path) + self.path = path - if self.name=='genotype' and self.format!='PLINK' and self.format!='.gz' and self.format!='VCF': - self.format='.h5' + self.format = self.folder.format - if self.format not in self.ext: - raise ValueError(' {} is not supported format (only {} supported)!'.format(self.format, self.ext)) + if kwargs.get('vcf', 0) and kwargs['vcf']: + self.format = 'VCF' - elif self.format=='.npy' and self.name!='partial': - self.folder=NPFolder(path,protected=['info_dic.npy'] ) - #self.folder.protected=['info_dic.npy'] + if self.name == 'genotype' and self.format != 'PLINK' and self.format != '.gz' and self.format != 'VCF': + self.format = '.h5' - elif self.format=='.npy' and self.name=='partial': - self.folder=PDFolder(path,name=kwargs['study_name']) + if self.format not in self.ext: + raise ValueError(' {} is not supported format (only {} supported)!'.format(self.format, self.ext)) + elif self.format == '.npy' and self.name != 'partial': + self.folder = NPFolder(path, protected=['info_dic.npy']) + # self.folder.protected=['info_dic.npy'] - elif self.format in ['.csv', '.txt']: - self.folder=CSVFolder(path) + elif self.format == '.npy' and self.name == 'partial': + self.folder = PDFolder(path, name=kwargs['study_name']) - elif self.format=='.h5' and self.name=='genotype': - self.folder=PLINKHDF5Folder(path,kwargs['study_name']) - elif self.format=='PLINK': - self.folder=PLINKFolder(path) + elif self.format in ['.csv', '.txt']: + self.folder = CSVFolder(path) - elif self.format=='.gz': - self.folder=MINIMACFolder(path) - self.format="MINIMAC" + elif self.format == '.h5' and self.name == 'genotype': + self.folder = PLINKHDF5Folder(path, kwargs['study_name']) - elif self.format=='VCF': - self.folder = VCFFolder(path) + elif self.format == 'PLINK': + self.folder = PLINKFolder(path) - elif self.format=='.h5' and self.name!='genotype': - raise ValueError('hdf5 format implemented only for converted from genotype data...Sorry') + elif self.format == '.gz': + self.folder = MINIMACFolder(path) + self.format = "MINIMAC" - elif self.format!='.h5' and self.name=='genotype': - raise ValueError('genotype data should be in hdf5 format') + elif self.format == 'VCF': + self.folder = VCFFolder(path) - self._get=self.folder.get_next + elif self.format == '.h5' and self.name != 'genotype': + raise ValueError('hdf5 format implemented only for converted from genotype data...Sorry') - else: - raise ValueError('{} is not a directory'.format(path)) + elif self.format != '.h5' and self.name == 'genotype': + raise ValueError('genotype data should be in hdf5 format') + self._get = self.folder.get_next - def get(self,*args,**kwargs): - if self.format!='.h5' and self.name!='partial': - raise ValueError() - return self.folder.get(*args,**kwargs) + else: + raise ValueError('{} is not a directory'.format(path)) + def get(self, *args, **kwargs): + if self.format != '.h5' and self.name != 'partial': + raise ValueError() + return self.folder.get(*args, **kwargs) - def get_next(self,**kwargs): - return self._get(**kwargs) + def get_next(self, **kwargs): + return self._get(**kwargs) diff --git a/utils/hase/hdgwas/fake.py b/utils/hase/hdgwas/fake.py index 63f348c..48c3959 100644 --- a/utils/hase/hdgwas/fake.py +++ b/utils/hase/hdgwas/fake.py @@ -1,111 +1,108 @@ - import numpy as np import os import tables import gc import pandas as pd -class Encoder(object): - - def __init__(self, out): - self.name='Encoder' - self.N_matrix=None - self.F=None - self.F_inv=None - self.encoder_chunks={} - self.hdf5_iter=0 - self.npy_iter=0 - self.pytable_filters = tables.Filters(complevel=9, complib='zlib') - self.out=out - self.metadata=None - self.study_name=None - self.phen_info_dic={} - self.phen_info_dic['id']=None - try: - print ('Creating directories...') - os.mkdir(os.path.join(self.out,'encode_genotype') ) - os.mkdir(os.path.join(self.out,'encode_phenotype') ) - os.mkdir(os.path.join(self.out,'encode_individuals')) - - except: - print(('Directories "encode_genotype","encode_phenotype","encode_individuals" are already exist in {}...'.format(self.out))) - - - def matrix(self,N, save=False): - - self.F=np.random.randint(1,10,N*N).reshape(N,N) - self.F_inv=np.linalg.inv(self.F) - self.F=np.array(self.F,dtype=np.float) - if save: - print(('Saving decoders Matrices to...{}'.format(self.out))) - np.save(os.path.join(self.out,'F.npy'),self.F) - np.save(os.path.join(self.out,'F_inv.npy'),self.F_inv) - - - - def encode(self,data, data_type=None): - - if isinstance(self.F,type(None)): - raise ValueError('Encode matrix is not define') - - x,y=data.shape - #TODO (mid) add to encode_chunk info about data size and/or names indexes - #TODO (mid) check the protocol if exist... all study on single stage - - a,b=self.F.shape - - if isinstance(data_type,type(None)): - raise ValueError('data_type is None') - elif data_type=="genotype": - print ('Decoding genotype') - return np.dot(data,self.F) - elif data_type=='phenotype': - print ('Decoding phenotype') - return np.dot(self.F_inv,data) - - - def save_npy(self,data, save_path=None, info=None, index=None): - #only for phenotype - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - np.save(os.path.join(save_path,str(self.npy_iter)+'_'+self.study_name+ '.npy'),data ) - if self.phen_info_dic['id'] is None: - self.phen_info_dic['id']=np.array(info._data.id)[index] - self.phen_info_dic[str(self.npy_iter)+'_'+self.study_name+ '.npy']=info._data.names[info._data.start:info._data.finish] - self.npy_iter+=1 - - def save_csv(self,data,save_path=None, info=None, index=None): - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - df=pd.DataFrame(data) - df.columns=info._data.names[info._data.start:info._data.finish] - df.insert(0,'id',np.array(info._data.id)[index]) - df.to_csv(os.path.join(save_path,str(self.npy_iter)+'_'+self.study_name+ '.csv'), sep='\t', index=False) - self.npy_iter+=1 - - - - def save_hdf5(self,data, save_path=None,info=None, index=None): - #only for genetics data - print(('Saving data to ... {}'.format(os.path.join(save_path,str(self.hdf5_iter)+'_'+self.study_name+'_encoded.h5')))) - - if not os.path.isfile(os.path.join(self.out,'encode_individuals',self.study_name + '.h5' )): - chunk = pd.DataFrame.from_dict({"individual": info._data.id[index] }) - chunk.to_hdf(os.path.join(self.out,'encode_individuals',self.study_name + '.h5' ), key='individuals', format='table', min_itemsize=25, complib='zlib', complevel=9) - - if isinstance(save_path,type(None)) or not os.path.isdir(save_path): - raise ValueError('There is no such path or directory {}'.format(save_path)) - - self.h5_gen_file = tables.open_file( - os.path.join(save_path,str(self.hdf5_iter)+'_'+self.study_name +'.h5'), 'w', title='encode_genotype') - self.hdf5_iter+=1 - - atom = tables.Float64Atom() - self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', filters=self.pytable_filters) - self.genotype[:] = data - self.h5_gen_file.close() - gc.collect() +class Encoder(object): + def __init__(self, out): + self.name = 'Encoder' + self.N_matrix = None + self.F = None + self.F_inv = None + self.encoder_chunks = {} + self.hdf5_iter = 0 + self.npy_iter = 0 + self.pytable_filters = tables.Filters(complevel=9, complib='zlib') + self.out = out + self.metadata = None + self.study_name = None + self.phen_info_dic = {} + self.phen_info_dic['id'] = None + try: + print('Creating directories...') + os.mkdir(os.path.join(self.out, 'encode_genotype')) + os.mkdir(os.path.join(self.out, 'encode_phenotype')) + os.mkdir(os.path.join(self.out, 'encode_individuals')) + + except: + print(( + 'Directories "encode_genotype","encode_phenotype","encode_individuals" are already exist in {}...'.format( + self.out))) + + def matrix(self, N, save=False): + + self.F = np.random.randint(1, 10, N * N).reshape(N, N) + self.F_inv = np.linalg.inv(self.F) + self.F = np.array(self.F, dtype=np.float) + if save: + print(('Saving decoders Matrices to...{}'.format(self.out))) + np.save(os.path.join(self.out, 'F.npy'), self.F) + np.save(os.path.join(self.out, 'F_inv.npy'), self.F_inv) + + def encode(self, data, data_type=None): + + if isinstance(self.F, type(None)): + raise ValueError('Encode matrix is not define') + + x, y = data.shape + # TODO (mid) add to encode_chunk info about data size and/or names indexes + # TODO (mid) check the protocol if exist... all study on single stage + + a, b = self.F.shape + + if isinstance(data_type, type(None)): + raise ValueError('data_type is None') + elif data_type == "genotype": + print('Decoding genotype') + return np.dot(data, self.F) + elif data_type == 'phenotype': + print('Decoding phenotype') + return np.dot(self.F_inv, data) + + def save_npy(self, data, save_path=None, info=None, index=None): + # only for phenotype + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + np.save(os.path.join(save_path, str(self.npy_iter) + '_' + self.study_name + '.npy'), data) + if self.phen_info_dic['id'] is None: + self.phen_info_dic['id'] = np.array(info._data.id)[index] + self.phen_info_dic[str(self.npy_iter) + '_' + self.study_name + '.npy'] = info._data.names[ + info._data.start:info._data.finish] + self.npy_iter += 1 + + def save_csv(self, data, save_path=None, info=None, index=None): + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + df = pd.DataFrame(data) + df.columns = info._data.names[info._data.start:info._data.finish] + df.insert(0, 'id', np.array(info._data.id)[index]) + df.to_csv(os.path.join(save_path, str(self.npy_iter) + '_' + self.study_name + '.csv'), sep='\t', index=False) + self.npy_iter += 1 + + def save_hdf5(self, data, save_path=None, info=None, index=None): + # only for genetics data + print(('Saving data to ... {}'.format( + os.path.join(save_path, str(self.hdf5_iter) + '_' + self.study_name + '_encoded.h5')))) + + if not os.path.isfile(os.path.join(self.out, 'encode_individuals', self.study_name + '.h5')): + chunk = pd.DataFrame.from_dict({"individual": info._data.id[index]}) + chunk.to_hdf(os.path.join(self.out, 'encode_individuals', self.study_name + '.h5'), key='individuals', + format='table', min_itemsize=25, complib='zlib', complevel=9) + + if isinstance(save_path, type(None)) or not os.path.isdir(save_path): + raise ValueError('There is no such path or directory {}'.format(save_path)) + + self.h5_gen_file = tables.open_file( + os.path.join(save_path, str(self.hdf5_iter) + '_' + self.study_name + '.h5'), 'w', title='encode_genotype') + self.hdf5_iter += 1 + + atom = tables.Float64Atom() + self.genotype = self.h5_gen_file.create_carray(self.h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', filters=self.pytable_filters) + self.genotype[:] = data + self.h5_gen_file.close() + gc.collect() diff --git a/utils/hase/hdgwas/hash.py b/utils/hase/hdgwas/hash.py index 8d63655..2058dcb 100644 --- a/utils/hase/hdgwas/hash.py +++ b/utils/hase/hdgwas/hash.py @@ -3,275 +3,275 @@ import os - class HashTablePOS(object): def __init__(self): - self.hash_dic={i:{} for i in range(23)} - self.protected=False - self.data_frame=None - self.collisions={i:[] for i in range(23)} - self.type='POS' - self.n_keys=0 - self._print=False - - def fill_id(self,id): + self.hash_dic = {i: {} for i in range(23)} + self.protected = False + self.data_frame = None + self.collisions = {i: [] for i in range(23)} + self.type = 'POS' + self.n_keys = 0 + self._print = False + + def fill_id(self, id): if self.hash_dic[id.CHR].get(id.bp) is not None: if isinstance(self.hash_dic[id.CHR][id.bp], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " - "".format( - "CHR "+str(id.CHR) + " bp "+ str(id.bp), - id.allele1,id.allele2, - self.hash_dic[id.CHR][id.bp][1],self.hash_dic[id.CHR][id.bp][2]) - )) + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " + "".format( + "CHR " + str(id.CHR) + " bp " + str(id.bp), + id.allele1, id.allele2, + self.hash_dic[id.CHR][id.bp][1], self.hash_dic[id.CHR][id.bp][2]) + )) - self.hash_dic[id.CHR][id.bp]=[self.hash_dic[id.CHR][id.bp],(self.n_keys,id.allele1, id.allele2) ] - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp] = [self.hash_dic[id.CHR][id.bp], (self.n_keys, id.allele1, id.allele2)] + self.n_keys += 1 else: - self.hash_dic[id.CHR][id.bp].append((self.n_keys,id.allele1, id.allele2)) - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp].append((self.n_keys, id.allele1, id.allele2)) + self.n_keys += 1 self.collisions[id.CHR].append(id.bp) else: - self.hash_dic[id.CHR][id.bp]=(self.n_keys, id.allele1, id.allele2) - self.n_keys+=1 + self.hash_dic[id.CHR][id.bp] = (self.n_keys, id.allele1, id.allele2) + self.n_keys += 1 - - def fill(self,data_frame): - self.data_frame=data_frame + def fill(self, data_frame): + self.data_frame = data_frame if self.data_frame is None: raise ValueError('Genotype data frame is not defined!') for i in self.data_frame.iterrows(): - self.n_keys+=1 + self.n_keys += 1 if self.hash_dic[i[1].CHR].get(i[1].bp) is not None: if isinstance(self.hash_dic[i[1].CHR][i[1].bp], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " - "".format( - "CHR "+str(i[1].CHR) + " bp "+ str(i[1].bp), - i[1].allele1,i[1].allele2, - self.hash_dic[i[1].CHR][i[1].bp][1],self.hash_dic[i[1].CHR][i[1].bp][2]) - )) - - self.hash_dic[i[1].CHR][i[1].bp]=[self.hash_dic[i[1].CHR][i[1].bp],(i[0],i[1].allele1, i[1].allele2) ] + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " + "".format( + "CHR " + str(i[1].CHR) + " bp " + str(i[1].bp), + i[1].allele1, i[1].allele2, + self.hash_dic[i[1].CHR][i[1].bp][1], self.hash_dic[i[1].CHR][i[1].bp][2]) + )) + + self.hash_dic[i[1].CHR][i[1].bp] = [self.hash_dic[i[1].CHR][i[1].bp], + (i[0], i[1].allele1, i[1].allele2)] else: - self.hash_dic[i[1].CHR][i[1].bp].append((i[0],i[1].allele1, i[1].allele2)) + self.hash_dic[i[1].CHR][i[1].bp].append((i[0], i[1].allele1, i[1].allele2)) self.collisions[i[1].CHR].append(i[1].bp) else: - self.hash_dic[i[1].CHR][i[1].bp]=(i[0], i[1].allele1, i[1].allele2) - self.protected=True + self.hash_dic[i[1].CHR][i[1].bp] = (i[0], i[1].allele1, i[1].allele2) + self.protected = True - def get_index(self,chr, bp): + def get_index(self, chr, bp): - r=self.hash_dic[chr].get(bp) + r = self.hash_dic[chr].get(bp) if r is None: - return -1,'R','R' + return -1, 'R', 'R' else: return r - def get_map(self,info): + def get_map(self, info): - def _map(r,a1,a2): - ind,A1,A2=r - if ind==-1: - result=[-1,0] - elif A1==a1 and A2==a2: - result=[ind, 1] - elif A1==a2 and A2==a1: - result=[ ind, -1] + def _map(r, a1, a2): + ind, A1, A2 = r + if ind == -1: + result = [-1, 0] + elif A1 == a1 and A2 == a2: + result = [ind, 1] + elif A1 == a2 and A2 == a1: + result = [ind, -1] else: - result=[-1,0] + result = [-1, 0] return result - r=self.get_index(info.CHR, info.bp) - if not isinstance(r[0],tuple): - return _map(r,info.allele1,info.allele2) + r = self.get_index(info.CHR, info.bp) + if not isinstance(r[0], tuple): + return _map(r, info.allele1, info.allele2) else: for i in r: - m=_map(i,info.allele1,info.allele2) - if m[0]!=-1: + m = _map(i, info.allele1, info.allele2) + if m[0] != -1: return m - return [-1,0] + return [-1, 0] + class HashTableRSID(object): def __init__(self): - self.hash_table=np.zeros([250*10**6]) - self.list=[] - self.hash_dic={} - self.protected=False - self.type='RSID' - self.n_keys=0 - - - def fill_id(self,id): - #print id + self.hash_table = np.zeros([250 * 10 ** 6]) + self.list = [] + self.hash_dic = {} + self.protected = False + self.type = 'RSID' + self.n_keys = 0 + + def fill_id(self, id): + # print id if not self.protected: - #self.n_keys+=1 + # self.n_keys+=1 try: - if id.ID[:2]=='rs': - m=int(id.ID[2:]) - if self.hash_table[m]!=0: + if id.ID[:2] == 'rs': + m = int(id.ID[2:]) + if self.hash_table[m] != 0: print('collision {}!'.format(id)) - if isinstance(self.list[self.hash_table[m]],tuple): - self.list[self.hash_table[m]]=[self.list[self.hash_table[m]], (self.n_keys,id['allele1'],id['allele2']) ] - self.n_keys+=1 + if isinstance(self.list[self.hash_table[m]], tuple): + self.list[self.hash_table[m]] = [self.list[self.hash_table[m]], + (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.list[self.hash_table[m]].append( (self.n_keys,id['allele1'],id['allele2']) ) - self.n_keys+=1 + self.list[self.hash_table[m]].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 else: - self.list.append( ( self.n_keys,id['allele1'],id['allele2'] ) ) - self.hash_table[m]=len(self.list) - self.n_keys+=1 + self.list.append((self.n_keys, id['allele1'], id['allele2'])) + self.hash_table[m] = len(self.list) + self.n_keys += 1 else: if self.hash_dic.get(id.ID) is None: - self.hash_dic[id.ID]=(self.n_keys,id['allele1'],id['allele2']) - self.n_keys+=1 + self.hash_dic[id.ID] = (self.n_keys, id['allele1'], id['allele2']) + self.n_keys += 1 else: - if isinstance(self.hash_dic[id.ID],tuple): + if isinstance(self.hash_dic[id.ID], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - id.ID, - id['allele1'],id['allele2'], - self.hash_dic[id.ID][1],self.hash_dic[id.ID][2]) + id.ID, + id['allele1'], id['allele2'], + self.hash_dic[id.ID][1], self.hash_dic[id.ID][2]) - )) - self.hash_dic[id.ID]=[self.hash_dic[id.ID], (self.n_keys,id['allele1'],id['allele2'])] - self.n_keys+=1 + )) + self.hash_dic[id.ID] = [self.hash_dic[id.ID], (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.hash_dic[id.ID].append((self.n_keys,id['allele1'],id['allele2'])) - self.n_keys+=1 + self.hash_dic[id.ID].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 except: if self.hash_dic.get(id.ID) is None: - self.hash_dic[id.ID]=[self.n_keys,id['allele1'],id['allele2']] - self.n_keys+=1 + self.hash_dic[id.ID] = [self.n_keys, id['allele1'], id['allele2']] + self.n_keys += 1 else: - if isinstance(self.hash_dic[id[1].ID],tuple): + if isinstance(self.hash_dic[id[1].ID], tuple): if self._print: print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - id.ID, - id['allele1'],id['allele2'], - self.hash_dic[id.ID][1],self.hash_dic[id.ID][2]) + id.ID, + id['allele1'], id['allele2'], + self.hash_dic[id.ID][1], self.hash_dic[id.ID][2]) - )) - self.hash_dic[id.ID]=[self.hash_dic[id.ID], (self.n_keys,id['allele1'],id['allele2'])] - self.n_keys+=1 + )) + self.hash_dic[id.ID] = [self.hash_dic[id.ID], (self.n_keys, id['allele1'], id['allele2'])] + self.n_keys += 1 else: - self.hash_dic[id.ID].append((self.n_keys,id['allele1'],id['allele2'])) - self.n_keys+=1 + self.hash_dic[id.ID].append((self.n_keys, id['allele1'], id['allele2'])) + self.n_keys += 1 - #self.protected=True + # self.protected=True else: raise ValueError('Hash table already filled!') - def fill(self,df): + def fill(self, df): if not self.protected: for i in df.iterrows(): try: - if i[1].ID[:2]=='rs': - m=int(i[1].ID[2:]) - if self.hash_table[m]!=0: + if i[1].ID[:2] == 'rs': + m = int(i[1].ID[2:]) + if self.hash_table[m] != 0: print('collision {}!'.format(i)) - if isinstance(self.list[self.hash_table[m]],tuple): - self.list[self.hash_table[m]]=[self.list[self.hash_table[m]], (i[0],i[1]['allele1'],i[1]['allele2']) ] + if isinstance(self.list[self.hash_table[m]], tuple): + self.list[self.hash_table[m]] = [self.list[self.hash_table[m]], + (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.list[self.hash_table[m]].append( (i[0],i[1]['allele1'],i[1]['allele2']) ) + self.list[self.hash_table[m]].append((i[0], i[1]['allele1'], i[1]['allele2'])) else: - self.list.append( ( i[0],i[1]['allele1'],i[1]['allele2'] ) ) - self.hash_table[m]=len(self.list) + self.list.append((i[0], i[1]['allele1'], i[1]['allele2'])) + self.hash_table[m] = len(self.list) else: if self.hash_dic.get(i[1].ID) is None: - self.hash_dic[i[1].ID]=(i[0],i[1]['allele1'],i[1]['allele2']) + self.hash_dic[i[1].ID] = (i[0], i[1]['allele1'], i[1]['allele2']) else: - if isinstance(self.hash_dic[i],tuple): + if isinstance(self.hash_dic[i], tuple): print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - i[1].ID, - i[1]['allele1'],i['allele2'], - self.hash_dic[i[1].ID][1],self.hash_dic[i[1].ID][2]) + i[1].ID, + i[1]['allele1'], i['allele2'], + self.hash_dic[i[1].ID][1], self.hash_dic[i[1].ID][2]) - )) - self.hash_dic[i[1].ID]=[self.hash_dic[i[1].ID], (i[0],i[1]['allele1'],i[1]['allele2'])] + )) + self.hash_dic[i[1].ID] = [self.hash_dic[i[1].ID], + (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.hash_dic[i[1].ID].append((i[0],i[1]['allele1'],i[1]['allele2'])) + self.hash_dic[i[1].ID].append((i[0], i[1]['allele1'], i[1]['allele2'])) except: if self.hash_dic.get(i[1].ID) is None: - self.hash_dic[i[1].ID]=[i[0],i[1]['allele1'],i[1]['allele2']] + self.hash_dic[i[1].ID] = [i[0], i[1]['allele1'], i[1]['allele2']] else: - if isinstance(self.hash_dic[i[1].ID],tuple): + if isinstance(self.hash_dic[i[1].ID], tuple): print(( - "Collision! You are trying to fill {} again with A1_{}/A2_{}," - " it is already inserted with A1_{}/A2_{}. " + "Collision! You are trying to fill {} again with A1_{}/A2_{}," + " it is already inserted with A1_{}/A2_{}. " "You can resolve the collisions, use genotype data with CHR and bp info".format( - i[1].ID, - i[1]['allele1'],i[1]['allele2'], - self.hash_dic[i[1].ID][1],self.hash_dic[i[1].ID][2]) + i[1].ID, + i[1]['allele1'], i[1]['allele2'], + self.hash_dic[i[1].ID][1], self.hash_dic[i[1].ID][2]) - )) - self.hash_dic[i[1].ID]=[self.hash_dic[i[1].ID], (i[0],i[1]['allele1'],i[1]['allele2'])] + )) + self.hash_dic[i[1].ID] = [self.hash_dic[i[1].ID], (i[0], i[1]['allele1'], i[1]['allele2'])] else: - self.hash_dic[i[1].ID].append((i[0],i[1]['allele1'],i[1]['allele2'])) + self.hash_dic[i[1].ID].append((i[0], i[1]['allele1'], i[1]['allele2'])) - self.protected=True + self.protected = True else: raise ValueError('Hash table already filled!') - - def get_index(self,value): + def get_index(self, value): try: - if value[:2]=='rs': - v=int(value[2:]) - r=int(self.hash_table[v]) - if r==0: - return -1,'R','R' + if value[:2] == 'rs': + v = int(value[2:]) + r = int(self.hash_table[v]) + if r == 0: + return -1, 'R', 'R' else: - return self.list[r-1] + return self.list[r - 1] else: return self.hash_dic[value] except: - return -1,'R','R' - - def get_map(self,info): - - def _map(r,a1,a2): - ind,A1,A2=r - if ind==-1: - result=[-1,0] - elif A1==a1 and A2==a2: - result=[ind, 1] - elif A1==a2 and A2==a1: - result=[ ind, -1] + return -1, 'R', 'R' + + def get_map(self, info): + + def _map(r, a1, a2): + ind, A1, A2 = r + if ind == -1: + result = [-1, 0] + elif A1 == a1 and A2 == a2: + result = [ind, 1] + elif A1 == a2 and A2 == a1: + result = [ind, -1] else: - result=[-1,0] + result = [-1, 0] return result - r=self.get_index(info.ID) - if not isinstance(r[0],tuple): - return _map(r,info.allele1,info.allele2) + r = self.get_index(info.ID) + if not isinstance(r[0], tuple): + return _map(r, info.allele1, info.allele2) else: for i in r: - m=_map(i,info.allele1,info.allele2) - if m[0]!=-1: + m = _map(i, info.allele1, info.allele2) + if m[0] != -1: return m - return [-1,0] + return [-1, 0] - def save(self,path, filename): - with open(os.path.join(path,filename), 'wb') as output: + def save(self, path, filename): + with open(os.path.join(path, filename), 'wb') as output: pickle.dump(self, output, -1) -if __name__=="__main__": - print('Hash') - +if __name__ == "__main__": + print('Hash') diff --git a/utils/hase/hdgwas/hdregression.py b/utils/hase/hdgwas/hdregression.py index bf2c81e..4069144 100644 --- a/utils/hase/hdgwas/hdregression.py +++ b/utils/hase/hdgwas/hdregression.py @@ -1,130 +1,124 @@ import numpy as np from utils.hase.hdgwas.tools import Timer -#@timing -def A_covariates(covariates, intercept=True): - ''' - :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) - :param intercept: default True, add intercept to model - :return: matrix (n_cavariates, n_covariates), constant part for the rest of the study - ''' - - S,N=covariates.shape - if intercept: - I=np.ones(S).reshape(S,1) - covariates=np.hstack((I,covariates)) - a_cov=np.dot(covariates.T,covariates) - return a_cov -#@timing -def B4(phenotype,genotype): - b4=np.tensordot(genotype, phenotype, axes=([1], [0])) - return b4 - -def interaction(genotype,factor): - g=genotype*factor.T - return g - -#@timing -def A_tests(covariates, genotype, intercept=True): #TODO (low) extend for any number of tests in model - ''' - :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) - :param genotype: (n_tests, n_subjects) - test could be any kind of quantitative covariance - :return: (1,n_covariates + intercept) - ''' - - if intercept: - fst=np.sum(genotype, axis=1).reshape(-1,1) - sec=np.dot(genotype, covariates) - tr=np.sum(np.power(genotype,2), axis=1).reshape(-1,1) - return np.hstack((fst, sec, tr)) - - else: - sec=np.dot(genotype, covariates) - tr=np.sum(np.power(genotype,2), axis=1).reshape(-1,1) - return np.hstack(( sec, tr)) - -#@timing -def B_covariates(covariates, phenotype, intercept=True): +# @timing +def A_covariates(covariates, intercept=True): + ''' + :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) + :param intercept: default True, add intercept to model + :return: matrix (n_cavariates, n_covariates), constant part for the rest of the study + ''' - S,N=covariates.shape + S, N = covariates.shape + if intercept: + I = np.ones(S).reshape(S, 1) + covariates = np.hstack((I, covariates)) + a_cov = np.dot(covariates.T, covariates) + return a_cov - b_cov = np.dot(covariates.T, phenotype) - if intercept: - b1 = np.sum(phenotype, axis=0).reshape(1, phenotype.shape[1]) - B13 = np.append(b1, b_cov, axis=0) - return B13 - else: - return b_cov +# @timing +def B4(phenotype, genotype): + b4 = np.tensordot(genotype, phenotype, axes=([1], [0])) + return b4 -#@timing -def A_inverse(a_covariates, a_test): #TODO (low) extend for any number of tests in model - A_inv=[] - n,m=a_covariates.shape - k=n+1 - for i in range(a_test.shape[0]): #TODO (low) not in for loop - inv=np.zeros(k*k).reshape(k,k) - inv[ 0:k-1,0:k-1 ]=a_covariates - inv[k-1,:]=a_test[i,:] - inv[0:k,k-1]=a_test[i,0:k] - try: - A_inv.append(np.linalg.inv(inv)) - except: - A_inv.append(np.zeros(k*k).reshape(k,k)) #TODO (high) test; check influence on results; warning; +def interaction(genotype, factor): + g = genotype * factor.T + return g - return np.array(A_inv) -#@timing -def C_matrix(phenotype): - C=np.einsum('ij,ji->i', phenotype.T, phenotype) - return C +# @timing +def A_tests(covariates, genotype, intercept=True): # TODO (low) extend for any number of tests in model + ''' + :param covariates: (n_subjects, n_covariates) - only constant covariates should be included (age, sex, ICV etc) + :param genotype: (n_tests, n_subjects) - test could be any kind of quantitative covariance + :return: (1,n_covariates + intercept) + ''' -#@timing -#@save_parameters -def HASE(b4, A_inverse, b_cov, C, N_con, DF): + if intercept: + fst = np.sum(genotype, axis=1).reshape(-1, 1) + sec = np.dot(genotype, covariates) + tr = np.sum(np.power(genotype, 2), axis=1).reshape(-1, 1) + return np.hstack((fst, sec, tr)) - with Timer() as t: + else: + sec = np.dot(genotype, covariates) + tr = np.sum(np.power(genotype, 2), axis=1).reshape(-1, 1) + return np.hstack((sec, tr)) - B13=b_cov - B4 = b4 - A1_B_constant = np.tensordot(A_inverse[:, :, 0:(N_con)], B13, axes=([2], [0])) +# @timing +def B_covariates(covariates, phenotype, intercept=True): + S, N = covariates.shape - A1_B_nonconstant = np.einsum('ijk,il->ijl', A_inverse[:, :, N_con:N_con+1], B4) + b_cov = np.dot(covariates.T, phenotype) + if intercept: + b1 = np.sum(phenotype, axis=0).reshape(1, phenotype.shape[1]) + B13 = np.append(b1, b_cov, axis=0) + return B13 + else: + return b_cov - A1_B_full = A1_B_constant + A1_B_nonconstant - BT_A1B_const = np.einsum('ij,lji->li', B13.T, A1_B_full[:, 0:(N_con), :]) +# @timing +def A_inverse(a_covariates, a_test): # TODO (low) extend for any number of tests in model - BT_A1B_nonconst = np.einsum('ijk,ijk->ijk', B4[:, None, :], A1_B_full[:, (N_con):N_con+1, :]) + A_inv = [] + n, m = a_covariates.shape + k = n + 1 + for i in range(a_test.shape[0]): # TODO (low) not in for loop + inv = np.zeros(k * k).reshape(k, k) + inv[0:k - 1, 0:k - 1] = a_covariates + inv[k - 1, :] = a_test[i, :] + inv[0:k, k - 1] = a_test[i, 0:k] + try: + A_inv.append(np.linalg.inv(inv)) + except: + A_inv.append(np.zeros(k * k).reshape(k, k)) # TODO (high) test; check influence on results; warning; - BT_A1B_full = BT_A1B_const[:, None, :] + BT_A1B_nonconst + return np.array(A_inv) - C_BTA1B = BT_A1B_full - C.reshape(1, -1) - C_BTA1B = np.abs(C_BTA1B) +# @timing +def C_matrix(phenotype): + C = np.einsum('ij,ji->i', phenotype.T, phenotype) + return C - a44_C_BTA1B = C_BTA1B * A_inverse[:, (N_con):N_con+1, (N_con):N_con+1] - a44_C_BTA1B = np.sqrt( (a44_C_BTA1B) ) +# @timing +# @save_parameters +def HASE(b4, A_inverse, b_cov, C, N_con, DF): + with Timer() as t: + B13 = b_cov + B4 = b4 - t_stat = np.sqrt(DF) * np.divide(A1_B_full[:, (N_con):N_con+1, :], a44_C_BTA1B) + A1_B_constant = np.tensordot(A_inverse[:, :, 0:(N_con)], B13, axes=([2], [0])) - SE = a44_C_BTA1B/np.sqrt(DF) + A1_B_nonconstant = np.einsum('ijk,il->ijl', A_inverse[:, :, N_con:N_con + 1], B4) + A1_B_full = A1_B_constant + A1_B_nonconstant - print("time to compute GWAS for {} phenotypes and {} SNPs .... {} sec".format(b4.shape[1], - A_inverse.shape[0], - t.secs)) - return t_stat, SE + BT_A1B_const = np.einsum('ij,lji->li', B13.T, A1_B_full[:, 0:(N_con), :]) + BT_A1B_nonconst = np.einsum('ijk,ijk->ijk', B4[:, None, :], A1_B_full[:, (N_con):N_con + 1, :]) + BT_A1B_full = BT_A1B_const[:, None, :] + BT_A1B_nonconst + C_BTA1B = BT_A1B_full - C.reshape(1, -1) + C_BTA1B = np.abs(C_BTA1B) + a44_C_BTA1B = C_BTA1B * A_inverse[:, (N_con):N_con + 1, (N_con):N_con + 1] + a44_C_BTA1B = np.sqrt((a44_C_BTA1B)) + t_stat = np.sqrt(DF) * np.divide(A1_B_full[:, (N_con):N_con + 1, :], a44_C_BTA1B) + SE = a44_C_BTA1B / np.sqrt(DF) + print("time to compute GWAS for {} phenotypes and {} SNPs .... {} sec".format(b4.shape[1], + A_inverse.shape[0], + t.secs)) + return t_stat, SE diff --git a/utils/hase/hdgwas/pard.py b/utils/hase/hdgwas/pard.py index c9c3f83..cae68d5 100644 --- a/utils/hase/hdgwas/pard.py +++ b/utils/hase/hdgwas/pard.py @@ -1,167 +1,162 @@ -from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from utils.hase.hdgwas.tools import study_indexes, Timer import numpy as np import os import time + def merge_PD(path, max_node, study_name): - print ('Merging PD...') + print('Merging PD...') while True: time.sleep(10) - if np.sum( [ os.path.isfile(os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name) )) for i in range(1,max_node+1) ] )==max_node: - if np.sum( [ os.path.isfile(os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) )) for i in range(1,max_node+1) ] )==max_node: + if np.sum([os.path.isfile(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))) for i in + range(1, max_node + 1)]) == max_node: + if np.sum([os.path.isfile(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) for i in + range(1, max_node + 1)]) == max_node: break print('All files found...') - b4_flag=os.path.isfile(os.path.join(path,'node_{}_{}_b4.npy'.format(1,study_name) ) ) - for i in range(1,max_node+1): + b4_flag = os.path.isfile(os.path.join(path, 'node_{}_{}_b4.npy'.format(1, study_name))) + for i in range(1, max_node + 1): print('node_{}'.format(i)) - if i==1: - metadata=np.load(os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) ).item() - a_test=np.load( os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) )) + if i == 1: + metadata = np.load(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))).item() + a_test = np.load(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) if b4_flag: - b4=np.load( os.path.join(path,'node_{}_{}_b4.npy'.format(i,study_name) )) + b4 = np.load(os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name))) else: - metadata_tmp=np.load((os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) )).item() - a_test_tmp=np.load( (os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name) ))) - metadata['MAF']=metadata['MAF'] + metadata_tmp['MAF'] - a_test=np.vstack(( a_test, a_test_tmp ) ) + metadata_tmp = np.load((os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name)))).item() + a_test_tmp = np.load((os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name)))) + metadata['MAF'] = metadata['MAF'] + metadata_tmp['MAF'] + a_test = np.vstack((a_test, a_test_tmp)) if b4_flag: - b4_tmp=np.load((os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name)))) - b4 = np.vstack((b4, b4_tmp )) - + b4_tmp = np.load((os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name)))) + b4 = np.vstack((b4, b4_tmp)) np.save(os.path.join(path, study_name + '_a_test.npy'), a_test) np.save(os.path.join(path, study_name + '_metadata.npy'), metadata) if b4_flag: - np.save(os.path.join(path, study_name + '_b4.npy'),b4) + np.save(os.path.join(path, study_name + '_b4.npy'), b4) - for i in range(1,max_node+1): - os.remove( os.path.join(path,'node_{}_{}_metadata.npy'.format(i,study_name)) ) - os.remove(os.path.join(path,'node_{}_{}_a_test.npy'.format(i,study_name))) + for i in range(1, max_node + 1): + os.remove(os.path.join(path, 'node_{}_{}_metadata.npy'.format(i, study_name))) + os.remove(os.path.join(path, 'node_{}_{}_a_test.npy'.format(i, study_name))) if b4_flag: os.remove(os.path.join(path, 'node_{}_{}_b4.npy'.format(i, study_name))) +def partial_derivatives(save_path=None, COV=None, PHEN=None, GEN=None, + MAP=None, MAF=None, R2=None, B4_flag=False, study_name=None, intercept=True): + row_index, ids = study_indexes(phenotype=PHEN.folder._data, genotype=GEN.folder._data, covariates=COV.folder._data) -def partial_derivatives(save_path=None,COV=None,PHEN=None, GEN=None, - MAP=None, MAF=None, R2=None, B4_flag=False, study_name=None,intercept=True): - - row_index, ids = study_indexes(phenotype=PHEN.folder._data,genotype=GEN.folder._data,covariates=COV.folder._data) - - metadata={} + metadata = {} + # TODO (mid) add parameter to compute PD only for new phenotypes or cov + metadata['id'] = ids + metadata['MAF'] = [] + metadata['filter'] = [] + metadata['names'] = [] # TODO (low) change to cov_names + metadata['phenotype'] = [] + b_cov = [] + C = [] + a_test = [] + b4 = [] - - #TODO (mid) add parameter to compute PD only for new phenotypes or cov - metadata['id']=ids - metadata['MAF']=[] - metadata['filter']=[] - metadata['names']=[] #TODO (low) change to cov_names - metadata['phenotype']=[] - b_cov=[] - C=[] - a_test=[] - b4=[] - - covariates=COV.get_next(index=row_index[2]) + covariates = COV.get_next(index=row_index[2]) if MAP.cluster == 'n' or MAP.node[1] == 1: if intercept: - metadata['names'].append(study_name+ '_intercept') - metadata['names']=metadata['names']+[ study_name+ '_' + i for i in COV.folder._data.get_names() ] - - a_cov=A_covariates(covariates,intercept=intercept) - np.save(os.path.join(save_path,study_name+'_a_cov.npy'),a_cov) + metadata['names'].append(study_name + '_intercept') + metadata['names'] = metadata['names'] + [study_name + '_' + i for i in COV.folder._data.get_names()] + a_cov = A_covariates(covariates, intercept=intercept) + np.save(os.path.join(save_path, study_name + '_a_cov.npy'), a_cov) with Timer() as t_phen: while True: - phenotype=PHEN.get_next(index=row_index[1]) + phenotype = PHEN.get_next(index=row_index[1]) if isinstance(phenotype, type(None)): - b_cov=np.concatenate(b_cov, axis=1) - C=np.concatenate(C, axis=0) - np.save(os.path.join(save_path,study_name+'_b_cov.npy'),b_cov) - np.save(os.path.join(save_path,study_name+'_C.npy'),C) + b_cov = np.concatenate(b_cov, axis=1) + C = np.concatenate(C, axis=0) + np.save(os.path.join(save_path, study_name + '_b_cov.npy'), b_cov) + np.save(os.path.join(save_path, study_name + '_C.npy'), C) break - metadata['phenotype']=metadata['phenotype']+ list(PHEN.folder._data.get_names()) - b_cov.append(B_covariates(covariates,phenotype,intercept=intercept)) + metadata['phenotype'] = metadata['phenotype'] + list(PHEN.folder._data.get_names()) + b_cov.append(B_covariates(covariates, phenotype, intercept=intercept)) C.append(C_matrix(phenotype)) print(('Time to PD phenotype {} is {} s'.format(np.array(C).shape, t_phen.secs))) if MAP.cluster == 'y': - f_max=np.max([ int(f.split('_')[0]) for f in GEN.folder.files ]) - files2read=[ '{}_{}.h5'.format(i,study_name) for i in np.array_split(list(range(f_max+1)),MAP.node[0])[MAP.node[1] -1 ] ][::-1] - filesdone=[] - for i in range(MAP.node[1] -1): - filesdone=filesdone + [ '{}_{}.h5'.format(i,study_name) for i in np.array_split(list(range(f_max+1)),MAP.node[0])[ i ] ] - - N_snps_read=0 + f_max = np.max([int(f.split('_')[0]) for f in GEN.folder.files]) + files2read = ['{}_{}.h5'.format(i, study_name) for i in + np.array_split(list(range(f_max + 1)), MAP.node[0])[MAP.node[1] - 1]][::-1] + filesdone = [] + for i in range(MAP.node[1] - 1): + filesdone = filesdone + ['{}_{}.h5'.format(i, study_name) for i in + np.array_split(list(range(f_max + 1)), MAP.node[0])[i]] + + N_snps_read = 0 for f in filesdone: file = os.path.join(GEN.folder.path, 'genotype', f) - N_snps_read+=GEN.folder.get_info(file)['shape'][0] + N_snps_read += GEN.folder.get_info(file)['shape'][0] else: - N_snps_read=0 + N_snps_read = 0 while True: with Timer() as t_gen: if MAP.cluster == 'y': - if len(files2read)!=0: - file = os.path.join(GEN.folder.path, 'genotype',files2read.pop() ) - genotype=GEN.folder.read(file) + if len(files2read) != 0: + file = os.path.join(GEN.folder.path, 'genotype', files2read.pop()) + genotype = GEN.folder.read(file) else: - genotype=None + genotype = None else: - genotype=GEN.get_next() + genotype = GEN.get_next() if isinstance(genotype, type(None)): if MAP.cluster == 'y': - np.save(os.path.join(save_path,'node_{}_'.format(MAP.node[1]) + study_name + '_a_test.npy'), np.concatenate(a_test).astype(np.float64)) - np.save(os.path.join(save_path,'node_{}_'.format(MAP.node[1]) + study_name + '_metadata.npy'), metadata) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_a_test.npy'), + np.concatenate(a_test).astype(np.float64)) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_metadata.npy'), + metadata) if B4_flag: b4 = np.concatenate(b4, axis=0) - np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_b4.npy'), b4.astype(np.float64)) - if MAP.node[1]==MAP.node[0]: - merge_PD(save_path, MAP.node[0],study_name) + np.save(os.path.join(save_path, 'node_{}_'.format(MAP.node[1]) + study_name + '_b4.npy'), + b4.astype(np.float64)) + if MAP.node[1] == MAP.node[0]: + merge_PD(save_path, MAP.node[0], study_name) else: - np.save(os.path.join(save_path,study_name+'_a_test.npy'), np.concatenate(a_test) ) - np.save(os.path.join(save_path,study_name+'_metadata.npy'),metadata) + np.save(os.path.join(save_path, study_name + '_a_test.npy'), np.concatenate(a_test)) + np.save(os.path.join(save_path, study_name + '_metadata.npy'), metadata) if B4_flag: - b4=np.concatenate(b4, axis=0) + b4 = np.concatenate(b4, axis=0) np.save(os.path.join(save_path, study_name + '_b4.npy'), b4) break flip = MAP.flip[GEN.folder.name][N_snps_read:N_snps_read + genotype.shape[0]] N_snps_read += genotype.shape[0] - flip_index=(flip==-1) - genotype=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,genotype) - genotype=genotype[:,row_index[0]] - maf=np.mean(genotype, axis=1)/2 - metadata['MAF']=metadata['MAF']+list(maf) + flip_index = (flip == -1) + genotype = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, genotype) + genotype = genotype[:, row_index[0]] + maf = np.mean(genotype, axis=1) / 2 + metadata['MAF'] = metadata['MAF'] + list(maf) - #TODO (low) add interaction - a_test.append(A_tests(covariates,genotype,intercept=intercept)) + # TODO (low) add interaction + a_test.append(A_tests(covariates, genotype, intercept=intercept)) if B4_flag: - #works only when all phenotypes in one chunk, if not, do not use this option! - #it would use to much disk space anyway - if len([f for f in PHEN.folder.files if f!='info_dic.npy' ])>1: + # works only when all phenotypes in one chunk, if not, do not use this option! + # it would use to much disk space anyway + if len([f for f in PHEN.folder.files if f != 'info_dic.npy']) > 1: print('pd_full flag disabled!') - B4_flag=False + B4_flag = False continue - PHEN.folder.processed=0 - phenotype=PHEN.get_next(index=row_index[1]) - b4.append(B4(phenotype,genotype)) + PHEN.folder.processed = 0 + phenotype = PHEN.get_next(index=row_index[1]) + b4.append(B4(phenotype, genotype)) print(('Time to PD genotype {} is {} s'.format(genotype.shape, t_gen.secs))) - - - - - - - diff --git a/utils/hase/hdgwas/protocol.py b/utils/hase/hdgwas/protocol.py index 92d5792..509dc5d 100644 --- a/utils/hase/hdgwas/protocol.py +++ b/utils/hase/hdgwas/protocol.py @@ -1,31 +1,27 @@ - - import os import sys import string - - -class Protocol: #TODO (mid) write class - - def __init__(self, path): - self.name=None - self.model=None - self.covariates=None - self.MAF=None - self.QC=None - self.genotype_format=None - self.phenotype_format=None - self.type=None #meta,single etc - self.enable=False - self.path=path - if os.path.isfile(self.path): - self.enable=True - self.parse() - - def parse(self): - print('Not implemented!') - - def regression_model(self): - pass \ No newline at end of file +class Protocol: # TODO (mid) write class + + def __init__(self, path): + self.name = None + self.model = None + self.covariates = None + self.MAF = None + self.QC = None + self.genotype_format = None + self.phenotype_format = None + self.type = None # meta,single etc + self.enable = False + self.path = path + if os.path.isfile(self.path): + self.enable = True + self.parse() + + def parse(self): + print('Not implemented!') + + def regression_model(self): + pass diff --git a/utils/hase/hdgwas/regression.py b/utils/hase/hdgwas/regression.py index ed62537..81468a4 100644 --- a/utils/hase/hdgwas/regression.py +++ b/utils/hase/hdgwas/regression.py @@ -4,132 +4,126 @@ import os import sys import gc -from utils.hase.hdgwas.tools import study_indexes, Mapper, HaseAnalyser, Timer,merge_genotype +from utils.hase.hdgwas.tools import study_indexes, Mapper, HaseAnalyser, Timer, merge_genotype from utils.hase.hdgwas.data import MetaParData -from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse,B4 +from utils.hase.hdgwas.hdregression import HASE, A_covariates, A_tests, B_covariates, C_matrix, A_inverse, B4 from scipy import stats import bitarray as ba from utils.hase.hdgwas.pard import partial_derivatives import tables - - -def haseregression(phen,gen,cov, mapper, Analyser, maf,intercept=True, interaction=None): - - g=tuple( [i.folder._data for i in gen ] ) - - row_index, ids = study_indexes(phenotype=phen.folder._data, - genotype=g, - covariates=cov.folder._data) - - if mapper is not None: - SNP=[0,0,mapper.n_keys] - else: - SNP=[0,0,'unknown'] - - covariates=cov.get_next(index=row_index[2]) - a_cov=A_covariates(covariates,intercept=intercept) - - while True: - gc.collect() - if mapper is not None: - if mapper.cluster=='n': - SNPs_index, keys=mapper.get() - else: - ch=mapper.chunk_pop() - if ch is None: - SNPs_index=None - break - SNPs_index, keys=mapper.get(chunk_number=ch) - if isinstance(SNPs_index, type(None)): - break - Analyser.rsid=keys - else: - SNPs_index=None - - with Timer() as t: - genotype=merge_genotype(gen, SNPs_index, mapper) - print(('time to read and merge genotype {}s'.format(t.secs))) - gc.collect() - if genotype is None: - print('All genotype processed!') - break - SNP[0]+=genotype.shape[0] - genotype=genotype[:,row_index[0]] - - if mapper is None: - Analyser.rsid=np.array(list(range(genotype.shape[0]))) - - - MAF=np.mean(genotype, axis=1)/2 - STD=np.std(genotype, axis=1) - - if maf!=0: - - filter=(MAF>maf) & (MAF<1-maf) & (MAF!=0.5) - genotype=genotype[filter,:] - Analyser.MAF=MAF[filter] - Analyser.rsid=Analyser.rsid[filter] - - if genotype.shape[0]==0: - print('NO SNPs > MAF') - continue - - else: - Analyser.MAF=MAF - - SNP[1]+=genotype.shape[0] - - while True: - phenotype=phen.get_next(index=row_index[1]) - - if isinstance(phenotype, type(None)): - phen.folder.processed=0 - print('All phenotypes processed!') - break - - if phen.permutation: - np.random.shuffle(phenotype) - - b_cov=B_covariates(covariates,phenotype,intercept=intercept) - - C=C_matrix(phenotype) - - if interaction is not None: - pass - - - a_test=A_tests(covariates,genotype,intercept=intercept) - a_inv=A_inverse(a_cov,a_test) - - N_con=a_inv.shape[1] - 1 - - DF=(phenotype.shape[0] - a_inv.shape[1]) - - b4=B4(phenotype,genotype) - - - t_stat, SE=HASE(b4, a_inv, b_cov, C, N_con, DF) - print(('Read {}, processed {}, total {}'.format(SNP[0],SNP[1],SNP[2] ))) - Analyser.t_stat=t_stat - Analyser.SE=SE - if mapper is not None and mapper.cluster == 'y': - Analyser.cluster=True - Analyser.chunk=ch - Analyser.node=mapper.node[1] - if phen.permutation: - Analyser.permutation=True - Analyser.save_result( phen.folder._data.names[phen.folder._data.start:phen.folder._data.finish]) - t_stat=None - Analyser.t_stat=None - del b4 - del C - del b_cov - del a_inv - del a_test - del t_stat - gc.collect() - - if Analyser.cluster: - np.save(os.path.join(Analyser.out,str(Analyser.node)+'_node_RSID.npy'),Analyser.rsid_dic) +def haseregression(phen, gen, cov, mapper, Analyser, maf, intercept=True, interaction=None): + g = tuple([i.folder._data for i in gen]) + + row_index, ids = study_indexes(phenotype=phen.folder._data, + genotype=g, + covariates=cov.folder._data) + + if mapper is not None: + SNP = [0, 0, mapper.n_keys] + else: + SNP = [0, 0, 'unknown'] + + covariates = cov.get_next(index=row_index[2]) + a_cov = A_covariates(covariates, intercept=intercept) + + while True: + gc.collect() + if mapper is not None: + if mapper.cluster == 'n': + SNPs_index, keys = mapper.get() + else: + ch = mapper.chunk_pop() + if ch is None: + SNPs_index = None + break + SNPs_index, keys = mapper.get(chunk_number=ch) + if isinstance(SNPs_index, type(None)): + break + Analyser.rsid = keys + else: + SNPs_index = None + + with Timer() as t: + genotype = merge_genotype(gen, SNPs_index, mapper) + print(('time to read and merge genotype {}s'.format(t.secs))) + gc.collect() + if genotype is None: + print('All genotype processed!') + break + SNP[0] += genotype.shape[0] + genotype = genotype[:, row_index[0]] + + if mapper is None: + Analyser.rsid = np.array(list(range(genotype.shape[0]))) + + MAF = np.mean(genotype, axis=1) / 2 + STD = np.std(genotype, axis=1) + + if maf != 0: + + filter = (MAF > maf) & (MAF < 1 - maf) & (MAF != 0.5) + genotype = genotype[filter, :] + Analyser.MAF = MAF[filter] + Analyser.rsid = Analyser.rsid[filter] + + if genotype.shape[0] == 0: + print('NO SNPs > MAF') + continue + + else: + Analyser.MAF = MAF + + SNP[1] += genotype.shape[0] + + while True: + phenotype = phen.get_next(index=row_index[1]) + + if isinstance(phenotype, type(None)): + phen.folder.processed = 0 + print('All phenotypes processed!') + break + + if phen.permutation: + np.random.shuffle(phenotype) + + b_cov = B_covariates(covariates, phenotype, intercept=intercept) + + C = C_matrix(phenotype) + + if interaction is not None: + pass + + a_test = A_tests(covariates, genotype, intercept=intercept) + a_inv = A_inverse(a_cov, a_test) + + N_con = a_inv.shape[1] - 1 + + DF = (phenotype.shape[0] - a_inv.shape[1]) + + b4 = B4(phenotype, genotype) + + t_stat, SE = HASE(b4, a_inv, b_cov, C, N_con, DF) + print(('Read {}, processed {}, total {}'.format(SNP[0], SNP[1], SNP[2]))) + Analyser.t_stat = t_stat + Analyser.SE = SE + if mapper is not None and mapper.cluster == 'y': + Analyser.cluster = True + Analyser.chunk = ch + Analyser.node = mapper.node[1] + if phen.permutation: + Analyser.permutation = True + Analyser.save_result(phen.folder._data.names[phen.folder._data.start:phen.folder._data.finish]) + t_stat = None + Analyser.t_stat = None + del b4 + del C + del b_cov + del a_inv + del a_test + del t_stat + gc.collect() + + if Analyser.cluster: + np.save(os.path.join(Analyser.out, str(Analyser.node) + '_node_RSID.npy'), Analyser.rsid_dic) diff --git a/utils/hase/hdgwas/tools.py b/utils/hase/hdgwas/tools.py index c4d1a4c..5501a7a 100644 --- a/utils/hase/hdgwas/tools.py +++ b/utils/hase/hdgwas/tools.py @@ -1,4 +1,3 @@ - import time import numpy as np import pandas as pd @@ -13,63 +12,66 @@ import glob import inspect, itertools + def timer(func): - def f(*args,**kwargs): - with Timer(verbose=True) as t: - return func(*args,**kwargs) - return f + def f(*args, **kwargs): + with Timer(verbose=True) as t: + return func(*args, **kwargs) + + return f class Timer(object): - def __init__(self, verbose=False): - self.verbose = verbose + def __init__(self, verbose=False): + self.verbose = verbose + + def __enter__(self): + self.start = time.time() + return self - def __enter__(self): - self.start = time.time() - return self + def __exit__(self, *args): + self.end = time.time() + self.secs = self.end - self.start + self.msecs = self.secs * 1000 # millisecs + if self.verbose: + print('elapsed time: %f ms' % self.msecs) - def __exit__(self, *args): - self.end = time.time() - self.secs = self.end - self.start - self.msecs = self.secs * 1000 # millisecs - if self.verbose: - print('elapsed time: %f ms' % self.msecs) def timing(f): - def wrap(*args,**kwargs): - time1 = time.time() - ret = f(*args,**kwargs) - time2 = time.time() - print('%s function took %0.3f s' % (f.__name__, (time2 - time1) )) - return ret + def wrap(*args, **kwargs): + time1 = time.time() + ret = f(*args, **kwargs) + time2 = time.time() + print('%s function took %0.3f s' % (f.__name__, (time2 - time1))) + return ret - return wrap + return wrap def save_parameters(f): - def wrap(*args, **kwargs): - args_name = inspect.getargspec(f)[0] - args_dict = dict(zip(args_name, args)) - np.save('{}.npy'.format(f.__name__),args_dict ) - ret = f(*args, **kwargs) - return ret + def wrap(*args, **kwargs): + args_name = inspect.getargspec(f)[0] + args_dict = dict(zip(args_name, args)) + np.save('{}.npy'.format(f.__name__), args_dict) + ret = f(*args, **kwargs) + return ret - return wrap + return wrap -def check_np(): - for i in ['atlas_blas_info', 'openblas_info', 'lapack_opt_info', - 'atlas_info', 'lapack_mkl_info', 'blas_mkl_info', - 'atlas_blas_info', 'mkl_info']: - try: - if len(getattr(np.__config__, i)) >0: - print(('Numpy linked to {}'.format(i))) - return 0 - except: - continue +def check_np(): + for i in ['atlas_blas_info', 'openblas_info', 'lapack_opt_info', + 'atlas_info', 'lapack_mkl_info', 'blas_mkl_info', + 'atlas_blas_info', 'mkl_info']: + try: + if len(getattr(np.__config__, i)) > 0: + print(('Numpy linked to {}'.format(i))) + return 0 + except: + continue - raise ValueError('NO BLAS/LAPACK/MKL found!' - 'To restart with slow speed use -np False') + raise ValueError('NO BLAS/LAPACK/MKL found!' + 'To restart with slow speed use -np False') ######################################################################## @@ -78,260 +80,262 @@ def check_np(): class Analyser(object): - def __init__(self,name): - self.name=name + def __init__(self, name): + self.name = name class HaseAnalyser(Analyser): - def __init__(self): - self.name=None - self.t_stat=None - self.p_value=None - self.betas=None - self.SE=None - self.DF=None - self.n_studies=None - self.probes_path={} - self.results=OrderedDict() - self.split_size=None - self.threshold=None - self.result_path=None - self.result_index=1 - self.out=None - self.MAF=None - self.rsid=None - self.reference=None - self.cluster=False - self.permutation=False - self.rsid_dic={} - self.result_folder=None - self.result_dump_size=3 - self.file_number=None - - - def summary(self): - - if isinstance(self.result_path,type(None)): - raise ValueError('Please set result pathway to Analyser!') - - if isinstance(self.DF,type(None)): - print ('DF is not defined. Forced to use z_score statistics!') - - if self.result_folder is None: - self.result_folder=[ i for i in glob.glob( os.path.join(self.result_path, '*.npy') ) if 'RSID' not in i] - - self.results['RSID']=np.array([]) - self.results['p_value']=np.array([]) - self.results['t-stat']=np.array([]) - self.results['phenotype']=np.array([]) - self.results['SE']=np.array([]) - self.results['MAF']=np.array([]) - self.results['BETA'] = np.array([]) - - files=[] - - if self.file_number is not None: - try: - d = np.load(os.path.join(self.result_path, '{}result.npy'.format(self.file_number))).item() - except: - print("Can't read {}".format(i)) - - p_value = self.get_p_value(d['t-stat'], df=self.DF) - self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) - self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) - self.results['RSID'] = np.append(self.results['RSID'], d['index']) - self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) - self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) - self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) - self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) - - else: - - for i in range(self.result_dump_size): - try: - files.append(self.result_folder.pop()) - except: - break - if len(files)!=0: - for i in files: - print(i) - try: - d=np.load(i).item() - except: - print("Can't read {}".format(i)) - continue - p_value=self.get_p_value(d['t-stat'],df=self.DF) - self.results['t-stat']=np.append(self.results['t-stat'],d['t-stat'].flatten()) - self.results['SE']=np.append(self.results['SE'],d['SE'].flatten()) - self.results['RSID']=np.append(self.results['RSID'],d['index']) - self.results['phenotype']=np.append(self.results['phenotype'],d['phenotype']) - self.results['MAF']=np.append(self.results['MAF'],d['MAF']) - self.results['p_value']=np.append(self.results['p_value'],p_value.flatten()) - self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten() ) - else: - self.results=None - - def get_p_value(self,t_stat,df=None): - if df is None: - return stats.norm.sf(np.abs(t_stat))*2 - else: - return stats.t.sf(np.abs(t_stat),df)*2 - - def save_result(self , phen_names): - - t_threshold=self.threshold - save_path=self.out - - mask=([],[],[]) - - if t_threshold: - mask = np.where(np.abs(self.t_stat) > t_threshold) - else: - mask = np.where(np.abs(self.t_stat) > 0) - - if (len(mask[0]) != 0): - print(('Saving results to {}'.format(save_path))) - t_save = self.t_stat[mask[0],mask[1],mask[2]] - se=self.SE[mask[0],mask[1],mask[2]] - result = {'phenotype': phen_names[mask[2]], 't-stat': t_save,'index':self.rsid[mask[0]],'SE':se, 'MAF':self.MAF[mask[0]]} - - if not self.cluster: - np.save(os.path.join(save_path, str(self.result_index) + 'result.npy'), result) - else: - if self.permutation: - result=self.t_stat - self.rsid_dic[str(self.chunk[0])+'_' +str(self.chunk[1])]=self.rsid - np.save(os.path.join(save_path,'node'+str(self.node)+'_'+ str(self.chunk[0])+'_' +str(self.chunk[1])+'_'+ str(self.result_index) + 'result.npy'),result) - self.result_index+=1 - + def __init__(self): + self.name = None + self.t_stat = None + self.p_value = None + self.betas = None + self.SE = None + self.DF = None + self.n_studies = None + self.probes_path = {} + self.results = OrderedDict() + self.split_size = None + self.threshold = None + self.result_path = None + self.result_index = 1 + self.out = None + self.MAF = None + self.rsid = None + self.reference = None + self.cluster = False + self.permutation = False + self.rsid_dic = {} + self.result_folder = None + self.result_dump_size = 3 + self.file_number = None + + def summary(self): + + if isinstance(self.result_path, type(None)): + raise ValueError('Please set result pathway to Analyser!') + + if isinstance(self.DF, type(None)): + print('DF is not defined. Forced to use z_score statistics!') + + if self.result_folder is None: + self.result_folder = [i for i in glob.glob(os.path.join(self.result_path, '*.npy')) if 'RSID' not in i] + + self.results['RSID'] = np.array([]) + self.results['p_value'] = np.array([]) + self.results['t-stat'] = np.array([]) + self.results['phenotype'] = np.array([]) + self.results['SE'] = np.array([]) + self.results['MAF'] = np.array([]) + self.results['BETA'] = np.array([]) + + files = [] + + if self.file_number is not None: + try: + d = np.load(os.path.join(self.result_path, '{}result.npy'.format(self.file_number))).item() + except: + print("Can't read {}".format(i)) + + p_value = self.get_p_value(d['t-stat'], df=self.DF) + self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) + self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) + self.results['RSID'] = np.append(self.results['RSID'], d['index']) + self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) + self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) + self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) + self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) + + else: + + for i in range(self.result_dump_size): + try: + files.append(self.result_folder.pop()) + except: + break + if len(files) != 0: + for i in files: + print(i) + try: + d = np.load(i).item() + except: + print("Can't read {}".format(i)) + continue + p_value = self.get_p_value(d['t-stat'], df=self.DF) + self.results['t-stat'] = np.append(self.results['t-stat'], d['t-stat'].flatten()) + self.results['SE'] = np.append(self.results['SE'], d['SE'].flatten()) + self.results['RSID'] = np.append(self.results['RSID'], d['index']) + self.results['phenotype'] = np.append(self.results['phenotype'], d['phenotype']) + self.results['MAF'] = np.append(self.results['MAF'], d['MAF']) + self.results['p_value'] = np.append(self.results['p_value'], p_value.flatten()) + self.results['BETA'] = np.append(self.results['BETA'], d['t-stat'].flatten() * d['SE'].flatten()) + else: + self.results = None + + def get_p_value(self, t_stat, df=None): + if df is None: + return stats.norm.sf(np.abs(t_stat)) * 2 + else: + return stats.t.sf(np.abs(t_stat), df) * 2 + + def save_result(self, phen_names): + + t_threshold = self.threshold + save_path = self.out + + mask = ([], [], []) + + if t_threshold: + mask = np.where(np.abs(self.t_stat) > t_threshold) + else: + mask = np.where(np.abs(self.t_stat) > 0) + + if (len(mask[0]) != 0): + print(('Saving results to {}'.format(save_path))) + t_save = self.t_stat[mask[0], mask[1], mask[2]] + se = self.SE[mask[0], mask[1], mask[2]] + result = {'phenotype': phen_names[mask[2]], 't-stat': t_save, 'index': self.rsid[mask[0]], 'SE': se, + 'MAF': self.MAF[mask[0]]} + + if not self.cluster: + np.save(os.path.join(save_path, str(self.result_index) + 'result.npy'), result) + else: + if self.permutation: + result = self.t_stat + self.rsid_dic[str(self.chunk[0]) + '_' + str(self.chunk[1])] = self.rsid + np.save(os.path.join(save_path, 'node' + str(self.node) + '_' + str(self.chunk[0]) + '_' + str( + self.chunk[1]) + '_' + str(self.result_index) + 'result.npy'), result) + self.result_index += 1 ######################################################################## ######################################################################## ######################################################################## -class Log (object): #TODO (low) write this class +class Log(object): # TODO (low) write this class - def __init__(self): - pass + def __init__(self): + pass ######################################################################## ######################################################################## ######################################################################## -class Checker(object): #TODO (mid) finish or remove this class - - def __init__(self): - self.mode=None - self.name=None - self.args=None - - def check(self,args, mode=None): - - if mode=='converting': - return self.converting(args) - elif mode=='encoding': - self.encoding(args) - elif mode=='single-meta': - self.single_meta(args) - elif mode=='meta-stage': - self.meta_stage(args) - elif mode=='regression': - self.regression(args) - - - def system_check(self,args): - pass - - def converting(self,args): +class Checker(object): # TODO (mid) finish or remove this class + def __init__(self): + self.mode = None + self.name = None + self.args = None - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + def check(self, args, mode=None): - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if mode == 'converting': + return self.converting(args) + elif mode == 'encoding': + self.encoding(args) + elif mode == 'single-meta': + self.single_meta(args) + elif mode == 'meta-stage': + self.meta_stage(args) + elif mode == 'regression': + self.regression(args) - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + def system_check(self, args): + pass - args.genotype=args.genotype[0] - if not os.path.isdir(args.genotype): - raise ValueError('{} is not a directory!'.format(args.genotype)) + def converting(self, args): - def encoding(self,args): + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + args.genotype = args.genotype[0] + if not os.path.isdir(args.genotype): + raise ValueError('{} is not a directory!'.format(args.genotype)) - args.genotype=args.genotype[0] - args.study_name=args.study_name[0] + def encoding(self, args): - if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.out): - raise ValueError('{},{} or {} is not a directory'.format(args.genotype, args.phenotype, args.out)) + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if not os.path.isdir(os.path.join(args.out, 'encode_genotype' )) or not os.path.isdir(os.path.join(args.out, 'encode_phenotype' )): - raise ValueError('{} or {} not exist it is up to you to create these directory'.format( - (os.path.join(args.out, 'encode_genotype' )), - (os.path.join(args.out, 'encode_phenotype' )) - ) - ) + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - id=np.array(pd.read_hdf(os.path.join(args.genotype,'individuals',args.study_name+'.h5'),'individuals').individual.tolist(), dtype=np.int) + args.genotype = args.genotype[0] + args.study_name = args.study_name[0] + if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.out): + raise ValueError('{},{} or {} is not a directory'.format(args.genotype, args.phenotype, args.out)) + if not os.path.isdir(os.path.join(args.out, 'encode_genotype')) or not os.path.isdir( + os.path.join(args.out, 'encode_phenotype')): + raise ValueError('{} or {} not exist it is up to you to create these directory'.format( + (os.path.join(args.out, 'encode_genotype')), + (os.path.join(args.out, 'encode_phenotype')) + ) + ) - def single_meta(self,args): + id = np.array(pd.read_hdf(os.path.join(args.genotype, 'individuals', args.study_name + '.h5'), + 'individuals').individual.tolist(), dtype=np.int) + def single_meta(self, args): - if len(args.study_name)>1: - raise ValueError('Should be only one study name!') + if len(args.study_name) > 1: + raise ValueError('Should be only one study name!') - if len(args.genotype)>1: - raise ValueError('Should be only one directory for genotype!') + if len(args.genotype) > 1: + raise ValueError('Should be only one directory for genotype!') - if isinstance(args.study_name, type(None)): - raise ValueError('study name is not defined') + if isinstance(args.study_name, type(None)): + raise ValueError('study name is not defined') - args.genotype=args.genotype[0] - args.study_name=args.study_name[0] + args.genotype = args.genotype[0] + args.study_name = args.study_name[0] - if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.covariates) : - raise ValueError('{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.covariates )) ) + if not os.path.isdir(args.genotype) or not os.path.isdir(args.phenotype) or not os.path.isdir(args.covariates): + raise ValueError( + '{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.covariates))) + def meta_stage(self, args): + if isinstance(args.mapper, type(None)): + raise ValueError( + 'You should define mapper folder --mapper, if it does not exist you should first run Mapper script') - def meta_stage(self,args): + if isinstance(args.mapper_name, type(None)): + raise ValueError( + 'You should define mapper name --mapper_name, if it does not exist you should first run Mapper script') - if isinstance(args.mapper, type(None)): - raise ValueError('You should define mapper folder --mapper, if it does not exist you should first run Mapper script') + if len(args.genotype) <= 1: + raise ValueError('Should be only one directory for genotype!') - if isinstance(args.mapper_name, type(None)): - raise ValueError('You should define mapper name --mapper_name, if it does not exist you should first run Mapper script') + g = [os.path.isdir(i) for i in args.genotype] + d = [os.path.isdir(i) for i in args.derivatives] - if len(args.genotype)<=1: - raise ValueError('Should be only one directory for genotype!') + if np.sum(g) != len(args.genotype) or not os.path.isdir(args.phenotype) or np.sum(d) != len(args.derivatives): + raise ValueError( + '{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.derivatives))) - g=[os.path.isdir(i) for i in args.genotype ] - d=[os.path.isdir(i) for i in args.derivatives ] + def regression(self, args): - if np.sum(g)!=len(args.genotype) or not os.path.isdir(args.phenotype) or np.sum(d)!=len(args.derivatives) : - raise ValueError('{},{} or {} is nor a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.derivatives )) ) + g = [os.path.isdir(i) for i in args.genotype] - - def regression(self,args): - - g=[os.path.isdir(i) for i in args.genotype ] - - if np.sum(g)!=len(args.genotype) or not os.path.isdir(args.phenotype[0]) or not os.path.isdir(args.covariates) : - raise ValueError('{},{} or {} is not a directory'.format(os.path.isdir(args.genotype),os.path.isdir(args.phenotype), os.path.isdir(args.derivatives )) ) + if np.sum(g) != len(args.genotype) or not os.path.isdir(args.phenotype[0]) or not os.path.isdir( + args.covariates): + raise ValueError( + '{},{} or {} is not a directory'.format(os.path.isdir(args.genotype), os.path.isdir(args.phenotype), + os.path.isdir(args.derivatives))) ######################################################################## @@ -339,318 +343,321 @@ def regression(self,args): ######################################################################## class Mapper(object): - def __init__(self): - - self.name=None - self.genotype_names=[] - self.dic=OrderedDict() - self.n_study=0 - self.values=[] # array (N_study, N_keys), where N_keys = number of ID in reference table - self.keys=None - self.n_keys=None - self.processed=0 - self._limit=None - self.reference=False - self.include=None - self.exclude=None - self.include_ind=np.array([]) - self.exclude_ind=np.array([]) - #self.hash=HashTable() - self.cluster=None - self.node=None - self.chunk_pool=None - self.chunk_size=None - self.column_names=[] - self.flip={} # keys - study names; values - array, with length equal to number of probes - self.probes=None - self.encoded={} - - - def chunk_pop(self): - if self.chunk_pool is None and self.cluster is None: - raise ValueError('Cluster settings are not defined!') - - if self.chunk_pool is None: - self.chunk_pool=[] - if self.node is None: - raise ValueError('cluster setting not defined! (number of nodes / this node number) ') - self.node=[int(i) for i in self.node] - N=self.n_keys/self.node[0] - n=N/self.chunk_size - if N<1: - raise ValueError('Too many nodes! Change chunk size in mapper') - elif N==1: - self.chunk_pool=[[self.node[1]-1,self.node[1]]] - else: - if n==0: - self.chunk_pool=[[N*(self.node[1]-1),N*(self.node[1]-1)+N]] - else: - self.chunk_pool=[] - for i in range(n): - self.chunk_pool.append( [N*(self.node[1]-1)+ self.chunk_size*i, N*(self.node[1]-1) + self.chunk_size*(i+1) ] ) - if (N-n*self.chunk_size)!=0: - self.chunk_pool.append( [N*(self.node[1]-1) + self.chunk_size*(n), N*(self.node[1]-1) + self.chunk_size*(n)+ (N-n*self.chunk_size) ] ) - - - if self.node[1]==self.node[0]: - if (self.n_keys-N*self.node[0])!=0: - self.chunk_pool.append([self.chunk_pool[-1][1],self.n_keys]) - self.chunk_pool=self.chunk_pool[::-1] - - print(self.chunk_pool) - - if len(self.chunk_pool)!=0: - ch=self.chunk_pool.pop() - print(ch) - return ch - else: - return None - - #@timing - def fill(self, keys, name ,repeats=False, reference=False):#TODO (middle) remove - self.reference=reference - self.reference_name=name - self.column_names.append(name) - l=len(keys) - uniq=np.unique(keys) - u=len(uniq) - if not repeats: - if l!=u: - raise ValueError('length of keys {} does not = {} number of uniq values!!!'.format(l,u)) - else: - l=u - keys=uniq - self.n_keys=l - if isinstance(self._limit, type(None)): - for i,j in enumerate(keys): - self.dic[j]=[i] - else: - for i,j in enumerate(keys): - if i==self._limit: - break - self.dic[j]=[i] - - #@timing - def push(self, new_keys,name=None, new_id=True):#TODO (middle) remove - if not self.reference and len(self.dic)==0: - raise ValueError('You should fill mapper first with ref panel or your own rsids!') - self.n_study+=1 - if name is not None: - try: - self.genotype_names.index(name) - raise ValueError('Trying to push the same study to mapper') - except: - self.genotype_names.append(name) - self.column_names.append(name) - - if isinstance(self._limit, type(None)): - for i,j in enumerate(new_keys): - if self.dic.get(j): - self.dic[j]=self.dic[j] + [i] - else: - if new_id: - print(('WARNING! You are pushing ID {} which is not present in reference panel!'.format(j))) - self.dic[j]=[-1]*(self.n_study+1) - self.dic[j][self.n_study]=i - else: - continue - else: - for i,j in enumerate(new_keys): - if i==self._limit: - break - if self.dic.get(j): - self.dic[j]=self.dic[j] + [i] - else: - self.dic[j]=[-1]*(self.n_study+1) - self.dic[j][self.n_study]=i - - for k in self.dic: - if len(self.dic[k])1: - raise ValueError('There are more than one reference keys in folder {}'.format(folder)) - - self.keys=np.load(os.path.join(keys[0]) )#TODO (middle) not safety to load only one file - self.n_keys=self.keys.shape[0] - - values=glob.glob(folder+ 'values_*') - if len(values)==0: - raise ValueError('There is no mapper data in folder {}'.format(folder)) - - if self.genotype_names is None: - raise ValueError('Genotype names are not defined!') - - self.values=np.zeros(( self.n_keys , len(self.genotype_names) )) - for j,i in enumerate(self.genotype_names): - self.values[:,j]=np.load(os.path.join(folder, 'values_'+self.reference_name+'_'+i+'.npy')) - - if self.n_keys!=self.values.shape[0]: - raise ValueError('Number of indexes {} in mapper values is different from keys length {}!'.format(self.values.shape[0],self.n_keys )) - - self.n_study=self.values.shape[1] - if self.n_keys1.5*self.chunk_size: - - if chunk_number is None: - self.processed = self.processed - len(np.arange(start,finish)) - break - else: - print('Added back chunk {}'.format(ch)) - self.chunk_pool.append(ch) - break - else: - ind=np.append( ind, np.intersect1d(np.arange(start, finish), self.include_ind) ) - ind=ind.astype('int') - indexes=self.values[ind,:] - r=(indexes==-1).any(axis=1) - ind=ind[~r] - indexes = indexes[~r] - keys = self.keys[ind] - - if len(ind)==0: - return None,None - - - return [indexes[:,i].astype(np.int64) for i in range(self.n_study)], keys - - - - def get_all(self, name, nonempty=True): - ind=self.genotype_names.index(name) - indexes=self.values[:,ind] - if nonempty: - r=(self.values==-1).any(axis=1) - if len(r)==self.values.shape[0]: - raise ValueError('There is no common names between studies') - indexes=indexes[~r] - return indexes + def __init__(self): + + self.name = None + self.genotype_names = [] + self.dic = OrderedDict() + self.n_study = 0 + self.values = [] # array (N_study, N_keys), where N_keys = number of ID in reference table + self.keys = None + self.n_keys = None + self.processed = 0 + self._limit = None + self.reference = False + self.include = None + self.exclude = None + self.include_ind = np.array([]) + self.exclude_ind = np.array([]) + # self.hash=HashTable() + self.cluster = None + self.node = None + self.chunk_pool = None + self.chunk_size = None + self.column_names = [] + self.flip = {} # keys - study names; values - array, with length equal to number of probes + self.probes = None + self.encoded = {} + + def chunk_pop(self): + if self.chunk_pool is None and self.cluster is None: + raise ValueError('Cluster settings are not defined!') + + if self.chunk_pool is None: + self.chunk_pool = [] + if self.node is None: + raise ValueError('cluster setting not defined! (number of nodes / this node number) ') + self.node = [int(i) for i in self.node] + N = self.n_keys / self.node[0] + n = N / self.chunk_size + if N < 1: + raise ValueError('Too many nodes! Change chunk size in mapper') + elif N == 1: + self.chunk_pool = [[self.node[1] - 1, self.node[1]]] + else: + if n == 0: + self.chunk_pool = [[N * (self.node[1] - 1), N * (self.node[1] - 1) + N]] + else: + self.chunk_pool = [] + for i in range(n): + self.chunk_pool.append([N * (self.node[1] - 1) + self.chunk_size * i, + N * (self.node[1] - 1) + self.chunk_size * (i + 1)]) + if (N - n * self.chunk_size) != 0: + self.chunk_pool.append([N * (self.node[1] - 1) + self.chunk_size * (n), + N * (self.node[1] - 1) + self.chunk_size * (n) + ( + N - n * self.chunk_size)]) + + if self.node[1] == self.node[0]: + if (self.n_keys - N * self.node[0]) != 0: + self.chunk_pool.append([self.chunk_pool[-1][1], self.n_keys]) + self.chunk_pool = self.chunk_pool[::-1] + + print(self.chunk_pool) + + if len(self.chunk_pool) != 0: + ch = self.chunk_pool.pop() + print(ch) + return ch + else: + return None + + # @timing + def fill(self, keys, name, repeats=False, reference=False): # TODO (middle) remove + self.reference = reference + self.reference_name = name + self.column_names.append(name) + l = len(keys) + uniq = np.unique(keys) + u = len(uniq) + if not repeats: + if l != u: + raise ValueError('length of keys {} does not = {} number of uniq values!!!'.format(l, u)) + else: + l = u + keys = uniq + self.n_keys = l + if isinstance(self._limit, type(None)): + for i, j in enumerate(keys): + self.dic[j] = [i] + else: + for i, j in enumerate(keys): + if i == self._limit: + break + self.dic[j] = [i] + + # @timing + def push(self, new_keys, name=None, new_id=True): # TODO (middle) remove + if not self.reference and len(self.dic) == 0: + raise ValueError('You should fill mapper first with ref panel or your own rsids!') + self.n_study += 1 + if name is not None: + try: + self.genotype_names.index(name) + raise ValueError('Trying to push the same study to mapper') + except: + self.genotype_names.append(name) + self.column_names.append(name) + + if isinstance(self._limit, type(None)): + for i, j in enumerate(new_keys): + if self.dic.get(j): + self.dic[j] = self.dic[j] + [i] + else: + if new_id: + print(('WARNING! You are pushing ID {} which is not present in reference panel!'.format(j))) + self.dic[j] = [-1] * (self.n_study + 1) + self.dic[j][self.n_study] = i + else: + continue + else: + for i, j in enumerate(new_keys): + if i == self._limit: + break + if self.dic.get(j): + self.dic[j] = self.dic[j] + [i] + else: + self.dic[j] = [-1] * (self.n_study + 1) + self.dic[j][self.n_study] = i + + for k in self.dic: + if len(self.dic[k]) < self.n_study + 1: + self.dic[k] = self.dic[k] + [-1] + + # @timing + def load_flip(self, folder, encode=None): + + if folder is None: + raise ValueError('Mapper is not defined!') + if not os.path.isdir(folder): + raise ValueError('{} is not a folder'.format(folder)) + + if self.reference_name is None: + raise ValueError('Reference name for mapper is not defined!') + + if len(glob.glob(folder + 'flip_*')) == 0: + raise ValueError('There is no flip mapper data in folder {}'.format(folder)) + + for j, i in enumerate(self.genotype_names): + if encode is not None: + self.encoded[i] = encode[j] + if encode[j] == 0: + self.flip[i] = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + elif encode[j] == 1: + flip = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + self.flip[i] = np.ones(flip.shape[0]) + else: + self.flip[i] = np.load(os.path.join(folder, 'flip_' + self.reference_name + '_' + i + '.npy')) + + # @timing + def load(self, folder): + if folder is None: + raise ValueError('Mapper is not defined!') + if not os.path.isdir(folder): + raise ValueError('{} is not a folder'.format(folder)) + + if self.reference_name is None: + raise ValueError('Reference name for mapper is not defined!') + + if len(glob.glob(folder + 'keys_*')) == 0: + raise ValueError('There is no mapper data in folder {}'.format(folder)) + + keys = glob.glob(folder + 'keys_*') + if len(keys) > 1: + raise ValueError('There are more than one reference keys in folder {}'.format(folder)) + + self.keys = np.load(os.path.join(keys[0])) # TODO (middle) not safety to load only one file + self.n_keys = self.keys.shape[0] + + values = glob.glob(folder + 'values_*') + if len(values) == 0: + raise ValueError('There is no mapper data in folder {}'.format(folder)) + + if self.genotype_names is None: + raise ValueError('Genotype names are not defined!') + + self.values = np.zeros((self.n_keys, len(self.genotype_names))) + for j, i in enumerate(self.genotype_names): + self.values[:, j] = np.load(os.path.join(folder, 'values_' + self.reference_name + '_' + i + '.npy')) + + if self.n_keys != self.values.shape[0]: + raise ValueError( + 'Number of indexes {} in mapper values is different from keys length {}!'.format(self.values.shape[0], + self.n_keys)) + + self.n_study = self.values.shape[1] + if self.n_keys < self.n_study: + print('WARNING!!! Normally should be more test values that studies! Check your saved data for Mapper') + + print(('You loaded values for {} studies and {} test values'.format(self.n_study, self.n_keys))) + + if self.include is not None or self.exclude is not None: + self.reference = Reference() + self.reference.name = self.reference_name + self.reference.load_index() + + # @timing + def get(self, chunk_number=None): + + if isinstance(self.keys, type(None)) and isinstance(self.values, type(None)): + raise ValueError('mapper data is not loaded!') + + if isinstance(self.chunk_size, type(None)): + raise ValueError('chunk_size and should be defined') + + if self.processed == self.n_keys: + return None, None + + if chunk_number is not None: + start = chunk_number[0] + finish = chunk_number[1] + else: + start = self.processed + finish = self.processed + self.chunk_size if ( + self.processed + self.chunk_size) < self.n_keys else self.n_keys + self.processed = finish + + with Timer() as t_q: + if self.include is not None: + if len(self.include_ind) == 0: + if 'ID' in self.include.columns: + self.include_ind = np.in1d(self.keys, self.include.ID) + self.include_ind = np.where(self.include_ind == True)[0] + # self.query_include=self.reference.index.select('reference',where='ID=self.include.ID') + # self.include_ind=self.query_include.index + elif 'CHR' in self.include.columns and 'bp' in self.include.columns: + self.query_include = self.reference.index.select('reference', + where='CHR=self.include.CHR & bp=self.include.bp') + self.include_ind = self.query_include.index + + if self.exclude is not None: + if len(self.exclude_ind) == 0: + if 'ID' in self.exclude.columns: + self.exclude_ind = np.in1d(self.keys, self.exclude.ID) + self.exclude_ind = np.where(self.exclude_ind == True)[0] + # self.query_exclude=self.reference.index.select('reference',where='ID=self.exclude.ID') + # self.exclude_ind=self.query_exclude.index + elif 'CHR' in self.exclude.columns and 'bp' in self.exclude.columns: + self.query_exclude = self.reference.index.select('reference', + where='CHR=self.exclude.CHR & bp=self.exclude.bp') + self.exclude_ind = self.query_exclude.index + + print("Time to select SNPs {}s".format(t_q.secs)) + + if self.exclude is not None or self.include is not None: + self.include_ind = np.setxor1d(self.include_ind, self.exclude_ind) + if len(self.include_ind) == 0: + print('None of included ID found in genotype data!') + return None, None + else: + ind = np.intersect1d(np.arange(start, finish), self.include_ind) + else: + ind = np.arange(start, finish) + self.include_ind = np.arange(len(self.values)) + + ind = ind.astype('int') + indexes = self.values[ind, :] + r = (indexes == -1).any(axis=1) + ind = ind[~r] + indexes = indexes[~r] + keys = self.keys[ind] + + while len(ind) < self.chunk_size: + if self.processed == self.n_keys: + break + if chunk_number is None: + start = self.processed + finish = self.processed + self.chunk_size if ( + self.processed + self.chunk_size) < self.n_keys else self.n_keys + self.processed = finish + else: + ch = self.chunk_pop() + if ch is not None: + start = ch[0] + finish = ch[1] + else: + break + if len(np.append(ind, np.intersect1d(np.arange(start, finish), self.include_ind))) > 1.5 * self.chunk_size: + + if chunk_number is None: + self.processed = self.processed - len(np.arange(start, finish)) + break + else: + print('Added back chunk {}'.format(ch)) + self.chunk_pool.append(ch) + break + else: + ind = np.append(ind, np.intersect1d(np.arange(start, finish), self.include_ind)) + ind = ind.astype('int') + indexes = self.values[ind, :] + r = (indexes == -1).any(axis=1) + ind = ind[~r] + indexes = indexes[~r] + keys = self.keys[ind] + + if len(ind) == 0: + return None, None + + return [indexes[:, i].astype(np.int64) for i in range(self.n_study)], keys + + def get_all(self, name, nonempty=True): + ind = self.genotype_names.index(name) + indexes = self.values[:, ind] + if nonempty: + r = (self.values == -1).any(axis=1) + if len(r) == self.values.shape[0]: + raise ValueError('There is no common names between studies') + indexes = indexes[~r] + return indexes ######################################################################## @@ -659,242 +666,227 @@ def get_all(self, name, nonempty=True): class Reference(object): - def __init__(self): - self.name=None - self.path_default=os.path.join(os.environ['HASEDIR'], 'data') - self.path={ - '1000Gp1v3_ref':{'table':os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref.gz'), - 'index':os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref_info.h5') } - } - self.dataframe=None - self.loaded=False - self.chunk=10000 - self.read=0 - self.columns=['ID','allele1','allele2','CHR','bp'] - self.index=None - - - - def load(self): - if self.name is not None: - if self.path.get(self.name) is not None: - try: - self.dataframe=pd.read_csv(self.path[self.name]['table'], compression='gzip', sep=' ',chunksize=self.chunk) - except: - self.dataframe=pd.read_csv(self.path[self.name]['table'], sep=' ',chunksize=self.chunk) - self.loaded=True - else: - if os.path.isfile(os.path.join(self.path_default,self.name)): - try: - self.dataframe=pd.read_csv(os.path.join(self.path_default,self.name), compression='gzip', sep=' ',chunksize=self.chunk) - except: - self.dataframe=pd.read_csv(os.path.join(self.path_default,self.name), sep=' ',chunksize=self.chunk) - self.loaded=True - self.name=os.path.basename(self.name) - else: - raise ValueError('Unknown reference {}!'.format((self.name))) - else: - raise ValueError('Reference name is not define!') - - - def load_index(self): - try: - self.index=pd.HDFStore( os.path.join( self.path[self.name]['index'] ), 'r' ) - except: - if os.path.isfile(os.path.join(self.path_default,self.name)): - self.index=pd.HDFStore(os.path.join(self.path_default,self.name), 'r' ) - else: - raise ValueError('There is {} no index file {}'.format(self.path_default, self.name)) - - - def __next__(self): - df=self.dataframe.get_chunk() - self.read+=df.shape[0] - return df - - - - - - - - - - - - + def __init__(self): + self.name = None + self.path_default = os.path.join(os.environ['HASEDIR'], 'data') + self.path = { + '1000Gp1v3_ref': {'table': os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref.gz'), + 'index': os.path.join(os.environ['HASEDIR'], 'data', '1000Gp1v3.ref_info.h5')} + } + self.dataframe = None + self.loaded = False + self.chunk = 10000 + self.read = 0 + self.columns = ['ID', 'allele1', 'allele2', 'CHR', 'bp'] + self.index = None + + def load(self): + if self.name is not None: + if self.path.get(self.name) is not None: + try: + self.dataframe = pd.read_csv(self.path[self.name]['table'], compression='gzip', sep=' ', + chunksize=self.chunk) + except: + self.dataframe = pd.read_csv(self.path[self.name]['table'], sep=' ', chunksize=self.chunk) + self.loaded = True + else: + if os.path.isfile(os.path.join(self.path_default, self.name)): + try: + self.dataframe = pd.read_csv(os.path.join(self.path_default, self.name), compression='gzip', + sep=' ', chunksize=self.chunk) + except: + self.dataframe = pd.read_csv(os.path.join(self.path_default, self.name), sep=' ', + chunksize=self.chunk) + self.loaded = True + self.name = os.path.basename(self.name) + else: + raise ValueError('Unknown reference {}!'.format((self.name))) + else: + raise ValueError('Reference name is not define!') + + def load_index(self): + try: + self.index = pd.HDFStore(os.path.join(self.path[self.name]['index']), 'r') + except: + if os.path.isfile(os.path.join(self.path_default, self.name)): + self.index = pd.HDFStore(os.path.join(self.path_default, self.name), 'r') + else: + raise ValueError('There is {} no index file {}'.format(self.path_default, self.name)) + + def __next__(self): + df = self.dataframe.get_chunk() + self.read += df.shape[0] + return df ######################################################################## ######################################################################## ######################################################################## -def study_indexes( args=None, genotype=None,phenotype=None,covariates=None): - - def _get_id(notype): - if isinstance(notype,type(None)): - id_p=np.array([],dtype=np.str) - else: - if isinstance(notype,tuple): - id_p=np.array([],dtype=np.str) - for i in notype: - if isinstance(i,dict): - id_p=np.append(id_p,i['id']) - else: - id_p=np.append(id_p,i.get_id()) - else: - id_p=notype.get_id() - return id_p.astype(np.str) - - id_c=_get_id(covariates) - id_p=_get_id(phenotype) - id_g=_get_id(genotype) - - index_g=np.array([]) - index_p=np.array([]) - index_c=np.array([]) - - if args is not None: - if not isinstance(args.ind_id_inc,type(None)) or not isinstance(args.ind_id_exc,type(None)): - pass - if not isinstance(args.cov_name_inc,type(None)) or not isinstance(args.cov_name_exc,type(None)): - pass - - if len(id_g)!=0 and len(id_p)!=0 and len(id_c)!=0: - common_id=(np.intersect1d(np.intersect1d(id_g,id_p),id_c)) - - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - elif len(id_g)==0: - common_id=(np.intersect1d(id_p,id_c)) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - elif len(id_c)==0: - common_id=(np.intersect1d(id_p,id_g)) - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_p=np.array([np.where(id_p==i)[0][0] for i in common_id]) - - else: - common_id=(np.intersect1d(id_g,id_c)) - index_g=np.array([np.where(id_g==i)[0][0] for i in common_id]) - index_c=np.array([np.where(id_c==i)[0][0] for i in common_id]) - - print(('There are {} common ids'.format(len(common_id)))) - np.savetxt(os.path.join(os.environ['HASEOUT'],'study_common_id.txt'),common_id, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'gen_id.txt'), index_g, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'phen_id.txt'), index_p, fmt='%s') - np.savetxt(os.path.join(os.environ['HASEOUT'], 'cov_id.txt'), index_c, fmt='%s') - if len(common_id)==0: - exit(0) - - return [index_g,index_p,index_c], np.array(common_id) - -#@timing -def merge_genotype(genotype, SNPs_index , mapper, flip_flag=True): - - if SNPs_index is None: - gen=genotype[0].get_next() - if gen is not None: - for i in range(1, len(genotype)): - gen=np.hstack( (gen,genotype[i].get_next() ) ) - return gen - else: - if len(genotype)!=len(SNPs_index): - raise ValueError('There are not equal number of genotypes and SNPs indexes {}!={}'.format(len(genotype), len(SNPs_index))) - gen=np.zeros( ( len(SNPs_index[0]), np.sum( [i.folder._data.id.shape[0] for i in genotype] ) ) ) - a,b=0,genotype[0].folder._data.id.shape[0] - gen[:,a:b]=genotype[0].get(SNPs_index[0],impute=mapper.encoded.get(genotype[0].folder.name,0) ) - a=b - print(gen.shape) - if flip_flag: - if not mapper.encoded.get(genotype[0].folder.name, 0): - flip=mapper.flip[genotype[0].folder.name][SNPs_index[0]] - flip_index=(flip==-1) - gen=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,gen) - for i in range(1, len(genotype)): - g=genotype[i].get(SNPs_index[i],impute=mapper.encoded.get(genotype[i].folder.name,0)) - print(g.shape) - b+=g.shape[1] - if flip_flag: - if not mapper.encoded.get(genotype[i].folder.name,0): - flip=mapper.flip[genotype[i].folder.name][SNPs_index[i]] - flip_index=(flip==-1) - g=np.apply_along_axis(lambda x: flip*(x-2*flip_index) ,0,g) - - gen[:,a:b]=g - a=b - - return gen +def study_indexes(args=None, genotype=None, phenotype=None, covariates=None): + def _get_id(notype): + if isinstance(notype, type(None)): + id_p = np.array([], dtype=np.str) + else: + if isinstance(notype, tuple): + id_p = np.array([], dtype=np.str) + for i in notype: + if isinstance(i, dict): + id_p = np.append(id_p, i['id']) + else: + id_p = np.append(id_p, i.get_id()) + else: + id_p = notype.get_id() + return id_p.astype(np.str) + + id_c = _get_id(covariates) + id_p = _get_id(phenotype) + id_g = _get_id(genotype) + + index_g = np.array([]) + index_p = np.array([]) + index_c = np.array([]) + + if args is not None: + if not isinstance(args.ind_id_inc, type(None)) or not isinstance(args.ind_id_exc, type(None)): + pass + if not isinstance(args.cov_name_inc, type(None)) or not isinstance(args.cov_name_exc, type(None)): + pass + + if len(id_g) != 0 and len(id_p) != 0 and len(id_c) != 0: + common_id = (np.intersect1d(np.intersect1d(id_g, id_p), id_c)) + + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + elif len(id_g) == 0: + common_id = (np.intersect1d(id_p, id_c)) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + elif len(id_c) == 0: + common_id = (np.intersect1d(id_p, id_g)) + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_p = np.array([np.where(id_p == i)[0][0] for i in common_id]) + + else: + common_id = (np.intersect1d(id_g, id_c)) + index_g = np.array([np.where(id_g == i)[0][0] for i in common_id]) + index_c = np.array([np.where(id_c == i)[0][0] for i in common_id]) + + print(('There are {} common ids'.format(len(common_id)))) + np.savetxt(os.path.join(os.environ['HASEOUT'], 'study_common_id.txt'), common_id, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'gen_id.txt'), index_g, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'phen_id.txt'), index_p, fmt='%s') + np.savetxt(os.path.join(os.environ['HASEOUT'], 'cov_id.txt'), index_c, fmt='%s') + if len(common_id) == 0: + exit(0) + + return [index_g, index_p, index_c], np.array(common_id) + + +# @timing +def merge_genotype(genotype, SNPs_index, mapper, flip_flag=True): + if SNPs_index is None: + gen = genotype[0].get_next() + if gen is not None: + for i in range(1, len(genotype)): + gen = np.hstack((gen, genotype[i].get_next())) + return gen + else: + if len(genotype) != len(SNPs_index): + raise ValueError('There are not equal number of genotypes and SNPs indexes {}!={}'.format(len(genotype), + len(SNPs_index))) + gen = np.zeros((len(SNPs_index[0]), np.sum([i.folder._data.id.shape[0] for i in genotype]))) + a, b = 0, genotype[0].folder._data.id.shape[0] + gen[:, a:b] = genotype[0].get(SNPs_index[0], impute=mapper.encoded.get(genotype[0].folder.name, 0)) + a = b + print(gen.shape) + if flip_flag: + if not mapper.encoded.get(genotype[0].folder.name, 0): + flip = mapper.flip[genotype[0].folder.name][SNPs_index[0]] + flip_index = (flip == -1) + gen = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, gen) + for i in range(1, len(genotype)): + g = genotype[i].get(SNPs_index[i], impute=mapper.encoded.get(genotype[i].folder.name, 0)) + print(g.shape) + b += g.shape[1] + if flip_flag: + if not mapper.encoded.get(genotype[i].folder.name, 0): + flip = mapper.flip[genotype[i].folder.name][SNPs_index[i]] + flip_index = (flip == -1) + g = np.apply_along_axis(lambda x: flip * (x - 2 * flip_index), 0, g) + + gen[:, a:b] = g + a = b + + return gen def check_converter(converted_folder, study_name): - l_ind = os.listdir( os.path.join(converted_folder, 'individuals') ) - l_probes = os.listdir(os.path.join(converted_folder, 'probes')) - l_genotype = os.listdir(os.path.join(converted_folder, 'genotype')) - - if os.path.isdir(os.path.join(converted_folder, 'tmp_files')): - l_tmp=os.listdir(os.path.join(converted_folder, 'tmp_files')) - if len(l_tmp)==0: - print ('There is no tmp files!') - else: - try: - df_tmp=pd.read_csv( os.path.join(converted_folder, 'tmp_files', 'info.txt') , header=None) - except: - df_tmp=None - - else: - df_tmp=None - - if len(l_ind)!=1 or '.h5' not in l_ind[0]: - print ('There should be 1 hdf5 file in individuals folder!') - - else: - df_ind = pd.read_hdf(os.path.join(converted_folder, 'individuals',study_name + '.h5'),'individuals') - if df_tmp is not None and int(df_tmp[0][0])!=df_ind.shape[0]: - print(('Converted number of IDs {} != {} original number'.format( df_ind.shape[0] , df_tmp[0][0] ))) - else: - print(('Number of individuals {} '.format(df_ind.shape[0]))) - print(df_ind.head()) - - if len(l_probes)!=2: - print(('There should be 2 files in probes folder, you have {}!'.format(len(l_probes)))) - probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') - N_probs = probes.get_storer('probes').nrows - - else: - probes = pd.HDFStore(os.path.join(converted_folder, 'probes',study_name + '.h5'), 'r') - N_probs=probes.get_storer('probes').nrows - - if df_tmp is not None and int(df_tmp[0][1])!=N_probs: - print(("Converted number of variants {} diff from original number {}".format(N_probs,df_tmp[0][1] ))) - - else: - print(('Converted number of variants {}'.format(N_probs))) - - print(probes.select('probes', start=0, stop=10)) - probes.close() - - if len(l_genotype)==0: - print('There is no genotype data converted!') - else: - index = 0 - for i in l_genotype: - n, m = h5py.File(os.path.join(converted_folder, 'genotype',i), 'r')['genotype'].shape - index += n - - if index!=N_probs: - print(('Number of variants in genotype folder {} != {} number in probes file'.format(index, N_probs))) - - else: - print(('Number of variants in genotype folder {}'.format(index))) - - print(h5py.File(os.path.join(converted_folder, 'genotype',l_genotype[0]), 'r')['genotype'][...]) - - -if __name__=='__main__': - print('tools') - - + l_ind = os.listdir(os.path.join(converted_folder, 'individuals')) + l_probes = os.listdir(os.path.join(converted_folder, 'probes')) + l_genotype = os.listdir(os.path.join(converted_folder, 'genotype')) + + if os.path.isdir(os.path.join(converted_folder, 'tmp_files')): + l_tmp = os.listdir(os.path.join(converted_folder, 'tmp_files')) + if len(l_tmp) == 0: + print('There is no tmp files!') + else: + try: + df_tmp = pd.read_csv(os.path.join(converted_folder, 'tmp_files', 'info.txt'), header=None) + except: + df_tmp = None + + else: + df_tmp = None + + if len(l_ind) != 1 or '.h5' not in l_ind[0]: + print('There should be 1 hdf5 file in individuals folder!') + + else: + df_ind = pd.read_hdf(os.path.join(converted_folder, 'individuals', study_name + '.h5'), 'individuals') + if df_tmp is not None and int(df_tmp[0][0]) != df_ind.shape[0]: + print(('Converted number of IDs {} != {} original number'.format(df_ind.shape[0], df_tmp[0][0]))) + else: + print(('Number of individuals {} '.format(df_ind.shape[0]))) + print(df_ind.head()) + + if len(l_probes) != 2: + print(('There should be 2 files in probes folder, you have {}!'.format(len(l_probes)))) + probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') + N_probs = probes.get_storer('probes').nrows + + else: + probes = pd.HDFStore(os.path.join(converted_folder, 'probes', study_name + '.h5'), 'r') + N_probs = probes.get_storer('probes').nrows + + if df_tmp is not None and int(df_tmp[0][1]) != N_probs: + print(("Converted number of variants {} diff from original number {}".format(N_probs, df_tmp[0][1]))) + + else: + print(('Converted number of variants {}'.format(N_probs))) + + print(probes.select('probes', start=0, stop=10)) + probes.close() + + if len(l_genotype) == 0: + print('There is no genotype data converted!') + else: + index = 0 + for i in l_genotype: + n, m = h5py.File(os.path.join(converted_folder, 'genotype', i), 'r')['genotype'].shape + index += n + + if index != N_probs: + print(('Number of variants in genotype folder {} != {} number in probes file'.format(index, N_probs))) + + else: + print(('Number of variants in genotype folder {}'.format(index))) + + print(h5py.File(os.path.join(converted_folder, 'genotype', l_genotype[0]), 'r')['genotype'][...]) + + +if __name__ == '__main__': + print('tools') diff --git a/utils/hase/setup.py b/utils/hase/setup.py index 0bb9f76..fc4fbf2 100644 --- a/utils/hase/setup.py +++ b/utils/hase/setup.py @@ -1,7 +1,7 @@ #!/usr/bin/python import os, subprocess, sys -f=open('requirements.txt') -p=f.readlines() -for i in [j.split('\n')[0] for j in p ]: - subprocess.call(['pip', 'install', i]) \ No newline at end of file +f = open('requirements.txt') +p = f.readlines() +for i in [j.split('\n')[0] for j in p]: + subprocess.call(['pip', 'install', i]) diff --git a/utils/hase/tools/VCF2hdf5.py b/utils/hase/tools/VCF2hdf5.py index b5cbe20..a8c5069 100644 --- a/utils/hase/tools/VCF2hdf5.py +++ b/utils/hase/tools/VCF2hdf5.py @@ -1,10 +1,11 @@ - import os import sys + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from config import PYTHON_PATH + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import argparse import h5py import pandas as pd @@ -14,93 +15,90 @@ import glob -def probes_VCF2hdf5(data_path, save_path,study_name, chunk_size=1000000): - - if os.path.isfile(os.path.join(save_path,'probes',study_name+'.h5')): - os.remove(os.path.join(save_path,'probes',study_name+'.h5')) - - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - - df=pd.read_csv(data_path,sep='\t',chunksize=chunk_size, header=None,index_col=None) - for i,chunk in enumerate(df): - print('add chunk {}'.format(i)) - print(chunk.head()) - chunk.columns=[ "CHR","bp" ,"ID",'allele1','allele2','QUAL','FILTER','INFO'] #TODO (high) parse INFO - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - chunk.to_hdf(os.path.join(save_path,'probes',study_name+'.h5'),data_columns=["CHR","bp" ,"ID",'allele1','allele2'], key='probes',format='table',append=True, - min_itemsize = 25, complib='zlib',complevel=9 ) - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path,'probes',study_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - -def ind_VCF2hdf5(data_path, save_path,study_name): - - if os.path.isfile(os.path.join(save_path,'individuals',study_name+'.h5')): - os.remove(os.path.join(save_path,'individuals',study_name+'.h5')) - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - n.append((j[:-1])) - f.close() - n=np.array(n) - chunk=pd.DataFrame.from_dict({"individual":n}) - chunk.to_hdf(os.path.join(save_path,'individuals',study_name+'.h5'), key='individuals',format='table', - min_itemsize = 25, complib='zlib',complevel=9 ) - -def genotype_VCF2hdf5(data_path,id, save_path, study_name): - - - df=pd.read_csv(data_path, header=None, index_col=None,sep='\t', dtype=np.float16) - data=df.as_matrix() - print(data.shape) - print('Saving chunk...{}'.format(os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'), 'w', title=study_name) - - atom = tables.Float16Atom() - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=tables.Filters(complevel=9, complib='zlib')) - genotype[:] = data - h5_gen_file.close() - os.remove(data_path) - - -if __name__=="__main__": - - parser = argparse.ArgumentParser(description='Script to convert VCF data') - parser.add_argument("-study_name", required=True, type=str, help="Study specific name") - parser.add_argument("-id", type=str, help="subject id") - parser.add_argument("-data",required=True, type=str, help="path to file") - parser.add_argument("-out",required=True, type=str, help="path to results save folder") - parser.add_argument("-flag",required=True,type=str,choices=['individuals','probes','chunk'], help="path to file with SNPs info") - - - args = parser.parse_args() - - print(args) - try: - print ('Creating directories...') - os.mkdir(os.path.join(args.out,'genotype') ) - os.mkdir(os.path.join(args.out,'individuals') ) - os.mkdir(os.path.join(args.out,'probes') ) - os.mkdir(os.path.join(args.out,'tmp_files')) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) - - if args.flag=='probes': - probes_VCF2hdf5(args.data, args.out, args.study_name) - elif args.flag=='individuals': - ind_VCF2hdf5(args.data, args.out,args.study_name) - elif args.flag=='chunk': - genotype_VCF2hdf5(args.data,args.id, args.out,args.study_name) - - - +def probes_VCF2hdf5(data_path, save_path, study_name, chunk_size=1000000): + if os.path.isfile(os.path.join(save_path, 'probes', study_name + '.h5')): + os.remove(os.path.join(save_path, 'probes', study_name + '.h5')) + + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + + df = pd.read_csv(data_path, sep='\t', chunksize=chunk_size, header=None, index_col=None) + for i, chunk in enumerate(df): + print('add chunk {}'.format(i)) + print(chunk.head()) + chunk.columns = ["CHR", "bp", "ID", 'allele1', 'allele2', 'QUAL', 'FILTER', 'INFO'] # TODO (high) parse INFO + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + chunk.to_hdf(os.path.join(save_path, 'probes', study_name + '.h5'), + data_columns=["CHR", "bp", "ID", 'allele1', 'allele2'], key='probes', format='table', append=True, + min_itemsize=25, complib='zlib', complevel=9) + pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path, 'probes', study_name + '_hash_table.csv.gz'), + index=False, compression='gzip', sep='\t') + + +def ind_VCF2hdf5(data_path, save_path, study_name): + if os.path.isfile(os.path.join(save_path, 'individuals', study_name + '.h5')): + os.remove(os.path.join(save_path, 'individuals', study_name + '.h5')) + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + n.append((j[:-1])) + f.close() + n = np.array(n) + chunk = pd.DataFrame.from_dict({"individual": n}) + chunk.to_hdf(os.path.join(save_path, 'individuals', study_name + '.h5'), key='individuals', format='table', + min_itemsize=25, complib='zlib', complevel=9) + + +def genotype_VCF2hdf5(data_path, id, save_path, study_name): + df = pd.read_csv(data_path, header=None, index_col=None, sep='\t', dtype=np.float16) + data = df.as_matrix() + print(data.shape) + print('Saving chunk...{}'.format(os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'), 'w', title=study_name) + + atom = tables.Float16Atom() + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=tables.Filters(complevel=9, complib='zlib')) + genotype[:] = data + h5_gen_file.close() + os.remove(data_path) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Script to convert VCF data') + parser.add_argument("-study_name", required=True, type=str, help="Study specific name") + parser.add_argument("-id", type=str, help="subject id") + parser.add_argument("-data", required=True, type=str, help="path to file") + parser.add_argument("-out", required=True, type=str, help="path to results save folder") + parser.add_argument("-flag", required=True, type=str, choices=['individuals', 'probes', 'chunk'], + help="path to file with SNPs info") + + args = parser.parse_args() + + print(args) + try: + print('Creating directories...') + os.mkdir(os.path.join(args.out, 'genotype')) + os.mkdir(os.path.join(args.out, 'individuals')) + os.mkdir(os.path.join(args.out, 'probes')) + os.mkdir(os.path.join(args.out, 'tmp_files')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) + + if args.flag == 'probes': + probes_VCF2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'individuals': + ind_VCF2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'chunk': + genotype_VCF2hdf5(args.data, args.id, args.out, args.study_name) diff --git a/utils/hase/tools/addProbesInfo.py b/utils/hase/tools/addProbesInfo.py index 2ce8675..dff68d7 100644 --- a/utils/hase/tools/addProbesInfo.py +++ b/utils/hase/tools/addProbesInfo.py @@ -7,64 +7,61 @@ import tables import argparse - parser = argparse.ArgumentParser(description='') parser.add_argument("-i", type=str, required=True, help="path to results file") parser.add_argument("-p", type=str, required=True, help="path to probes file") parser.add_argument("-o", type=str, required=True, help="path to output folder") -parser.add_argument("-split_ph", action='store_true', default=False, help="flag to split result in separate files per phenotype") +parser.add_argument("-split_ph", action='store_true', default=False, + help="flag to split result in separate files per phenotype") parser.add_argument("-chunk", type=int, default=1000000, help="chunk size to read results file") args = parser.parse_args() - -store=pd.HDFStore(args.p,'r') -df_probes_tmp=store.select('probes',start=0, stop=1) -probes_columns=df_probes_tmp.columns +store = pd.HDFStore(args.p, 'r') +df_probes_tmp = store.select('probes', start=0, stop=1) +probes_columns = df_probes_tmp.columns if 'Rsq' in probes_columns: - probes_columns=['ID','Rsq','allele1', 'allele2'] + probes_columns = ['ID', 'Rsq', 'allele1', 'allele2'] else: probes_columns = ['ID', 'allele1', 'allele2'] - -df_probes=store.select('probes',columns=probes_columns) +df_probes = store.select('probes', columns=probes_columns) print('Probes shape {}'.format(df_probes.shape)) -if os.path.isfile( args.p.split('.h5')[0] + '_hash_table.csv.gz'): +if os.path.isfile(args.p.split('.h5')[0] + '_hash_table.csv.gz'): try: - df_hash = pd.read_csv( args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', + df_hash = pd.read_csv(args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', compression='gzip', index_col=False) except: - df_hash = pd.read_csv( args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', + df_hash = pd.read_csv(args.p.split('.h5')[0] + '_hash_table.csv.gz', sep='\t', index_col=False) print('Hash table found!') - df_probes = pd.merge(df_probes,df_hash, right_on='keys', left_on='allele1') + df_probes = pd.merge(df_probes, df_hash, right_on='keys', left_on='allele1') df_probes['allele1'] = df_probes['allele'] del df_probes['allele'] - df_probes = pd.merge(df_probes,df_hash, right_on='keys', left_on='allele2') + df_probes = pd.merge(df_probes, df_hash, right_on='keys', left_on='allele2') df_probes['allele2'] = df_probes['allele'] - df_probes=df_probes[probes_columns] + df_probes = df_probes[probes_columns] else: print('Hash table is not found!!!') +df = pd.read_csv(args.i, compression='infer', sep=" ", chunksize=args.chunk) -df = pd.read_csv(args.i, compression='infer', sep=" ",chunksize=args.chunk ) - -phenotypes=[] -for i,df_chunk in enumerate(df): +phenotypes = [] +for i, df_chunk in enumerate(df): print('Chunk number {}'.format(i)) df_chunk = pd.merge(df_chunk, df_probes, left_on='RSID', right_on='ID') - df_chunk= df_chunk[probes_columns + [ 'MAF', 'BETA', 'SE', 'p_value', 'phenotype', 't-stat' ]] + df_chunk = df_chunk[probes_columns + ['MAF', 'BETA', 'SE', 'p_value', 'phenotype', 't-stat']] df_chunk.rename(columns={'MAF': 'AF_coded'}, inplace=True) if not args.split_ph: - hdr= False if os.path.isfile(os.path.join(args.o, os.path.basename(args.i))) else True + hdr = False if os.path.isfile(os.path.join(args.o, os.path.basename(args.i))) else True df_chunk.to_csv(os.path.join(args.o, os.path.basename(args.i)), sep=' ', index=None, mode='a', header=hdr) else: - phenotypes = np.unique( np.append( phenotypes, df_chunk.phenotype ) ) + phenotypes = np.unique(np.append(phenotypes, df_chunk.phenotype)) for ph in phenotypes: df_tmp = df_chunk.query('phenotype=={}'.format(ph)) - if df_tmp.shape[0]!=0: + if df_tmp.shape[0] != 0: hdr = False if os.path.isfile(os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i))) else True df_tmp[probes_columns + ['AF_coded', 'BETA', 'SE', 'p_value', 't-stat']].to_csv( - os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i)), sep=' ', index=None,mode='a', header=hdr) - + os.path.join(args.o, str(ph) + "_" + os.path.basename(args.i)), sep=' ', index=None, mode='a', + header=hdr) diff --git a/utils/hase/tools/analyzer.py b/utils/hase/tools/analyzer.py index 40583d1..de9f41b 100644 --- a/utils/hase/tools/analyzer.py +++ b/utils/hase/tools/analyzer.py @@ -1,55 +1,55 @@ import sys import os + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from config import MAPPER_CHUNK_SIZE, basedir,CONVERTER_SPLIT_SIZE, PYTHON_PATH -os.environ['HASEDIR']=basedir +from config import MAPPER_CHUNK_SIZE, basedir, CONVERTER_SPLIT_SIZE, PYTHON_PATH + +os.environ['HASEDIR'] = basedir if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import tables -from hdgwas.tools import Timer,HaseAnalyser, Reference +from hdgwas.tools import Timer, HaseAnalyser, Reference import argparse import pandas as pd import numpy as np from collections import OrderedDict - -if __name__=="__main__": - - os.environ['HASEDIR']=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - parser = argparse.ArgumentParser(description='Script analyse results of HASE') - parser.add_argument("-r", required=True,help="path to hase results") - parser.add_argument("-o", "--out", type=str, required=True,help="path to save result folder") - parser.add_argument("-df", type=float,default=None, help="degree of freedom = ( #subjects in study - #covariates - 1 )") - parser.add_argument("-N", type=int,default=None, help="file number to read") - #TODO (low) add reference panel - args = parser.parse_args() - Analyser=HaseAnalyser() - print(args) - - Analyser.DF=args.df - Analyser.result_path=args.r - Analyser.file_number = args.N - - results=OrderedDict() - results['RSID']=np.array([]) - results['p_value']=np.array([]) - results['t-stat']=np.array([]) - results['phenotype']=np.array([]) - results['SE']=np.array([]) - results['MAF']=np.array([]) - results['BETA'] = np.array([]) - - while True: - Analyser.summary() - if Analyser.results is None: - break - print('Saving data...') - if not os.path.exists(os.path.join(args.out,'results'+'.csv')): - df=pd.DataFrame.from_dict(results) - df.to_csv( os.path.join(args.out,'results'+'.csv'), sep=" ", index=None ) - df=pd.DataFrame.from_dict(Analyser.results) - with open(os.path.join(args.out,'results'+'.csv'), 'a') as f: - df.to_csv(f, sep=" ",header=False,index=None) - - +if __name__ == "__main__": + + os.environ['HASEDIR'] = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser = argparse.ArgumentParser(description='Script analyse results of HASE') + parser.add_argument("-r", required=True, help="path to hase results") + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + parser.add_argument("-df", type=float, default=None, + help="degree of freedom = ( #subjects in study - #covariates - 1 )") + parser.add_argument("-N", type=int, default=None, help="file number to read") + # TODO (low) add reference panel + args = parser.parse_args() + Analyser = HaseAnalyser() + print(args) + + Analyser.DF = args.df + Analyser.result_path = args.r + Analyser.file_number = args.N + + results = OrderedDict() + results['RSID'] = np.array([]) + results['p_value'] = np.array([]) + results['t-stat'] = np.array([]) + results['phenotype'] = np.array([]) + results['SE'] = np.array([]) + results['MAF'] = np.array([]) + results['BETA'] = np.array([]) + + while True: + Analyser.summary() + if Analyser.results is None: + break + print('Saving data...') + if not os.path.exists(os.path.join(args.out, 'results' + '.csv')): + df = pd.DataFrame.from_dict(results) + df.to_csv(os.path.join(args.out, 'results' + '.csv'), sep=" ", index=None) + df = pd.DataFrame.from_dict(Analyser.results) + with open(os.path.join(args.out, 'results' + '.csv'), 'a') as f: + df.to_csv(f, sep=" ", header=False, index=None) diff --git a/utils/hase/tools/fix_pheno_id.py b/utils/hase/tools/fix_pheno_id.py index db51477..e8ed203 100644 --- a/utils/hase/tools/fix_pheno_id.py +++ b/utils/hase/tools/fix_pheno_id.py @@ -4,49 +4,46 @@ import sys import argparse - parser = argparse.ArgumentParser(description='Script to edit phenotypes ids for HASE') -parser.add_argument("-i",required=True, type=str, help="path to nparrays of phenotypes") -parser.add_argument("-ids",type=str, help="path to one column data frame without headers" - "with a list of ids to exclude from analysis") -parser.add_argument("-out",required=True, type=str, help="path to save new phenotypes") +parser.add_argument("-i", required=True, type=str, help="path to nparrays of phenotypes") +parser.add_argument("-ids", type=str, help="path to one column data frame without headers" + "with a list of ids to exclude from analysis") +parser.add_argument("-out", required=True, type=str, help="path to save new phenotypes") args = parser.parse_args() print(args) -df_path=args.ids -pheno_path=args.i -out_path=args.out +df_path = args.ids +pheno_path = args.i +out_path = args.out if not os.path.isdir(out_path): print("Creating directory {}".format(out_path)) os.mkdir(out_path) else: - if len(os.listdir(out_path))!=0: + if len(os.listdir(out_path)) != 0: raise ValueError('Output folder is not empty!') print("Crating soft link for original pheno files in {}".format(out_path)) - for i in os.listdir(pheno_path): if 'info_dic' not in i: - os.symlink(os.path.join(pheno_path,i) , os.path.join(out_path,i) ) - + os.symlink(os.path.join(pheno_path, i), os.path.join(out_path, i)) -info_dic=np.load(os.path.join(pheno_path, 'info_dic.npy' ) ).item() +info_dic = np.load(os.path.join(pheno_path, 'info_dic.npy')).item() -df=pd.read_csv(df_path,header=None, sep=',') -df.columns=['ID'] -df['ID']=df.ID.astype('str') +df = pd.read_csv(df_path, header=None, sep=',') +df.columns = ['ID'] +df['ID'] = df.ID.astype('str') -index=pd.Series(info_dic['id']).isin(df.ID) -index=np.where(index==True)[0] +index = pd.Series(info_dic['id']).isin(df.ID) +index = np.where(index == True)[0] -if len(index)!=0: +if len(index) != 0: print('There are {} ids to remove!'.format(len(index))) - for i in index: - info_dic['id'][i]= "remove_"+ info_dic['id'][i] + for i in index: + info_dic['id'][i] = "remove_" + info_dic['id'][i] else: print('No ids to remove!') - -np.save(os.path.join(out_path,'info_dic.npy'),info_dic) + +np.save(os.path.join(out_path, 'info_dic.npy'), info_dic) diff --git a/utils/hase/tools/generator.py b/utils/hase/tools/generator.py index 16bac57..b2c6511 100644 --- a/utils/hase/tools/generator.py +++ b/utils/hase/tools/generator.py @@ -3,15 +3,11 @@ import argparse import numpy as np - - - parser = argparse.ArgumentParser(description='Script to generate data') -parser.add_argument('-type', type=str,required=True, choices=['phenotype'], +parser.add_argument('-type', type=str, required=True, choices=['phenotype'], help=' Choose what kind of data do you want to generate') - parser.add_argument("-s", type=int, help="number of subject") parser.add_argument("-ph", type=int, help="number of phenotypes") parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") @@ -20,6 +16,6 @@ args = parser.parse_args() print(args) -def random_phenotype(Ns,Np): - pass +def random_phenotype(Ns, Np): + pass diff --git a/utils/hase/tools/make_hase_phen.py b/utils/hase/tools/make_hase_phen.py index 191a6ca..b820a84 100644 --- a/utils/hase/tools/make_hase_phen.py +++ b/utils/hase/tools/make_hase_phen.py @@ -5,44 +5,45 @@ import gc parser = argparse.ArgumentParser(description='Make phenotype folder ready for HASE analysis') -parser.add_argument("-i",required=True, type=str, help="path to nparrays") -parser.add_argument("-id",type=str, help="csv data frame with two columns:" - "1)id: ids identical to ids in genotype data" - "2) exclude: 1 if exclude, 0 if include to analysis") +parser.add_argument("-i", required=True, type=str, help="path to nparrays") +parser.add_argument("-id", type=str, help="csv data frame with two columns:" + "1)id: ids identical to ids in genotype data" + "2) exclude: 1 if exclude, 0 if include to analysis") args = parser.parse_args() print(args) - -df=pd.read_csv(args.id, index_col=0) +df = pd.read_csv(args.id, index_col=0) print(df.head()) -subject_id=[] +subject_id = [] for i in df.iterrows(): - if i[1].exclude==1: - subject_id.append('remove_'+str(i[1].id)) + if i[1].exclude == 1: + subject_id.append('remove_' + str(i[1].id)) else: subject_id.append(str(i[1].id)) -dic={} -dic['id']=subject_id +dic = {} +dic['id'] = subject_id -files=os.listdir(args.i) +files = os.listdir(args.i) for f in files: print(f) - if f.split('.')[-1]!='npy': - raise ValueError('In {} should be only nparrays, not {}'.format(args.i,f)) - - d=np.load(os.path.join(args.i,f)) - ch=f.split('_')[0].split('reg')[1] - index=f.split('_')[1].split('.npy')[0] - n,m=d.shape - if n!=len(subject_id): - raise ValueError('Number of ids {} from data frame not equal to number of ids {} from file {} '.format(len(subject_id),n,f)) - dic[f]=[ch+"_"+index+"_"+str(i) for i in range(m)] - d=None + if f.split('.')[-1] != 'npy': + raise ValueError('In {} should be only nparrays, not {}'.format(args.i, f)) + + d = np.load(os.path.join(args.i, f)) + ch = f.split('_')[0].split('reg')[1] + index = f.split('_')[1].split('.npy')[0] + n, m = d.shape + if n != len(subject_id): + raise ValueError( + 'Number of ids {} from data frame not equal to number of ids {} from file {} '.format(len(subject_id), n, + f)) + dic[f] = [ch + "_" + index + "_" + str(i) for i in range(m)] + d = None gc.collect() -np.save(os.path.join(args.i,'info_dic.npy'),dic) \ No newline at end of file +np.save(os.path.join(args.i, 'info_dic.npy'), dic) diff --git a/utils/hase/tools/mapper.py b/utils/hase/tools/mapper.py index 969f2eb..e241781 100644 --- a/utils/hase/tools/mapper.py +++ b/utils/hase/tools/mapper.py @@ -1,9 +1,11 @@ import sys import os + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from config import * + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import h5py import pandas as pd import numpy as np @@ -12,232 +14,236 @@ from hdgwas.hash import * import gc -if __name__=='__main__': - - os.environ['HASEDIR']=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - parser = argparse.ArgumentParser(description='Script to map studies for meta-stage') - parser.add_argument("-g",required=True, type=str, help="path/paths to genotype data folder") - parser.add_argument('-study_name',type=str,required=True, default=None, help=' Study names') - parser.add_argument("-o", "--out", type=str,required=True, help="path to save result folder") - parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') - parser.add_argument('-mismatch_table',action='store_true',default=False, help='Save table with mismatch IDs') - parser.add_argument('-flipped_table',action='store_true',default=False, help='Save table with mismatch IDs') - parser.add_argument('-probe_chunk',type=int,default=10000, help='Probes chunk') - parser.add_argument('-ref_chunk',type=int,default=10000, help='Reference chunk') - parser.add_argument('-chunk',type=int,default=2000000, help='Chunk size') - args = parser.parse_args() - print(args) - - try: - print ('Creating directories...') - os.mkdir(args.out) - except: - print(('Directory {} is already exist!'.format(args.out))) - - probes=pd.HDFStore(os.path.join(args.g,'probes', args.study_name+'.h5'),'r') - probes_n_rows=probes.get_storer('probes').nrows - chunk_size = np.min([args.chunk,probes_n_rows]) - - print(('Merge chunk size {}'.format(chunk_size))) - match_key=np.array([],dtype=np.int32) - match_index=np.array([],dtype=np.int32) - flip_key=np.array([],dtype=np.int32) - flip_index=np.array([],dtype=np.int32) - ID=np.array([]) - - del_counter_ref={} - ID2CHR=False - IDconv=False - hashing=False - merge_on={ - 'ID':{ - 'straight':["ID",'allele1','allele2'], - 'reverse':["ID",'allele2','allele1'] - }, - - 'CHR':{ - 'straight':["CHR",'bp','allele1','allele2'], - 'reverse':["CHR",'bp','allele2','allele1'] - - } - } - - for p in range(int(np.ceil(probes_n_rows / float(chunk_size)))): - print('p',p) - - p_start_i = p * chunk_size - p_stop_i = min((p + 1) * chunk_size, probes_n_rows) - - a = probes.select('probes', start = p_start_i, stop = p_stop_i) - - if p==0: - print(a.head()) - if issubclass(type(a.iloc[0]['allele1']), np.str): - hashing=True - if "CHR" in a.columns and 'bp' in a.columns: - ID2CHR=True - merge=merge_on['CHR'] - print ('Merge on CHR/bp') - else: - if ':' in a.ID.iloc[0] and ':' in a.ID.iloc[1]: - CHR=[] - bp=[] - for i in a.ID: - s=i.split(":") - CHR.append(s[0]) - bp.append(s[1]) - CHR=np.array(CHR,dtype=np.int8) - bp=np.array(bp) - if np.max(CHR)<23 and np.min(CHR)>0: - a['CHR']=CHR - a['bp']=bp - a.CHR = a.CHR.astype(np.int64) - a.bp = a.bp.astype(np.int64) - ID2CHR=True - IDconv=True - merge=merge_on['CHR'] - print ('Merge on CHR/bp from ID') - print(a.head()) - else: - print('No CHR and bp info...') - merge=merge_on['ID'] - print ('Merge on ID') - else: - print('No CHR and bp info...') - merge=merge_on['ID'] - print ('Merge on ID') - - elif IDconv: - def f(x): - s=x.ID.split(':') - return s[0],s[1] - CHR_bp=a.apply(f, axis=1 ) - a['CHR'],a['bp']=list(zip(*CHR_bp)) - a.CHR=a.CHR.astype(np.int64) - a.bp= a.bp.astype(np.int64) - print(a.head()) - a['counter_prob']=np.arange(p_start_i,p_stop_i,dtype='int32') - - reference=Reference() - reference.name=args.ref_name - reference.chunk=args.ref_chunk - reference.load() - counter_ref=0 - if hashing: - print('Hashing...') - a.allele1=a.allele1.apply(hash) - a.allele2=a.allele2.apply(hash) - for r,b in enumerate(reference.dataframe): - if r==0: - if np.sum(np.array([ 1 if i in reference.columns else 0 for i in b.columns.tolist() ]))!=len(reference.columns): - raise ValueError('Reference table should have {} columns'.format(reference.columns)) - if r==0 and p==0: - print ('********************************') - print(('Use {} as a reference panel'.format(args.ref_name))) - print(b.head()) - print ('********************************') - - print('r',r) - if p==0: - ID=np.append(ID,b.ID) - - b['counter_ref']=np.arange(counter_ref,counter_ref+b.shape[0],dtype='int32') - counter_ref+=b.shape[0] - - if len(match_index) or len(flip_index): - print('matched {}'.format(match_index.shape[0])) - print('flipped {}'.format(flip_index.shape[0])) - if del_counter_ref.get(r) is not None: - with Timer() as t: - b=b[~b.counter_ref.isin(del_counter_ref[r])] - print('time {}'.format(t.secs)) - - match_df = pd.merge(b,a, left_on=merge['straight'], right_on=merge['straight']) - flip_df=pd.merge(b[~b.counter_ref.isin(match_df.counter_ref)],a, left_on=merge['reverse'], right_on=merge['straight']) - - if len(match_df): - match_key=np.append(match_key,match_df.counter_ref) - match_index=np.append(match_index,match_df.counter_prob) - if del_counter_ref.get(r) is None: - del_counter_ref[r]=match_key - else: - del_counter_ref[r]=np.append(del_counter_ref[r], match_key) - if len(flip_df): - flip_key=np.append(flip_key,flip_df.counter_ref) - flip_index=np.append(flip_index,flip_df.counter_prob) - if del_counter_ref.get(r) is None: - del_counter_ref[r]=flip_key - else: - del_counter_ref[r]=np.append(del_counter_ref[r], flip_key) - gc.collect() - - index=np.ones(ID.shape[0],dtype='int')*-1 - flip=np.ones(probes_n_rows,dtype='int') - index[match_key]=match_index - index[flip_key]=flip_index - flip[flip_index]=-1 - print(('Saving results for {} to {} ...'.format(args.study_name,args.out))) - np.save(os.path.join(args.out,'values_'+reference.name+'_'+args.study_name+'.npy'),index) - np.save(os.path.join(args.out,'flip_'+reference.name+'_'+args.study_name+'.npy'),flip) - np.save(os.path.join(args.out,'keys_'+reference.name+'.npy'),ID) - print ('Data successfully saved') - - mismatch_index=np.setdiff1d(np.arange(probes_n_rows),np.append(match_index,flip_index) ) - - if os.path.isfile(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz')): - try: - df_hash=pd.read_csv(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz'),sep='\t', compression='gzip', index_col=False) - except: - df_hash=pd.read_csv(os.path.join(args.g,'probes', args.study_name+'_hash_table.csv.gz'),sep='\t', index_col=False) - - - else: - df_hash=None - print(('You do not have hash_table for alleles in your probes folder! ' - 'You used old version of HASE to convert your genotype data.' - 'To see original codes for allele you can make hash_table using script' - '{}/tools/tools.py -hash -g "original genotype folder" '.format(os.environ['HASEDIR']))) - - print('There are {} common variances with reference panel, which will be included in study'.format(np.where(index!=-1)[0].shape[0] )) - print('There are {} variances from reference panel, which were not found in probes'.format(np.where(index==-1)[0].shape[0] )) - print('There are {} variances excluded from study (not found in reference panel)'.format( probes_n_rows-np.where(index!=-1)[0].shape[0] )) - if args.mismatch_table and mismatch_index.shape[0]!=0: - df_mismatch=probes.select('probes',where=mismatch_index) - if df_hash is not None and not hashing: - df_mismatch=pd.merge(df_hash,df_mismatch,left_on='keys', right_on='allele1') - df_mismatch['str_allele1']=df_mismatch['allele'] - del df_mismatch['allele'] - df_mismatch=pd.merge(df_hash,df_mismatch,left_on='keys', right_on='allele2') - df_mismatch['str_allele2']=df_mismatch['allele'] - del df_mismatch['allele'] - del df_mismatch['keys_x'] - del df_mismatch['keys_y'] - df_mismatch.to_csv(os.path.join(args.out,'mismatch_ID_info.csv')) - print('Mismatch ID info saved to {}'.format(os.path.join(args.out,args.study_name+'_mismatch_ID_info.csv'))) - elif mismatch_index.shape[0]!=0: - print ('Mismatch examples:') - print(probes.select('probes',where=mismatch_index[:10])) - - print('There are {} flipped variances'.format(len(flip_index))) - if args.flipped_table and flip_index.shape[0]!=0: - df_flipped=probes.select('probes',where=flip_index) - if df_hash is not None and not hashing: - df_flipped=pd.merge(df_hash,df_flipped,left_on='keys', right_on='allele1') - df_flipped['str_allele1']=df_flipped['allele'] - del df_flipped['allele'] - df_flipped=pd.merge(df_hash,df_flipped,left_on='keys', right_on='allele2') - df_flipped['str_allele2']=df_flipped['allele'] - del df_flipped['allele'] - del df_flipped['keys_x'] - del df_flipped['keys_y'] - df_flipped.to_csv(os.path.join(args.out,'flipped_ID_info.csv')) - print('Flipped ID info saved to {}'.format(os.path.join(args.out,args.study_name + '_flipped_ID_info.csv'))) - elif flip_index.shape[0]!=0: - print ('Flipped examples:') - print(probes.select('probes',where=flip_index[:10])) - - - - - +if __name__ == '__main__': + + os.environ['HASEDIR'] = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + parser = argparse.ArgumentParser(description='Script to map studies for meta-stage') + parser.add_argument("-g", required=True, type=str, help="path/paths to genotype data folder") + parser.add_argument('-study_name', type=str, required=True, default=None, help=' Study names') + parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") + parser.add_argument('-ref_name', type=str, default='1000Gp1v3_ref', help='Reference panel name') + parser.add_argument('-mismatch_table', action='store_true', default=False, help='Save table with mismatch IDs') + parser.add_argument('-flipped_table', action='store_true', default=False, help='Save table with mismatch IDs') + parser.add_argument('-probe_chunk', type=int, default=10000, help='Probes chunk') + parser.add_argument('-ref_chunk', type=int, default=10000, help='Reference chunk') + parser.add_argument('-chunk', type=int, default=2000000, help='Chunk size') + args = parser.parse_args() + print(args) + + try: + print('Creating directories...') + os.mkdir(args.out) + except: + print(('Directory {} is already exist!'.format(args.out))) + + probes = pd.HDFStore(os.path.join(args.g, 'probes', args.study_name + '.h5'), 'r') + probes_n_rows = probes.get_storer('probes').nrows + chunk_size = np.min([args.chunk, probes_n_rows]) + + print(('Merge chunk size {}'.format(chunk_size))) + match_key = np.array([], dtype=np.int32) + match_index = np.array([], dtype=np.int32) + flip_key = np.array([], dtype=np.int32) + flip_index = np.array([], dtype=np.int32) + ID = np.array([]) + + del_counter_ref = {} + ID2CHR = False + IDconv = False + hashing = False + merge_on = { + 'ID': { + 'straight': ["ID", 'allele1', 'allele2'], + 'reverse': ["ID", 'allele2', 'allele1'] + }, + + 'CHR': { + 'straight': ["CHR", 'bp', 'allele1', 'allele2'], + 'reverse': ["CHR", 'bp', 'allele2', 'allele1'] + + } + } + + for p in range(int(np.ceil(probes_n_rows / float(chunk_size)))): + print('p', p) + + p_start_i = p * chunk_size + p_stop_i = min((p + 1) * chunk_size, probes_n_rows) + + a = probes.select('probes', start=p_start_i, stop=p_stop_i) + + if p == 0: + print(a.head()) + if issubclass(type(a.iloc[0]['allele1']), np.str): + hashing = True + if "CHR" in a.columns and 'bp' in a.columns: + ID2CHR = True + merge = merge_on['CHR'] + print('Merge on CHR/bp') + else: + if ':' in a.ID.iloc[0] and ':' in a.ID.iloc[1]: + CHR = [] + bp = [] + for i in a.ID: + s = i.split(":") + CHR.append(s[0]) + bp.append(s[1]) + CHR = np.array(CHR, dtype=np.int8) + bp = np.array(bp) + if np.max(CHR) < 23 and np.min(CHR) > 0: + a['CHR'] = CHR + a['bp'] = bp + a.CHR = a.CHR.astype(np.int64) + a.bp = a.bp.astype(np.int64) + ID2CHR = True + IDconv = True + merge = merge_on['CHR'] + print('Merge on CHR/bp from ID') + print(a.head()) + else: + print('No CHR and bp info...') + merge = merge_on['ID'] + print('Merge on ID') + else: + print('No CHR and bp info...') + merge = merge_on['ID'] + print('Merge on ID') + + elif IDconv: + def f(x): + s = x.ID.split(':') + return s[0], s[1] + + + CHR_bp = a.apply(f, axis=1) + a['CHR'], a['bp'] = list(zip(*CHR_bp)) + a.CHR = a.CHR.astype(np.int64) + a.bp = a.bp.astype(np.int64) + print(a.head()) + a['counter_prob'] = np.arange(p_start_i, p_stop_i, dtype='int32') + + reference = Reference() + reference.name = args.ref_name + reference.chunk = args.ref_chunk + reference.load() + counter_ref = 0 + if hashing: + print('Hashing...') + a.allele1 = a.allele1.apply(hash) + a.allele2 = a.allele2.apply(hash) + for r, b in enumerate(reference.dataframe): + if r == 0: + if np.sum(np.array([1 if i in reference.columns else 0 for i in b.columns.tolist()])) != len( + reference.columns): + raise ValueError('Reference table should have {} columns'.format(reference.columns)) + if r == 0 and p == 0: + print('********************************') + print(('Use {} as a reference panel'.format(args.ref_name))) + print(b.head()) + print('********************************') + + print('r', r) + if p == 0: + ID = np.append(ID, b.ID) + + b['counter_ref'] = np.arange(counter_ref, counter_ref + b.shape[0], dtype='int32') + counter_ref += b.shape[0] + + if len(match_index) or len(flip_index): + print('matched {}'.format(match_index.shape[0])) + print('flipped {}'.format(flip_index.shape[0])) + if del_counter_ref.get(r) is not None: + with Timer() as t: + b = b[~b.counter_ref.isin(del_counter_ref[r])] + print('time {}'.format(t.secs)) + + match_df = pd.merge(b, a, left_on=merge['straight'], right_on=merge['straight']) + flip_df = pd.merge(b[~b.counter_ref.isin(match_df.counter_ref)], a, left_on=merge['reverse'], + right_on=merge['straight']) + + if len(match_df): + match_key = np.append(match_key, match_df.counter_ref) + match_index = np.append(match_index, match_df.counter_prob) + if del_counter_ref.get(r) is None: + del_counter_ref[r] = match_key + else: + del_counter_ref[r] = np.append(del_counter_ref[r], match_key) + if len(flip_df): + flip_key = np.append(flip_key, flip_df.counter_ref) + flip_index = np.append(flip_index, flip_df.counter_prob) + if del_counter_ref.get(r) is None: + del_counter_ref[r] = flip_key + else: + del_counter_ref[r] = np.append(del_counter_ref[r], flip_key) + gc.collect() + + index = np.ones(ID.shape[0], dtype='int') * -1 + flip = np.ones(probes_n_rows, dtype='int') + index[match_key] = match_index + index[flip_key] = flip_index + flip[flip_index] = -1 + print(('Saving results for {} to {} ...'.format(args.study_name, args.out))) + np.save(os.path.join(args.out, 'values_' + reference.name + '_' + args.study_name + '.npy'), index) + np.save(os.path.join(args.out, 'flip_' + reference.name + '_' + args.study_name + '.npy'), flip) + np.save(os.path.join(args.out, 'keys_' + reference.name + '.npy'), ID) + print('Data successfully saved') + + mismatch_index = np.setdiff1d(np.arange(probes_n_rows), np.append(match_index, flip_index)) + + if os.path.isfile(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz')): + try: + df_hash = pd.read_csv(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz'), sep='\t', + compression='gzip', index_col=False) + except: + df_hash = pd.read_csv(os.path.join(args.g, 'probes', args.study_name + '_hash_table.csv.gz'), sep='\t', + index_col=False) + + + else: + df_hash = None + print(('You do not have hash_table for alleles in your probes folder! ' + 'You used old version of HASE to convert your genotype data.' + 'To see original codes for allele you can make hash_table using script' + '{}/tools/tools.py -hash -g "original genotype folder" '.format(os.environ['HASEDIR']))) + + print('There are {} common variances with reference panel, which will be included in study'.format( + np.where(index != -1)[0].shape[0])) + print('There are {} variances from reference panel, which were not found in probes'.format( + np.where(index == -1)[0].shape[0])) + print('There are {} variances excluded from study (not found in reference panel)'.format( + probes_n_rows - np.where(index != -1)[0].shape[0])) + if args.mismatch_table and mismatch_index.shape[0] != 0: + df_mismatch = probes.select('probes', where=mismatch_index) + if df_hash is not None and not hashing: + df_mismatch = pd.merge(df_hash, df_mismatch, left_on='keys', right_on='allele1') + df_mismatch['str_allele1'] = df_mismatch['allele'] + del df_mismatch['allele'] + df_mismatch = pd.merge(df_hash, df_mismatch, left_on='keys', right_on='allele2') + df_mismatch['str_allele2'] = df_mismatch['allele'] + del df_mismatch['allele'] + del df_mismatch['keys_x'] + del df_mismatch['keys_y'] + df_mismatch.to_csv(os.path.join(args.out, 'mismatch_ID_info.csv')) + print('Mismatch ID info saved to {}'.format(os.path.join(args.out, args.study_name + '_mismatch_ID_info.csv'))) + elif mismatch_index.shape[0] != 0: + print('Mismatch examples:') + print(probes.select('probes', where=mismatch_index[:10])) + + print('There are {} flipped variances'.format(len(flip_index))) + if args.flipped_table and flip_index.shape[0] != 0: + df_flipped = probes.select('probes', where=flip_index) + if df_hash is not None and not hashing: + df_flipped = pd.merge(df_hash, df_flipped, left_on='keys', right_on='allele1') + df_flipped['str_allele1'] = df_flipped['allele'] + del df_flipped['allele'] + df_flipped = pd.merge(df_hash, df_flipped, left_on='keys', right_on='allele2') + df_flipped['str_allele2'] = df_flipped['allele'] + del df_flipped['allele'] + del df_flipped['keys_x'] + del df_flipped['keys_y'] + df_flipped.to_csv(os.path.join(args.out, 'flipped_ID_info.csv')) + print('Flipped ID info saved to {}'.format(os.path.join(args.out, args.study_name + '_flipped_ID_info.csv'))) + elif flip_index.shape[0] != 0: + print('Flipped examples:') + print(probes.select('probes', where=flip_index[:10])) diff --git a/utils/hase/tools/merge_genotype.py b/utils/hase/tools/merge_genotype.py index aefc5fe..4f4e599 100644 --- a/utils/hase/tools/merge_genotype.py +++ b/utils/hase/tools/merge_genotype.py @@ -1,6 +1,6 @@ import sys import h5py -from hdgwas.tools import Timer,Mapper, merge_genotype +from hdgwas.tools import Timer, Mapper, merge_genotype import os from hdgwas.data import Reader import argparse @@ -8,92 +8,89 @@ import tables import numpy as np - - - parser = argparse.ArgumentParser(description='Script to merge genotype') -parser.add_argument("-g", "--genotype",nargs='+', type=str, help="path/paths to genotype data folder") +parser.add_argument("-g", "--genotype", nargs='+', type=str, help="path/paths to genotype data folder") parser.add_argument('-mapper', type=str, help='Mapper data folder') parser.add_argument('-mapper_name', type=str, help='Mapper name') parser.add_argument("-o", "--out", type=str, required=True, help="path to save result folder") parser.add_argument("-save_name", type=str, required=True, help="merge study name") -parser.add_argument('-study_name', type=str, required=True,nargs='+', help=' Name for saved genotype data, without ext') - -parser.add_argument('-cluster', type=str, default='n', choices=['y','n'], help=' Is it parallel cluster job, default no') -parser.add_argument('-node', nargs='+',help='number of nodes / this node number, example: 10 2 ') -parser.add_argument('-split',type=int,help='Split size for merge genotypes') +parser.add_argument('-study_name', type=str, required=True, nargs='+', + help=' Name for saved genotype data, without ext') +parser.add_argument('-cluster', type=str, default='n', choices=['y', 'n'], + help=' Is it parallel cluster job, default no') +parser.add_argument('-node', nargs='+', help='number of nodes / this node number, example: 10 2 ') +parser.add_argument('-split', type=int, help='Split size for merge genotypes') args = parser.parse_args() print(args) if __name__ == '__main__': + print('Not implemented!') - print ('Not implemented!') - - # mapper=Mapper(args.mapper_name) - # mapper.load(args.mapper) - # mapper.chunk_size=args.split - # - # - # hdf5_iter=0 - # h5_name=args.save_name - # pytable_filter=tables.Filters(complevel=9, complib='zlib') - # gen=[] - # for i,j in enumerate(args.genotype): - # gen.append(Reader('genotype')) - # gen[i].start(j,hdf5=True, study_name=args.study_name[i], ID=False) - # - # RSID=[] - # SUB_ID=[] - # for i in gen: - # SUB_ID.append(i.folder._data.get_id()) - # mapper.cluster=args.cluster - # mapper.node=args.node - # - # while True: - # if args.cluster=='n': - # SNPs_index, keys=mapper.get_next() - # else: - # chunk=mapper.chunk_pop() - # if chunk is None: - # SNPs_index=None - # break - # print chunk - # SNPs_index, keys=mapper.get_chunk(chunk) - # - # if SNPs_index is None: - # break - # RSID.append(keys) - # - # data=merge_genotype(gen, SNPs_index) #TODO (high) add mapper - # print data.shape - # if args.cluster=='n': - # h5_gen_file = tables.open_file( - # os.path.join(args.out,str(hdf5_iter)+'_'+h5_name+'.h5'), 'w', title=args.save_name) - # else:#TODO (high) check! - # h5_gen_file = tables.open_file( - # os.path.join(args.out,str(chunk[0])+'_' +str(chunk[1])+'_'+h5_name+'.h5'), 'w', title=args.save_name) - # hdf5_iter+=1 - # - # atom = tables.Int8Atom() # TODO (low) check data format - # genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - # (data.shape), - # title='Genotype', - # filters=pytable_filter) - # genotype[:] = data - # h5_gen_file.close() - # genotype=None - # data=None - # gc.collect() - # print hdf5_iter - # - # RSID=np.array(RSID) - # SUB_ID=np.array(SUB_ID) - # if args.cluster=='n': - # np.save(os.path.join(args.out,'RSID.npy'),RSID) - # np.save(os.path.join(args.out,'SUB_ID.npy'),SUB_ID) - # - # else: - # np.save(os.path.join(args.out,str(args.node[1])+'_RSID.npy'),RSID) - # np.save(os.path.join(args.out,str(args.node[1])+'_SUB_ID.npy'),SUB_ID) +# mapper=Mapper(args.mapper_name) +# mapper.load(args.mapper) +# mapper.chunk_size=args.split +# +# +# hdf5_iter=0 +# h5_name=args.save_name +# pytable_filter=tables.Filters(complevel=9, complib='zlib') +# gen=[] +# for i,j in enumerate(args.genotype): +# gen.append(Reader('genotype')) +# gen[i].start(j,hdf5=True, study_name=args.study_name[i], ID=False) +# +# RSID=[] +# SUB_ID=[] +# for i in gen: +# SUB_ID.append(i.folder._data.get_id()) +# mapper.cluster=args.cluster +# mapper.node=args.node +# +# while True: +# if args.cluster=='n': +# SNPs_index, keys=mapper.get_next() +# else: +# chunk=mapper.chunk_pop() +# if chunk is None: +# SNPs_index=None +# break +# print chunk +# SNPs_index, keys=mapper.get_chunk(chunk) +# +# if SNPs_index is None: +# break +# RSID.append(keys) +# +# data=merge_genotype(gen, SNPs_index) #TODO (high) add mapper +# print data.shape +# if args.cluster=='n': +# h5_gen_file = tables.open_file( +# os.path.join(args.out,str(hdf5_iter)+'_'+h5_name+'.h5'), 'w', title=args.save_name) +# else:#TODO (high) check! +# h5_gen_file = tables.open_file( +# os.path.join(args.out,str(chunk[0])+'_' +str(chunk[1])+'_'+h5_name+'.h5'), 'w', title=args.save_name) +# hdf5_iter+=1 +# +# atom = tables.Int8Atom() # TODO (low) check data format +# genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, +# (data.shape), +# title='Genotype', +# filters=pytable_filter) +# genotype[:] = data +# h5_gen_file.close() +# genotype=None +# data=None +# gc.collect() +# print hdf5_iter +# +# RSID=np.array(RSID) +# SUB_ID=np.array(SUB_ID) +# if args.cluster=='n': +# np.save(os.path.join(args.out,'RSID.npy'),RSID) +# np.save(os.path.join(args.out,'SUB_ID.npy'),SUB_ID) +# +# else: +# np.save(os.path.join(args.out,str(args.node[1])+'_RSID.npy'),RSID) +# np.save(os.path.join(args.out,str(args.node[1])+'_SUB_ID.npy'),SUB_ID) diff --git a/utils/hase/tools/minimac2hdf5.py b/utils/hase/tools/minimac2hdf5.py index 791b122..c8198e1 100644 --- a/utils/hase/tools/minimac2hdf5.py +++ b/utils/hase/tools/minimac2hdf5.py @@ -1,10 +1,11 @@ - import os import sys + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from config import PYTHON_PATH + if PYTHON_PATH is not None: - for i in PYTHON_PATH: sys.path.insert(0,i) + for i in PYTHON_PATH: sys.path.insert(0, i) import argparse import h5py import pandas as pd @@ -14,128 +15,123 @@ import glob -def probes_minimac2hdf5(data_path, save_path,study_name, chunk_size=1000000): - - if os.path.isfile(os.path.join(save_path,'probes',study_name+'.h5')): - os.remove(os.path.join(save_path,'probes',study_name+'.h5')) - - hash_table={'keys':np.array([],dtype=np.int),'allele':np.array([])} - - df=pd.read_csv(data_path,sep=' ',chunksize=chunk_size, header=None,index_col=None) - for i,chunk in enumerate(df): - print('add chunk {}'.format(i)) - chunk.columns=["ID",'allele1','allele2','MAF','Rsq'] - hash_1=chunk.allele1.apply(hash) - hash_2=chunk.allele2.apply(hash) - k,indices=np.unique(np.append(hash_1,hash_2),return_index=True) - s=np.append(chunk.allele1,chunk.allele2)[indices] - ind=np.invert(np.in1d(k,hash_table['keys'])) - hash_table['keys']=np.append(hash_table['keys'],k[ind]) - hash_table['allele']=np.append(hash_table['allele'],s[ind]) - chunk.allele1=hash_1 - chunk.allele2=hash_2 - chunk.to_hdf(os.path.join(save_path,'probes',study_name+'.h5'),data_columns=True, key='probes',format='table',append=True, - min_itemsize = 25, complib='zlib',complevel=9 ) - pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path,'probes',study_name+'_hash_table.csv.gz'),index=False,compression='gzip', sep='\t') - -def ind_minimac2hdf5(data_path, save_path,study_name): - - if os.path.isfile(os.path.join(save_path,'individuals',study_name+'.h5')): - os.remove(os.path.join(save_path,'individuals',study_name+'.h5')) - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - n.append((j[:-1])) - f.close() - n=np.array(n) - chunk=pd.DataFrame.from_dict({"individual":n}) - chunk.to_hdf(os.path.join(save_path,'individuals',study_name+'.h5'), key='individuals',format='table', - min_itemsize = 25, complib='zlib',complevel=9 ) - -def id_minimac2hdf5(data_path,id, save_path): - - n=[] - f=open(data_path,'r') - for i,j in enumerate(f): - try: - n.append(np.float(j)) - except: - n.append(np.float(-1)) - n=np.array(n) - f.close() - store=h5py.File(os.path.join(save_path,'genotype',id+'.h5'), 'w') - with Timer() as t: - store.create_dataset(id,data=n,compression='gzip',compression_opts=9 ) - print('standard save gzip 9...', t.secs) - store.close() - - - -def id_minimac2hdf5_pandas(data_path,id, save_path): - - df=pd.read_csv(data_path, header=None, index_col=None) - df.columns=["genotype"] - n=df["genotype"].as_matrix() - store=h5py.File(os.path.join(save_path,'genotype',id+'.h5'), 'w') - with Timer() as t: - store.create_dataset(id,data=n,compression='gzip',compression_opts=9 ) - print('pandas save gzip 9...', t.secs) - store.close() - df=None - -def genotype_minimac2hdf5(data_path,id, save_path, study_name): - - - df=pd.read_csv(data_path, header=None, index_col=None,sep='\t', dtype=np.float16) - data=df.as_matrix() - data=data.T - print(data.shape) - print('Saving chunk...{}'.format(os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'))) - h5_gen_file = tables.open_file( - os.path.join(save_path,'genotype',str(id)+'_'+study_name+'.h5'), 'w', title=study_name) - - atom = tables.Float16Atom() - genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, - (data.shape), - title='Genotype', - filters=tables.Filters(complevel=9, complib='zlib')) - genotype[:] = data - h5_gen_file.close() - os.remove(data_path) - - -if __name__=="__main__": - - parser = argparse.ArgumentParser(description='Script to convert Minimac data') - parser.add_argument("-study_name", required=True, type=str, help="Study specific name") - parser.add_argument("-id", type=str, help="subject id") - parser.add_argument("-data",required=True, type=str, help="path to file") - parser.add_argument("-out",required=True, type=str, help="path to results save folder") - parser.add_argument("-flag",required=True,type=str,choices=['genotype','individuals','probes','chunk'], help="path to file with SNPs info") - - - args = parser.parse_args() - - print(args) - try: - print ('Creating directories...') - os.mkdir(os.path.join(args.out,'genotype') ) - os.mkdir(os.path.join(args.out,'individuals') ) - os.mkdir(os.path.join(args.out,'probes') ) - os.mkdir(os.path.join(args.out,'tmp_files')) - except: - print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) - - if args.id is not None and args.flag=='genotype': - with Timer() as t: - id_minimac2hdf5_pandas(args.data, args.id, args.out) - print('time pandas...',t.secs) - elif args.flag=='probes': - probes_minimac2hdf5(args.data, args.out, args.study_name) - elif args.flag=='individuals': - ind_minimac2hdf5(args.data, args.out,args.study_name) - elif args.flag=='chunk': - genotype_minimac2hdf5(args.data,args.id, args.out,args.study_name) - - - +def probes_minimac2hdf5(data_path, save_path, study_name, chunk_size=1000000): + if os.path.isfile(os.path.join(save_path, 'probes', study_name + '.h5')): + os.remove(os.path.join(save_path, 'probes', study_name + '.h5')) + + hash_table = {'keys': np.array([], dtype=np.int), 'allele': np.array([])} + + df = pd.read_csv(data_path, sep=' ', chunksize=chunk_size, header=None, index_col=None) + for i, chunk in enumerate(df): + print('add chunk {}'.format(i)) + chunk.columns = ["ID", 'allele1', 'allele2', 'MAF', 'Rsq'] + hash_1 = chunk.allele1.apply(hash) + hash_2 = chunk.allele2.apply(hash) + k, indices = np.unique(np.append(hash_1, hash_2), return_index=True) + s = np.append(chunk.allele1, chunk.allele2)[indices] + ind = np.invert(np.in1d(k, hash_table['keys'])) + hash_table['keys'] = np.append(hash_table['keys'], k[ind]) + hash_table['allele'] = np.append(hash_table['allele'], s[ind]) + chunk.allele1 = hash_1 + chunk.allele2 = hash_2 + chunk.to_hdf(os.path.join(save_path, 'probes', study_name + '.h5'), data_columns=True, key='probes', + format='table', append=True, + min_itemsize=25, complib='zlib', complevel=9) + pd.DataFrame.from_dict(hash_table).to_csv(os.path.join(save_path, 'probes', study_name + '_hash_table.csv.gz'), + index=False, compression='gzip', sep='\t') + + +def ind_minimac2hdf5(data_path, save_path, study_name): + if os.path.isfile(os.path.join(save_path, 'individuals', study_name + '.h5')): + os.remove(os.path.join(save_path, 'individuals', study_name + '.h5')) + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + n.append((j[:-1])) + f.close() + n = np.array(n) + chunk = pd.DataFrame.from_dict({"individual": n}) + chunk.to_hdf(os.path.join(save_path, 'individuals', study_name + '.h5'), key='individuals', format='table', + min_itemsize=25, complib='zlib', complevel=9) + + +def id_minimac2hdf5(data_path, id, save_path): + n = [] + f = open(data_path, 'r') + for i, j in enumerate(f): + try: + n.append(np.float(j)) + except: + n.append(np.float(-1)) + n = np.array(n) + f.close() + store = h5py.File(os.path.join(save_path, 'genotype', id + '.h5'), 'w') + with Timer() as t: + store.create_dataset(id, data=n, compression='gzip', compression_opts=9) + print('standard save gzip 9...', t.secs) + store.close() + + +def id_minimac2hdf5_pandas(data_path, id, save_path): + df = pd.read_csv(data_path, header=None, index_col=None) + df.columns = ["genotype"] + n = df["genotype"].as_matrix() + store = h5py.File(os.path.join(save_path, 'genotype', id + '.h5'), 'w') + with Timer() as t: + store.create_dataset(id, data=n, compression='gzip', compression_opts=9) + print('pandas save gzip 9...', t.secs) + store.close() + df = None + + +def genotype_minimac2hdf5(data_path, id, save_path, study_name): + df = pd.read_csv(data_path, header=None, index_col=None, sep='\t', dtype=np.float16) + data = df.as_matrix() + data = data.T + print(data.shape) + print('Saving chunk...{}'.format(os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'))) + h5_gen_file = tables.open_file( + os.path.join(save_path, 'genotype', str(id) + '_' + study_name + '.h5'), 'w', title=study_name) + + atom = tables.Float16Atom() + genotype = h5_gen_file.create_carray(h5_gen_file.root, 'genotype', atom, + (data.shape), + title='Genotype', + filters=tables.Filters(complevel=9, complib='zlib')) + genotype[:] = data + h5_gen_file.close() + os.remove(data_path) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Script to convert Minimac data') + parser.add_argument("-study_name", required=True, type=str, help="Study specific name") + parser.add_argument("-id", type=str, help="subject id") + parser.add_argument("-data", required=True, type=str, help="path to file") + parser.add_argument("-out", required=True, type=str, help="path to results save folder") + parser.add_argument("-flag", required=True, type=str, choices=['genotype', 'individuals', 'probes', 'chunk'], + help="path to file with SNPs info") + + args = parser.parse_args() + + print(args) + try: + print('Creating directories...') + os.mkdir(os.path.join(args.out, 'genotype')) + os.mkdir(os.path.join(args.out, 'individuals')) + os.mkdir(os.path.join(args.out, 'probes')) + os.mkdir(os.path.join(args.out, 'tmp_files')) + except: + print(('Directories "genotype","probes","individuals" are already exist in {}...'.format(args.out))) + + if args.id is not None and args.flag == 'genotype': + with Timer() as t: + id_minimac2hdf5_pandas(args.data, args.id, args.out) + print('time pandas...', t.secs) + elif args.flag == 'probes': + probes_minimac2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'individuals': + ind_minimac2hdf5(args.data, args.out, args.study_name) + elif args.flag == 'chunk': + genotype_minimac2hdf5(args.data, args.id, args.out, args.study_name) diff --git a/utils/hase/tools/rm_subj.py b/utils/hase/tools/rm_subj.py index de710f7..5bb2bab 100644 --- a/utils/hase/tools/rm_subj.py +++ b/utils/hase/tools/rm_subj.py @@ -58,6 +58,3 @@ filters=tables.Filters(complevel=9, complib='zlib')) genotype[:] = data h5_gen_file.close() - - - diff --git a/utils/hase/tools/tools.py b/utils/hase/tools/tools.py index 47ed7f8..8e56b60 100644 --- a/utils/hase/tools/tools.py +++ b/utils/hase/tools/tools.py @@ -5,36 +5,37 @@ _proc_status = '/proc/%d/status' % os.getpid() -_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, - 'KB': 1024.0, 'MB': 1024.0*1024.0} +_scale = {'kB': 1024.0, 'mB': 1024.0 * 1024.0, + 'KB': 1024.0, 'MB': 1024.0 * 1024.0} + def _VmB(VmKey): - '''Private. + '''Private. ''' - global _proc_status, _scale - # get pseudo file /proc//status - try: - t = open(_proc_status) - v = t.read() - t.close() - except: - return 0.0 # non-Linux? - # get VmKey line e.g. 'VmRSS: 9999 kB\n ...' - i = v.index(VmKey) - v = v[i:].split(None, 3) # whitespace - if len(v) < 3: - return 0.0 # invalid format? - # convert Vm value to bytes - return float(v[1]) * _scale[v[2]] + global _proc_status, _scale + # get pseudo file /proc//status + try: + t = open(_proc_status) + v = t.read() + t.close() + except: + return 0.0 # non-Linux? + # get VmKey line e.g. 'VmRSS: 9999 kB\n ...' + i = v.index(VmKey) + v = v[i:].split(None, 3) # whitespace + if len(v) < 3: + return 0.0 # invalid format? + # convert Vm value to bytes + return float(v[1]) * _scale[v[2]] def memory(since=0.0): - '''Return memory usage in bytes. + '''Return memory usage in bytes. ''' - return _VmB('VmSize:') - since + return _VmB('VmSize:') - since def resident(since=0.0): - '''Return resident memory usage in bytes. + '''Return resident memory usage in bytes. ''' - return _VmB('VmRSS:') - since \ No newline at end of file + return _VmB('VmRSS:') - since diff --git a/utils/utils.py b/utils/utils.py index a43e26c..b298c4f 100644 --- a/utils/utils.py +++ b/utils/utils.py @@ -5,11 +5,13 @@ import sklearn.metrics as skm import matplotlib.pyplot as plt import numpy as np + tf.keras.backend.set_epsilon(0.0000001) import os import seaborn as sns from sklearn.metrics import mean_squared_error, explained_variance_score, r2_score + def get_paths(jobid): folder = ("GenNet_experiment_" + str(jobid)) @@ -20,6 +22,7 @@ def get_paths(jobid): return folder, resultpath + def explode(df, cols, split_on=','): """ Explode dataframe on the given column, split on given delimeter @@ -70,12 +73,11 @@ def binary_accuracy(y_true, y_pred): def evaluate_performance_regression(y, p): - y = y.flatten() p = p.flatten() explained_variance = explained_variance_score(y, p) mse = mean_squared_error(y, p) - r2 = r2_score(y,p) + r2 = r2_score(y, p) print("Mean squared error =", mse) print("Explained variance =", explained_variance) # print("maximum error =", maximum_error) @@ -86,11 +88,10 @@ def evaluate_performance_regression(y, p): df["truth"] = y df["predicted"] = p - fig = sns.jointplot(x="truth", y="predicted", data = df, alpha=0.5) + fig = sns.jointplot(x="truth", y="predicted", data=df, alpha=0.5) return fig, mse, explained_variance, r2 - def evaluate_performance(y, p): print("\n") print("Confusion matrix") @@ -120,8 +121,6 @@ def evaluate_performance(y, p): plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") - - return roc_auc, confusion_matrix @@ -129,26 +128,26 @@ def create_importance_csv(datapath, model, masks): network_csv = pd.read_csv(datapath + "/topology.csv") coordinate_list = [] - for i, mask in zip(np.arange(len(masks)),masks): + for i, mask in zip(np.arange(len(masks)), masks): coordinates = pd.DataFrame([]) - coordinates["node_layer_"+ str(i)] = mask.row - coordinates["node_layer_"+ str(i+1)] = mask.col - coordinates = coordinates.sort_values("node_layer_"+ str(i), ascending=True) - coordinates["weights_"+str(i)] = model.get_layer(name = "LocallyDirected_" + str(i)).get_weights()[0] + coordinates["node_layer_" + str(i)] = mask.row + coordinates["node_layer_" + str(i + 1)] = mask.col + coordinates = coordinates.sort_values("node_layer_" + str(i), ascending=True) + coordinates["weights_" + str(i)] = model.get_layer(name="LocallyDirected_" + str(i)).get_weights()[0] coordinate_names = network_csv[["layer" + str(i) + "_node", "layer" + str(i) + "_name"]].drop_duplicates() - coordinate_names = coordinate_names.rename({"layer" + str(i) + "_node":"node_layer_"+ str(i)}, axis=1) - coordinates = coordinates.merge(coordinate_names, on="node_layer_"+ str(i)) + coordinate_names = coordinate_names.rename({"layer" + str(i) + "_node": "node_layer_" + str(i)}, axis=1) + coordinates = coordinates.merge(coordinate_names, on="node_layer_" + str(i)) coordinate_list.append(coordinates) - if i==0: + if i == 0: total_list = coordinate_list[i] else: - total_list = total_list.merge(coordinate_list[i], on="node_layer_"+ str(i)) + total_list = total_list.merge(coordinate_list[i], on="node_layer_" + str(i)) i += 1 coordinates = pd.DataFrame([]) - coordinates["weights_"+str(i)] = model.get_layer(name = "output_layer").get_weights()[0].flatten() + coordinates["weights_" + str(i)] = model.get_layer(name="output_layer").get_weights()[0].flatten() coordinates["node_layer_" + str(i)] = np.arange(len(coordinates)) coordinate_names = network_csv[["layer" + str(i) + "_node", "layer" + str(i) + "_name"]].drop_duplicates() coordinate_names = coordinate_names.rename({"layer" + str(i) + "_node": "node_layer_" + str(i)}, axis=1) @@ -189,4 +188,3 @@ def query_yes_no(question, default="yes"): else: sys.stdout.write("Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n") -