ChangeLog 1.5 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362
  1. Changes in version 0.4.0.1-alpha - 2019-01-18
  2. Tor 0.4.0.1-alpha is the first release in the new 0.4.0.x series. It
  3. introduces improved features for power and bandwidth conservation,
  4. more accurate reporting of bootstrap progress for user interfaces, and
  5. an experimental backend for an exciting new adaptive padding feature.
  6. There is also the usual assortment of bugfixes and minor features, all
  7. described below.
  8. o Major features (battery management, client, dormant mode):
  9. - When Tor is running as a client, and it is unused for a long time,
  10. it can now enter a "dormant" state. When Tor is dormant, it avoids
  11. network and CPU activity until it is reawoken either by a user
  12. request or by a controller command. For more information, see the
  13. configuration options starting with "Dormant". Implements tickets
  14. 2149 and 28335.
  15. - The client's memory of whether it is "dormant", and how long it
  16. has spent idle, persists across invocations. Implements
  17. ticket 28624.
  18. - There is a DormantOnFirstStartup option that integrators can use
  19. if they expect that in many cases, Tor will be installed but
  20. not used.
  21. o Major features (bootstrap reporting):
  22. - When reporting bootstrap progress, report the first connection
  23. uniformly, regardless of whether it's a connection for building
  24. application circuits. This allows finer-grained reporting of early
  25. progress than previously possible, with the improvements of ticket
  26. 27169. Closes tickets 27167 and 27103. Addresses ticket 27308.
  27. - When reporting bootstrap progress, treat connecting to a proxy or
  28. pluggable transport as separate from having successfully used that
  29. proxy or pluggable transport to connect to a relay. Closes tickets
  30. 27100 and 28884.
  31. o Major features (circuit padding):
  32. - Implement preliminary support for the circuit padding portion of
  33. Proposal 254. The implementation supports Adaptive Padding (aka
  34. WTF-PAD) state machines for use between experimental clients and
  35. relays. Support is also provided for APE-style state machines that
  36. use probability distributions instead of histograms to specify
  37. inter-packet delay. At the moment, Tor does not provide any
  38. padding state machines that are used in normal operation: for now,
  39. this feature exists solely for experimentation. Closes
  40. ticket 28142.
  41. o Major features (refactoring):
  42. - Tor now uses an explicit list of its own subsystems when
  43. initializing and shutting down. Previously, these systems were
  44. managed implicitly in various places throughout the codebase.
  45. (There may still be some subsystems using the old system.) Closes
  46. ticket 28330.
  47. o Minor features (bootstrap reporting):
  48. - When reporting bootstrap progress, stop distinguishing between
  49. situations where only internal paths are available and situations
  50. where external paths are available. Previously, Tor would often
  51. erroneously report that it had only internal paths. Closes
  52. ticket 27402.
  53. o Minor features (continuous integration):
  54. - Log Python version during each Travis CI job. Resolves
  55. issue 28551.
  56. o Minor features (controller):
  57. - Add a DROPOWNERSHIP command to undo the effects of TAKEOWNERSHIP.
  58. Implements ticket 28843.
  59. o Minor features (developer tooling):
  60. - Provide a git hook script to prevent "fixup!" and "squash!"
  61. commits from ending up in the master branch, as scripts/main/pre-
  62. push.git-hook. Closes ticket 27993.
  63. o Minor features (directory authority):
  64. - Directory authorities support a new consensus algorithm, under
  65. which the family lines in microdescriptors are encoded in a
  66. canonical form. This change makes family lines more compressible
  67. in transit, and on the client. Closes ticket 28266; implements
  68. proposal 298.
  69. o Minor features (directory authority, relay):
  70. - Authorities now vote on a "StaleDesc" flag to indicate that a
  71. relay's descriptor is so old that the relay should upload again
  72. soon. Relays treat this flag as a signal to upload a new
  73. descriptor. This flag will eventually let us remove the
  74. 'published' date from routerstatus entries, and make our consensus
  75. diffs much smaller. Closes ticket 26770; implements proposal 293.
  76. o Minor features (fallback directory mirrors):
  77. - Update the fallback whitelist based on operator opt-ins and opt-
  78. outs. Closes ticket 24805, patch by Phoul.
  79. o Minor features (FreeBSD):
  80. - On FreeBSD-based systems, warn relay operators if the
  81. "net.inet.ip.random_id" sysctl (IP ID randomization) is disabled.
  82. Closes ticket 28518.
  83. o Minor features (HTTP standards compliance):
  84. - Stop sending the header "Content-type: application/octet-stream"
  85. along with transparently compressed documents: this confused
  86. browsers. Closes ticket 28100.
  87. o Minor features (IPv6):
  88. - We add an option ClientAutoIPv6ORPort, to make clients randomly
  89. prefer a node's IPv4 or IPv6 ORPort. The random preference is set
  90. every time a node is loaded from a new consensus or bridge config.
  91. We expect that this option will enable clients to bootstrap more
  92. quickly without having to determine whether they support IPv4,
  93. IPv6, or both. Closes ticket 27490. Patch by Neel Chauhan.
  94. - When using addrs_in_same_network_family(), avoid choosing circuit
  95. paths that pass through the same IPv6 subnet more than once.
  96. Previously, we only checked IPv4 subnets. Closes ticket 24393.
  97. Patch by Neel Chauhan.
  98. o Minor features (log messages):
  99. - Improve log message in v3 onion services that could print out
  100. negative revision counters. Closes ticket 27707. Patch
  101. by "ffmancera".
  102. o Minor features (memory usage):
  103. - Save memory by storing microdescriptor family lists with a more
  104. compact representation. Closes ticket 27359.
  105. - Tor clients now use mmap() to read consensus files from disk, so
  106. that they no longer need keep the full text of a consensus in
  107. memory when parsing it or applying a diff. Closes ticket 27244.
  108. o Minor features (parsing):
  109. - Directory authorities now validate that router descriptors and
  110. ExtraInfo documents are in a valid subset of UTF-8, and reject
  111. them if they are not. Closes ticket 27367.
  112. o Minor features (performance):
  113. - Cache the results of summarize_protocol_flags(), so that we don't
  114. have to parse the same protocol-versions string over and over.
  115. This should save us a huge number of malloc calls on startup, and
  116. may reduce memory fragmentation with some allocators. Closes
  117. ticket 27225.
  118. - Remove a needless memset() call from get_token_arguments, thereby
  119. speeding up the tokenization of directory objects by about 20%.
  120. Closes ticket 28852.
  121. - Replace parse_short_policy() with a faster implementation, to
  122. improve microdescriptor parsing time. Closes ticket 28853.
  123. - Speed up directory parsing a little by avoiding use of the non-
  124. inlined strcmp_len() function. Closes ticket 28856.
  125. - Speed up microdescriptor parsing by about 30%, to help improve
  126. startup time. Closes ticket 28839.
  127. o Minor features (pluggable transports):
  128. - Add support for emitting STATUS updates to Tor's control port from
  129. a pluggable transport process. Closes ticket 28846.
  130. - Add support for logging to Tor's logging subsystem from a
  131. pluggable transport process. Closes ticket 28180.
  132. o Minor features (process management):
  133. - Add a new process API for handling child processes. This new API
  134. allows Tor to have bi-directional communication with child
  135. processes on both Unix and Windows. Closes ticket 28179.
  136. - Use the subsystem manager to initialize and shut down the process
  137. module. Closes ticket 28847.
  138. o Minor features (relay):
  139. - When listing relay families, list them in canonical form including
  140. the relay's own identity, and try to give a more useful set of
  141. warnings. Part of ticket 28266 and proposal 298.
  142. o Minor features (required protocols):
  143. - Before exiting because of a missing required protocol, Tor will
  144. now check the publication time of the consensus, and not exit
  145. unless the consensus is newer than the Tor program's own release
  146. date. Previously, Tor would not check the consensus publication
  147. time, and so might exit because of a missing protocol that might
  148. no longer be required in a current consensus. Implements proposal
  149. 297; closes ticket 27735.
  150. o Minor features (testing):
  151. - Allow a HeartbeatPeriod of less than 30 minutes in testing Tor
  152. networks. Closes ticket 28840. Patch by Rob Jansen.
  153. o Minor bugfixes (client, clock skew):
  154. - Bootstrap successfully even when Tor's clock is behind the clocks
  155. on the authorities. Fixes bug 28591; bugfix on 0.2.0.9-alpha.
  156. - Select guards even if the consensus has expired, as long as the
  157. consensus is still reasonably live. Fixes bug 24661; bugfix
  158. on 0.3.0.1-alpha.
  159. o Minor bugfixes (compilation):
  160. - Compile correctly on OpenBSD; previously, we were missing some
  161. headers required in order to detect it properly. Fixes bug 28938;
  162. bugfix on 0.3.5.1-alpha. Patch from Kris Katterjohn.
  163. o Minor bugfixes (directory clients):
  164. - Mark outdated dirservers when Tor only has a reasonably live
  165. consensus. Fixes bug 28569; bugfix on 0.3.2.5-alpha.
  166. o Minor bugfixes (directory mirrors):
  167. - Even when a directory mirror's clock is behind the clocks on the
  168. authorities, we now allow the mirror to serve "future"
  169. consensuses. Fixes bug 28654; bugfix on 0.3.0.1-alpha.
  170. o Minor bugfixes (DNS):
  171. - Gracefully handle an empty or absent resolve.conf file by falling
  172. back to using "localhost" as a DNS server (and hoping it works).
  173. Previously, we would just stop running as an exit. Fixes bug
  174. 21900; bugfix on 0.2.1.10-alpha.
  175. o Minor bugfixes (guards):
  176. - In count_acceptable_nodes(), the minimum number is now one bridge
  177. or guard node, and two non-guard nodes for a circuit. Previously,
  178. we had added up the sum of all nodes with a descriptor, but that
  179. could cause us to build failing circuits when we had either too
  180. many bridges or not enough guard nodes. Fixes bug 25885; bugfix on
  181. 0.3.6.1-alpha. Patch by Neel Chauhan.
  182. o Minor bugfixes (IPv6):
  183. - Fix tor_ersatz_socketpair on IPv6-only systems. Previously, the
  184. IPv6 socket was bound using an address family of AF_INET instead
  185. of AF_INET6. Fixes bug 28995; bugfix on 0.3.5.1-alpha. Patch from
  186. Kris Katterjohn.
  187. o Minor bugfixes (logging):
  188. - Rework rep_hist_log_link_protocol_counts() to iterate through all
  189. link protocol versions when logging incoming/outgoing connection
  190. counts. Tor no longer skips version 5, and we won't have to
  191. remember to update this function when new link protocol version is
  192. developed. Fixes bug 28920; bugfix on 0.2.6.10.
  193. o Minor bugfixes (networking):
  194. - Introduce additional checks into tor_addr_parse() to reject
  195. certain incorrect inputs that previously were not detected. Fixes
  196. bug 23082; bugfix on 0.2.0.10-alpha.
  197. o Minor bugfixes (onion service v3, client):
  198. - Stop logging a "BUG()" warning and stacktrace when we find a SOCKS
  199. connection waiting for a descriptor that we actually have in the
  200. cache. It turns out that this can actually happen, though it is
  201. rare. Now, tor will recover and retry the descriptor. Fixes bug
  202. 28669; bugfix on 0.3.2.4-alpha.
  203. o Minor bugfixes (periodic events):
  204. - Refrain from calling routerlist_remove_old_routers() from
  205. check_descriptor_callback(). Instead, create a new hourly periodic
  206. event. Fixes bug 27929; bugfix on 0.2.8.1-alpha.
  207. o Minor bugfixes (pluggable transports):
  208. - Make sure that data is continously read from standard output and
  209. standard error pipes of a pluggable transport child-process, to
  210. avoid deadlocking when a pipe's buffer is full. Fixes bug 26360;
  211. bugfix on 0.2.3.6-alpha.
  212. o Minor bugfixes (unit tests):
  213. - Instead of relying on hs_free_all() to clean up all onion service
  214. objects in test_build_descriptors(), we now deallocate them one by
  215. one. This lets Coverity know that we are not leaking memory there
  216. and fixes CID 1442277. Fixes bug 28989; bugfix on 0.3.5.1-alpha.
  217. o Minor bugfixes (usability):
  218. - Stop saying "Your Guard ..." in pathbias_measure_{use,close}_rate().
  219. Some users took this phrasing to mean that the mentioned guard was
  220. under their control or responsibility, which it is not. Fixes bug
  221. 28895; bugfix on Tor 0.3.0.1-alpha.
  222. o Code simplification and refactoring:
  223. - Reimplement NETINFO cell parsing and generation to rely on
  224. trunnel-generated wire format handling code. Closes ticket 27325.
  225. - Remove unnecessary unsafe code from the Rust macro "cstr!". Closes
  226. ticket 28077.
  227. - Rework SOCKS wire format handling to rely on trunnel-generated
  228. parsing/generation code. Resolves ticket 27620.
  229. - Split out bootstrap progress reporting from control.c into a
  230. separate file. Part of ticket 27402.
  231. - The .may_include files that we use to describe our directory-by-
  232. directory dependency structure now describe a noncircular
  233. dependency graph over the directories that they cover. Our
  234. checkIncludes.py tool now enforces this noncircularity. Closes
  235. ticket 28362.
  236. o Documentation:
  237. - Mention that you cannot add a new onion service if Tor is already
  238. running with Sandbox enabled. Closes ticket 28560.
  239. - Improve ControlPort documentation. Mention that it accepts
  240. address:port pairs, and can be used multiple times. Closes
  241. ticket 28805.
  242. - Document the exact output of "tor --version". Closes ticket 28889.
  243. o Removed features:
  244. - Stop responding to the 'GETINFO status/version/num-concurring' and
  245. 'GETINFO status/version/num-versioning' control port commands, as
  246. those were deprecated back in 0.2.0.30. Also stop listing them in
  247. output of 'GETINFO info/names'. Resolves ticket 28757.
  248. - The scripts used to generate and maintain the list of fallback
  249. directories have been extracted into a new "fallback-scripts"
  250. repository. Closes ticket 27914.
  251. o Testing:
  252. - Run shellcheck for scripts in the in scripts/ directory. Closes
  253. ticket 28058.
  254. - Add unit tests for tokenize_string() and get_next_token()
  255. functions. Resolves ticket 27625.
  256. o Code simplification and refactoring (onion service v3):
  257. - Consolidate the authorized client descriptor cookie computation
  258. code from client and service into one function. Closes
  259. ticket 27549.
  260. o Code simplification and refactoring (shell scripts):
  261. - Cleanup scan-build.sh to silence shellcheck warnings. Closes
  262. ticket 28007.
  263. - Fix issues that shellcheck found in chutney-git-bisect.sh.
  264. Resolves ticket 28006.
  265. - Fix issues that shellcheck found in updateRustDependencies.sh.
  266. Resolves ticket 28012.
  267. - Fix shellcheck warnings in cov-diff script. Resolves issue 28009.
  268. - Fix shellcheck warnings in run_calltool.sh. Resolves ticket 28011.
  269. - Fix shellcheck warnings in run_trunnel.sh. Resolves issue 28010.
  270. - Fix shellcheck warnings in scripts/test/coverage. Resolves
  271. issue 28008.
  272. Changes in version 0.3.3.11 - 2019-01-07
  273. Tor 0.3.3.11 backports numerous fixes from later versions of Tor.
  274. numerous fixes, including an important fix for anyone using OpenSSL
  275. 1.1.1. Anyone running an earlier version of Tor 0.3.3 should upgrade
  276. to this version, or to a later series.
  277. As a reminder, support the Tor 0.3.3 series will end on 22 Feb 2019.
  278. We anticipate that this will be the last release of Tor 0.3.3, unless
  279. some major bug is before then. Some time between now and then, users
  280. should switch to either the Tor 0.3.4 series (supported until at least
  281. 10 June 2019), or the Tor 0.3.5 series, which will receive long-term
  282. support until at least 1 Feb 2022.
  283. o Major bugfixes (OpenSSL, portability, backport from 0.3.5.5-alpha):
  284. - Fix our usage of named groups when running as a TLS 1.3 client in
  285. OpenSSL 1.1.1. Previously, we only initialized EC groups when
  286. running as a relay, which caused clients to fail to negotiate TLS
  287. 1.3 with relays. Fixes bug 28245; bugfix on 0.2.9.15 (when TLS 1.3
  288. support was added).
  289. o Major bugfixes (restart-in-process, backport from 0.3.5.1-alpha):
  290. - Fix a use-after-free error that could be caused by passing Tor an
  291. impossible set of options that would fail during options_act().
  292. Fixes bug 27708; bugfix on 0.3.3.1-alpha.
  293. o Minor features (continuous integration, backport from 0.3.5.1-alpha):
  294. - Only run one online rust build in Travis, to reduce network
  295. errors. Skip offline rust builds on Travis for Linux gcc, because
  296. they're redundant. Implements ticket 27252.
  297. - Skip gcc on OSX in Travis CI, because it's rarely used. Skip a
  298. duplicate hardening-off build in Travis on Tor 0.2.9. Skip gcc on
  299. Linux with default settings, because all the non-default builds
  300. use gcc on Linux. Implements ticket 27252.
  301. o Minor features (continuous integration, backport from 0.3.5.3-alpha):
  302. - Use the Travis Homebrew addon to install packages on macOS during
  303. Travis CI. The package list is the same, but the Homebrew addon
  304. does not do a `brew update` by default. Implements ticket 27738.
  305. o Minor features (fallback directory list, backport from 0.3.5.6-rc):
  306. - Replace the 150 fallbacks originally introduced in Tor
  307. 0.3.3.1-alpha in January 2018 (of which ~115 were still
  308. functional), with a list of 157 fallbacks (92 new, 65 existing, 85
  309. removed) generated in December 2018. Closes ticket 24803.
  310. o Minor features (geoip):
  311. - Update geoip and geoip6 to the January 3 2019 Maxmind GeoLite2
  312. Country database. Closes ticket 29012.
  313. o Minor features (OpenSSL bug workaround, backport from 0.3.5.7):
  314. - Work around a bug in OpenSSL 1.1.1a, which prevented the TLS 1.3
  315. key export function from handling long labels. When this bug is
  316. detected, Tor will disable TLS 1.3. We recommend upgrading to a
  317. version of OpenSSL without this bug when it becomes available.
  318. Closes ticket 28973.
  319. o Minor bugfixes (relay statistics, backport from 0.3.5.7):
  320. - Update relay descriptor on bandwidth changes only when the uptime
  321. is smaller than 24h, in order to reduce the efficiency of guard
  322. discovery attacks. Fixes bug 24104; bugfix on 0.1.1.6-alpha.
  323. o Minor bugfixes (C correctness, backport from 0.3.5.4-alpha):
  324. - Avoid undefined behavior in an end-of-string check when parsing
  325. the BEGIN line in a directory object. Fixes bug 28202; bugfix
  326. on 0.2.0.3-alpha.
  327. o Minor bugfixes (code safety, backport from 0.3.5.3-alpha):
  328. - Rewrite our assertion macros so that they no longer suppress the
  329. compiler's -Wparentheses warnings. Fixes bug 27709; bugfix
  330. o Minor bugfixes (compilation, backport from 0.3.5.5-alpha):
  331. - Initialize a variable unconditionally in aes_new_cipher(), since
  332. some compilers cannot tell that we always initialize it before
  333. use. Fixes bug 28413; bugfix on 0.2.9.3-alpha.
  334. o Minor bugfixes (directory authority, backport from 0.3.5.4-alpha):
  335. - Log additional info when we get a relay that shares an ed25519 ID
  336. with a different relay, instead making a BUG() warning. Fixes bug
  337. 27800; bugfix on 0.3.2.1-alpha.
  338. o Minor bugfixes (directory permissions, backport form 0.3.5.3-alpha):
  339. - When a user requests a group-readable DataDirectory, give it to
  340. them. Previously, when the DataDirectory and the CacheDirectory
  341. were the same, the default setting (0) for
  342. CacheDirectoryGroupReadable would override the setting for
  343. DataDirectoryGroupReadable. Fixes bug 26913; bugfix
  344. on 0.3.3.1-alpha.
  345. o Minor bugfixes (onion service v3, backport from 0.3.5.1-alpha):
  346. - When the onion service directory can't be created or has the wrong
  347. permissions, do not log a stack trace. Fixes bug 27335; bugfix
  348. on 0.3.2.1-alpha.
  349. o Minor bugfixes (onion service v3, backport from 0.3.5.2-alpha):
  350. - Close all SOCKS request (for the same .onion) if the newly fetched
  351. descriptor is unusable. Before that, we would close only the first
  352. one leaving the other hanging and let to time out by themselves.
  353. Fixes bug 27410; bugfix on 0.3.2.1-alpha.
  354. o Minor bugfixes (onion service v3, backport from 0.3.5.3-alpha):
  355. - Don't warn so loudly when Tor is unable to decode an onion
  356. descriptor. This can now happen as a normal use case if a client
  357. gets a descriptor with client authorization but the client is not
  358. authorized. Fixes bug 27550; bugfix on 0.3.5.1-alpha.
  359. o Minor bugfixes (onion service v3, backport from 0.3.5.6-rc):
  360. - When deleting an ephemeral onion service (DEL_ONION), do not close
  361. any rendezvous circuits in order to let the existing client
  362. connections finish by themselves or closed by the application. The
  363. HS v2 is doing that already so now we have the same behavior for
  364. all versions. Fixes bug 28619; bugfix on 0.3.3.1-alpha.
  365. o Minor bugfixes (HTTP tunnel):
  366. - Fix a bug warning when closing an HTTP tunnel connection due to
  367. an HTTP request we couldn't handle. Fixes bug 26470; bugfix on
  368. 0.3.2.1-alpha.
  369. o Minor bugfixes (memory leaks, backport from 0.3.5.5-alpha):
  370. - Fix a harmless memory leak in libtorrunner.a. Fixes bug 28419;
  371. bugfix on 0.3.3.1-alpha. Patch from Martin Kepplinger.
  372. o Minor bugfixes (netflow padding, backport from 0.3.5.1-alpha):
  373. - Ensure circuitmux queues are empty before scheduling or sending
  374. padding. Fixes bug 25505; bugfix on 0.3.1.1-alpha.
  375. o Minor bugfixes (protover, backport from 0.3.5.3-alpha):
  376. - Reject protocol names containing bytes other than alphanumeric
  377. characters and hyphens ([A-Za-z0-9-]). Fixes bug 27316; bugfix
  378. on 0.2.9.4-alpha.
  379. o Minor bugfixes (rust, backport from 0.3.5.1-alpha):
  380. - Compute protover votes correctly in the rust version of the
  381. protover code. Previously, the protover rewrite in 24031 allowed
  382. repeated votes from the same voter for the same protocol version
  383. to be counted multiple times in protover_compute_vote(). Fixes bug
  384. 27649; bugfix on 0.3.3.5-rc.
  385. - Reject protover names that contain invalid characters. Fixes bug
  386. 27687; bugfix on 0.3.3.1-alpha.
  387. o Minor bugfixes (rust, backport from 0.3.5.2-alpha):
  388. - protover_all_supported() would attempt to allocate up to 16GB on
  389. some inputs, leading to a potential memory DoS. Fixes bug 27206;
  390. bugfix on 0.3.3.5-rc.
  391. o Minor bugfixes (rust, backport from 0.3.5.4-alpha):
  392. - Fix a potential null dereference in protover_all_supported(). Add
  393. a test for it. Fixes bug 27804; bugfix on 0.3.3.1-alpha.
  394. - Return a string that can be safely freed by C code, not one
  395. created by the rust allocator, in protover_all_supported(). Fixes
  396. bug 27740; bugfix on 0.3.3.1-alpha.
  397. - Fix an API mismatch in the rust implementation of
  398. protover_compute_vote(). This bug could have caused crashes on any
  399. directory authorities running Tor with Rust (which we do not yet
  400. recommend). Fixes bug 27741; bugfix on 0.3.3.6.
  401. o Minor bugfixes (testing, backport from 0.3.5.1-alpha):
  402. - If a unit test running in a subprocess exits abnormally or with a
  403. nonzero status code, treat the test as having failed, even if the
  404. test reported success. Without this fix, memory leaks don't cause
  405. the tests to fail, even with LeakSanitizer. Fixes bug 27658;
  406. bugfix on 0.2.2.4-alpha.
  407. o Minor bugfixes (testing, backport from 0.3.5.4-alpha):
  408. - Treat backtrace test failures as expected on BSD-derived systems
  409. (NetBSD, OpenBSD, and macOS/Darwin) until we solve bug 17808.
  410. (FreeBSD failures have been treated as expected since 18204 in
  411. 0.2.8.) Fixes bug 27948; bugfix on 0.2.5.2-alpha.
  412. o Minor bugfixes (unit tests, guard selection, backport from 0.3.5.6-rc):
  413. - Stop leaking memory in an entry guard unit test. Fixes bug 28554;
  414. bugfix on 0.3.0.1-alpha.
  415. Changes in version 0.3.4.10 - 2019-01-07
  416. Tor 0.3.4.9 is the second stable release in its series; it backports
  417. numerous fixes, including an important fix for relays, and for anyone
  418. using OpenSSL 1.1.1. Anyone running an earlier version of Tor 0.3.4
  419. should upgrade.
  420. As a reminder, the Tor 0.3.4 series will be supported until 10 June
  421. 2019. Some time between now and then, users should switch to the Tor
  422. 0.3.5 series, which will receive long-term support until at least 1
  423. Feb 2022.
  424. o Major bugfixes (OpenSSL, portability, backport from 0.3.5.5-alpha):
  425. - Fix our usage of named groups when running as a TLS 1.3 client in
  426. OpenSSL 1.1.1. Previously, we only initialized EC groups when
  427. running as a relay, which caused clients to fail to negotiate TLS
  428. 1.3 with relays. Fixes bug 28245; bugfix on 0.2.9.15 (when TLS 1.3
  429. support was added).
  430. o Major bugfixes (relay, directory, backport from 0.3.5.7):
  431. - Always reactivate linked connections in the main loop so long as
  432. any linked connection has been active. Previously, connections
  433. serving directory information wouldn't get reactivated after the
  434. first chunk of data was sent (usually 32KB), which would prevent
  435. clients from bootstrapping. Fixes bug 28912; bugfix on
  436. 0.3.4.1-alpha. Patch by "cypherpunks3".
  437. o Minor features (continuous integration, Windows, backport from 0.3.5.6-rc):
  438. - Always show the configure and test logs, and upload them as build
  439. artifacts, when building for Windows using Appveyor CI.
  440. Implements 28459.
  441. o Minor features (controller, backport from 0.3.5.1-alpha):
  442. - For purposes of CIRC_BW-based dropped cell detection, track half-
  443. closed stream ids, and allow their ENDs, SENDMEs, DATA and path
  444. bias check cells to arrive without counting it as dropped until
  445. either the END arrives, or the windows are empty. Closes
  446. ticket 25573.
  447. o Minor features (fallback directory list, backport from 0.3.5.6-rc):
  448. - Replace the 150 fallbacks originally introduced in Tor
  449. 0.3.3.1-alpha in January 2018 (of which ~115 were still
  450. functional), with a list of 157 fallbacks (92 new, 65 existing, 85
  451. removed) generated in December 2018. Closes ticket 24803.
  452. o Minor features (geoip):
  453. - Update geoip and geoip6 to the November 6 2018 Maxmind GeoLite2
  454. Country database. Closes ticket 28395.
  455. o Minor features (OpenSSL bug workaround, backport from 0.3.5.7):
  456. - Work around a bug in OpenSSL 1.1.1a, which prevented the TLS 1.3
  457. key export function from handling long labels. When this bug is
  458. detected, Tor will disable TLS 1.3. We recommend upgrading to a
  459. version of OpenSSL without this bug when it becomes available.
  460. Closes ticket 28973.
  461. o Minor bugfixes (compilation, backport from 0.3.5.5-alpha):
  462. - Initialize a variable unconditionally in aes_new_cipher(), since
  463. some compilers cannot tell that we always initialize it before
  464. use. Fixes bug 28413; bugfix on 0.2.9.3-alpha.
  465. o Minor bugfixes (connection, relay, backport from 0.3.5.5-alpha):
  466. - Avoid a logging a BUG() stacktrace when closing connection held
  467. open because the write side is rate limited but not the read side.
  468. Now, the connection read side is simply shut down until Tor is
  469. able to flush the connection and close it. Fixes bug 27750; bugfix
  470. on 0.3.4.1-alpha.
  471. o Minor bugfixes (continuous integration, Windows, backport from 0.3.5.5-alpha):
  472. - Manually configure the zstd compiler options, when building using
  473. mingw on Appveyor Windows CI. The MSYS2 mingw zstd package does
  474. not come with a pkg-config file. Fixes bug 28454; bugfix
  475. on 0.3.4.1-alpha.
  476. - Stop using an external OpenSSL install, and stop installing MSYS2
  477. packages, when building using mingw on Appveyor Windows CI. Fixes
  478. bug 28399; bugfix on 0.3.4.1-alpha.
  479. o Minor bugfixes (continuous integration, Windows, backport from 0.3.5.6-rc):
  480. - Explicitly specify the path to the OpenSSL library and do not
  481. download OpenSSL from Pacman, but instead use the library that is
  482. already provided by AppVeyor. Fixes bug 28574; bugfix on master.
  483. o Minor bugfixes (directory permissions, backport form 0.3.5.3-alpha):
  484. - When a user requests a group-readable DataDirectory, give it to
  485. them. Previously, when the DataDirectory and the CacheDirectory
  486. were the same, the default setting (0) for
  487. CacheDirectoryGroupReadable would override the setting for
  488. DataDirectoryGroupReadable. Fixes bug 26913; bugfix
  489. on 0.3.3.1-alpha.
  490. o Minor bugfixes (memory leaks, backport from 0.3.5.5-alpha):
  491. - Fix a harmless memory leak in libtorrunner.a. Fixes bug 28419;
  492. bugfix on 0.3.3.1-alpha. Patch from Martin Kepplinger.
  493. o Minor bugfixes (onion service v3, backport from 0.3.5.3-alpha):
  494. - Don't warn so loudly when Tor is unable to decode an onion
  495. descriptor. This can now happen as a normal use case if a client
  496. gets a descriptor with client authorization but the client is not
  497. authorized. Fixes bug 27550; bugfix on 0.3.5.1-alpha.
  498. o Minor bugfixes (onion service v3, backport from 0.3.5.6-rc):
  499. - When deleting an ephemeral onion service (DEL_ONION), do not close
  500. any rendezvous circuits in order to let the existing client
  501. connections finish by themselves or closed by the application. The
  502. HS v2 is doing that already so now we have the same behavior for
  503. all versions. Fixes bug 28619; bugfix on 0.3.3.1-alpha.
  504. o Minor bugfixes (relay statistics, backport from 0.3.5.7):
  505. - Update relay descriptor on bandwidth changes only when the uptime
  506. is smaller than 24h, in order to reduce the efficiency of guard
  507. discovery attacks. Fixes bug 24104; bugfix on 0.1.1.6-alpha.
  508. o Minor bugfixes (unit tests, guard selection, backport from 0.3.5.6-rc):
  509. - Stop leaking memory in an entry guard unit test. Fixes bug 28554;
  510. bugfix on 0.3.0.1-alpha.
  511. Changes in version 0.3.5.7 - 2019-01-07
  512. Tor 0.3.5.7 is the first stable release in its series; it includes
  513. compilation and portability fixes, and a fix for a severe problem
  514. affecting directory caches.
  515. The Tor 0.3.5 series includes several new features and performance
  516. improvements, including client authorization for v3 onion services,
  517. cleanups to bootstrap reporting, support for improved bandwidth-
  518. measurement tools, experimental support for NSS in place of OpenSSL,
  519. and much more. It also begins a full reorganization of Tor's code
  520. layout, for improved modularity and maintainability in the future.
  521. Finally, there is the usual set of performance improvements and
  522. bugfixes that we try to do in every release series.
  523. There are a couple of changes in the 0.3.5 that may affect
  524. compatibility. First, the default version for newly created onion
  525. services is now v3. Use the HiddenServiceVersion option if you want to
  526. override this. Second, some log messages related to bootstrapping have
  527. changed; if you use stem, you may need to update to the latest version
  528. so it will recognize them.
  529. We have designated 0.3.5 as a "long-term support" (LTS) series: we
  530. will continue to patch major bugs in typical configurations of 0.3.5
  531. until at least 1 Feb 2022. (We do not plan to provide long-term
  532. support for embedding, Rust support, NSS support, running a directory
  533. authority, or unsupported platforms. For these, you will need to stick
  534. with the latest stable release.)
  535. Below are the changes since 0.3.5.6-rc. For a complete list of changes
  536. since 0.3.4.9, see the ReleaseNotes file.
  537. o Major bugfixes (relay, directory):
  538. - Always reactivate linked connections in the main loop so long as
  539. any linked connection has been active. Previously, connections
  540. serving directory information wouldn't get reactivated after the
  541. first chunk of data was sent (usually 32KB), which would prevent
  542. clients from bootstrapping. Fixes bug 28912; bugfix on
  543. 0.3.4.1-alpha. Patch by "cypherpunks3".
  544. o Minor features (compilation):
  545. - When possible, place our warning flags in a separate file, to
  546. avoid flooding verbose build logs. Closes ticket 28924.
  547. o Minor features (geoip):
  548. - Update geoip and geoip6 to the January 3 2019 Maxmind GeoLite2
  549. Country database. Closes ticket 29012.
  550. o Minor features (OpenSSL bug workaround):
  551. - Work around a bug in OpenSSL 1.1.1a, which prevented the TLS 1.3
  552. key export function from handling long labels. When this bug is
  553. detected, Tor will disable TLS 1.3. We recommend upgrading to a
  554. version of OpenSSL without this bug when it becomes available.
  555. Closes ticket 28973.
  556. o Minor features (performance):
  557. - Remove about 96% of the work from the function that we run at
  558. startup to test our curve25519_basepoint implementation. Since
  559. this function has yet to find an actual failure, we now only run
  560. it for 8 iterations instead of 200. Based on our profile
  561. information, this change should save around 8% of our startup time
  562. on typical desktops, and may have a similar effect on other
  563. platforms. Closes ticket 28838.
  564. - Stop re-validating our hardcoded Diffie-Hellman parameters on
  565. every startup. Doing this wasted time and cycles, especially on
  566. low-powered devices. Closes ticket 28851.
  567. o Minor bugfixes (compilation):
  568. - Fix compilation for Android by adding a missing header to
  569. freespace.c. Fixes bug 28974; bugfix on 0.3.5.1-alpha.
  570. o Minor bugfixes (correctness):
  571. - Fix an unreached code path where we checked the value of
  572. "hostname" inside send_resolved_hostname_cell(). Previously, we
  573. used it before checking it; now we check it first. Fixes bug
  574. 28879; bugfix on 0.1.2.7-alpha.
  575. o Minor bugfixes (testing):
  576. - Make sure that test_rebind.py actually obeys its timeout, even
  577. when it receives a large number of log messages. Fixes bug 28883;
  578. bugfix on 0.3.5.4-alpha.
  579. - Stop running stem's unit tests as part of "make test-stem", but
  580. continue to run stem's unit and online tests during "make test-
  581. stem-full". Fixes bug 28568; bugfix on 0.2.6.3-alpha.
  582. o Minor bugfixes (windows services):
  583. - Make Tor start correctly as an NT service again: previously it was
  584. broken by refactoring. Fixes bug 28612; bugfix on 0.3.5.3-alpha.
  585. o Code simplification and refactoring:
  586. - When parsing a port configuration, make it more obvious to static
  587. analyzer tools that we always initialize the address. Closes
  588. ticket 28881.
  589. Changes in version 0.3.5.6-rc - 2018-12-18
  590. Tor 0.3.5.6-rc fixes numerous small bugs in earlier versions of Tor.
  591. It is the first release candidate in the 0.3.5.x series; if no further
  592. huge bugs are found, our next release may be the stable 0.3.5.x.
  593. o Minor features (continuous integration, Windows):
  594. - Always show the configure and test logs, and upload them as build
  595. artifacts, when building for Windows using Appveyor CI.
  596. Implements 28459.
  597. o Minor features (fallback directory list):
  598. - Replace the 150 fallbacks originally introduced in Tor
  599. 0.3.3.1-alpha in January 2018 (of which ~115 were still
  600. functional), with a list of 157 fallbacks (92 new, 65 existing, 85
  601. removed) generated in December 2018. Closes ticket 24803.
  602. o Minor features (geoip):
  603. - Update geoip and geoip6 to the December 5 2018 Maxmind GeoLite2
  604. Country database. Closes ticket 28744.
  605. o Minor bugfixes (compilation):
  606. - Add missing dependency on libgdi32.dll for tor-print-ed-signing-
  607. cert.exe on Windows. Fixes bug 28485; bugfix on 0.3.5.1-alpha.
  608. o Minor bugfixes (continuous integration, Windows):
  609. - Explicitly specify the path to the OpenSSL library and do not
  610. download OpenSSL from Pacman, but instead use the library that is
  611. already provided by AppVeyor. Fixes bug 28574; bugfix on master.
  612. o Minor bugfixes (onion service v3):
  613. - When deleting an ephemeral onion service (DEL_ONION), do not close
  614. any rendezvous circuits in order to let the existing client
  615. connections finish by themselves or closed by the application. The
  616. HS v2 is doing that already so now we have the same behavior for
  617. all versions. Fixes bug 28619; bugfix on 0.3.3.1-alpha.
  618. o Minor bugfixes (restart-in-process, boostrap):
  619. - Add missing resets of bootstrap tracking state when shutting down
  620. (regression caused by ticket 27169). Fixes bug 28524; bugfix
  621. on 0.3.5.1-alpha.
  622. o Minor bugfixes (testing):
  623. - Use a separate DataDirectory for the test_rebind script.
  624. Previously, this script would run using the default DataDirectory,
  625. and sometimes fail. Fixes bug 28562; bugfix on 0.3.5.1-alpha.
  626. Patch from Taylor R Campbell.
  627. - Stop leaking memory in an entry guard unit test. Fixes bug 28554;
  628. bugfix on 0.3.0.1-alpha.
  629. o Minor bugfixes (Windows):
  630. - Correctly identify Windows 8.1, Windows 10, and Windows Server
  631. 2008 and later from their NT versions. Fixes bug 28096; bugfix on
  632. 0.2.2.34; reported by Keifer Bly.
  633. - On recent Windows versions, the GetVersionEx() function may report
  634. an earlier Windows version than the running OS. To avoid user
  635. confusion, add "[or later]" to Tor's version string on affected
  636. versions of Windows. Fixes bug 28096; bugfix on 0.2.2.34; reported
  637. by Keifer Bly.
  638. - Remove Windows versions that were never supported by the
  639. GetVersionEx() function. Stop duplicating the latest Windows
  640. version in get_uname(). Fixes bug 28096; bugfix on 0.2.2.34;
  641. reported by Keifer Bly.
  642. o Testing:
  643. - Increase logging and tag all log entries with timestamps in
  644. test_rebind.py. Provides diagnostics for issue 28229.
  645. o Code simplification and refactoring (shared random, dirauth):
  646. - Change many tor_assert() to use BUG() instead. The idea is to not
  647. crash a dirauth but rather scream loudly with a stacktrace and let
  648. it continue run. The shared random subsystem is very resilient and
  649. if anything wrong happens with it, at worst a non coherent value
  650. will be put in the vote and discarded by the other authorities.
  651. Closes ticket 19566.
  652. o Documentation (onion services):
  653. - Document in the man page that changing ClientOnionAuthDir value or
  654. adding a new file in the directory will not work at runtime upon
  655. sending a HUP if Sandbox 1. Closes ticket 28128.
  656. - Note in the man page that the only real way to fully revoke an
  657. onion service v3 client authorization is by restarting the tor
  658. process. Closes ticket 28275.
  659. Changes in version 0.3.5.5-alpha - 2018-11-16
  660. Tor 0.3.5.5-alpha includes numerous bugfixes on earlier releases,
  661. including several that we hope to backport to older release series in
  662. the future.
  663. o Major bugfixes (OpenSSL, portability):
  664. - Fix our usage of named groups when running as a TLS 1.3 client in
  665. OpenSSL 1.1.1. Previously, we only initialized EC groups when
  666. running as a relay, which caused clients to fail to negotiate TLS
  667. 1.3 with relays. Fixes bug 28245; bugfix on 0.2.9.15 (when TLS 1.3
  668. support was added).
  669. o Minor features (geoip):
  670. - Update geoip and geoip6 to the November 6 2018 Maxmind GeoLite2
  671. Country database. Closes ticket 28395.
  672. o Minor bugfixes (compilation):
  673. - Initialize a variable unconditionally in aes_new_cipher(), since
  674. some compilers cannot tell that we always initialize it before
  675. use. Fixes bug 28413; bugfix on 0.2.9.3-alpha.
  676. o Minor bugfixes (connection, relay):
  677. - Avoid a logging a BUG() stacktrace when closing connection held
  678. open because the write side is rate limited but not the read side.
  679. Now, the connection read side is simply shut down until Tor is
  680. able to flush the connection and close it. Fixes bug 27750; bugfix
  681. on 0.3.4.1-alpha.
  682. o Minor bugfixes (continuous integration, Windows):
  683. - Manually configure the zstd compiler options, when building using
  684. mingw on Appveyor Windows CI. The MSYS2 mingw zstd package does
  685. not come with a pkg-config file. Fixes bug 28454; bugfix
  686. on 0.3.4.1-alpha.
  687. - Stop using an external OpenSSL install, and stop installing MSYS2
  688. packages, when building using mingw on Appveyor Windows CI. Fixes
  689. bug 28399; bugfix on 0.3.4.1-alpha.
  690. o Minor bugfixes (documentation):
  691. - Make Doxygen work again after the code movement in the 0.3.5
  692. source tree. Fixes bug 28435; bugfix on 0.3.5.1-alpha.
  693. o Minor bugfixes (Linux seccomp2 sandbox):
  694. - Permit the "shutdown()" system call, which is apparently used by
  695. OpenSSL under some circumstances. Fixes bug 28183; bugfix
  696. on 0.2.5.1-alpha.
  697. o Minor bugfixes (logging):
  698. - Stop talking about the Named flag in log messages. Clients have
  699. ignored the Named flag since 0.3.2. Fixes bug 28441; bugfix
  700. on 0.3.2.1-alpha.
  701. o Minor bugfixes (memory leaks):
  702. - Fix a harmless memory leak in libtorrunner.a. Fixes bug 28419;
  703. bugfix on 0.3.3.1-alpha. Patch from Martin Kepplinger.
  704. o Minor bugfixes (onion services):
  705. - On an intro point for a version 3 onion service, stop closing
  706. introduction circuits on an NACK. This lets the client decide
  707. whether to reuse the circuit or discard it. Previously, we closed
  708. intro circuits when sending NACKs. Fixes bug 27841; bugfix on
  709. 0.3.2.1-alpha. Patch by Neel Chaunan.
  710. - When replacing a descriptor in the client cache, make sure to
  711. close all client introduction circuits for the old descriptor, so
  712. we don't end up with unusable leftover circuits. Fixes bug 27471;
  713. bugfix on 0.3.2.1-alpha.
  714. Changes in version 0.3.5.4-alpha - 2018-11-08
  715. Tor 0.3.5.4-alpha includes numerous bugfixes on earlier versions and
  716. improves our continuous integration support. It continues our attempts
  717. to stabilize this alpha branch and build it into a foundation for an
  718. acceptable long-term-support release.
  719. o Major bugfixes (compilation, rust):
  720. - Rust tests can now build and run successfully with the
  721. --enable-fragile-hardening option enabled. Doing this currently
  722. requires the rust beta channel; it will be possible with stable
  723. rust once Rust version 1.31 is released. Patch from Alex Crichton.
  724. Fixes bugs 27272, 27273, and 27274. Bugfix on 0.3.1.1-alpha.
  725. o Major bugfixes (embedding, main loop):
  726. - When DisableNetwork becomes set, actually disable periodic events
  727. that are already enabled. (Previously, we would refrain from
  728. enabling new ones, but we would leave the old ones turned on.)
  729. Fixes bug 28348; bugfix on 0.3.4.1-alpha.
  730. o Minor features (continuous integration):
  731. - Add a Travis CI build for --enable-nss on Linux gcc. Closes
  732. ticket 27751.
  733. - Add new CI job to Travis configuration to run stem-based
  734. integration tests. Closes ticket 27913.
  735. o Minor features (Windows, continuous integration):
  736. - Build tor on Windows Server 2012 R2 and Windows Server 2016 using
  737. Appveyor's CI. Closes ticket 28318.
  738. o Minor bugfixes (C correctness, also in 0.3.4.9):
  739. - Avoid undefined behavior in an end-of-string check when parsing
  740. the BEGIN line in a directory object. Fixes bug 28202; bugfix
  741. on 0.2.0.3-alpha.
  742. o Minor bugfixes (compilation):
  743. - Fix a pair of missing headers on OpenBSD. Fixes bug 28303; bugfix
  744. on 0.3.5.1-alpha. Patch from Kris Katterjohn.
  745. o Minor bugfixes (compilation, OpenSolaris):
  746. - Fix compilation on OpenSolaris and its descendants by adding a
  747. missing include to compat_pthreads.c. Fixes bug 27963; bugfix
  748. on 0.3.5.1-alpha.
  749. o Minor bugfixes (configuration):
  750. - Refuse to start with relative file paths and RunAsDaemon set
  751. (regression from the fix for bug 22731). Fixes bug 28298; bugfix
  752. on 0.3.3.1-alpha.
  753. o Minor bugfixes (directory authority, also in 0.3.4.9):
  754. - Log additional info when we get a relay that shares an ed25519 ID
  755. with a different relay, instead of a BUG() warning with a
  756. backtrace. Fixes bug 27800; bugfix on 0.3.2.1-alpha.
  757. o Minor bugfixes (onion service v3):
  758. - Build the service descriptor's signing key certificate before
  759. uploading, so we always have a fresh one: leaving no chances for
  760. it to expire service side. Fixes bug 27838; bugfix
  761. on 0.3.2.1-alpha.
  762. o Minor bugfixes (onion service v3, client authorization):
  763. - Fix an assert() when adding a client authorization for the first
  764. time and then sending a HUP signal to the service. Before that,
  765. Tor would stop abruptly. Fixes bug 27995; bugfix on 0.3.5.1-alpha.
  766. o Minor bugfixes (onion services):
  767. - Unless we have explicitly set HiddenServiceVersion, detect the
  768. onion service version and then look for invalid options.
  769. Previously, we did the reverse, but that broke existing configs
  770. which were pointed to a v2 service and had options like
  771. HiddenServiceAuthorizeClient set. Fixes bug 28127; bugfix on
  772. 0.3.5.1-alpha. Patch by Neel Chauhan.
  773. o Minor bugfixes (portability):
  774. - Make the OPE code (which is used for v3 onion services) run
  775. correctly on big-endian platforms. Fixes bug 28115; bugfix
  776. on 0.3.5.1-alpha.
  777. o Minor bugfixes (protover, rust):
  778. - Reject extra commas in version strings. Fixes bug 27197; bugfix
  779. on 0.3.3.3-alpha.
  780. o Minor bugfixes (relay shutdown, systemd):
  781. - Notify systemd of ShutdownWaitLength so it can be set to longer
  782. than systemd's TimeoutStopSec. In Tor's systemd service file, set
  783. TimeoutSec to 60 seconds to allow Tor some time to shut down.
  784. Fixes bug 28113; bugfix on 0.2.6.2-alpha.
  785. o Minor bugfixes (rust, also in 0.3.4.9):
  786. - Fix a potential null dereference in protover_all_supported(). Add
  787. a test for it. Fixes bug 27804; bugfix on 0.3.3.1-alpha.
  788. - Return a string that can be safely freed by C code, not one
  789. created by the rust allocator, in protover_all_supported(). Fixes
  790. bug 27740; bugfix on 0.3.3.1-alpha.
  791. o Minor bugfixes (rust, directory authority, also in 0.3.4.9):
  792. - Fix an API mismatch in the rust implementation of
  793. protover_compute_vote(). This bug could have caused crashes on any
  794. directory authorities running Tor with Rust (which we do not yet
  795. recommend). Fixes bug 27741; bugfix on 0.3.3.6.
  796. o Minor bugfixes (testing):
  797. - Avoid hangs and race conditions in test_rebind.py. Fixes bug
  798. 27968; bugfix on 0.3.5.1-alpha.
  799. o Minor bugfixes (testing, also in 0.3.4.9):
  800. - Treat backtrace test failures as expected on BSD-derived systems
  801. (NetBSD, OpenBSD, and macOS/Darwin) until we solve bug 17808.
  802. (FreeBSD failures have been treated as expected since 18204 in
  803. 0.2.8.) Fixes bug 27948; bugfix on 0.2.5.2-alpha.
  804. o Documentation (onion service manpage):
  805. - Improve HSv3 client authorization by making some options more
  806. explicit and detailed. Closes ticket 28026. Patch by Mike Tigas.
  807. Changes in version 0.3.4.9 - 2018-11-02
  808. Tor 0.3.4.9 is the second stable release in its series; it backports
  809. numerous fixes, including a fix for a bandwidth management bug that
  810. was causing memory exhaustion on relays. Anyone running an earlier
  811. version of Tor 0.3.4.9 should upgrade.
  812. o Major bugfixes (compilation, backport from 0.3.5.3-alpha):
  813. - Fix compilation on ARM (and other less-used CPUs) when compiling
  814. with OpenSSL before 1.1. Fixes bug 27781; bugfix on 0.3.4.1-alpha.
  815. o Major bugfixes (mainloop, bootstrap, backport from 0.3.5.3-alpha):
  816. - Make sure Tor bootstraps and works properly if only the
  817. ControlPort is set. Prior to this fix, Tor would only bootstrap
  818. when a client port was set (Socks, Trans, NATD, DNS or HTTPTunnel
  819. port). Fixes bug 27849; bugfix on 0.3.4.1-alpha.
  820. o Major bugfixes (relay, backport from 0.3.5.3-alpha):
  821. - When our write bandwidth limit is exhausted, stop writing on the
  822. connection. Previously, we had a typo in the code that would make
  823. us stop reading instead, leading to relay connections being stuck
  824. indefinitely and consuming kernel RAM. Fixes bug 28089; bugfix
  825. on 0.3.4.1-alpha.
  826. o Major bugfixes (restart-in-process, backport from 0.3.5.1-alpha):
  827. - Fix a use-after-free error that could be caused by passing Tor an
  828. impossible set of options that would fail during options_act().
  829. Fixes bug 27708; bugfix on 0.3.3.1-alpha.
  830. o Minor features (continuous integration, backport from 0.3.5.1-alpha):
  831. - Don't do a distcheck with --disable-module-dirauth in Travis.
  832. Implements ticket 27252.
  833. - Only run one online rust build in Travis, to reduce network
  834. errors. Skip offline rust builds on Travis for Linux gcc, because
  835. they're redundant. Implements ticket 27252.
  836. - Skip gcc on OSX in Travis CI, because it's rarely used. Skip a
  837. duplicate hardening-off build in Travis on Tor 0.2.9. Skip gcc on
  838. Linux with default settings, because all the non-default builds
  839. use gcc on Linux. Implements ticket 27252.
  840. o Minor features (continuous integration, backport from 0.3.5.3-alpha):
  841. - Use the Travis Homebrew addon to install packages on macOS during
  842. Travis CI. The package list is the same, but the Homebrew addon
  843. does not do a `brew update` by default. Implements ticket 27738.
  844. o Minor features (geoip):
  845. - Update geoip and geoip6 to the October 9 2018 Maxmind GeoLite2
  846. Country database. Closes ticket 27991.
  847. o Minor bugfixes (32-bit OSX and iOS, timing, backport from 0.3.5.2-alpha):
  848. - Fix an integer overflow bug in our optimized 32-bit millisecond-
  849. difference algorithm for 32-bit Apple platforms. Previously, it
  850. would overflow when calculating the difference between two times
  851. more than 47 days apart. Fixes part of bug 27139; bugfix
  852. on 0.3.4.1-alpha.
  853. - Improve the precision of our 32-bit millisecond difference
  854. algorithm for 32-bit Apple platforms. Fixes part of bug 27139;
  855. bugfix on 0.3.4.1-alpha.
  856. - Relax the tolerance on the mainloop/update_time_jumps test when
  857. running on 32-bit Apple platforms. Fixes part of bug 27139; bugfix
  858. on 0.3.4.1-alpha.
  859. o Minor bugfixes (C correctness, to appear in 0.3.5.4-alpha):
  860. - Avoid undefined behavior in an end-of-string check when parsing
  861. the BEGIN line in a directory object. Fixes bug 28202; bugfix
  862. on 0.2.0.3-alpha.
  863. o Minor bugfixes (CI, appveyor, to appear in 0.3.5.4-alpha):
  864. - Only install the necessary mingw packages during our appveyor
  865. builds. This change makes the build a little faster, and prevents
  866. a conflict with a preinstalled mingw openssl that appveyor now
  867. ships. Fixes bugs 27943 and 27765; bugfix on 0.3.4.2-alpha.
  868. o Minor bugfixes (code safety, backport from 0.3.5.3-alpha):
  869. - Rewrite our assertion macros so that they no longer suppress the
  870. compiler's -Wparentheses warnings. Fixes bug 27709; bugfix
  871. o Minor bugfixes (continuous integration, backport from 0.3.5.1-alpha):
  872. - Stop reinstalling identical packages in our Windows CI. Fixes bug
  873. 27464; bugfix on 0.3.4.1-alpha.
  874. o Minor bugfixes (directory authority, to appear in 0.3.5.4-alpha):
  875. - Log additional info when we get a relay that shares an ed25519 ID
  876. with a different relay, instead making a BUG() warning. Fixes bug
  877. 27800; bugfix on 0.3.2.1-alpha.
  878. o Minor bugfixes (directory connection shutdown, backport from 0.3.5.1-alpha):
  879. - Avoid a double-close when shutting down a stalled directory
  880. connection. Fixes bug 26896; bugfix on 0.3.4.1-alpha.
  881. o Minor bugfixes (HTTP tunnel, backport from 0.3.5.1-alpha):
  882. - Fix a bug warning when closing an HTTP tunnel connection due to an
  883. HTTP request we couldn't handle. Fixes bug 26470; bugfix
  884. on 0.3.2.1-alpha.
  885. o Minor bugfixes (netflow padding, backport from 0.3.5.1-alpha):
  886. - Ensure circuitmux queues are empty before scheduling or sending
  887. padding. Fixes bug 25505; bugfix on 0.3.1.1-alpha.
  888. o Minor bugfixes (onion service v3, backport from 0.3.5.1-alpha):
  889. - When the onion service directory can't be created or has the wrong
  890. permissions, do not log a stack trace. Fixes bug 27335; bugfix
  891. on 0.3.2.1-alpha.
  892. o Minor bugfixes (onion service v3, backport from 0.3.5.2-alpha):
  893. - Close all SOCKS request (for the same .onion) if the newly fetched
  894. descriptor is unusable. Before that, we would close only the first
  895. one leaving the other hanging and let to time out by themselves.
  896. Fixes bug 27410; bugfix on 0.3.2.1-alpha.
  897. o Minor bugfixes (onion service v3, backport from 0.3.5.3-alpha):
  898. - When selecting a v3 rendezvous point, don't only look at the
  899. protover, but also check whether the curve25519 onion key is
  900. present. This way we avoid picking a relay that supports the v3
  901. rendezvous but for which we don't have the microdescriptor. Fixes
  902. bug 27797; bugfix on 0.3.2.1-alpha.
  903. o Minor bugfixes (protover, backport from 0.3.5.3-alpha):
  904. - Reject protocol names containing bytes other than alphanumeric
  905. characters and hyphens ([A-Za-z0-9-]). Fixes bug 27316; bugfix
  906. on 0.2.9.4-alpha.
  907. o Minor bugfixes (rust, backport from 0.3.5.1-alpha):
  908. - Compute protover votes correctly in the rust version of the
  909. protover code. Previously, the protover rewrite in 24031 allowed
  910. repeated votes from the same voter for the same protocol version
  911. to be counted multiple times in protover_compute_vote(). Fixes bug
  912. 27649; bugfix on 0.3.3.5-rc.
  913. - Reject protover names that contain invalid characters. Fixes bug
  914. 27687; bugfix on 0.3.3.1-alpha.
  915. o Minor bugfixes (rust, backport from 0.3.5.2-alpha):
  916. - protover_all_supported() would attempt to allocate up to 16GB on
  917. some inputs, leading to a potential memory DoS. Fixes bug 27206;
  918. bugfix on 0.3.3.5-rc.
  919. o Minor bugfixes (rust, directory authority, to appear in 0.3.5.4-alpha):
  920. - Fix an API mismatch in the rust implementation of
  921. protover_compute_vote(). This bug could have caused crashes on any
  922. directory authorities running Tor with Rust (which we do not yet
  923. recommend). Fixes bug 27741; bugfix on 0.3.3.6.
  924. o Minor bugfixes (rust, to appear in 0.3.5.4-alpha):
  925. - Fix a potential null dereference in protover_all_supported(). Add
  926. a test for it. Fixes bug 27804; bugfix on 0.3.3.1-alpha.
  927. - Return a string that can be safely freed by C code, not one
  928. created by the rust allocator, in protover_all_supported(). Fixes
  929. bug 27740; bugfix on 0.3.3.1-alpha.
  930. o Minor bugfixes (testing, backport from 0.3.5.1-alpha):
  931. - If a unit test running in a subprocess exits abnormally or with a
  932. nonzero status code, treat the test as having failed, even if the
  933. test reported success. Without this fix, memory leaks don't cause
  934. the tests to fail, even with LeakSanitizer. Fixes bug 27658;
  935. bugfix on 0.2.2.4-alpha.
  936. o Minor bugfixes (testing, backport from 0.3.5.3-alpha):
  937. - Make the hs_service tests use the same time source when creating
  938. the introduction point and when testing it. Now tests work better
  939. on very slow systems like ARM or Travis. Fixes bug 27810; bugfix
  940. on 0.3.2.1-alpha.
  941. o Minor bugfixes (testing, to appear in 0.3.5.4-alpha):
  942. - Treat backtrace test failures as expected on BSD-derived systems
  943. (NetBSD, OpenBSD, and macOS/Darwin) until we solve bug 17808.
  944. (FreeBSD failures have been treated as expected since 18204 in
  945. 0.2.8.) Fixes bug 27948; bugfix on 0.2.5.2-alpha.
  946. Changes in version 0.3.5.3-alpha - 2018-10-17
  947. Tor 0.3.5.3-alpha fixes several bugs, mostly from previous 0.3.5.x
  948. versions. One important fix for relays addresses a problem with rate-
  949. limiting code from back in 0.3.4.x: If the fix works out, we'll be
  950. backporting it soon. This release is still an alpha, but we hope it's
  951. getting closer and closer to stability.
  952. o Major features (onion services):
  953. - Version 3 onion services can now use the per-service
  954. HiddenServiceExportCircuitID option to differentiate client
  955. circuits. It communicates with the service by using the HAProxy
  956. protocol to assign virtual IP addresses to inbound client
  957. circuits. Closes ticket 4700. Patch by Mahrud Sayrafi.
  958. o Major bugfixes (compilation):
  959. - Fix compilation on ARM (and other less-used CPUs) when compiling
  960. with OpenSSL before 1.1. Fixes bug 27781; bugfix on 0.3.4.1-alpha.
  961. o Major bugfixes (initialization, crash):
  962. - Fix an assertion crash that would stop Tor from starting up if it
  963. tried to activate a periodic event too early. Fixes bug 27861;
  964. bugfix on 0.3.5.1-alpha.
  965. o Major bugfixes (mainloop, bootstrap):
  966. - Make sure Tor bootstraps and works properly if only the
  967. ControlPort is set. Prior to this fix, Tor would only bootstrap
  968. when a client port was set (Socks, Trans, NATD, DNS or HTTPTunnel
  969. port). Fixes bug 27849; bugfix on 0.3.4.1-alpha.
  970. o Major bugfixes (relay):
  971. - When our write bandwidth limit is exhausted, stop writing on the
  972. connection. Previously, we had a typo in the code that would make
  973. us stop reading instead, leading to relay connections being stuck
  974. indefinitely and consuming kernel RAM. Fixes bug 28089; bugfix
  975. on 0.3.4.1-alpha.
  976. o Minor features (continuous integration):
  977. - Use the Travis Homebrew addon to install packages on macOS during
  978. Travis CI. The package list is the same, but the Homebrew addon
  979. does not do a `brew update` by default. Implements ticket 27738.
  980. - Report what program produced the mysterious core file that we
  981. occasionally see on Travis CI during make distcheck. Closes
  982. ticket 28024.
  983. o Minor features (geoip):
  984. - Update geoip and geoip6 to the October 9 2018 Maxmind GeoLite2
  985. Country database. Closes ticket 27991.
  986. o Minor bugfixes (code safety):
  987. - Rewrite our assertion macros so that they no longer suppress the
  988. compiler's -Wparentheses warnings. Fixes bug 27709; bugfix
  989. on 0.0.6.
  990. o Minor bugfixes (compilation):
  991. - Compile the ed25519-donna code with a correct declaration of
  992. crypto_strongest_rand(). Previously, we built it with one type,
  993. but linked it against another in the unit tests, which caused
  994. compilation failures with LTO enabled. This could have caused
  995. other undefined behavior in the tests. Fixes bug 27728; bugfix
  996. on 0.3.5.1-alpha.
  997. o Minor bugfixes (compilation, netbsd):
  998. - Add a missing include back into procmon.c. Fixes bug 27990; bugfix
  999. on 0.3.5.1-alpha.
  1000. o Minor bugfixes (continuous integration, appveyor):
  1001. - Install only the necessary mingw packages during our appveyor
  1002. builds. This change makes the build a little faster, and prevents
  1003. a conflict with a preinstalled mingw openssl that appveyor now
  1004. ships. Fixes bugs 27765 and 27943; bugfix on 0.3.4.2-alpha.
  1005. o Minor bugfixes (directory permissions):
  1006. - When a user requests a group-readable DataDirectory, give it to
  1007. them. Previously, when the DataDirectory and the CacheDirectory
  1008. were the same, the default setting (0) for
  1009. CacheDirectoryGroupReadable would override the setting for
  1010. DataDirectoryGroupReadable. Fixes bug 26913; bugfix
  1011. on 0.3.3.1-alpha.
  1012. o Minor bugfixes (memory leaks):
  1013. - Fix a small memory leak when calling Tor with --dump-config. Fixes
  1014. bug 27893; bugfix on 0.3.2.1-alpha.
  1015. o Minor bugfixes (networking):
  1016. - In retry_listeners_ports(), make sure that we're removing a member
  1017. of old_conns smartlist at most once. Fixes bug 27808; bugfix
  1018. on 0.3.5.1-alpha.
  1019. - Refrain from attempting socket rebinding when old and new
  1020. listeners are in different address families. Fixes bug 27928;
  1021. bugfix on 0.3.5.1-alpha.
  1022. o Minor bugfixes (onion service v3):
  1023. - Stop dumping a stack trace when trying to connect to an intro
  1024. point without having a descriptor for it. Fixes bug 27774; bugfix
  1025. on 0.3.2.1-alpha.
  1026. - Don't warn so loudly when Tor is unable to decode an onion
  1027. descriptor. This can now happen as a normal use case if a client
  1028. gets a descriptor with client authorization but the client is not
  1029. authorized. Fixes bug 27550; bugfix on 0.3.5.1-alpha.
  1030. - When selecting a v3 rendezvous point, don't only look at the
  1031. protover, but also check whether the curve25519 onion key is
  1032. present. This way we avoid picking a relay that supports the v3
  1033. rendezvous but for which we don't have the microdescriptor. Fixes
  1034. bug 27797; bugfix on 0.3.2.1-alpha.
  1035. o Minor bugfixes (protover):
  1036. - Reject protocol names containing bytes other than alphanumeric
  1037. characters and hyphens ([A-Za-z0-9-]). Fixes bug 27316; bugfix
  1038. on 0.2.9.4-alpha.
  1039. o Minor bugfixes (testing):
  1040. - Make the hs_service tests use the same time source when creating
  1041. the introduction point and when testing it. Now tests work better
  1042. on very slow systems like ARM or Travis. Fixes bug 27810; bugfix
  1043. on 0.3.2.1-alpha.
  1044. - In test_rebind.py, check if the Python version is in the supported
  1045. range. Fixes bug 27675; bugfix on 0.3.5.1-alpha.
  1046. o Code simplification and refactoring:
  1047. - Divide more large Tor source files -- especially ones that span
  1048. multiple areas of functionality -- into smaller parts, including
  1049. onion.c and main.c. Closes ticket 26747.
  1050. - Divide the "routerparse.c" module into separate modules for each
  1051. group of parsed objects. Closes ticket 27924.
  1052. - Move protover_rust.c to the same place protover.c was moved to.
  1053. Closes ticket 27814.
  1054. - Split directory.c into separate pieces for client, server, and
  1055. common functionality. Closes ticket 26744.
  1056. - Split the non-statistics-related parts from the rephist.c and
  1057. geoip.c modules. Closes ticket 27892.
  1058. - Split the router.c file into relay-only and shared components, to
  1059. help with future modularization. Closes ticket 27864.
  1060. o Documentation:
  1061. - In the tor-resolve(1) manpage, fix the reference to socks-
  1062. extensions.txt by adding a web URL. Resolves ticket 27853.
  1063. - Mention that we require Python to be 2.7 or newer for some
  1064. integration tests that we ship with Tor. Resolves ticket 27677.
  1065. Changes in version 0.3.5.2-alpha - 2018-09-21
  1066. Tor 0.3.5.2-alpha fixes several bugs in 0.3.5.1-alpha, including one
  1067. that made Tor think it had run out of sockets. Anybody running a relay
  1068. or an onion service on 0.3.5.1-alpha should upgrade.
  1069. o Major bugfixes (relay bandwidth statistics):
  1070. - When we close relayed circuits, report the data in the circuit
  1071. queues as being written in our relay bandwidth stats. This
  1072. mitigates guard discovery and other attacks that close circuits
  1073. for the explicit purpose of noticing this discrepancy in
  1074. statistics. Fixes bug 23512; bugfix on 0.0.8pre3.
  1075. o Major bugfixes (socket accounting):
  1076. - In our socket accounting code, count a socket as closed even when
  1077. it is closed indirectly by the TLS layer. Previously, we would
  1078. count these sockets as still in use, and incorrectly believe that
  1079. we had run out of sockets. Fixes bug 27795; bugfix
  1080. on 0.3.5.1-alpha.
  1081. o Minor bugfixes (32-bit OSX and iOS, timing):
  1082. - Fix an integer overflow bug in our optimized 32-bit millisecond-
  1083. difference algorithm for 32-bit Apple platforms. Previously, it
  1084. would overflow when calculating the difference between two times
  1085. more than 47 days apart. Fixes part of bug 27139; bugfix
  1086. on 0.3.4.1-alpha.
  1087. - Improve the precision of our 32-bit millisecond difference
  1088. algorithm for 32-bit Apple platforms. Fixes part of bug 27139;
  1089. bugfix on 0.3.4.1-alpha.
  1090. - Relax the tolerance on the mainloop/update_time_jumps test when
  1091. running on 32-bit Apple platforms. Fixes part of bug 27139; bugfix
  1092. on 0.3.4.1-alpha.
  1093. o Minor bugfixes (onion service v3):
  1094. - Close all SOCKS request (for the same .onion) if the newly fetched
  1095. descriptor is unusable. Before that, we would close only the first
  1096. one leaving the other hanging and let to time out by themselves.
  1097. Fixes bug 27410; bugfix on 0.3.2.1-alpha.
  1098. o Minor bugfixes (memory leak):
  1099. - Fix an unlikely memory leak when trying to read a private key from
  1100. a ridiculously large file. Fixes bug 27764; bugfix on
  1101. 0.3.5.1-alpha. This is CID 1439488.
  1102. o Minor bugfixes (NSS):
  1103. - Correctly detect failure to open a dummy TCP socket when stealing
  1104. ownership of an fd from the NSS layer. Fixes bug 27782; bugfix
  1105. on 0.3.5.1-alpha.
  1106. o Minor bugfixes (rust):
  1107. - protover_all_supported() would attempt to allocate up to 16GB on
  1108. some inputs, leading to a potential memory DoS. Fixes bug 27206;
  1109. bugfix on 0.3.3.5-rc.
  1110. o Minor bugfixes (testing):
  1111. - Revise the "conditionvar_timeout" test so that it succeeds even on
  1112. heavily loaded systems where the test threads are not scheduled
  1113. within 200 msec. Fixes bug 27073; bugfix on 0.2.6.3-alpha.
  1114. o Code simplification and refactoring:
  1115. - Divide the routerlist.c and dirserv.c modules into smaller parts.
  1116. Closes ticket 27799.
  1117. Changes in version 0.3.5.1-alpha - 2018-09-18
  1118. Tor 0.3.5.1-alpha is the first release of the 0.3.5.x series. It adds
  1119. client authorization for modern (v3) onion services, improves
  1120. bootstrap reporting, begins reorganizing Tor's codebase, adds optional
  1121. support for NSS in place of OpenSSL, and much more.
  1122. o Major features (onion services, UI change):
  1123. - For a newly created onion service, the default version is now 3.
  1124. Tor still supports existing version 2 services, but the operator
  1125. now needs to set "HiddenServiceVersion 2" in order to create a new
  1126. version 2 service. For existing services, Tor now learns the
  1127. version by reading the key file. Closes ticket 27215.
  1128. o Major features (relay, UI change):
  1129. - Relays no longer run as exits by default. If the "ExitRelay"
  1130. option is auto (or unset), and no exit policy is specified with
  1131. ExitPolicy or ReducedExitPolicy, we now treat ExitRelay as 0.
  1132. Previously in this case, we allowed exit traffic and logged a
  1133. warning message. Closes ticket 21530. Patch by Neel Chauhan.
  1134. - Tor now validates that the ContactInfo config option is valid UTF-
  1135. 8 when parsing torrc. Closes ticket 27428.
  1136. o Major features (bootstrap):
  1137. - Don't report directory progress until after a connection to a
  1138. relay or bridge has succeeded. Previously, we'd report 80%
  1139. progress based on cached directory information when we couldn't
  1140. even connect to the network. Closes ticket 27169.
  1141. o Major features (new code layout):
  1142. - Nearly all of Tor's source code has been moved around into more
  1143. logical places. The "common" directory is now divided into a set
  1144. of libraries in "lib", and files in the "or" directory have been
  1145. split into "core" (logic absolutely needed for onion routing),
  1146. "feature" (independent modules in Tor), and "app" (to configure
  1147. and invoke the rest of Tor). See doc/HACKING/CodeStructure.md for
  1148. more information. Closes ticket 26481.
  1149. This refactoring is not complete: although the libraries have been
  1150. refactored to be acyclic, the main body of Tor is still too
  1151. interconnected. We will attempt to improve this in the future.
  1152. o Major features (onion services v3):
  1153. - Implement onion service client authorization at the descriptor
  1154. level: only authorized clients can decrypt a service's descriptor
  1155. to find out how to contact it. A new torrc option was added to
  1156. control this client side: ClientOnionAuthDir <path>. On the
  1157. service side, if the "authorized_clients/" directory exists in the
  1158. onion service directory path, client configurations are read from
  1159. the files within. See the manpage for more details. Closes ticket
  1160. 27547. Patch done by Suphanat Chunhapanya (haxxpop).
  1161. - Improve revision counter generation in next-gen onion services.
  1162. Onion services can now scale by hosting multiple instances on
  1163. different hosts without synchronization between them, which was
  1164. previously impossible because descriptors would get rejected by
  1165. HSDirs. Addresses ticket 25552.
  1166. o Major features (portability, cryptography, experimental, TLS):
  1167. - Tor now has the option to compile with the NSS library instead of
  1168. OpenSSL. This feature is experimental, and we expect that bugs may
  1169. remain. It is mainly intended for environments where Tor's
  1170. performance is not CPU-bound, and where NSS is already known to be
  1171. installed. To try it out, configure Tor with the --enable-nss
  1172. flag. Closes tickets 26631, 26815, and 26816.
  1173. If you are experimenting with this option and using an old cached
  1174. consensus, Tor may fail to start. To solve this, delete your
  1175. "cached-consensus" and "cached-microdesc-consensus" files,
  1176. (if present), and restart Tor.
  1177. o Major bugfixes (directory authority):
  1178. - Actually check that the address we get from DirAuthority
  1179. configuration line is valid IPv4. Explicitly disallow DirAuthority
  1180. address to be a DNS hostname. Fixes bug 26488; bugfix
  1181. on 0.1.2.10-rc.
  1182. o Major bugfixes (restart-in-process):
  1183. - Fix a use-after-free error that could be caused by passing Tor an
  1184. impossible set of options that would fail during options_act().
  1185. Fixes bug 27708; bugfix on 0.3.3.1-alpha.
  1186. o Minor features (admin tools):
  1187. - Add a new --key-expiration option to print the expiration date of
  1188. the signing cert in an ed25519_signing_cert file. Resolves
  1189. issue 19506.
  1190. o Minor features (build):
  1191. - If you pass the "--enable-pic" option to configure, Tor will try
  1192. to tell the compiler to build position-independent code suitable
  1193. to link into a dynamic library. (The default remains -fPIE, for
  1194. code suitable for a relocatable executable.) Closes ticket 23846.
  1195. o Minor features (code correctness, testing):
  1196. - Tor's build process now includes a "check-includes" make target to
  1197. verify that no module of Tor relies on any headers from a higher-
  1198. level module. We hope to use this feature over time to help
  1199. refactor our codebase. Closes ticket 26447.
  1200. o Minor features (code layout):
  1201. - We have a new "lowest-level" error-handling API for use by code
  1202. invoked from within the logging module. With this interface, the
  1203. logging code is no longer at risk of calling into itself if a
  1204. failure occurs while it is trying to log something. Closes
  1205. ticket 26427.
  1206. o Minor features (compilation):
  1207. - Tor's configure script now supports a --with-malloc= option to
  1208. select your malloc implementation. Supported options are
  1209. "tcmalloc", "jemalloc", "openbsd" (deprecated), and "system" (the
  1210. default). Addresses part of ticket 20424. Based on a patch from
  1211. Alex Xu.