Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

umd-tough-cookie.js 264KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091
  1. cordova.define("cordova-plugin-advanced-http.tough-cookie", function(require, exports, module) {
  2. (function webpackUniversalModuleDefinition(root, factory) {
  3. if(typeof exports === 'object' && typeof module === 'object')
  4. module.exports = factory();
  5. else if(typeof define === 'function' && define.amd)
  6. define([], factory);
  7. else if(typeof exports === 'object')
  8. exports["ToughCookie"] = factory();
  9. else
  10. root["ToughCookie"] = factory();
  11. })(this, function() {
  12. return /******/ (function(modules) { // webpackBootstrap
  13. /******/ // The module cache
  14. /******/ var installedModules = {};
  15. /******/ // The require function
  16. /******/ function __webpack_require__(moduleId) {
  17. /******/ // Check if module is in cache
  18. /******/ if(installedModules[moduleId])
  19. /******/ return installedModules[moduleId].exports;
  20. /******/ // Create a new module (and put it into the cache)
  21. /******/ var module = installedModules[moduleId] = {
  22. /******/ exports: {},
  23. /******/ id: moduleId,
  24. /******/ loaded: false
  25. /******/ };
  26. /******/ // Execute the module function
  27. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  28. /******/ // Flag the module as loaded
  29. /******/ module.loaded = true;
  30. /******/ // Return the exports of the module
  31. /******/ return module.exports;
  32. /******/ }
  33. /******/ // expose the modules object (__webpack_modules__)
  34. /******/ __webpack_require__.m = modules;
  35. /******/ // expose the module cache
  36. /******/ __webpack_require__.c = installedModules;
  37. /******/ // __webpack_public_path__
  38. /******/ __webpack_require__.p = "";
  39. /******/ // Load entry module and return exports
  40. /******/ return __webpack_require__(0);
  41. /******/ })
  42. /************************************************************************/
  43. /******/ ([
  44. /* 0 */
  45. /***/ (function(module, exports, __webpack_require__) {
  46. /*!
  47. * Copyright (c) 2015, Salesforce.com, Inc.
  48. * All rights reserved.
  49. *
  50. * Redistribution and use in source and binary forms, with or without
  51. * modification, are permitted provided that the following conditions are met:
  52. *
  53. * 1. Redistributions of source code must retain the above copyright notice,
  54. * this list of conditions and the following disclaimer.
  55. *
  56. * 2. Redistributions in binary form must reproduce the above copyright notice,
  57. * this list of conditions and the following disclaimer in the documentation
  58. * and/or other materials provided with the distribution.
  59. *
  60. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  61. * be used to endorse or promote products derived from this software without
  62. * specific prior written permission.
  63. *
  64. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  65. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  66. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  67. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  68. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  69. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  70. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  71. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  72. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  73. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  74. * POSSIBILITY OF SUCH DAMAGE.
  75. */
  76. 'use strict';
  77. var net = __webpack_require__(1);
  78. var urlParse = __webpack_require__(2).parse;
  79. var util = __webpack_require__(9);
  80. var pubsuffix = __webpack_require__(13);
  81. var Store = __webpack_require__(17).Store;
  82. var MemoryCookieStore = __webpack_require__(18).MemoryCookieStore;
  83. var pathMatch = __webpack_require__(20).pathMatch;
  84. var VERSION = __webpack_require__(21).version;
  85. var punycode;
  86. try {
  87. punycode = __webpack_require__(15);
  88. } catch(e) {
  89. console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization");
  90. }
  91. // From RFC6265 S4.1.1
  92. // note that it excludes \x3B ";"
  93. var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
  94. var CONTROL_CHARS = /[\x00-\x1F]/;
  95. // From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
  96. // the "relaxed" mode, see:
  97. // https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
  98. var TERMINATORS = ['\n', '\r', '\0'];
  99. // RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
  100. // Note ';' is \x3B
  101. var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
  102. // date-time parsing constants (RFC6265 S5.1.1)
  103. var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
  104. var MONTH_TO_NUM = {
  105. jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
  106. jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
  107. };
  108. var NUM_TO_MONTH = [
  109. 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
  110. ];
  111. var NUM_TO_DAY = [
  112. 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
  113. ];
  114. var MAX_TIME = 2147483647000; // 31-bit max
  115. var MIN_TIME = 0; // 31-bit min
  116. /*
  117. * Parses a Natural number (i.e., non-negative integer) with either the
  118. * <min>*<max>DIGIT ( non-digit *OCTET )
  119. * or
  120. * <min>*<max>DIGIT
  121. * grammar (RFC6265 S5.1.1).
  122. *
  123. * The "trailingOK" boolean controls if the grammar accepts a
  124. * "( non-digit *OCTET )" trailer.
  125. */
  126. function parseDigits(token, minDigits, maxDigits, trailingOK) {
  127. var count = 0;
  128. while (count < token.length) {
  129. var c = token.charCodeAt(count);
  130. // "non-digit = %x00-2F / %x3A-FF"
  131. if (c <= 0x2F || c >= 0x3A) {
  132. break;
  133. }
  134. count++;
  135. }
  136. // constrain to a minimum and maximum number of digits.
  137. if (count < minDigits || count > maxDigits) {
  138. return null;
  139. }
  140. if (!trailingOK && count != token.length) {
  141. return null;
  142. }
  143. return parseInt(token.substr(0,count), 10);
  144. }
  145. function parseTime(token) {
  146. var parts = token.split(':');
  147. var result = [0,0,0];
  148. /* RF6256 S5.1.1:
  149. * time = hms-time ( non-digit *OCTET )
  150. * hms-time = time-field ":" time-field ":" time-field
  151. * time-field = 1*2DIGIT
  152. */
  153. if (parts.length !== 3) {
  154. return null;
  155. }
  156. for (var i = 0; i < 3; i++) {
  157. // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
  158. // followed by "( non-digit *OCTET )" so therefore the last time-field can
  159. // have a trailer
  160. var trailingOK = (i == 2);
  161. var num = parseDigits(parts[i], 1, 2, trailingOK);
  162. if (num === null) {
  163. return null;
  164. }
  165. result[i] = num;
  166. }
  167. return result;
  168. }
  169. function parseMonth(token) {
  170. token = String(token).substr(0,3).toLowerCase();
  171. var num = MONTH_TO_NUM[token];
  172. return num >= 0 ? num : null;
  173. }
  174. /*
  175. * RFC6265 S5.1.1 date parser (see RFC for full grammar)
  176. */
  177. function parseDate(str) {
  178. if (!str) {
  179. return;
  180. }
  181. /* RFC6265 S5.1.1:
  182. * 2. Process each date-token sequentially in the order the date-tokens
  183. * appear in the cookie-date
  184. */
  185. var tokens = str.split(DATE_DELIM);
  186. if (!tokens) {
  187. return;
  188. }
  189. var hour = null;
  190. var minute = null;
  191. var second = null;
  192. var dayOfMonth = null;
  193. var month = null;
  194. var year = null;
  195. for (var i=0; i<tokens.length; i++) {
  196. var token = tokens[i].trim();
  197. if (!token.length) {
  198. continue;
  199. }
  200. var result;
  201. /* 2.1. If the found-time flag is not set and the token matches the time
  202. * production, set the found-time flag and set the hour- value,
  203. * minute-value, and second-value to the numbers denoted by the digits in
  204. * the date-token, respectively. Skip the remaining sub-steps and continue
  205. * to the next date-token.
  206. */
  207. if (second === null) {
  208. result = parseTime(token);
  209. if (result) {
  210. hour = result[0];
  211. minute = result[1];
  212. second = result[2];
  213. continue;
  214. }
  215. }
  216. /* 2.2. If the found-day-of-month flag is not set and the date-token matches
  217. * the day-of-month production, set the found-day-of- month flag and set
  218. * the day-of-month-value to the number denoted by the date-token. Skip
  219. * the remaining sub-steps and continue to the next date-token.
  220. */
  221. if (dayOfMonth === null) {
  222. // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
  223. result = parseDigits(token, 1, 2, true);
  224. if (result !== null) {
  225. dayOfMonth = result;
  226. continue;
  227. }
  228. }
  229. /* 2.3. If the found-month flag is not set and the date-token matches the
  230. * month production, set the found-month flag and set the month-value to
  231. * the month denoted by the date-token. Skip the remaining sub-steps and
  232. * continue to the next date-token.
  233. */
  234. if (month === null) {
  235. result = parseMonth(token);
  236. if (result !== null) {
  237. month = result;
  238. continue;
  239. }
  240. }
  241. /* 2.4. If the found-year flag is not set and the date-token matches the
  242. * year production, set the found-year flag and set the year-value to the
  243. * number denoted by the date-token. Skip the remaining sub-steps and
  244. * continue to the next date-token.
  245. */
  246. if (year === null) {
  247. // "year = 2*4DIGIT ( non-digit *OCTET )"
  248. result = parseDigits(token, 2, 4, true);
  249. if (result !== null) {
  250. year = result;
  251. /* From S5.1.1:
  252. * 3. If the year-value is greater than or equal to 70 and less
  253. * than or equal to 99, increment the year-value by 1900.
  254. * 4. If the year-value is greater than or equal to 0 and less
  255. * than or equal to 69, increment the year-value by 2000.
  256. */
  257. if (year >= 70 && year <= 99) {
  258. year += 1900;
  259. } else if (year >= 0 && year <= 69) {
  260. year += 2000;
  261. }
  262. }
  263. }
  264. }
  265. /* RFC 6265 S5.1.1
  266. * "5. Abort these steps and fail to parse the cookie-date if:
  267. * * at least one of the found-day-of-month, found-month, found-
  268. * year, or found-time flags is not set,
  269. * * the day-of-month-value is less than 1 or greater than 31,
  270. * * the year-value is less than 1601,
  271. * * the hour-value is greater than 23,
  272. * * the minute-value is greater than 59, or
  273. * * the second-value is greater than 59.
  274. * (Note that leap seconds cannot be represented in this syntax.)"
  275. *
  276. * So, in order as above:
  277. */
  278. if (
  279. dayOfMonth === null || month === null || year === null || second === null ||
  280. dayOfMonth < 1 || dayOfMonth > 31 ||
  281. year < 1601 ||
  282. hour > 23 ||
  283. minute > 59 ||
  284. second > 59
  285. ) {
  286. return;
  287. }
  288. return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
  289. }
  290. function formatDate(date) {
  291. var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
  292. var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
  293. var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
  294. var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
  295. return NUM_TO_DAY[date.getUTCDay()] + ', ' +
  296. d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
  297. h+':'+m+':'+s+' GMT';
  298. }
  299. // S5.1.2 Canonicalized Host Names
  300. function canonicalDomain(str) {
  301. if (str == null) {
  302. return null;
  303. }
  304. str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .
  305. // convert to IDN if any non-ASCII characters
  306. if (punycode && /[^\u0001-\u007f]/.test(str)) {
  307. str = punycode.toASCII(str);
  308. }
  309. return str.toLowerCase();
  310. }
  311. // S5.1.3 Domain Matching
  312. function domainMatch(str, domStr, canonicalize) {
  313. if (str == null || domStr == null) {
  314. return null;
  315. }
  316. if (canonicalize !== false) {
  317. str = canonicalDomain(str);
  318. domStr = canonicalDomain(domStr);
  319. }
  320. /*
  321. * "The domain string and the string are identical. (Note that both the
  322. * domain string and the string will have been canonicalized to lower case at
  323. * this point)"
  324. */
  325. if (str == domStr) {
  326. return true;
  327. }
  328. /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */
  329. /* "* The string is a host name (i.e., not an IP address)." */
  330. if (net.isIP(str)) {
  331. return false;
  332. }
  333. /* "* The domain string is a suffix of the string" */
  334. var idx = str.indexOf(domStr);
  335. if (idx <= 0) {
  336. return false; // it's a non-match (-1) or prefix (0)
  337. }
  338. // e.g "a.b.c".indexOf("b.c") === 2
  339. // 5 === 3+2
  340. if (str.length !== domStr.length + idx) { // it's not a suffix
  341. return false;
  342. }
  343. /* "* The last character of the string that is not included in the domain
  344. * string is a %x2E (".") character." */
  345. if (str.substr(idx-1,1) !== '.') {
  346. return false;
  347. }
  348. return true;
  349. }
  350. // RFC6265 S5.1.4 Paths and Path-Match
  351. /*
  352. * "The user agent MUST use an algorithm equivalent to the following algorithm
  353. * to compute the default-path of a cookie:"
  354. *
  355. * Assumption: the path (and not query part or absolute uri) is passed in.
  356. */
  357. function defaultPath(path) {
  358. // "2. If the uri-path is empty or if the first character of the uri-path is not
  359. // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
  360. if (!path || path.substr(0,1) !== "/") {
  361. return "/";
  362. }
  363. // "3. If the uri-path contains no more than one %x2F ("/") character, output
  364. // %x2F ("/") and skip the remaining step."
  365. if (path === "/") {
  366. return path;
  367. }
  368. var rightSlash = path.lastIndexOf("/");
  369. if (rightSlash === 0) {
  370. return "/";
  371. }
  372. // "4. Output the characters of the uri-path from the first character up to,
  373. // but not including, the right-most %x2F ("/")."
  374. return path.slice(0, rightSlash);
  375. }
  376. function trimTerminator(str) {
  377. for (var t = 0; t < TERMINATORS.length; t++) {
  378. var terminatorIdx = str.indexOf(TERMINATORS[t]);
  379. if (terminatorIdx !== -1) {
  380. str = str.substr(0,terminatorIdx);
  381. }
  382. }
  383. return str;
  384. }
  385. function parseCookiePair(cookiePair, looseMode) {
  386. cookiePair = trimTerminator(cookiePair);
  387. var firstEq = cookiePair.indexOf('=');
  388. if (looseMode) {
  389. if (firstEq === 0) { // '=' is immediately at start
  390. cookiePair = cookiePair.substr(1);
  391. firstEq = cookiePair.indexOf('='); // might still need to split on '='
  392. }
  393. } else { // non-loose mode
  394. if (firstEq <= 0) { // no '=' or is at start
  395. return; // needs to have non-empty "cookie-name"
  396. }
  397. }
  398. var cookieName, cookieValue;
  399. if (firstEq <= 0) {
  400. cookieName = "";
  401. cookieValue = cookiePair.trim();
  402. } else {
  403. cookieName = cookiePair.substr(0, firstEq).trim();
  404. cookieValue = cookiePair.substr(firstEq+1).trim();
  405. }
  406. if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
  407. return;
  408. }
  409. var c = new Cookie();
  410. c.key = cookieName;
  411. c.value = cookieValue;
  412. return c;
  413. }
  414. function parse(str, options) {
  415. if (!options || typeof options !== 'object') {
  416. options = {};
  417. }
  418. str = str.trim();
  419. // We use a regex to parse the "name-value-pair" part of S5.2
  420. var firstSemi = str.indexOf(';'); // S5.2 step 1
  421. var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);
  422. var c = parseCookiePair(cookiePair, !!options.loose);
  423. if (!c) {
  424. return;
  425. }
  426. if (firstSemi === -1) {
  427. return c;
  428. }
  429. // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
  430. // (including the %x3B (";") in question)." plus later on in the same section
  431. // "discard the first ";" and trim".
  432. var unparsed = str.slice(firstSemi + 1).trim();
  433. // "If the unparsed-attributes string is empty, skip the rest of these
  434. // steps."
  435. if (unparsed.length === 0) {
  436. return c;
  437. }
  438. /*
  439. * S5.2 says that when looping over the items "[p]rocess the attribute-name
  440. * and attribute-value according to the requirements in the following
  441. * subsections" for every item. Plus, for many of the individual attributes
  442. * in S5.3 it says to use the "attribute-value of the last attribute in the
  443. * cookie-attribute-list". Therefore, in this implementation, we overwrite
  444. * the previous value.
  445. */
  446. var cookie_avs = unparsed.split(';');
  447. while (cookie_avs.length) {
  448. var av = cookie_avs.shift().trim();
  449. if (av.length === 0) { // happens if ";;" appears
  450. continue;
  451. }
  452. var av_sep = av.indexOf('=');
  453. var av_key, av_value;
  454. if (av_sep === -1) {
  455. av_key = av;
  456. av_value = null;
  457. } else {
  458. av_key = av.substr(0,av_sep);
  459. av_value = av.substr(av_sep+1);
  460. }
  461. av_key = av_key.trim().toLowerCase();
  462. if (av_value) {
  463. av_value = av_value.trim();
  464. }
  465. switch(av_key) {
  466. case 'expires': // S5.2.1
  467. if (av_value) {
  468. var exp = parseDate(av_value);
  469. // "If the attribute-value failed to parse as a cookie date, ignore the
  470. // cookie-av."
  471. if (exp) {
  472. // over and underflow not realistically a concern: V8's getTime() seems to
  473. // store something larger than a 32-bit time_t (even with 32-bit node)
  474. c.expires = exp;
  475. }
  476. }
  477. break;
  478. case 'max-age': // S5.2.2
  479. if (av_value) {
  480. // "If the first character of the attribute-value is not a DIGIT or a "-"
  481. // character ...[or]... If the remainder of attribute-value contains a
  482. // non-DIGIT character, ignore the cookie-av."
  483. if (/^-?[0-9]+$/.test(av_value)) {
  484. var delta = parseInt(av_value, 10);
  485. // "If delta-seconds is less than or equal to zero (0), let expiry-time
  486. // be the earliest representable date and time."
  487. c.setMaxAge(delta);
  488. }
  489. }
  490. break;
  491. case 'domain': // S5.2.3
  492. // "If the attribute-value is empty, the behavior is undefined. However,
  493. // the user agent SHOULD ignore the cookie-av entirely."
  494. if (av_value) {
  495. // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
  496. // (".") character."
  497. var domain = av_value.trim().replace(/^\./, '');
  498. if (domain) {
  499. // "Convert the cookie-domain to lower case."
  500. c.domain = domain.toLowerCase();
  501. }
  502. }
  503. break;
  504. case 'path': // S5.2.4
  505. /*
  506. * "If the attribute-value is empty or if the first character of the
  507. * attribute-value is not %x2F ("/"):
  508. * Let cookie-path be the default-path.
  509. * Otherwise:
  510. * Let cookie-path be the attribute-value."
  511. *
  512. * We'll represent the default-path as null since it depends on the
  513. * context of the parsing.
  514. */
  515. c.path = av_value && av_value[0] === "/" ? av_value : null;
  516. break;
  517. case 'secure': // S5.2.5
  518. /*
  519. * "If the attribute-name case-insensitively matches the string "Secure",
  520. * the user agent MUST append an attribute to the cookie-attribute-list
  521. * with an attribute-name of Secure and an empty attribute-value."
  522. */
  523. c.secure = true;
  524. break;
  525. case 'httponly': // S5.2.6 -- effectively the same as 'secure'
  526. c.httpOnly = true;
  527. break;
  528. default:
  529. c.extensions = c.extensions || [];
  530. c.extensions.push(av);
  531. break;
  532. }
  533. }
  534. return c;
  535. }
  536. // avoid the V8 deoptimization monster!
  537. function jsonParse(str) {
  538. var obj;
  539. try {
  540. obj = JSON.parse(str);
  541. } catch (e) {
  542. return e;
  543. }
  544. return obj;
  545. }
  546. function fromJSON(str) {
  547. if (!str) {
  548. return null;
  549. }
  550. var obj;
  551. if (typeof str === 'string') {
  552. obj = jsonParse(str);
  553. if (obj instanceof Error) {
  554. return null;
  555. }
  556. } else {
  557. // assume it's an Object
  558. obj = str;
  559. }
  560. var c = new Cookie();
  561. for (var i=0; i<Cookie.serializableProperties.length; i++) {
  562. var prop = Cookie.serializableProperties[i];
  563. if (obj[prop] === undefined ||
  564. obj[prop] === Cookie.prototype[prop])
  565. {
  566. continue; // leave as prototype default
  567. }
  568. if (prop === 'expires' ||
  569. prop === 'creation' ||
  570. prop === 'lastAccessed')
  571. {
  572. if (obj[prop] === null) {
  573. c[prop] = null;
  574. } else {
  575. c[prop] = obj[prop] == "Infinity" ?
  576. "Infinity" : new Date(obj[prop]);
  577. }
  578. } else {
  579. c[prop] = obj[prop];
  580. }
  581. }
  582. return c;
  583. }
  584. /* Section 5.4 part 2:
  585. * "* Cookies with longer paths are listed before cookies with
  586. * shorter paths.
  587. *
  588. * * Among cookies that have equal-length path fields, cookies with
  589. * earlier creation-times are listed before cookies with later
  590. * creation-times."
  591. */
  592. function cookieCompare(a,b) {
  593. var cmp = 0;
  594. // descending for length: b CMP a
  595. var aPathLen = a.path ? a.path.length : 0;
  596. var bPathLen = b.path ? b.path.length : 0;
  597. cmp = bPathLen - aPathLen;
  598. if (cmp !== 0) {
  599. return cmp;
  600. }
  601. // ascending for time: a CMP b
  602. var aTime = a.creation ? a.creation.getTime() : MAX_TIME;
  603. var bTime = b.creation ? b.creation.getTime() : MAX_TIME;
  604. cmp = aTime - bTime;
  605. if (cmp !== 0) {
  606. return cmp;
  607. }
  608. // break ties for the same millisecond (precision of JavaScript's clock)
  609. cmp = a.creationIndex - b.creationIndex;
  610. return cmp;
  611. }
  612. // Gives the permutation of all possible pathMatch()es of a given path. The
  613. // array is in longest-to-shortest order. Handy for indexing.
  614. function permutePath(path) {
  615. if (path === '/') {
  616. return ['/'];
  617. }
  618. if (path.lastIndexOf('/') === path.length-1) {
  619. path = path.substr(0,path.length-1);
  620. }
  621. var permutations = [path];
  622. while (path.length > 1) {
  623. var lindex = path.lastIndexOf('/');
  624. if (lindex === 0) {
  625. break;
  626. }
  627. path = path.substr(0,lindex);
  628. permutations.push(path);
  629. }
  630. permutations.push('/');
  631. return permutations;
  632. }
  633. function getCookieContext(url) {
  634. if (url instanceof Object) {
  635. return url;
  636. }
  637. // NOTE: decodeURI will throw on malformed URIs (see GH-32).
  638. // Therefore, we will just skip decoding for such URIs.
  639. try {
  640. url = decodeURI(url);
  641. }
  642. catch(err) {
  643. // Silently swallow error
  644. }
  645. return urlParse(url);
  646. }
  647. function Cookie(options) {
  648. options = options || {};
  649. Object.keys(options).forEach(function(prop) {
  650. if (Cookie.prototype.hasOwnProperty(prop) &&
  651. Cookie.prototype[prop] !== options[prop] &&
  652. prop.substr(0,1) !== '_')
  653. {
  654. this[prop] = options[prop];
  655. }
  656. }, this);
  657. this.creation = this.creation || new Date();
  658. // used to break creation ties in cookieCompare():
  659. Object.defineProperty(this, 'creationIndex', {
  660. configurable: false,
  661. enumerable: false, // important for assert.deepEqual checks
  662. writable: true,
  663. value: ++Cookie.cookiesCreated
  664. });
  665. }
  666. Cookie.cookiesCreated = 0; // incremented each time a cookie is created
  667. Cookie.parse = parse;
  668. Cookie.fromJSON = fromJSON;
  669. Cookie.prototype.key = "";
  670. Cookie.prototype.value = "";
  671. // the order in which the RFC has them:
  672. Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
  673. Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
  674. Cookie.prototype.domain = null;
  675. Cookie.prototype.path = null;
  676. Cookie.prototype.secure = false;
  677. Cookie.prototype.httpOnly = false;
  678. Cookie.prototype.extensions = null;
  679. // set by the CookieJar:
  680. Cookie.prototype.hostOnly = null; // boolean when set
  681. Cookie.prototype.pathIsDefault = null; // boolean when set
  682. Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
  683. Cookie.prototype.lastAccessed = null; // Date when set
  684. Object.defineProperty(Cookie.prototype, 'creationIndex', {
  685. configurable: true,
  686. enumerable: false,
  687. writable: true,
  688. value: 0
  689. });
  690. Cookie.serializableProperties = Object.keys(Cookie.prototype)
  691. .filter(function(prop) {
  692. return !(
  693. Cookie.prototype[prop] instanceof Function ||
  694. prop === 'creationIndex' ||
  695. prop.substr(0,1) === '_'
  696. );
  697. });
  698. Cookie.prototype.inspect = function inspect() {
  699. var now = Date.now();
  700. return 'Cookie="'+this.toString() +
  701. '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
  702. '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
  703. '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
  704. '"';
  705. };
  706. // Use the new custom inspection symbol to add the custom inspect function if
  707. // available.
  708. if (util.inspect.custom) {
  709. Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;
  710. }
  711. Cookie.prototype.toJSON = function() {
  712. var obj = {};
  713. var props = Cookie.serializableProperties;
  714. for (var i=0; i<props.length; i++) {
  715. var prop = props[i];
  716. if (this[prop] === Cookie.prototype[prop]) {
  717. continue; // leave as prototype default
  718. }
  719. if (prop === 'expires' ||
  720. prop === 'creation' ||
  721. prop === 'lastAccessed')
  722. {
  723. if (this[prop] === null) {
  724. obj[prop] = null;
  725. } else {
  726. obj[prop] = this[prop] == "Infinity" ? // intentionally not ===
  727. "Infinity" : this[prop].toISOString();
  728. }
  729. } else if (prop === 'maxAge') {
  730. if (this[prop] !== null) {
  731. // again, intentionally not ===
  732. obj[prop] = (this[prop] == Infinity || this[prop] == -Infinity) ?
  733. this[prop].toString() : this[prop];
  734. }
  735. } else {
  736. if (this[prop] !== Cookie.prototype[prop]) {
  737. obj[prop] = this[prop];
  738. }
  739. }
  740. }
  741. return obj;
  742. };
  743. Cookie.prototype.clone = function() {
  744. return fromJSON(this.toJSON());
  745. };
  746. Cookie.prototype.validate = function validate() {
  747. if (!COOKIE_OCTETS.test(this.value)) {
  748. return false;
  749. }
  750. if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires)) {
  751. return false;
  752. }
  753. if (this.maxAge != null && this.maxAge <= 0) {
  754. return false; // "Max-Age=" non-zero-digit *DIGIT
  755. }
  756. if (this.path != null && !PATH_VALUE.test(this.path)) {
  757. return false;
  758. }
  759. var cdomain = this.cdomain();
  760. if (cdomain) {
  761. if (cdomain.match(/\.$/)) {
  762. return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
  763. }
  764. var suffix = pubsuffix.getPublicSuffix(cdomain);
  765. if (suffix == null) { // it's a public suffix
  766. return false;
  767. }
  768. }
  769. return true;
  770. };
  771. Cookie.prototype.setExpires = function setExpires(exp) {
  772. if (exp instanceof Date) {
  773. this.expires = exp;
  774. } else {
  775. this.expires = parseDate(exp) || "Infinity";
  776. }
  777. };
  778. Cookie.prototype.setMaxAge = function setMaxAge(age) {
  779. if (age === Infinity || age === -Infinity) {
  780. this.maxAge = age.toString(); // so JSON.stringify() works
  781. } else {
  782. this.maxAge = age;
  783. }
  784. };
  785. // gives Cookie header format
  786. Cookie.prototype.cookieString = function cookieString() {
  787. var val = this.value;
  788. if (val == null) {
  789. val = '';
  790. }
  791. if (this.key === '') {
  792. return val;
  793. }
  794. return this.key+'='+val;
  795. };
  796. // gives Set-Cookie header format
  797. Cookie.prototype.toString = function toString() {
  798. var str = this.cookieString();
  799. if (this.expires != Infinity) {
  800. if (this.expires instanceof Date) {
  801. str += '; Expires='+formatDate(this.expires);
  802. } else {
  803. str += '; Expires='+this.expires;
  804. }
  805. }
  806. if (this.maxAge != null && this.maxAge != Infinity) {
  807. str += '; Max-Age='+this.maxAge;
  808. }
  809. if (this.domain && !this.hostOnly) {
  810. str += '; Domain='+this.domain;
  811. }
  812. if (this.path) {
  813. str += '; Path='+this.path;
  814. }
  815. if (this.secure) {
  816. str += '; Secure';
  817. }
  818. if (this.httpOnly) {
  819. str += '; HttpOnly';
  820. }
  821. if (this.extensions) {
  822. this.extensions.forEach(function(ext) {
  823. str += '; '+ext;
  824. });
  825. }
  826. return str;
  827. };
  828. // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  829. // elsewhere)
  830. // S5.3 says to give the "latest representable date" for which we use Infinity
  831. // For "expired" we use 0
  832. Cookie.prototype.TTL = function TTL(now) {
  833. /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
  834. * attribute, the Max-Age attribute has precedence and controls the
  835. * expiration date of the cookie.
  836. * (Concurs with S5.3 step 3)
  837. */
  838. if (this.maxAge != null) {
  839. return this.maxAge<=0 ? 0 : this.maxAge*1000;
  840. }
  841. var expires = this.expires;
  842. if (expires != Infinity) {
  843. if (!(expires instanceof Date)) {
  844. expires = parseDate(expires) || Infinity;
  845. }
  846. if (expires == Infinity) {
  847. return Infinity;
  848. }
  849. return expires.getTime() - (now || Date.now());
  850. }
  851. return Infinity;
  852. };
  853. // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  854. // elsewhere)
  855. Cookie.prototype.expiryTime = function expiryTime(now) {
  856. if (this.maxAge != null) {
  857. var relativeTo = now || this.creation || new Date();
  858. var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000;
  859. return relativeTo.getTime() + age;
  860. }
  861. if (this.expires == Infinity) {
  862. return Infinity;
  863. }
  864. return this.expires.getTime();
  865. };
  866. // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  867. // elsewhere), except it returns a Date
  868. Cookie.prototype.expiryDate = function expiryDate(now) {
  869. var millisec = this.expiryTime(now);
  870. if (millisec == Infinity) {
  871. return new Date(MAX_TIME);
  872. } else if (millisec == -Infinity) {
  873. return new Date(MIN_TIME);
  874. } else {
  875. return new Date(millisec);
  876. }
  877. };
  878. // This replaces the "persistent-flag" parts of S5.3 step 3
  879. Cookie.prototype.isPersistent = function isPersistent() {
  880. return (this.maxAge != null || this.expires != Infinity);
  881. };
  882. // Mostly S5.1.2 and S5.2.3:
  883. Cookie.prototype.cdomain =
  884. Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {
  885. if (this.domain == null) {
  886. return null;
  887. }
  888. return canonicalDomain(this.domain);
  889. };
  890. function CookieJar(store, options) {
  891. if (typeof options === "boolean") {
  892. options = {rejectPublicSuffixes: options};
  893. } else if (options == null) {
  894. options = {};
  895. }
  896. if (options.rejectPublicSuffixes != null) {
  897. this.rejectPublicSuffixes = options.rejectPublicSuffixes;
  898. }
  899. if (options.looseMode != null) {
  900. this.enableLooseMode = options.looseMode;
  901. }
  902. if (!store) {
  903. store = new MemoryCookieStore();
  904. }
  905. this.store = store;
  906. }
  907. CookieJar.prototype.store = null;
  908. CookieJar.prototype.rejectPublicSuffixes = true;
  909. CookieJar.prototype.enableLooseMode = false;
  910. var CAN_BE_SYNC = [];
  911. CAN_BE_SYNC.push('setCookie');
  912. CookieJar.prototype.setCookie = function(cookie, url, options, cb) {
  913. var err;
  914. var context = getCookieContext(url);
  915. if (options instanceof Function) {
  916. cb = options;
  917. options = {};
  918. }
  919. var host = canonicalDomain(context.hostname);
  920. var loose = this.enableLooseMode;
  921. if (options.loose != null) {
  922. loose = options.loose;
  923. }
  924. // S5.3 step 1
  925. if (!(cookie instanceof Cookie)) {
  926. cookie = Cookie.parse(cookie, { loose: loose });
  927. }
  928. if (!cookie) {
  929. err = new Error("Cookie failed to parse");
  930. return cb(options.ignoreError ? null : err);
  931. }
  932. // S5.3 step 2
  933. var now = options.now || new Date(); // will assign later to save effort in the face of errors
  934. // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
  935. // S5.3 step 4: NOOP; domain is null by default
  936. // S5.3 step 5: public suffixes
  937. if (this.rejectPublicSuffixes && cookie.domain) {
  938. var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
  939. if (suffix == null) { // e.g. "com"
  940. err = new Error("Cookie has domain set to a public suffix");
  941. return cb(options.ignoreError ? null : err);
  942. }
  943. }
  944. // S5.3 step 6:
  945. if (cookie.domain) {
  946. if (!domainMatch(host, cookie.cdomain(), false)) {
  947. err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host);
  948. return cb(options.ignoreError ? null : err);
  949. }
  950. if (cookie.hostOnly == null) { // don't reset if already set
  951. cookie.hostOnly = false;
  952. }
  953. } else {
  954. cookie.hostOnly = true;
  955. cookie.domain = host;
  956. }
  957. //S5.2.4 If the attribute-value is empty or if the first character of the
  958. //attribute-value is not %x2F ("/"):
  959. //Let cookie-path be the default-path.
  960. if (!cookie.path || cookie.path[0] !== '/') {
  961. cookie.path = defaultPath(context.pathname);
  962. cookie.pathIsDefault = true;
  963. }
  964. // S5.3 step 8: NOOP; secure attribute
  965. // S5.3 step 9: NOOP; httpOnly attribute
  966. // S5.3 step 10
  967. if (options.http === false && cookie.httpOnly) {
  968. err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
  969. return cb(options.ignoreError ? null : err);
  970. }
  971. var store = this.store;
  972. if (!store.updateCookie) {
  973. store.updateCookie = function(oldCookie, newCookie, cb) {
  974. this.putCookie(newCookie, cb);
  975. };
  976. }
  977. function withCookie(err, oldCookie) {
  978. if (err) {
  979. return cb(err);
  980. }
  981. var next = function(err) {
  982. if (err) {
  983. return cb(err);
  984. } else {
  985. cb(null, cookie);
  986. }
  987. };
  988. if (oldCookie) {
  989. // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
  990. // domain, and path as the newly created cookie:"
  991. if (options.http === false && oldCookie.httpOnly) { // step 11.2
  992. err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
  993. return cb(options.ignoreError ? null : err);
  994. }
  995. cookie.creation = oldCookie.creation; // step 11.3
  996. cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
  997. cookie.lastAccessed = now;
  998. // Step 11.4 (delete cookie) is implied by just setting the new one:
  999. store.updateCookie(oldCookie, cookie, next); // step 12
  1000. } else {
  1001. cookie.creation = cookie.lastAccessed = now;
  1002. store.putCookie(cookie, next); // step 12
  1003. }
  1004. }
  1005. store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
  1006. };
  1007. // RFC6365 S5.4
  1008. CAN_BE_SYNC.push('getCookies');
  1009. CookieJar.prototype.getCookies = function(url, options, cb) {
  1010. var context = getCookieContext(url);
  1011. if (options instanceof Function) {
  1012. cb = options;
  1013. options = {};
  1014. }
  1015. var host = canonicalDomain(context.hostname);
  1016. var path = context.pathname || '/';
  1017. var secure = options.secure;
  1018. if (secure == null && context.protocol &&
  1019. (context.protocol == 'https:' || context.protocol == 'wss:'))
  1020. {
  1021. secure = true;
  1022. }
  1023. var http = options.http;
  1024. if (http == null) {
  1025. http = true;
  1026. }
  1027. var now = options.now || Date.now();
  1028. var expireCheck = options.expire !== false;
  1029. var allPaths = !!options.allPaths;
  1030. var store = this.store;
  1031. function matchingCookie(c) {
  1032. // "Either:
  1033. // The cookie's host-only-flag is true and the canonicalized
  1034. // request-host is identical to the cookie's domain.
  1035. // Or:
  1036. // The cookie's host-only-flag is false and the canonicalized
  1037. // request-host domain-matches the cookie's domain."
  1038. if (c.hostOnly) {
  1039. if (c.domain != host) {
  1040. return false;
  1041. }
  1042. } else {
  1043. if (!domainMatch(host, c.domain, false)) {
  1044. return false;
  1045. }
  1046. }
  1047. // "The request-uri's path path-matches the cookie's path."
  1048. if (!allPaths && !pathMatch(path, c.path)) {
  1049. return false;
  1050. }
  1051. // "If the cookie's secure-only-flag is true, then the request-uri's
  1052. // scheme must denote a "secure" protocol"
  1053. if (c.secure && !secure) {
  1054. return false;
  1055. }
  1056. // "If the cookie's http-only-flag is true, then exclude the cookie if the
  1057. // cookie-string is being generated for a "non-HTTP" API"
  1058. if (c.httpOnly && !http) {
  1059. return false;
  1060. }
  1061. // deferred from S5.3
  1062. // non-RFC: allow retention of expired cookies by choice
  1063. if (expireCheck && c.expiryTime() <= now) {
  1064. store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored
  1065. return false;
  1066. }
  1067. return true;
  1068. }
  1069. store.findCookies(host, allPaths ? null : path, function(err,cookies) {
  1070. if (err) {
  1071. return cb(err);
  1072. }
  1073. cookies = cookies.filter(matchingCookie);
  1074. // sorting of S5.4 part 2
  1075. if (options.sort !== false) {
  1076. cookies = cookies.sort(cookieCompare);
  1077. }
  1078. // S5.4 part 3
  1079. var now = new Date();
  1080. cookies.forEach(function(c) {
  1081. c.lastAccessed = now;
  1082. });
  1083. // TODO persist lastAccessed
  1084. cb(null,cookies);
  1085. });
  1086. };
  1087. CAN_BE_SYNC.push('getCookieString');
  1088. CookieJar.prototype.getCookieString = function(/*..., cb*/) {
  1089. var args = Array.prototype.slice.call(arguments,0);
  1090. var cb = args.pop();
  1091. var next = function(err,cookies) {
  1092. if (err) {
  1093. cb(err);
  1094. } else {
  1095. cb(null, cookies
  1096. .sort(cookieCompare)
  1097. .map(function(c){
  1098. return c.cookieString();
  1099. })
  1100. .join('; '));
  1101. }
  1102. };
  1103. args.push(next);
  1104. this.getCookies.apply(this,args);
  1105. };
  1106. CAN_BE_SYNC.push('getSetCookieStrings');
  1107. CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) {
  1108. var args = Array.prototype.slice.call(arguments,0);
  1109. var cb = args.pop();
  1110. var next = function(err,cookies) {
  1111. if (err) {
  1112. cb(err);
  1113. } else {
  1114. cb(null, cookies.map(function(c){
  1115. return c.toString();
  1116. }));
  1117. }
  1118. };
  1119. args.push(next);
  1120. this.getCookies.apply(this,args);
  1121. };
  1122. CAN_BE_SYNC.push('serialize');
  1123. CookieJar.prototype.serialize = function(cb) {
  1124. var type = this.store.constructor.name;
  1125. if (type === 'Object') {
  1126. type = null;
  1127. }
  1128. // update README.md "Serialization Format" if you change this, please!
  1129. var serialized = {
  1130. // The version of tough-cookie that serialized this jar. Generally a good
  1131. // practice since future versions can make data import decisions based on
  1132. // known past behavior. When/if this matters, use `semver`.
  1133. version: 'tough-cookie@'+VERSION,
  1134. // add the store type, to make humans happy:
  1135. storeType: type,
  1136. // CookieJar configuration:
  1137. rejectPublicSuffixes: !!this.rejectPublicSuffixes,
  1138. // this gets filled from getAllCookies:
  1139. cookies: []
  1140. };
  1141. if (!(this.store.getAllCookies &&
  1142. typeof this.store.getAllCookies === 'function'))
  1143. {
  1144. return cb(new Error('store does not support getAllCookies and cannot be serialized'));
  1145. }
  1146. this.store.getAllCookies(function(err,cookies) {
  1147. if (err) {
  1148. return cb(err);
  1149. }
  1150. serialized.cookies = cookies.map(function(cookie) {
  1151. // convert to serialized 'raw' cookies
  1152. cookie = (cookie instanceof Cookie) ? cookie.toJSON() : cookie;
  1153. // Remove the index so new ones get assigned during deserialization
  1154. delete cookie.creationIndex;
  1155. return cookie;
  1156. });
  1157. return cb(null, serialized);
  1158. });
  1159. };
  1160. // well-known name that JSON.stringify calls
  1161. CookieJar.prototype.toJSON = function() {
  1162. return this.serializeSync();
  1163. };
  1164. // use the class method CookieJar.deserialize instead of calling this directly
  1165. CAN_BE_SYNC.push('_importCookies');
  1166. CookieJar.prototype._importCookies = function(serialized, cb) {
  1167. var jar = this;
  1168. var cookies = serialized.cookies;
  1169. if (!cookies || !Array.isArray(cookies)) {
  1170. return cb(new Error('serialized jar has no cookies array'));
  1171. }
  1172. cookies = cookies.slice(); // do not modify the original
  1173. function putNext(err) {
  1174. if (err) {
  1175. return cb(err);
  1176. }
  1177. if (!cookies.length) {
  1178. return cb(err, jar);
  1179. }
  1180. var cookie;
  1181. try {
  1182. cookie = fromJSON(cookies.shift());
  1183. } catch (e) {
  1184. return cb(e);
  1185. }
  1186. if (cookie === null) {
  1187. return putNext(null); // skip this cookie
  1188. }
  1189. jar.store.putCookie(cookie, putNext);
  1190. }
  1191. putNext();
  1192. };
  1193. CookieJar.deserialize = function(strOrObj, store, cb) {
  1194. if (arguments.length !== 3) {
  1195. // store is optional
  1196. cb = store;
  1197. store = null;
  1198. }
  1199. var serialized;
  1200. if (typeof strOrObj === 'string') {
  1201. serialized = jsonParse(strOrObj);
  1202. if (serialized instanceof Error) {
  1203. return cb(serialized);
  1204. }
  1205. } else {
  1206. serialized = strOrObj;
  1207. }
  1208. var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
  1209. jar._importCookies(serialized, function(err) {
  1210. if (err) {
  1211. return cb(err);
  1212. }
  1213. cb(null, jar);
  1214. });
  1215. };
  1216. CookieJar.deserializeSync = function(strOrObj, store) {
  1217. var serialized = typeof strOrObj === 'string' ?
  1218. JSON.parse(strOrObj) : strOrObj;
  1219. var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
  1220. // catch this mistake early:
  1221. if (!jar.store.synchronous) {
  1222. throw new Error('CookieJar store is not synchronous; use async API instead.');
  1223. }
  1224. jar._importCookiesSync(serialized);
  1225. return jar;
  1226. };
  1227. CookieJar.fromJSON = CookieJar.deserializeSync;
  1228. CAN_BE_SYNC.push('clone');
  1229. CookieJar.prototype.clone = function(newStore, cb) {
  1230. if (arguments.length === 1) {
  1231. cb = newStore;
  1232. newStore = null;
  1233. }
  1234. this.serialize(function(err,serialized) {
  1235. if (err) {
  1236. return cb(err);
  1237. }
  1238. CookieJar.deserialize(newStore, serialized, cb);
  1239. });
  1240. };
  1241. // Use a closure to provide a true imperative API for synchronous stores.
  1242. function syncWrap(method) {
  1243. return function() {
  1244. if (!this.store.synchronous) {
  1245. throw new Error('CookieJar store is not synchronous; use async API instead.');
  1246. }
  1247. var args = Array.prototype.slice.call(arguments);
  1248. var syncErr, syncResult;
  1249. args.push(function syncCb(err, result) {
  1250. syncErr = err;
  1251. syncResult = result;
  1252. });
  1253. this[method].apply(this, args);
  1254. if (syncErr) {
  1255. throw syncErr;
  1256. }
  1257. return syncResult;
  1258. };
  1259. }
  1260. // wrap all declared CAN_BE_SYNC methods in the sync wrapper
  1261. CAN_BE_SYNC.forEach(function(method) {
  1262. CookieJar.prototype[method+'Sync'] = syncWrap(method);
  1263. });
  1264. exports.CookieJar = CookieJar;
  1265. exports.Cookie = Cookie;
  1266. exports.Store = Store;
  1267. exports.MemoryCookieStore = MemoryCookieStore;
  1268. exports.parseDate = parseDate;
  1269. exports.formatDate = formatDate;
  1270. exports.parse = parse;
  1271. exports.fromJSON = fromJSON;
  1272. exports.domainMatch = domainMatch;
  1273. exports.defaultPath = defaultPath;
  1274. exports.pathMatch = pathMatch;
  1275. exports.getPublicSuffix = pubsuffix.getPublicSuffix;
  1276. exports.cookieCompare = cookieCompare;
  1277. exports.permuteDomain = __webpack_require__(19).permuteDomain;
  1278. exports.permutePath = permutePath;
  1279. exports.canonicalDomain = canonicalDomain;
  1280. /***/ }),
  1281. /* 1 */
  1282. /***/ (function(module, exports) {
  1283. /*
  1284. * Tests if a given ip or host string is a valid IPv4 or IPv6 address.
  1285. * Regex found at: https://stackoverflow.com/questions/9208814/validate-ipv4-ipv6-and-hostname
  1286. */
  1287. var patternIPv4 = /^\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\s*$/g;
  1288. var patternIPv6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/g;
  1289. function isIPv4(hostOrIp) {
  1290. return hostOrIp.match(patternIPv4) ? true : false;
  1291. }
  1292. function isIPv6(hostOrIp) {
  1293. return hostOrIp.match(patternIPv6) ? true : false;
  1294. }
  1295. function isIP(hostOrIp) {
  1296. if (isIPv4(hostOrIp)) {
  1297. return 4;
  1298. }
  1299. if (isIPv6(hostOrIp)) {
  1300. return 6;
  1301. }
  1302. return 0;
  1303. }
  1304. module.exports = {
  1305. isIPv4: isIPv4,
  1306. isIPv6: isIPv6,
  1307. isIP: isIP
  1308. };
  1309. /***/ }),
  1310. /* 2 */
  1311. /***/ (function(module, exports, __webpack_require__) {
  1312. // Copyright Joyent, Inc. and other Node contributors.
  1313. //
  1314. // Permission is hereby granted, free of charge, to any person obtaining a
  1315. // copy of this software and associated documentation files (the
  1316. // "Software"), to deal in the Software without restriction, including
  1317. // without limitation the rights to use, copy, modify, merge, publish,
  1318. // distribute, sublicense, and/or sell copies of the Software, and to permit
  1319. // persons to whom the Software is furnished to do so, subject to the
  1320. // following conditions:
  1321. //
  1322. // The above copyright notice and this permission notice shall be included
  1323. // in all copies or substantial portions of the Software.
  1324. //
  1325. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  1326. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  1327. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  1328. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  1329. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  1330. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  1331. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  1332. 'use strict';
  1333. var punycode = __webpack_require__(3);
  1334. var util = __webpack_require__(5);
  1335. exports.parse = urlParse;
  1336. exports.resolve = urlResolve;
  1337. exports.resolveObject = urlResolveObject;
  1338. exports.format = urlFormat;
  1339. exports.Url = Url;
  1340. function Url() {
  1341. this.protocol = null;
  1342. this.slashes = null;
  1343. this.auth = null;
  1344. this.host = null;
  1345. this.port = null;
  1346. this.hostname = null;
  1347. this.hash = null;
  1348. this.search = null;
  1349. this.query = null;
  1350. this.pathname = null;
  1351. this.path = null;
  1352. this.href = null;
  1353. }
  1354. // Reference: RFC 3986, RFC 1808, RFC 2396
  1355. // define these here so at least they only have to be
  1356. // compiled once on the first module load.
  1357. var protocolPattern = /^([a-z0-9.+-]+:)/i,
  1358. portPattern = /:[0-9]*$/,
  1359. // Special case for a simple path URL
  1360. simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
  1361. // RFC 2396: characters reserved for delimiting URLs.
  1362. // We actually just auto-escape these.
  1363. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
  1364. // RFC 2396: characters not allowed for various reasons.
  1365. unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
  1366. // Allowed by RFCs, but cause of XSS attacks. Always escape these.
  1367. autoEscape = ['\''].concat(unwise),
  1368. // Characters that are never ever allowed in a hostname.
  1369. // Note that any invalid chars are also handled, but these
  1370. // are the ones that are *expected* to be seen, so we fast-path
  1371. // them.
  1372. nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
  1373. hostEndingChars = ['/', '?', '#'],
  1374. hostnameMaxLen = 255,
  1375. hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
  1376. hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
  1377. // protocols that can allow "unsafe" and "unwise" chars.
  1378. unsafeProtocol = {
  1379. 'javascript': true,
  1380. 'javascript:': true
  1381. },
  1382. // protocols that never have a hostname.
  1383. hostlessProtocol = {
  1384. 'javascript': true,
  1385. 'javascript:': true
  1386. },
  1387. // protocols that always contain a // bit.
  1388. slashedProtocol = {
  1389. 'http': true,
  1390. 'https': true,
  1391. 'ftp': true,
  1392. 'gopher': true,
  1393. 'file': true,
  1394. 'http:': true,
  1395. 'https:': true,
  1396. 'ftp:': true,
  1397. 'gopher:': true,
  1398. 'file:': true
  1399. },
  1400. querystring = __webpack_require__(6);
  1401. function urlParse(url, parseQueryString, slashesDenoteHost) {
  1402. if (url && util.isObject(url) && url instanceof Url) return url;
  1403. var u = new Url;
  1404. u.parse(url, parseQueryString, slashesDenoteHost);
  1405. return u;
  1406. }
  1407. Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
  1408. if (!util.isString(url)) {
  1409. throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
  1410. }
  1411. // Copy chrome, IE, opera backslash-handling behavior.
  1412. // Back slashes before the query string get converted to forward slashes
  1413. // See: https://code.google.com/p/chromium/issues/detail?id=25916
  1414. var queryIndex = url.indexOf('?'),
  1415. splitter =
  1416. (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
  1417. uSplit = url.split(splitter),
  1418. slashRegex = /\\/g;
  1419. uSplit[0] = uSplit[0].replace(slashRegex, '/');
  1420. url = uSplit.join(splitter);
  1421. var rest = url;
  1422. // trim before proceeding.
  1423. // This is to support parse stuff like " http://foo.com \n"
  1424. rest = rest.trim();
  1425. if (!slashesDenoteHost && url.split('#').length === 1) {
  1426. // Try fast path regexp
  1427. var simplePath = simplePathPattern.exec(rest);
  1428. if (simplePath) {
  1429. this.path = rest;
  1430. this.href = rest;
  1431. this.pathname = simplePath[1];
  1432. if (simplePath[2]) {
  1433. this.search = simplePath[2];
  1434. if (parseQueryString) {
  1435. this.query = querystring.parse(this.search.substr(1));
  1436. } else {
  1437. this.query = this.search.substr(1);
  1438. }
  1439. } else if (parseQueryString) {
  1440. this.search = '';
  1441. this.query = {};
  1442. }
  1443. return this;
  1444. }
  1445. }
  1446. var proto = protocolPattern.exec(rest);
  1447. if (proto) {
  1448. proto = proto[0];
  1449. var lowerProto = proto.toLowerCase();
  1450. this.protocol = lowerProto;
  1451. rest = rest.substr(proto.length);
  1452. }
  1453. // figure out if it's got a host
  1454. // user@server is *always* interpreted as a hostname, and url
  1455. // resolution will treat //foo/bar as host=foo,path=bar because that's
  1456. // how the browser resolves relative URLs.
  1457. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
  1458. var slashes = rest.substr(0, 2) === '//';
  1459. if (slashes && !(proto && hostlessProtocol[proto])) {
  1460. rest = rest.substr(2);
  1461. this.slashes = true;
  1462. }
  1463. }
  1464. if (!hostlessProtocol[proto] &&
  1465. (slashes || (proto && !slashedProtocol[proto]))) {
  1466. // there's a hostname.
  1467. // the first instance of /, ?, ;, or # ends the host.
  1468. //
  1469. // If there is an @ in the hostname, then non-host chars *are* allowed
  1470. // to the left of the last @ sign, unless some host-ending character
  1471. // comes *before* the @-sign.
  1472. // URLs are obnoxious.
  1473. //
  1474. // ex:
  1475. // http://a@b@c/ => user:a@b host:c
  1476. // http://a@b?@c => user:a host:c path:/?@c
  1477. // v0.12 TODO(isaacs): This is not quite how Chrome does things.
  1478. // Review our test case against browsers more comprehensively.
  1479. // find the first instance of any hostEndingChars
  1480. var hostEnd = -1;
  1481. for (var i = 0; i < hostEndingChars.length; i++) {
  1482. var hec = rest.indexOf(hostEndingChars[i]);
  1483. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  1484. hostEnd = hec;
  1485. }
  1486. // at this point, either we have an explicit point where the
  1487. // auth portion cannot go past, or the last @ char is the decider.
  1488. var auth, atSign;
  1489. if (hostEnd === -1) {
  1490. // atSign can be anywhere.
  1491. atSign = rest.lastIndexOf('@');
  1492. } else {
  1493. // atSign must be in auth portion.
  1494. // http://a@b/c@d => host:b auth:a path:/c@d
  1495. atSign = rest.lastIndexOf('@', hostEnd);
  1496. }
  1497. // Now we have a portion which is definitely the auth.
  1498. // Pull that off.
  1499. if (atSign !== -1) {
  1500. auth = rest.slice(0, atSign);
  1501. rest = rest.slice(atSign + 1);
  1502. this.auth = decodeURIComponent(auth);
  1503. }
  1504. // the host is the remaining to the left of the first non-host char
  1505. hostEnd = -1;
  1506. for (var i = 0; i < nonHostChars.length; i++) {
  1507. var hec = rest.indexOf(nonHostChars[i]);
  1508. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  1509. hostEnd = hec;
  1510. }
  1511. // if we still have not hit it, then the entire thing is a host.
  1512. if (hostEnd === -1)
  1513. hostEnd = rest.length;
  1514. this.host = rest.slice(0, hostEnd);
  1515. rest = rest.slice(hostEnd);
  1516. // pull out port.
  1517. this.parseHost();
  1518. // we've indicated that there is a hostname,
  1519. // so even if it's empty, it has to be present.
  1520. this.hostname = this.hostname || '';
  1521. // if hostname begins with [ and ends with ]
  1522. // assume that it's an IPv6 address.
  1523. var ipv6Hostname = this.hostname[0] === '[' &&
  1524. this.hostname[this.hostname.length - 1] === ']';
  1525. // validate a little.
  1526. if (!ipv6Hostname) {
  1527. var hostparts = this.hostname.split(/\./);
  1528. for (var i = 0, l = hostparts.length; i < l; i++) {
  1529. var part = hostparts[i];
  1530. if (!part) continue;
  1531. if (!part.match(hostnamePartPattern)) {
  1532. var newpart = '';
  1533. for (var j = 0, k = part.length; j < k; j++) {
  1534. if (part.charCodeAt(j) > 127) {
  1535. // we replace non-ASCII char with a temporary placeholder
  1536. // we need this to make sure size of hostname is not
  1537. // broken by replacing non-ASCII by nothing
  1538. newpart += 'x';
  1539. } else {
  1540. newpart += part[j];
  1541. }
  1542. }
  1543. // we test again with ASCII char only
  1544. if (!newpart.match(hostnamePartPattern)) {
  1545. var validParts = hostparts.slice(0, i);
  1546. var notHost = hostparts.slice(i + 1);
  1547. var bit = part.match(hostnamePartStart);
  1548. if (bit) {
  1549. validParts.push(bit[1]);
  1550. notHost.unshift(bit[2]);
  1551. }
  1552. if (notHost.length) {
  1553. rest = '/' + notHost.join('.') + rest;
  1554. }
  1555. this.hostname = validParts.join('.');
  1556. break;
  1557. }
  1558. }
  1559. }
  1560. }
  1561. if (this.hostname.length > hostnameMaxLen) {
  1562. this.hostname = '';
  1563. } else {
  1564. // hostnames are always lower case.
  1565. this.hostname = this.hostname.toLowerCase();
  1566. }
  1567. if (!ipv6Hostname) {
  1568. // IDNA Support: Returns a punycoded representation of "domain".
  1569. // It only converts parts of the domain name that
  1570. // have non-ASCII characters, i.e. it doesn't matter if
  1571. // you call it with a domain that already is ASCII-only.
  1572. this.hostname = punycode.toASCII(this.hostname);
  1573. }
  1574. var p = this.port ? ':' + this.port : '';
  1575. var h = this.hostname || '';
  1576. this.host = h + p;
  1577. this.href += this.host;
  1578. // strip [ and ] from the hostname
  1579. // the host field still retains them, though
  1580. if (ipv6Hostname) {
  1581. this.hostname = this.hostname.substr(1, this.hostname.length - 2);
  1582. if (rest[0] !== '/') {
  1583. rest = '/' + rest;
  1584. }
  1585. }
  1586. }
  1587. // now rest is set to the post-host stuff.
  1588. // chop off any delim chars.
  1589. if (!unsafeProtocol[lowerProto]) {
  1590. // First, make 100% sure that any "autoEscape" chars get
  1591. // escaped, even if encodeURIComponent doesn't think they
  1592. // need to be.
  1593. for (var i = 0, l = autoEscape.length; i < l; i++) {
  1594. var ae = autoEscape[i];
  1595. if (rest.indexOf(ae) === -1)
  1596. continue;
  1597. var esc = encodeURIComponent(ae);
  1598. if (esc === ae) {
  1599. esc = escape(ae);
  1600. }
  1601. rest = rest.split(ae).join(esc);
  1602. }
  1603. }
  1604. // chop off from the tail first.
  1605. var hash = rest.indexOf('#');
  1606. if (hash !== -1) {
  1607. // got a fragment string.
  1608. this.hash = rest.substr(hash);
  1609. rest = rest.slice(0, hash);
  1610. }
  1611. var qm = rest.indexOf('?');
  1612. if (qm !== -1) {
  1613. this.search = rest.substr(qm);
  1614. this.query = rest.substr(qm + 1);
  1615. if (parseQueryString) {
  1616. this.query = querystring.parse(this.query);
  1617. }
  1618. rest = rest.slice(0, qm);
  1619. } else if (parseQueryString) {
  1620. // no query string, but parseQueryString still requested
  1621. this.search = '';
  1622. this.query = {};
  1623. }
  1624. if (rest) this.pathname = rest;
  1625. if (slashedProtocol[lowerProto] &&
  1626. this.hostname && !this.pathname) {
  1627. this.pathname = '/';
  1628. }
  1629. //to support http.request
  1630. if (this.pathname || this.search) {
  1631. var p = this.pathname || '';
  1632. var s = this.search || '';
  1633. this.path = p + s;
  1634. }
  1635. // finally, reconstruct the href based on what has been validated.
  1636. this.href = this.format();
  1637. return this;
  1638. };
  1639. // format a parsed object into a url string
  1640. function urlFormat(obj) {
  1641. // ensure it's an object, and not a string url.
  1642. // If it's an obj, this is a no-op.
  1643. // this way, you can call url_format() on strings
  1644. // to clean up potentially wonky urls.
  1645. if (util.isString(obj)) obj = urlParse(obj);
  1646. if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
  1647. return obj.format();
  1648. }
  1649. Url.prototype.format = function() {
  1650. var auth = this.auth || '';
  1651. if (auth) {
  1652. auth = encodeURIComponent(auth);
  1653. auth = auth.replace(/%3A/i, ':');
  1654. auth += '@';
  1655. }
  1656. var protocol = this.protocol || '',
  1657. pathname = this.pathname || '',
  1658. hash = this.hash || '',
  1659. host = false,
  1660. query = '';
  1661. if (this.host) {
  1662. host = auth + this.host;
  1663. } else if (this.hostname) {
  1664. host = auth + (this.hostname.indexOf(':') === -1 ?
  1665. this.hostname :
  1666. '[' + this.hostname + ']');
  1667. if (this.port) {
  1668. host += ':' + this.port;
  1669. }
  1670. }
  1671. if (this.query &&
  1672. util.isObject(this.query) &&
  1673. Object.keys(this.query).length) {
  1674. query = querystring.stringify(this.query);
  1675. }
  1676. var search = this.search || (query && ('?' + query)) || '';
  1677. if (protocol && protocol.substr(-1) !== ':') protocol += ':';
  1678. // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
  1679. // unless they had them to begin with.
  1680. if (this.slashes ||
  1681. (!protocol || slashedProtocol[protocol]) && host !== false) {
  1682. host = '//' + (host || '');
  1683. if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
  1684. } else if (!host) {
  1685. host = '';
  1686. }
  1687. if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
  1688. if (search && search.charAt(0) !== '?') search = '?' + search;
  1689. pathname = pathname.replace(/[?#]/g, function(match) {
  1690. return encodeURIComponent(match);
  1691. });
  1692. search = search.replace('#', '%23');
  1693. return protocol + host + pathname + search + hash;
  1694. };
  1695. function urlResolve(source, relative) {
  1696. return urlParse(source, false, true).resolve(relative);
  1697. }
  1698. Url.prototype.resolve = function(relative) {
  1699. return this.resolveObject(urlParse(relative, false, true)).format();
  1700. };
  1701. function urlResolveObject(source, relative) {
  1702. if (!source) return relative;
  1703. return urlParse(source, false, true).resolveObject(relative);
  1704. }
  1705. Url.prototype.resolveObject = function(relative) {
  1706. if (util.isString(relative)) {
  1707. var rel = new Url();
  1708. rel.parse(relative, false, true);
  1709. relative = rel;
  1710. }
  1711. var result = new Url();
  1712. var tkeys = Object.keys(this);
  1713. for (var tk = 0; tk < tkeys.length; tk++) {
  1714. var tkey = tkeys[tk];
  1715. result[tkey] = this[tkey];
  1716. }
  1717. // hash is always overridden, no matter what.
  1718. // even href="" will remove it.
  1719. result.hash = relative.hash;
  1720. // if the relative url is empty, then there's nothing left to do here.
  1721. if (relative.href === '') {
  1722. result.href = result.format();
  1723. return result;
  1724. }
  1725. // hrefs like //foo/bar always cut to the protocol.
  1726. if (relative.slashes && !relative.protocol) {
  1727. // take everything except the protocol from relative
  1728. var rkeys = Object.keys(relative);
  1729. for (var rk = 0; rk < rkeys.length; rk++) {
  1730. var rkey = rkeys[rk];
  1731. if (rkey !== 'protocol')
  1732. result[rkey] = relative[rkey];
  1733. }
  1734. //urlParse appends trailing / to urls like http://www.example.com
  1735. if (slashedProtocol[result.protocol] &&
  1736. result.hostname && !result.pathname) {
  1737. result.path = result.pathname = '/';
  1738. }
  1739. result.href = result.format();
  1740. return result;
  1741. }
  1742. if (relative.protocol && relative.protocol !== result.protocol) {
  1743. // if it's a known url protocol, then changing
  1744. // the protocol does weird things
  1745. // first, if it's not file:, then we MUST have a host,
  1746. // and if there was a path
  1747. // to begin with, then we MUST have a path.
  1748. // if it is file:, then the host is dropped,
  1749. // because that's known to be hostless.
  1750. // anything else is assumed to be absolute.
  1751. if (!slashedProtocol[relative.protocol]) {
  1752. var keys = Object.keys(relative);
  1753. for (var v = 0; v < keys.length; v++) {
  1754. var k = keys[v];
  1755. result[k] = relative[k];
  1756. }
  1757. result.href = result.format();
  1758. return result;
  1759. }
  1760. result.protocol = relative.protocol;
  1761. if (!relative.host && !hostlessProtocol[relative.protocol]) {
  1762. var relPath = (relative.pathname || '').split('/');
  1763. while (relPath.length && !(relative.host = relPath.shift()));
  1764. if (!relative.host) relative.host = '';
  1765. if (!relative.hostname) relative.hostname = '';
  1766. if (relPath[0] !== '') relPath.unshift('');
  1767. if (relPath.length < 2) relPath.unshift('');
  1768. result.pathname = relPath.join('/');
  1769. } else {
  1770. result.pathname = relative.pathname;
  1771. }
  1772. result.search = relative.search;
  1773. result.query = relative.query;
  1774. result.host = relative.host || '';
  1775. result.auth = relative.auth;
  1776. result.hostname = relative.hostname || relative.host;
  1777. result.port = relative.port;
  1778. // to support http.request
  1779. if (result.pathname || result.search) {
  1780. var p = result.pathname || '';
  1781. var s = result.search || '';
  1782. result.path = p + s;
  1783. }
  1784. result.slashes = result.slashes || relative.slashes;
  1785. result.href = result.format();
  1786. return result;
  1787. }
  1788. var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
  1789. isRelAbs = (
  1790. relative.host ||
  1791. relative.pathname && relative.pathname.charAt(0) === '/'
  1792. ),
  1793. mustEndAbs = (isRelAbs || isSourceAbs ||
  1794. (result.host && relative.pathname)),
  1795. removeAllDots = mustEndAbs,
  1796. srcPath = result.pathname && result.pathname.split('/') || [],
  1797. relPath = relative.pathname && relative.pathname.split('/') || [],
  1798. psychotic = result.protocol && !slashedProtocol[result.protocol];
  1799. // if the url is a non-slashed url, then relative
  1800. // links like ../.. should be able
  1801. // to crawl up to the hostname, as well. This is strange.
  1802. // result.protocol has already been set by now.
  1803. // Later on, put the first path part into the host field.
  1804. if (psychotic) {
  1805. result.hostname = '';
  1806. result.port = null;
  1807. if (result.host) {
  1808. if (srcPath[0] === '') srcPath[0] = result.host;
  1809. else srcPath.unshift(result.host);
  1810. }
  1811. result.host = '';
  1812. if (relative.protocol) {
  1813. relative.hostname = null;
  1814. relative.port = null;
  1815. if (relative.host) {
  1816. if (relPath[0] === '') relPath[0] = relative.host;
  1817. else relPath.unshift(relative.host);
  1818. }
  1819. relative.host = null;
  1820. }
  1821. mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
  1822. }
  1823. if (isRelAbs) {
  1824. // it's absolute.
  1825. result.host = (relative.host || relative.host === '') ?
  1826. relative.host : result.host;
  1827. result.hostname = (relative.hostname || relative.hostname === '') ?
  1828. relative.hostname : result.hostname;
  1829. result.search = relative.search;
  1830. result.query = relative.query;
  1831. srcPath = relPath;
  1832. // fall through to the dot-handling below.
  1833. } else if (relPath.length) {
  1834. // it's relative
  1835. // throw away the existing file, and take the new path instead.
  1836. if (!srcPath) srcPath = [];
  1837. srcPath.pop();
  1838. srcPath = srcPath.concat(relPath);
  1839. result.search = relative.search;
  1840. result.query = relative.query;
  1841. } else if (!util.isNullOrUndefined(relative.search)) {
  1842. // just pull out the search.
  1843. // like href='?foo'.
  1844. // Put this after the other two cases because it simplifies the booleans
  1845. if (psychotic) {
  1846. result.hostname = result.host = srcPath.shift();
  1847. //occationaly the auth can get stuck only in host
  1848. //this especially happens in cases like
  1849. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  1850. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  1851. result.host.split('@') : false;
  1852. if (authInHost) {
  1853. result.auth = authInHost.shift();
  1854. result.host = result.hostname = authInHost.shift();
  1855. }
  1856. }
  1857. result.search = relative.search;
  1858. result.query = relative.query;
  1859. //to support http.request
  1860. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  1861. result.path = (result.pathname ? result.pathname : '') +
  1862. (result.search ? result.search : '');
  1863. }
  1864. result.href = result.format();
  1865. return result;
  1866. }
  1867. if (!srcPath.length) {
  1868. // no path at all. easy.
  1869. // we've already handled the other stuff above.
  1870. result.pathname = null;
  1871. //to support http.request
  1872. if (result.search) {
  1873. result.path = '/' + result.search;
  1874. } else {
  1875. result.path = null;
  1876. }
  1877. result.href = result.format();
  1878. return result;
  1879. }
  1880. // if a url ENDs in . or .., then it must get a trailing slash.
  1881. // however, if it ends in anything else non-slashy,
  1882. // then it must NOT get a trailing slash.
  1883. var last = srcPath.slice(-1)[0];
  1884. var hasTrailingSlash = (
  1885. (result.host || relative.host || srcPath.length > 1) &&
  1886. (last === '.' || last === '..') || last === '');
  1887. // strip single dots, resolve double dots to parent dir
  1888. // if the path tries to go above the root, `up` ends up > 0
  1889. var up = 0;
  1890. for (var i = srcPath.length; i >= 0; i--) {
  1891. last = srcPath[i];
  1892. if (last === '.') {
  1893. srcPath.splice(i, 1);
  1894. } else if (last === '..') {
  1895. srcPath.splice(i, 1);
  1896. up++;
  1897. } else if (up) {
  1898. srcPath.splice(i, 1);
  1899. up--;
  1900. }
  1901. }
  1902. // if the path is allowed to go above the root, restore leading ..s
  1903. if (!mustEndAbs && !removeAllDots) {
  1904. for (; up--; up) {
  1905. srcPath.unshift('..');
  1906. }
  1907. }
  1908. if (mustEndAbs && srcPath[0] !== '' &&
  1909. (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
  1910. srcPath.unshift('');
  1911. }
  1912. if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
  1913. srcPath.push('');
  1914. }
  1915. var isAbsolute = srcPath[0] === '' ||
  1916. (srcPath[0] && srcPath[0].charAt(0) === '/');
  1917. // put the host back
  1918. if (psychotic) {
  1919. result.hostname = result.host = isAbsolute ? '' :
  1920. srcPath.length ? srcPath.shift() : '';
  1921. //occationaly the auth can get stuck only in host
  1922. //this especially happens in cases like
  1923. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  1924. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  1925. result.host.split('@') : false;
  1926. if (authInHost) {
  1927. result.auth = authInHost.shift();
  1928. result.host = result.hostname = authInHost.shift();
  1929. }
  1930. }
  1931. mustEndAbs = mustEndAbs || (result.host && srcPath.length);
  1932. if (mustEndAbs && !isAbsolute) {
  1933. srcPath.unshift('');
  1934. }
  1935. if (!srcPath.length) {
  1936. result.pathname = null;
  1937. result.path = null;
  1938. } else {
  1939. result.pathname = srcPath.join('/');
  1940. }
  1941. //to support request.http
  1942. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  1943. result.path = (result.pathname ? result.pathname : '') +
  1944. (result.search ? result.search : '');
  1945. }
  1946. result.auth = relative.auth || result.auth;
  1947. result.slashes = result.slashes || relative.slashes;
  1948. result.href = result.format();
  1949. return result;
  1950. };
  1951. Url.prototype.parseHost = function() {
  1952. var host = this.host;
  1953. var port = portPattern.exec(host);
  1954. if (port) {
  1955. port = port[0];
  1956. if (port !== ':') {
  1957. this.port = port.substr(1);
  1958. }
  1959. host = host.substr(0, host.length - port.length);
  1960. }
  1961. if (host) this.hostname = host;
  1962. };
  1963. /***/ }),
  1964. /* 3 */
  1965. /***/ (function(module, exports, __webpack_require__) {
  1966. var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */
  1967. ;(function(root) {
  1968. /** Detect free variables */
  1969. var freeExports = typeof exports == 'object' && exports &&
  1970. !exports.nodeType && exports;
  1971. var freeModule = typeof module == 'object' && module &&
  1972. !module.nodeType && module;
  1973. var freeGlobal = typeof global == 'object' && global;
  1974. if (
  1975. freeGlobal.global === freeGlobal ||
  1976. freeGlobal.window === freeGlobal ||
  1977. freeGlobal.self === freeGlobal
  1978. ) {
  1979. root = freeGlobal;
  1980. }
  1981. /**
  1982. * The `punycode` object.
  1983. * @name punycode
  1984. * @type Object
  1985. */
  1986. var punycode,
  1987. /** Highest positive signed 32-bit float value */
  1988. maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
  1989. /** Bootstring parameters */
  1990. base = 36,
  1991. tMin = 1,
  1992. tMax = 26,
  1993. skew = 38,
  1994. damp = 700,
  1995. initialBias = 72,
  1996. initialN = 128, // 0x80
  1997. delimiter = '-', // '\x2D'
  1998. /** Regular expressions */
  1999. regexPunycode = /^xn--/,
  2000. regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
  2001. regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
  2002. /** Error messages */
  2003. errors = {
  2004. 'overflow': 'Overflow: input needs wider integers to process',
  2005. 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
  2006. 'invalid-input': 'Invalid input'
  2007. },
  2008. /** Convenience shortcuts */
  2009. baseMinusTMin = base - tMin,
  2010. floor = Math.floor,
  2011. stringFromCharCode = String.fromCharCode,
  2012. /** Temporary variable */
  2013. key;
  2014. /*--------------------------------------------------------------------------*/
  2015. /**
  2016. * A generic error utility function.
  2017. * @private
  2018. * @param {String} type The error type.
  2019. * @returns {Error} Throws a `RangeError` with the applicable error message.
  2020. */
  2021. function error(type) {
  2022. throw RangeError(errors[type]);
  2023. }
  2024. /**
  2025. * A generic `Array#map` utility function.
  2026. * @private
  2027. * @param {Array} array The array to iterate over.
  2028. * @param {Function} callback The function that gets called for every array
  2029. * item.
  2030. * @returns {Array} A new array of values returned by the callback function.
  2031. */
  2032. function map(array, fn) {
  2033. var length = array.length;
  2034. var result = [];
  2035. while (length--) {
  2036. result[length] = fn(array[length]);
  2037. }
  2038. return result;
  2039. }
  2040. /**
  2041. * A simple `Array#map`-like wrapper to work with domain name strings or email
  2042. * addresses.
  2043. * @private
  2044. * @param {String} domain The domain name or email address.
  2045. * @param {Function} callback The function that gets called for every
  2046. * character.
  2047. * @returns {Array} A new string of characters returned by the callback
  2048. * function.
  2049. */
  2050. function mapDomain(string, fn) {
  2051. var parts = string.split('@');
  2052. var result = '';
  2053. if (parts.length > 1) {
  2054. // In email addresses, only the domain name should be punycoded. Leave
  2055. // the local part (i.e. everything up to `@`) intact.
  2056. result = parts[0] + '@';
  2057. string = parts[1];
  2058. }
  2059. // Avoid `split(regex)` for IE8 compatibility. See #17.
  2060. string = string.replace(regexSeparators, '\x2E');
  2061. var labels = string.split('.');
  2062. var encoded = map(labels, fn).join('.');
  2063. return result + encoded;
  2064. }
  2065. /**
  2066. * Creates an array containing the numeric code points of each Unicode
  2067. * character in the string. While JavaScript uses UCS-2 internally,
  2068. * this function will convert a pair of surrogate halves (each of which
  2069. * UCS-2 exposes as separate characters) into a single code point,
  2070. * matching UTF-16.
  2071. * @see `punycode.ucs2.encode`
  2072. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  2073. * @memberOf punycode.ucs2
  2074. * @name decode
  2075. * @param {String} string The Unicode input string (UCS-2).
  2076. * @returns {Array} The new array of code points.
  2077. */
  2078. function ucs2decode(string) {
  2079. var output = [],
  2080. counter = 0,
  2081. length = string.length,
  2082. value,
  2083. extra;
  2084. while (counter < length) {
  2085. value = string.charCodeAt(counter++);
  2086. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  2087. // high surrogate, and there is a next character
  2088. extra = string.charCodeAt(counter++);
  2089. if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  2090. output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  2091. } else {
  2092. // unmatched surrogate; only append this code unit, in case the next
  2093. // code unit is the high surrogate of a surrogate pair
  2094. output.push(value);
  2095. counter--;
  2096. }
  2097. } else {
  2098. output.push(value);
  2099. }
  2100. }
  2101. return output;
  2102. }
  2103. /**
  2104. * Creates a string based on an array of numeric code points.
  2105. * @see `punycode.ucs2.decode`
  2106. * @memberOf punycode.ucs2
  2107. * @name encode
  2108. * @param {Array} codePoints The array of numeric code points.
  2109. * @returns {String} The new Unicode string (UCS-2).
  2110. */
  2111. function ucs2encode(array) {
  2112. return map(array, function(value) {
  2113. var output = '';
  2114. if (value > 0xFFFF) {
  2115. value -= 0x10000;
  2116. output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  2117. value = 0xDC00 | value & 0x3FF;
  2118. }
  2119. output += stringFromCharCode(value);
  2120. return output;
  2121. }).join('');
  2122. }
  2123. /**
  2124. * Converts a basic code point into a digit/integer.
  2125. * @see `digitToBasic()`
  2126. * @private
  2127. * @param {Number} codePoint The basic numeric code point value.
  2128. * @returns {Number} The numeric value of a basic code point (for use in
  2129. * representing integers) in the range `0` to `base - 1`, or `base` if
  2130. * the code point does not represent a value.
  2131. */
  2132. function basicToDigit(codePoint) {
  2133. if (codePoint - 48 < 10) {
  2134. return codePoint - 22;
  2135. }
  2136. if (codePoint - 65 < 26) {
  2137. return codePoint - 65;
  2138. }
  2139. if (codePoint - 97 < 26) {
  2140. return codePoint - 97;
  2141. }
  2142. return base;
  2143. }
  2144. /**
  2145. * Converts a digit/integer into a basic code point.
  2146. * @see `basicToDigit()`
  2147. * @private
  2148. * @param {Number} digit The numeric value of a basic code point.
  2149. * @returns {Number} The basic code point whose value (when used for
  2150. * representing integers) is `digit`, which needs to be in the range
  2151. * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
  2152. * used; else, the lowercase form is used. The behavior is undefined
  2153. * if `flag` is non-zero and `digit` has no uppercase form.
  2154. */
  2155. function digitToBasic(digit, flag) {
  2156. // 0..25 map to ASCII a..z or A..Z
  2157. // 26..35 map to ASCII 0..9
  2158. return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
  2159. }
  2160. /**
  2161. * Bias adaptation function as per section 3.4 of RFC 3492.
  2162. * http://tools.ietf.org/html/rfc3492#section-3.4
  2163. * @private
  2164. */
  2165. function adapt(delta, numPoints, firstTime) {
  2166. var k = 0;
  2167. delta = firstTime ? floor(delta / damp) : delta >> 1;
  2168. delta += floor(delta / numPoints);
  2169. for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
  2170. delta = floor(delta / baseMinusTMin);
  2171. }
  2172. return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
  2173. }
  2174. /**
  2175. * Converts a Punycode string of ASCII-only symbols to a string of Unicode
  2176. * symbols.
  2177. * @memberOf punycode
  2178. * @param {String} input The Punycode string of ASCII-only symbols.
  2179. * @returns {String} The resulting string of Unicode symbols.
  2180. */
  2181. function decode(input) {
  2182. // Don't use UCS-2
  2183. var output = [],
  2184. inputLength = input.length,
  2185. out,
  2186. i = 0,
  2187. n = initialN,
  2188. bias = initialBias,
  2189. basic,
  2190. j,
  2191. index,
  2192. oldi,
  2193. w,
  2194. k,
  2195. digit,
  2196. t,
  2197. /** Cached calculation results */
  2198. baseMinusT;
  2199. // Handle the basic code points: let `basic` be the number of input code
  2200. // points before the last delimiter, or `0` if there is none, then copy
  2201. // the first basic code points to the output.
  2202. basic = input.lastIndexOf(delimiter);
  2203. if (basic < 0) {
  2204. basic = 0;
  2205. }
  2206. for (j = 0; j < basic; ++j) {
  2207. // if it's not a basic code point
  2208. if (input.charCodeAt(j) >= 0x80) {
  2209. error('not-basic');
  2210. }
  2211. output.push(input.charCodeAt(j));
  2212. }
  2213. // Main decoding loop: start just after the last delimiter if any basic code
  2214. // points were copied; start at the beginning otherwise.
  2215. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
  2216. // `index` is the index of the next character to be consumed.
  2217. // Decode a generalized variable-length integer into `delta`,
  2218. // which gets added to `i`. The overflow checking is easier
  2219. // if we increase `i` as we go, then subtract off its starting
  2220. // value at the end to obtain `delta`.
  2221. for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
  2222. if (index >= inputLength) {
  2223. error('invalid-input');
  2224. }
  2225. digit = basicToDigit(input.charCodeAt(index++));
  2226. if (digit >= base || digit > floor((maxInt - i) / w)) {
  2227. error('overflow');
  2228. }
  2229. i += digit * w;
  2230. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  2231. if (digit < t) {
  2232. break;
  2233. }
  2234. baseMinusT = base - t;
  2235. if (w > floor(maxInt / baseMinusT)) {
  2236. error('overflow');
  2237. }
  2238. w *= baseMinusT;
  2239. }
  2240. out = output.length + 1;
  2241. bias = adapt(i - oldi, out, oldi == 0);
  2242. // `i` was supposed to wrap around from `out` to `0`,
  2243. // incrementing `n` each time, so we'll fix that now:
  2244. if (floor(i / out) > maxInt - n) {
  2245. error('overflow');
  2246. }
  2247. n += floor(i / out);
  2248. i %= out;
  2249. // Insert `n` at position `i` of the output
  2250. output.splice(i++, 0, n);
  2251. }
  2252. return ucs2encode(output);
  2253. }
  2254. /**
  2255. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  2256. * Punycode string of ASCII-only symbols.
  2257. * @memberOf punycode
  2258. * @param {String} input The string of Unicode symbols.
  2259. * @returns {String} The resulting Punycode string of ASCII-only symbols.
  2260. */
  2261. function encode(input) {
  2262. var n,
  2263. delta,
  2264. handledCPCount,
  2265. basicLength,
  2266. bias,
  2267. j,
  2268. m,
  2269. q,
  2270. k,
  2271. t,
  2272. currentValue,
  2273. output = [],
  2274. /** `inputLength` will hold the number of code points in `input`. */
  2275. inputLength,
  2276. /** Cached calculation results */
  2277. handledCPCountPlusOne,
  2278. baseMinusT,
  2279. qMinusT;
  2280. // Convert the input in UCS-2 to Unicode
  2281. input = ucs2decode(input);
  2282. // Cache the length
  2283. inputLength = input.length;
  2284. // Initialize the state
  2285. n = initialN;
  2286. delta = 0;
  2287. bias = initialBias;
  2288. // Handle the basic code points
  2289. for (j = 0; j < inputLength; ++j) {
  2290. currentValue = input[j];
  2291. if (currentValue < 0x80) {
  2292. output.push(stringFromCharCode(currentValue));
  2293. }
  2294. }
  2295. handledCPCount = basicLength = output.length;
  2296. // `handledCPCount` is the number of code points that have been handled;
  2297. // `basicLength` is the number of basic code points.
  2298. // Finish the basic string - if it is not empty - with a delimiter
  2299. if (basicLength) {
  2300. output.push(delimiter);
  2301. }
  2302. // Main encoding loop:
  2303. while (handledCPCount < inputLength) {
  2304. // All non-basic code points < n have been handled already. Find the next
  2305. // larger one:
  2306. for (m = maxInt, j = 0; j < inputLength; ++j) {
  2307. currentValue = input[j];
  2308. if (currentValue >= n && currentValue < m) {
  2309. m = currentValue;
  2310. }
  2311. }
  2312. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
  2313. // but guard against overflow
  2314. handledCPCountPlusOne = handledCPCount + 1;
  2315. if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
  2316. error('overflow');
  2317. }
  2318. delta += (m - n) * handledCPCountPlusOne;
  2319. n = m;
  2320. for (j = 0; j < inputLength; ++j) {
  2321. currentValue = input[j];
  2322. if (currentValue < n && ++delta > maxInt) {
  2323. error('overflow');
  2324. }
  2325. if (currentValue == n) {
  2326. // Represent delta as a generalized variable-length integer
  2327. for (q = delta, k = base; /* no condition */; k += base) {
  2328. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  2329. if (q < t) {
  2330. break;
  2331. }
  2332. qMinusT = q - t;
  2333. baseMinusT = base - t;
  2334. output.push(
  2335. stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
  2336. );
  2337. q = floor(qMinusT / baseMinusT);
  2338. }
  2339. output.push(stringFromCharCode(digitToBasic(q, 0)));
  2340. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  2341. delta = 0;
  2342. ++handledCPCount;
  2343. }
  2344. }
  2345. ++delta;
  2346. ++n;
  2347. }
  2348. return output.join('');
  2349. }
  2350. /**
  2351. * Converts a Punycode string representing a domain name or an email address
  2352. * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
  2353. * it doesn't matter if you call it on a string that has already been
  2354. * converted to Unicode.
  2355. * @memberOf punycode
  2356. * @param {String} input The Punycoded domain name or email address to
  2357. * convert to Unicode.
  2358. * @returns {String} The Unicode representation of the given Punycode
  2359. * string.
  2360. */
  2361. function toUnicode(input) {
  2362. return mapDomain(input, function(string) {
  2363. return regexPunycode.test(string)
  2364. ? decode(string.slice(4).toLowerCase())
  2365. : string;
  2366. });
  2367. }
  2368. /**
  2369. * Converts a Unicode string representing a domain name or an email address to
  2370. * Punycode. Only the non-ASCII parts of the domain name will be converted,
  2371. * i.e. it doesn't matter if you call it with a domain that's already in
  2372. * ASCII.
  2373. * @memberOf punycode
  2374. * @param {String} input The domain name or email address to convert, as a
  2375. * Unicode string.
  2376. * @returns {String} The Punycode representation of the given domain name or
  2377. * email address.
  2378. */
  2379. function toASCII(input) {
  2380. return mapDomain(input, function(string) {
  2381. return regexNonASCII.test(string)
  2382. ? 'xn--' + encode(string)
  2383. : string;
  2384. });
  2385. }
  2386. /*--------------------------------------------------------------------------*/
  2387. /** Define the public API */
  2388. punycode = {
  2389. /**
  2390. * A string representing the current Punycode.js version number.
  2391. * @memberOf punycode
  2392. * @type String
  2393. */
  2394. 'version': '1.3.2',
  2395. /**
  2396. * An object of methods to convert from JavaScript's internal character
  2397. * representation (UCS-2) to Unicode code points, and back.
  2398. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  2399. * @memberOf punycode
  2400. * @type Object
  2401. */
  2402. 'ucs2': {
  2403. 'decode': ucs2decode,
  2404. 'encode': ucs2encode
  2405. },
  2406. 'decode': decode,
  2407. 'encode': encode,
  2408. 'toASCII': toASCII,
  2409. 'toUnicode': toUnicode
  2410. };
  2411. /** Expose `punycode` */
  2412. // Some AMD build optimizers, like r.js, check for specific condition patterns
  2413. // like the following:
  2414. if (
  2415. true
  2416. ) {
  2417. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  2418. return punycode;
  2419. }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  2420. } else if (freeExports && freeModule) {
  2421. if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+
  2422. freeModule.exports = punycode;
  2423. } else { // in Narwhal or RingoJS v0.7.0-
  2424. for (key in punycode) {
  2425. punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
  2426. }
  2427. }
  2428. } else { // in Rhino or a web browser
  2429. root.punycode = punycode;
  2430. }
  2431. }(this));
  2432. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module), (function() { return this; }())))
  2433. /***/ }),
  2434. /* 4 */
  2435. /***/ (function(module, exports) {
  2436. module.exports = function(module) {
  2437. if(!module.webpackPolyfill) {
  2438. module.deprecate = function() {};
  2439. module.paths = [];
  2440. // module.parent = undefined by default
  2441. module.children = [];
  2442. module.webpackPolyfill = 1;
  2443. }
  2444. return module;
  2445. }
  2446. /***/ }),
  2447. /* 5 */
  2448. /***/ (function(module, exports) {
  2449. 'use strict';
  2450. module.exports = {
  2451. isString: function(arg) {
  2452. return typeof(arg) === 'string';
  2453. },
  2454. isObject: function(arg) {
  2455. return typeof(arg) === 'object' && arg !== null;
  2456. },
  2457. isNull: function(arg) {
  2458. return arg === null;
  2459. },
  2460. isNullOrUndefined: function(arg) {
  2461. return arg == null;
  2462. }
  2463. };
  2464. /***/ }),
  2465. /* 6 */
  2466. /***/ (function(module, exports, __webpack_require__) {
  2467. 'use strict';
  2468. exports.decode = exports.parse = __webpack_require__(7);
  2469. exports.encode = exports.stringify = __webpack_require__(8);
  2470. /***/ }),
  2471. /* 7 */
  2472. /***/ (function(module, exports) {
  2473. // Copyright Joyent, Inc. and other Node contributors.
  2474. //
  2475. // Permission is hereby granted, free of charge, to any person obtaining a
  2476. // copy of this software and associated documentation files (the
  2477. // "Software"), to deal in the Software without restriction, including
  2478. // without limitation the rights to use, copy, modify, merge, publish,
  2479. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2480. // persons to whom the Software is furnished to do so, subject to the
  2481. // following conditions:
  2482. //
  2483. // The above copyright notice and this permission notice shall be included
  2484. // in all copies or substantial portions of the Software.
  2485. //
  2486. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2487. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2488. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2489. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2490. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2491. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2492. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2493. 'use strict';
  2494. // If obj.hasOwnProperty has been overridden, then calling
  2495. // obj.hasOwnProperty(prop) will break.
  2496. // See: https://github.com/joyent/node/issues/1707
  2497. function hasOwnProperty(obj, prop) {
  2498. return Object.prototype.hasOwnProperty.call(obj, prop);
  2499. }
  2500. module.exports = function(qs, sep, eq, options) {
  2501. sep = sep || '&';
  2502. eq = eq || '=';
  2503. var obj = {};
  2504. if (typeof qs !== 'string' || qs.length === 0) {
  2505. return obj;
  2506. }
  2507. var regexp = /\+/g;
  2508. qs = qs.split(sep);
  2509. var maxKeys = 1000;
  2510. if (options && typeof options.maxKeys === 'number') {
  2511. maxKeys = options.maxKeys;
  2512. }
  2513. var len = qs.length;
  2514. // maxKeys <= 0 means that we should not limit keys count
  2515. if (maxKeys > 0 && len > maxKeys) {
  2516. len = maxKeys;
  2517. }
  2518. for (var i = 0; i < len; ++i) {
  2519. var x = qs[i].replace(regexp, '%20'),
  2520. idx = x.indexOf(eq),
  2521. kstr, vstr, k, v;
  2522. if (idx >= 0) {
  2523. kstr = x.substr(0, idx);
  2524. vstr = x.substr(idx + 1);
  2525. } else {
  2526. kstr = x;
  2527. vstr = '';
  2528. }
  2529. k = decodeURIComponent(kstr);
  2530. v = decodeURIComponent(vstr);
  2531. if (!hasOwnProperty(obj, k)) {
  2532. obj[k] = v;
  2533. } else if (Array.isArray(obj[k])) {
  2534. obj[k].push(v);
  2535. } else {
  2536. obj[k] = [obj[k], v];
  2537. }
  2538. }
  2539. return obj;
  2540. };
  2541. /***/ }),
  2542. /* 8 */
  2543. /***/ (function(module, exports) {
  2544. // Copyright Joyent, Inc. and other Node contributors.
  2545. //
  2546. // Permission is hereby granted, free of charge, to any person obtaining a
  2547. // copy of this software and associated documentation files (the
  2548. // "Software"), to deal in the Software without restriction, including
  2549. // without limitation the rights to use, copy, modify, merge, publish,
  2550. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2551. // persons to whom the Software is furnished to do so, subject to the
  2552. // following conditions:
  2553. //
  2554. // The above copyright notice and this permission notice shall be included
  2555. // in all copies or substantial portions of the Software.
  2556. //
  2557. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2558. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2559. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2560. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2561. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2562. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2563. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2564. 'use strict';
  2565. var stringifyPrimitive = function(v) {
  2566. switch (typeof v) {
  2567. case 'string':
  2568. return v;
  2569. case 'boolean':
  2570. return v ? 'true' : 'false';
  2571. case 'number':
  2572. return isFinite(v) ? v : '';
  2573. default:
  2574. return '';
  2575. }
  2576. };
  2577. module.exports = function(obj, sep, eq, name) {
  2578. sep = sep || '&';
  2579. eq = eq || '=';
  2580. if (obj === null) {
  2581. obj = undefined;
  2582. }
  2583. if (typeof obj === 'object') {
  2584. return Object.keys(obj).map(function(k) {
  2585. var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
  2586. if (Array.isArray(obj[k])) {
  2587. return obj[k].map(function(v) {
  2588. return ks + encodeURIComponent(stringifyPrimitive(v));
  2589. }).join(sep);
  2590. } else {
  2591. return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
  2592. }
  2593. }).join(sep);
  2594. }
  2595. if (!name) return '';
  2596. return encodeURIComponent(stringifyPrimitive(name)) + eq +
  2597. encodeURIComponent(stringifyPrimitive(obj));
  2598. };
  2599. /***/ }),
  2600. /* 9 */
  2601. /***/ (function(module, exports, __webpack_require__) {
  2602. /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
  2603. //
  2604. // Permission is hereby granted, free of charge, to any person obtaining a
  2605. // copy of this software and associated documentation files (the
  2606. // "Software"), to deal in the Software without restriction, including
  2607. // without limitation the rights to use, copy, modify, merge, publish,
  2608. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2609. // persons to whom the Software is furnished to do so, subject to the
  2610. // following conditions:
  2611. //
  2612. // The above copyright notice and this permission notice shall be included
  2613. // in all copies or substantial portions of the Software.
  2614. //
  2615. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2616. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2617. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2618. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2619. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2620. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2621. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2622. var formatRegExp = /%[sdj%]/g;
  2623. exports.format = function(f) {
  2624. if (!isString(f)) {
  2625. var objects = [];
  2626. for (var i = 0; i < arguments.length; i++) {
  2627. objects.push(inspect(arguments[i]));
  2628. }
  2629. return objects.join(' ');
  2630. }
  2631. var i = 1;
  2632. var args = arguments;
  2633. var len = args.length;
  2634. var str = String(f).replace(formatRegExp, function(x) {
  2635. if (x === '%%') return '%';
  2636. if (i >= len) return x;
  2637. switch (x) {
  2638. case '%s': return String(args[i++]);
  2639. case '%d': return Number(args[i++]);
  2640. case '%j':
  2641. try {
  2642. return JSON.stringify(args[i++]);
  2643. } catch (_) {
  2644. return '[Circular]';
  2645. }
  2646. default:
  2647. return x;
  2648. }
  2649. });
  2650. for (var x = args[i]; i < len; x = args[++i]) {
  2651. if (isNull(x) || !isObject(x)) {
  2652. str += ' ' + x;
  2653. } else {
  2654. str += ' ' + inspect(x);
  2655. }
  2656. }
  2657. return str;
  2658. };
  2659. // Mark that a method should not be used.
  2660. // Returns a modified function which warns once by default.
  2661. // If --no-deprecation is set, then it is a no-op.
  2662. exports.deprecate = function(fn, msg) {
  2663. // Allow for deprecating things in the process of starting up.
  2664. if (isUndefined(global.process)) {
  2665. return function() {
  2666. return exports.deprecate(fn, msg).apply(this, arguments);
  2667. };
  2668. }
  2669. if (process.noDeprecation === true) {
  2670. return fn;
  2671. }
  2672. var warned = false;
  2673. function deprecated() {
  2674. if (!warned) {
  2675. if (process.throwDeprecation) {
  2676. throw new Error(msg);
  2677. } else if (process.traceDeprecation) {
  2678. console.trace(msg);
  2679. } else {
  2680. console.error(msg);
  2681. }
  2682. warned = true;
  2683. }
  2684. return fn.apply(this, arguments);
  2685. }
  2686. return deprecated;
  2687. };
  2688. var debugs = {};
  2689. var debugEnviron;
  2690. exports.debuglog = function(set) {
  2691. if (isUndefined(debugEnviron))
  2692. debugEnviron = process.env.NODE_DEBUG || '';
  2693. set = set.toUpperCase();
  2694. if (!debugs[set]) {
  2695. if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
  2696. var pid = process.pid;
  2697. debugs[set] = function() {
  2698. var msg = exports.format.apply(exports, arguments);
  2699. console.error('%s %d: %s', set, pid, msg);
  2700. };
  2701. } else {
  2702. debugs[set] = function() {};
  2703. }
  2704. }
  2705. return debugs[set];
  2706. };
  2707. /**
  2708. * Echos the value of a value. Trys to print the value out
  2709. * in the best way possible given the different types.
  2710. *
  2711. * @param {Object} obj The object to print out.
  2712. * @param {Object} opts Optional options object that alters the output.
  2713. */
  2714. /* legacy: obj, showHidden, depth, colors*/
  2715. function inspect(obj, opts) {
  2716. // default options
  2717. var ctx = {
  2718. seen: [],
  2719. stylize: stylizeNoColor
  2720. };
  2721. // legacy...
  2722. if (arguments.length >= 3) ctx.depth = arguments[2];
  2723. if (arguments.length >= 4) ctx.colors = arguments[3];
  2724. if (isBoolean(opts)) {
  2725. // legacy...
  2726. ctx.showHidden = opts;
  2727. } else if (opts) {
  2728. // got an "options" object
  2729. exports._extend(ctx, opts);
  2730. }
  2731. // set default options
  2732. if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  2733. if (isUndefined(ctx.depth)) ctx.depth = 2;
  2734. if (isUndefined(ctx.colors)) ctx.colors = false;
  2735. if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  2736. if (ctx.colors) ctx.stylize = stylizeWithColor;
  2737. return formatValue(ctx, obj, ctx.depth);
  2738. }
  2739. exports.inspect = inspect;
  2740. // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
  2741. inspect.colors = {
  2742. 'bold' : [1, 22],
  2743. 'italic' : [3, 23],
  2744. 'underline' : [4, 24],
  2745. 'inverse' : [7, 27],
  2746. 'white' : [37, 39],
  2747. 'grey' : [90, 39],
  2748. 'black' : [30, 39],
  2749. 'blue' : [34, 39],
  2750. 'cyan' : [36, 39],
  2751. 'green' : [32, 39],
  2752. 'magenta' : [35, 39],
  2753. 'red' : [31, 39],
  2754. 'yellow' : [33, 39]
  2755. };
  2756. // Don't use 'blue' not visible on cmd.exe
  2757. inspect.styles = {
  2758. 'special': 'cyan',
  2759. 'number': 'yellow',
  2760. 'boolean': 'yellow',
  2761. 'undefined': 'grey',
  2762. 'null': 'bold',
  2763. 'string': 'green',
  2764. 'date': 'magenta',
  2765. // "name": intentionally not styling
  2766. 'regexp': 'red'
  2767. };
  2768. function stylizeWithColor(str, styleType) {
  2769. var style = inspect.styles[styleType];
  2770. if (style) {
  2771. return '\u001b[' + inspect.colors[style][0] + 'm' + str +
  2772. '\u001b[' + inspect.colors[style][1] + 'm';
  2773. } else {
  2774. return str;
  2775. }
  2776. }
  2777. function stylizeNoColor(str, styleType) {
  2778. return str;
  2779. }
  2780. function arrayToHash(array) {
  2781. var hash = {};
  2782. array.forEach(function(val, idx) {
  2783. hash[val] = true;
  2784. });
  2785. return hash;
  2786. }
  2787. function formatValue(ctx, value, recurseTimes) {
  2788. // Provide a hook for user-specified inspect functions.
  2789. // Check that value is an object with an inspect function on it
  2790. if (ctx.customInspect &&
  2791. value &&
  2792. isFunction(value.inspect) &&
  2793. // Filter out the util module, it's inspect function is special
  2794. value.inspect !== exports.inspect &&
  2795. // Also filter out any prototype objects using the circular check.
  2796. !(value.constructor && value.constructor.prototype === value)) {
  2797. var ret = value.inspect(recurseTimes, ctx);
  2798. if (!isString(ret)) {
  2799. ret = formatValue(ctx, ret, recurseTimes);
  2800. }
  2801. return ret;
  2802. }
  2803. // Primitive types cannot have properties
  2804. var primitive = formatPrimitive(ctx, value);
  2805. if (primitive) {
  2806. return primitive;
  2807. }
  2808. // Look up the keys of the object.
  2809. var keys = Object.keys(value);
  2810. var visibleKeys = arrayToHash(keys);
  2811. if (ctx.showHidden) {
  2812. keys = Object.getOwnPropertyNames(value);
  2813. }
  2814. // IE doesn't make error fields non-enumerable
  2815. // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  2816. if (isError(value)
  2817. && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
  2818. return formatError(value);
  2819. }
  2820. // Some type of object without properties can be shortcutted.
  2821. if (keys.length === 0) {
  2822. if (isFunction(value)) {
  2823. var name = value.name ? ': ' + value.name : '';
  2824. return ctx.stylize('[Function' + name + ']', 'special');
  2825. }
  2826. if (isRegExp(value)) {
  2827. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  2828. }
  2829. if (isDate(value)) {
  2830. return ctx.stylize(Date.prototype.toString.call(value), 'date');
  2831. }
  2832. if (isError(value)) {
  2833. return formatError(value);
  2834. }
  2835. }
  2836. var base = '', array = false, braces = ['{', '}'];
  2837. // Make Array say that they are Array
  2838. if (isArray(value)) {
  2839. array = true;
  2840. braces = ['[', ']'];
  2841. }
  2842. // Make functions say that they are functions
  2843. if (isFunction(value)) {
  2844. var n = value.name ? ': ' + value.name : '';
  2845. base = ' [Function' + n + ']';
  2846. }
  2847. // Make RegExps say that they are RegExps
  2848. if (isRegExp(value)) {
  2849. base = ' ' + RegExp.prototype.toString.call(value);
  2850. }
  2851. // Make dates with properties first say the date
  2852. if (isDate(value)) {
  2853. base = ' ' + Date.prototype.toUTCString.call(value);
  2854. }
  2855. // Make error with message first say the error
  2856. if (isError(value)) {
  2857. base = ' ' + formatError(value);
  2858. }
  2859. if (keys.length === 0 && (!array || value.length == 0)) {
  2860. return braces[0] + base + braces[1];
  2861. }
  2862. if (recurseTimes < 0) {
  2863. if (isRegExp(value)) {
  2864. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  2865. } else {
  2866. return ctx.stylize('[Object]', 'special');
  2867. }
  2868. }
  2869. ctx.seen.push(value);
  2870. var output;
  2871. if (array) {
  2872. output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  2873. } else {
  2874. output = keys.map(function(key) {
  2875. return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
  2876. });
  2877. }
  2878. ctx.seen.pop();
  2879. return reduceToSingleString(output, base, braces);
  2880. }
  2881. function formatPrimitive(ctx, value) {
  2882. if (isUndefined(value))
  2883. return ctx.stylize('undefined', 'undefined');
  2884. if (isString(value)) {
  2885. var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
  2886. .replace(/'/g, "\\'")
  2887. .replace(/\\"/g, '"') + '\'';
  2888. return ctx.stylize(simple, 'string');
  2889. }
  2890. if (isNumber(value))
  2891. return ctx.stylize('' + value, 'number');
  2892. if (isBoolean(value))
  2893. return ctx.stylize('' + value, 'boolean');
  2894. // For some reason typeof null is "object", so special case here.
  2895. if (isNull(value))
  2896. return ctx.stylize('null', 'null');
  2897. }
  2898. function formatError(value) {
  2899. return '[' + Error.prototype.toString.call(value) + ']';
  2900. }
  2901. function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  2902. var output = [];
  2903. for (var i = 0, l = value.length; i < l; ++i) {
  2904. if (hasOwnProperty(value, String(i))) {
  2905. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  2906. String(i), true));
  2907. } else {
  2908. output.push('');
  2909. }
  2910. }
  2911. keys.forEach(function(key) {
  2912. if (!key.match(/^\d+$/)) {
  2913. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  2914. key, true));
  2915. }
  2916. });
  2917. return output;
  2918. }
  2919. function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  2920. var name, str, desc;
  2921. desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  2922. if (desc.get) {
  2923. if (desc.set) {
  2924. str = ctx.stylize('[Getter/Setter]', 'special');
  2925. } else {
  2926. str = ctx.stylize('[Getter]', 'special');
  2927. }
  2928. } else {
  2929. if (desc.set) {
  2930. str = ctx.stylize('[Setter]', 'special');
  2931. }
  2932. }
  2933. if (!hasOwnProperty(visibleKeys, key)) {
  2934. name = '[' + key + ']';
  2935. }
  2936. if (!str) {
  2937. if (ctx.seen.indexOf(desc.value) < 0) {
  2938. if (isNull(recurseTimes)) {
  2939. str = formatValue(ctx, desc.value, null);
  2940. } else {
  2941. str = formatValue(ctx, desc.value, recurseTimes - 1);
  2942. }
  2943. if (str.indexOf('\n') > -1) {
  2944. if (array) {
  2945. str = str.split('\n').map(function(line) {
  2946. return ' ' + line;
  2947. }).join('\n').substr(2);
  2948. } else {
  2949. str = '\n' + str.split('\n').map(function(line) {
  2950. return ' ' + line;
  2951. }).join('\n');
  2952. }
  2953. }
  2954. } else {
  2955. str = ctx.stylize('[Circular]', 'special');
  2956. }
  2957. }
  2958. if (isUndefined(name)) {
  2959. if (array && key.match(/^\d+$/)) {
  2960. return str;
  2961. }
  2962. name = JSON.stringify('' + key);
  2963. if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
  2964. name = name.substr(1, name.length - 2);
  2965. name = ctx.stylize(name, 'name');
  2966. } else {
  2967. name = name.replace(/'/g, "\\'")
  2968. .replace(/\\"/g, '"')
  2969. .replace(/(^"|"$)/g, "'");
  2970. name = ctx.stylize(name, 'string');
  2971. }
  2972. }
  2973. return name + ': ' + str;
  2974. }
  2975. function reduceToSingleString(output, base, braces) {
  2976. var numLinesEst = 0;
  2977. var length = output.reduce(function(prev, cur) {
  2978. numLinesEst++;
  2979. if (cur.indexOf('\n') >= 0) numLinesEst++;
  2980. return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  2981. }, 0);
  2982. if (length > 60) {
  2983. return braces[0] +
  2984. (base === '' ? '' : base + '\n ') +
  2985. ' ' +
  2986. output.join(',\n ') +
  2987. ' ' +
  2988. braces[1];
  2989. }
  2990. return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
  2991. }
  2992. // NOTE: These type checking functions intentionally don't use `instanceof`
  2993. // because it is fragile and can be easily faked with `Object.create()`.
  2994. function isArray(ar) {
  2995. return Array.isArray(ar);
  2996. }
  2997. exports.isArray = isArray;
  2998. function isBoolean(arg) {
  2999. return typeof arg === 'boolean';
  3000. }
  3001. exports.isBoolean = isBoolean;
  3002. function isNull(arg) {
  3003. return arg === null;
  3004. }
  3005. exports.isNull = isNull;
  3006. function isNullOrUndefined(arg) {
  3007. return arg == null;
  3008. }
  3009. exports.isNullOrUndefined = isNullOrUndefined;
  3010. function isNumber(arg) {
  3011. return typeof arg === 'number';
  3012. }
  3013. exports.isNumber = isNumber;
  3014. function isString(arg) {
  3015. return typeof arg === 'string';
  3016. }
  3017. exports.isString = isString;
  3018. function isSymbol(arg) {
  3019. return typeof arg === 'symbol';
  3020. }
  3021. exports.isSymbol = isSymbol;
  3022. function isUndefined(arg) {
  3023. return arg === void 0;
  3024. }
  3025. exports.isUndefined = isUndefined;
  3026. function isRegExp(re) {
  3027. return isObject(re) && objectToString(re) === '[object RegExp]';
  3028. }
  3029. exports.isRegExp = isRegExp;
  3030. function isObject(arg) {
  3031. return typeof arg === 'object' && arg !== null;
  3032. }
  3033. exports.isObject = isObject;
  3034. function isDate(d) {
  3035. return isObject(d) && objectToString(d) === '[object Date]';
  3036. }
  3037. exports.isDate = isDate;
  3038. function isError(e) {
  3039. return isObject(e) &&
  3040. (objectToString(e) === '[object Error]' || e instanceof Error);
  3041. }
  3042. exports.isError = isError;
  3043. function isFunction(arg) {
  3044. return typeof arg === 'function';
  3045. }
  3046. exports.isFunction = isFunction;
  3047. function isPrimitive(arg) {
  3048. return arg === null ||
  3049. typeof arg === 'boolean' ||
  3050. typeof arg === 'number' ||
  3051. typeof arg === 'string' ||
  3052. typeof arg === 'symbol' || // ES6 symbol
  3053. typeof arg === 'undefined';
  3054. }
  3055. exports.isPrimitive = isPrimitive;
  3056. exports.isBuffer = __webpack_require__(11);
  3057. function objectToString(o) {
  3058. return Object.prototype.toString.call(o);
  3059. }
  3060. function pad(n) {
  3061. return n < 10 ? '0' + n.toString(10) : n.toString(10);
  3062. }
  3063. var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
  3064. 'Oct', 'Nov', 'Dec'];
  3065. // 26 Feb 16:19:34
  3066. function timestamp() {
  3067. var d = new Date();
  3068. var time = [pad(d.getHours()),
  3069. pad(d.getMinutes()),
  3070. pad(d.getSeconds())].join(':');
  3071. return [d.getDate(), months[d.getMonth()], time].join(' ');
  3072. }
  3073. // log is just a thin wrapper to console.log that prepends a timestamp
  3074. exports.log = function() {
  3075. console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
  3076. };
  3077. /**
  3078. * Inherit the prototype methods from one constructor into another.
  3079. *
  3080. * The Function.prototype.inherits from lang.js rewritten as a standalone
  3081. * function (not on Function.prototype). NOTE: If this file is to be loaded
  3082. * during bootstrapping this function needs to be rewritten using some native
  3083. * functions as prototype setup using normal JavaScript does not work as
  3084. * expected during bootstrapping (see mirror.js in r114903).
  3085. *
  3086. * @param {function} ctor Constructor function which needs to inherit the
  3087. * prototype.
  3088. * @param {function} superCtor Constructor function to inherit prototype from.
  3089. */
  3090. exports.inherits = __webpack_require__(12);
  3091. exports._extend = function(origin, add) {
  3092. // Don't do anything if add isn't an object
  3093. if (!add || !isObject(add)) return origin;
  3094. var keys = Object.keys(add);
  3095. var i = keys.length;
  3096. while (i--) {
  3097. origin[keys[i]] = add[keys[i]];
  3098. }
  3099. return origin;
  3100. };
  3101. function hasOwnProperty(obj, prop) {
  3102. return Object.prototype.hasOwnProperty.call(obj, prop);
  3103. }
  3104. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(10)))
  3105. /***/ }),
  3106. /* 10 */
  3107. /***/ (function(module, exports) {
  3108. // shim for using process in browser
  3109. var process = module.exports = {};
  3110. // cached from whatever global is present so that test runners that stub it
  3111. // don't break things. But we need to wrap it in a try catch in case it is
  3112. // wrapped in strict mode code which doesn't define any globals. It's inside a
  3113. // function because try/catches deoptimize in certain engines.
  3114. var cachedSetTimeout;
  3115. var cachedClearTimeout;
  3116. function defaultSetTimout() {
  3117. throw new Error('setTimeout has not been defined');
  3118. }
  3119. function defaultClearTimeout () {
  3120. throw new Error('clearTimeout has not been defined');
  3121. }
  3122. (function () {
  3123. try {
  3124. if (typeof setTimeout === 'function') {
  3125. cachedSetTimeout = setTimeout;
  3126. } else {
  3127. cachedSetTimeout = defaultSetTimout;
  3128. }
  3129. } catch (e) {
  3130. cachedSetTimeout = defaultSetTimout;
  3131. }
  3132. try {
  3133. if (typeof clearTimeout === 'function') {
  3134. cachedClearTimeout = clearTimeout;
  3135. } else {
  3136. cachedClearTimeout = defaultClearTimeout;
  3137. }
  3138. } catch (e) {
  3139. cachedClearTimeout = defaultClearTimeout;
  3140. }
  3141. } ())
  3142. function runTimeout(fun) {
  3143. if (cachedSetTimeout === setTimeout) {
  3144. //normal enviroments in sane situations
  3145. return setTimeout(fun, 0);
  3146. }
  3147. // if setTimeout wasn't available but was latter defined
  3148. if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  3149. cachedSetTimeout = setTimeout;
  3150. return setTimeout(fun, 0);
  3151. }
  3152. try {
  3153. // when when somebody has screwed with setTimeout but no I.E. maddness
  3154. return cachedSetTimeout(fun, 0);
  3155. } catch(e){
  3156. try {
  3157. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  3158. return cachedSetTimeout.call(null, fun, 0);
  3159. } catch(e){
  3160. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  3161. return cachedSetTimeout.call(this, fun, 0);
  3162. }
  3163. }
  3164. }
  3165. function runClearTimeout(marker) {
  3166. if (cachedClearTimeout === clearTimeout) {
  3167. //normal enviroments in sane situations
  3168. return clearTimeout(marker);
  3169. }
  3170. // if clearTimeout wasn't available but was latter defined
  3171. if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  3172. cachedClearTimeout = clearTimeout;
  3173. return clearTimeout(marker);
  3174. }
  3175. try {
  3176. // when when somebody has screwed with setTimeout but no I.E. maddness
  3177. return cachedClearTimeout(marker);
  3178. } catch (e){
  3179. try {
  3180. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  3181. return cachedClearTimeout.call(null, marker);
  3182. } catch (e){
  3183. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  3184. // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  3185. return cachedClearTimeout.call(this, marker);
  3186. }
  3187. }
  3188. }
  3189. var queue = [];
  3190. var draining = false;
  3191. var currentQueue;
  3192. var queueIndex = -1;
  3193. function cleanUpNextTick() {
  3194. if (!draining || !currentQueue) {
  3195. return;
  3196. }
  3197. draining = false;
  3198. if (currentQueue.length) {
  3199. queue = currentQueue.concat(queue);
  3200. } else {
  3201. queueIndex = -1;
  3202. }
  3203. if (queue.length) {
  3204. drainQueue();
  3205. }
  3206. }
  3207. function drainQueue() {
  3208. if (draining) {
  3209. return;
  3210. }
  3211. var timeout = runTimeout(cleanUpNextTick);
  3212. draining = true;
  3213. var len = queue.length;
  3214. while(len) {
  3215. currentQueue = queue;
  3216. queue = [];
  3217. while (++queueIndex < len) {
  3218. if (currentQueue) {
  3219. currentQueue[queueIndex].run();
  3220. }
  3221. }
  3222. queueIndex = -1;
  3223. len = queue.length;
  3224. }
  3225. currentQueue = null;
  3226. draining = false;
  3227. runClearTimeout(timeout);
  3228. }
  3229. process.nextTick = function (fun) {
  3230. var args = new Array(arguments.length - 1);
  3231. if (arguments.length > 1) {
  3232. for (var i = 1; i < arguments.length; i++) {
  3233. args[i - 1] = arguments[i];
  3234. }
  3235. }
  3236. queue.push(new Item(fun, args));
  3237. if (queue.length === 1 && !draining) {
  3238. runTimeout(drainQueue);
  3239. }
  3240. };
  3241. // v8 likes predictible objects
  3242. function Item(fun, array) {
  3243. this.fun = fun;
  3244. this.array = array;
  3245. }
  3246. Item.prototype.run = function () {
  3247. this.fun.apply(null, this.array);
  3248. };
  3249. process.title = 'browser';
  3250. process.browser = true;
  3251. process.env = {};
  3252. process.argv = [];
  3253. process.version = ''; // empty string to avoid regexp issues
  3254. process.versions = {};
  3255. function noop() {}
  3256. process.on = noop;
  3257. process.addListener = noop;
  3258. process.once = noop;
  3259. process.off = noop;
  3260. process.removeListener = noop;
  3261. process.removeAllListeners = noop;
  3262. process.emit = noop;
  3263. process.prependListener = noop;
  3264. process.prependOnceListener = noop;
  3265. process.listeners = function (name) { return [] }
  3266. process.binding = function (name) {
  3267. throw new Error('process.binding is not supported');
  3268. };
  3269. process.cwd = function () { return '/' };
  3270. process.chdir = function (dir) {
  3271. throw new Error('process.chdir is not supported');
  3272. };
  3273. process.umask = function() { return 0; };
  3274. /***/ }),
  3275. /* 11 */
  3276. /***/ (function(module, exports) {
  3277. module.exports = function isBuffer(arg) {
  3278. return arg && typeof arg === 'object'
  3279. && typeof arg.copy === 'function'
  3280. && typeof arg.fill === 'function'
  3281. && typeof arg.readUInt8 === 'function';
  3282. }
  3283. /***/ }),
  3284. /* 12 */
  3285. /***/ (function(module, exports) {
  3286. if (typeof Object.create === 'function') {
  3287. // implementation from standard node.js 'util' module
  3288. module.exports = function inherits(ctor, superCtor) {
  3289. ctor.super_ = superCtor
  3290. ctor.prototype = Object.create(superCtor.prototype, {
  3291. constructor: {
  3292. value: ctor,
  3293. enumerable: false,
  3294. writable: true,
  3295. configurable: true
  3296. }
  3297. });
  3298. };
  3299. } else {
  3300. // old school shim for old browsers
  3301. module.exports = function inherits(ctor, superCtor) {
  3302. ctor.super_ = superCtor
  3303. var TempCtor = function () {}
  3304. TempCtor.prototype = superCtor.prototype
  3305. ctor.prototype = new TempCtor()
  3306. ctor.prototype.constructor = ctor
  3307. }
  3308. }
  3309. /***/ }),
  3310. /* 13 */
  3311. /***/ (function(module, exports, __webpack_require__) {
  3312. /*!
  3313. * Copyright (c) 2018, Salesforce.com, Inc.
  3314. * All rights reserved.
  3315. *
  3316. * Redistribution and use in source and binary forms, with or without
  3317. * modification, are permitted provided that the following conditions are met:
  3318. *
  3319. * 1. Redistributions of source code must retain the above copyright notice,
  3320. * this list of conditions and the following disclaimer.
  3321. *
  3322. * 2. Redistributions in binary form must reproduce the above copyright notice,
  3323. * this list of conditions and the following disclaimer in the documentation
  3324. * and/or other materials provided with the distribution.
  3325. *
  3326. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  3327. * be used to endorse or promote products derived from this software without
  3328. * specific prior written permission.
  3329. *
  3330. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  3331. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  3332. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  3333. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  3334. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  3335. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  3336. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  3337. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  3338. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  3339. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  3340. * POSSIBILITY OF SUCH DAMAGE.
  3341. */
  3342. 'use strict';
  3343. var psl = __webpack_require__(14);
  3344. function getPublicSuffix(domain) {
  3345. return psl.get(domain);
  3346. }
  3347. exports.getPublicSuffix = getPublicSuffix;
  3348. /***/ }),
  3349. /* 14 */
  3350. /***/ (function(module, exports, __webpack_require__) {
  3351. /*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
  3352. 'use strict';
  3353. var Punycode = __webpack_require__(15);
  3354. var internals = {};
  3355. //
  3356. // Read rules from file.
  3357. //
  3358. internals.rules = __webpack_require__(16).map(function (rule) {
  3359. return {
  3360. rule: rule,
  3361. suffix: rule.replace(/^(\*\.|\!)/, ''),
  3362. punySuffix: -1,
  3363. wildcard: rule.charAt(0) === '*',
  3364. exception: rule.charAt(0) === '!'
  3365. };
  3366. });
  3367. //
  3368. // Check is given string ends with `suffix`.
  3369. //
  3370. internals.endsWith = function (str, suffix) {
  3371. return str.indexOf(suffix, str.length - suffix.length) !== -1;
  3372. };
  3373. //
  3374. // Find rule for a given domain.
  3375. //
  3376. internals.findRule = function (domain) {
  3377. var punyDomain = Punycode.toASCII(domain);
  3378. return internals.rules.reduce(function (memo, rule) {
  3379. if (rule.punySuffix === -1){
  3380. rule.punySuffix = Punycode.toASCII(rule.suffix);
  3381. }
  3382. if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
  3383. return memo;
  3384. }
  3385. // This has been commented out as it never seems to run. This is because
  3386. // sub tlds always appear after their parents and we never find a shorter
  3387. // match.
  3388. //if (memo) {
  3389. // var memoSuffix = Punycode.toASCII(memo.suffix);
  3390. // if (memoSuffix.length >= punySuffix.length) {
  3391. // return memo;
  3392. // }
  3393. //}
  3394. return rule;
  3395. }, null);
  3396. };
  3397. //
  3398. // Error codes and messages.
  3399. //
  3400. exports.errorCodes = {
  3401. DOMAIN_TOO_SHORT: 'Domain name too short.',
  3402. DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
  3403. LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
  3404. LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
  3405. LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
  3406. LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
  3407. LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
  3408. };
  3409. //
  3410. // Validate domain name and throw if not valid.
  3411. //
  3412. // From wikipedia:
  3413. //
  3414. // Hostnames are composed of series of labels concatenated with dots, as are all
  3415. // domain names. Each label must be between 1 and 63 characters long, and the
  3416. // entire hostname (including the delimiting dots) has a maximum of 255 chars.
  3417. //
  3418. // Allowed chars:
  3419. //
  3420. // * `a-z`
  3421. // * `0-9`
  3422. // * `-` but not as a starting or ending character
  3423. // * `.` as a separator for the textual portions of a domain name
  3424. //
  3425. // * http://en.wikipedia.org/wiki/Domain_name
  3426. // * http://en.wikipedia.org/wiki/Hostname
  3427. //
  3428. internals.validate = function (input) {
  3429. // Before we can validate we need to take care of IDNs with unicode chars.
  3430. var ascii = Punycode.toASCII(input);
  3431. if (ascii.length < 1) {
  3432. return 'DOMAIN_TOO_SHORT';
  3433. }
  3434. if (ascii.length > 255) {
  3435. return 'DOMAIN_TOO_LONG';
  3436. }
  3437. // Check each part's length and allowed chars.
  3438. var labels = ascii.split('.');
  3439. var label;
  3440. for (var i = 0; i < labels.length; ++i) {
  3441. label = labels[i];
  3442. if (!label.length) {
  3443. return 'LABEL_TOO_SHORT';
  3444. }
  3445. if (label.length > 63) {
  3446. return 'LABEL_TOO_LONG';
  3447. }
  3448. if (label.charAt(0) === '-') {
  3449. return 'LABEL_STARTS_WITH_DASH';
  3450. }
  3451. if (label.charAt(label.length - 1) === '-') {
  3452. return 'LABEL_ENDS_WITH_DASH';
  3453. }
  3454. if (!/^[a-z0-9\-]+$/.test(label)) {
  3455. return 'LABEL_INVALID_CHARS';
  3456. }
  3457. }
  3458. };
  3459. //
  3460. // Public API
  3461. //
  3462. //
  3463. // Parse domain.
  3464. //
  3465. exports.parse = function (input) {
  3466. if (typeof input !== 'string') {
  3467. throw new TypeError('Domain name must be a string.');
  3468. }
  3469. // Force domain to lowercase.
  3470. var domain = input.slice(0).toLowerCase();
  3471. // Handle FQDN.
  3472. // TODO: Simply remove trailing dot?
  3473. if (domain.charAt(domain.length - 1) === '.') {
  3474. domain = domain.slice(0, domain.length - 1);
  3475. }
  3476. // Validate and sanitise input.
  3477. var error = internals.validate(domain);
  3478. if (error) {
  3479. return {
  3480. input: input,
  3481. error: {
  3482. message: exports.errorCodes[error],
  3483. code: error
  3484. }
  3485. };
  3486. }
  3487. var parsed = {
  3488. input: input,
  3489. tld: null,
  3490. sld: null,
  3491. domain: null,
  3492. subdomain: null,
  3493. listed: false
  3494. };
  3495. var domainParts = domain.split('.');
  3496. // Non-Internet TLD
  3497. if (domainParts[domainParts.length - 1] === 'local') {
  3498. return parsed;
  3499. }
  3500. var handlePunycode = function () {
  3501. if (!/xn--/.test(domain)) {
  3502. return parsed;
  3503. }
  3504. if (parsed.domain) {
  3505. parsed.domain = Punycode.toASCII(parsed.domain);
  3506. }
  3507. if (parsed.subdomain) {
  3508. parsed.subdomain = Punycode.toASCII(parsed.subdomain);
  3509. }
  3510. return parsed;
  3511. };
  3512. var rule = internals.findRule(domain);
  3513. // Unlisted tld.
  3514. if (!rule) {
  3515. if (domainParts.length < 2) {
  3516. return parsed;
  3517. }
  3518. parsed.tld = domainParts.pop();
  3519. parsed.sld = domainParts.pop();
  3520. parsed.domain = [parsed.sld, parsed.tld].join('.');
  3521. if (domainParts.length) {
  3522. parsed.subdomain = domainParts.pop();
  3523. }
  3524. return handlePunycode();
  3525. }
  3526. // At this point we know the public suffix is listed.
  3527. parsed.listed = true;
  3528. var tldParts = rule.suffix.split('.');
  3529. var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
  3530. if (rule.exception) {
  3531. privateParts.push(tldParts.shift());
  3532. }
  3533. parsed.tld = tldParts.join('.');
  3534. if (!privateParts.length) {
  3535. return handlePunycode();
  3536. }
  3537. if (rule.wildcard) {
  3538. tldParts.unshift(privateParts.pop());
  3539. parsed.tld = tldParts.join('.');
  3540. }
  3541. if (!privateParts.length) {
  3542. return handlePunycode();
  3543. }
  3544. parsed.sld = privateParts.pop();
  3545. parsed.domain = [parsed.sld, parsed.tld].join('.');
  3546. if (privateParts.length) {
  3547. parsed.subdomain = privateParts.join('.');
  3548. }
  3549. return handlePunycode();
  3550. };
  3551. //
  3552. // Get domain.
  3553. //
  3554. exports.get = function (domain) {
  3555. if (!domain) {
  3556. return null;
  3557. }
  3558. return exports.parse(domain).domain || null;
  3559. };
  3560. //
  3561. // Check whether domain belongs to a known public suffix.
  3562. //
  3563. exports.isValid = function (domain) {
  3564. var parsed = exports.parse(domain);
  3565. return Boolean(parsed.domain && parsed.listed);
  3566. };
  3567. /***/ }),
  3568. /* 15 */
  3569. /***/ (function(module, exports, __webpack_require__) {
  3570. var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.4.1 by @mathias */
  3571. ;(function(root) {
  3572. /** Detect free variables */
  3573. var freeExports = typeof exports == 'object' && exports &&
  3574. !exports.nodeType && exports;
  3575. var freeModule = typeof module == 'object' && module &&
  3576. !module.nodeType && module;
  3577. var freeGlobal = typeof global == 'object' && global;
  3578. if (
  3579. freeGlobal.global === freeGlobal ||
  3580. freeGlobal.window === freeGlobal ||
  3581. freeGlobal.self === freeGlobal
  3582. ) {
  3583. root = freeGlobal;
  3584. }
  3585. /**
  3586. * The `punycode` object.
  3587. * @name punycode
  3588. * @type Object
  3589. */
  3590. var punycode,
  3591. /** Highest positive signed 32-bit float value */
  3592. maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
  3593. /** Bootstring parameters */
  3594. base = 36,
  3595. tMin = 1,
  3596. tMax = 26,
  3597. skew = 38,
  3598. damp = 700,
  3599. initialBias = 72,
  3600. initialN = 128, // 0x80
  3601. delimiter = '-', // '\x2D'
  3602. /** Regular expressions */
  3603. regexPunycode = /^xn--/,
  3604. regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
  3605. regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
  3606. /** Error messages */
  3607. errors = {
  3608. 'overflow': 'Overflow: input needs wider integers to process',
  3609. 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
  3610. 'invalid-input': 'Invalid input'
  3611. },
  3612. /** Convenience shortcuts */
  3613. baseMinusTMin = base - tMin,
  3614. floor = Math.floor,
  3615. stringFromCharCode = String.fromCharCode,
  3616. /** Temporary variable */
  3617. key;
  3618. /*--------------------------------------------------------------------------*/
  3619. /**
  3620. * A generic error utility function.
  3621. * @private
  3622. * @param {String} type The error type.
  3623. * @returns {Error} Throws a `RangeError` with the applicable error message.
  3624. */
  3625. function error(type) {
  3626. throw new RangeError(errors[type]);
  3627. }
  3628. /**
  3629. * A generic `Array#map` utility function.
  3630. * @private
  3631. * @param {Array} array The array to iterate over.
  3632. * @param {Function} callback The function that gets called for every array
  3633. * item.
  3634. * @returns {Array} A new array of values returned by the callback function.
  3635. */
  3636. function map(array, fn) {
  3637. var length = array.length;
  3638. var result = [];
  3639. while (length--) {
  3640. result[length] = fn(array[length]);
  3641. }
  3642. return result;
  3643. }
  3644. /**
  3645. * A simple `Array#map`-like wrapper to work with domain name strings or email
  3646. * addresses.
  3647. * @private
  3648. * @param {String} domain The domain name or email address.
  3649. * @param {Function} callback The function that gets called for every
  3650. * character.
  3651. * @returns {Array} A new string of characters returned by the callback
  3652. * function.
  3653. */
  3654. function mapDomain(string, fn) {
  3655. var parts = string.split('@');
  3656. var result = '';
  3657. if (parts.length > 1) {
  3658. // In email addresses, only the domain name should be punycoded. Leave
  3659. // the local part (i.e. everything up to `@`) intact.
  3660. result = parts[0] + '@';
  3661. string = parts[1];
  3662. }
  3663. // Avoid `split(regex)` for IE8 compatibility. See #17.
  3664. string = string.replace(regexSeparators, '\x2E');
  3665. var labels = string.split('.');
  3666. var encoded = map(labels, fn).join('.');
  3667. return result + encoded;
  3668. }
  3669. /**
  3670. * Creates an array containing the numeric code points of each Unicode
  3671. * character in the string. While JavaScript uses UCS-2 internally,
  3672. * this function will convert a pair of surrogate halves (each of which
  3673. * UCS-2 exposes as separate characters) into a single code point,
  3674. * matching UTF-16.
  3675. * @see `punycode.ucs2.encode`
  3676. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  3677. * @memberOf punycode.ucs2
  3678. * @name decode
  3679. * @param {String} string The Unicode input string (UCS-2).
  3680. * @returns {Array} The new array of code points.
  3681. */
  3682. function ucs2decode(string) {
  3683. var output = [],
  3684. counter = 0,
  3685. length = string.length,
  3686. value,
  3687. extra;
  3688. while (counter < length) {
  3689. value = string.charCodeAt(counter++);
  3690. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  3691. // high surrogate, and there is a next character
  3692. extra = string.charCodeAt(counter++);
  3693. if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  3694. output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  3695. } else {
  3696. // unmatched surrogate; only append this code unit, in case the next
  3697. // code unit is the high surrogate of a surrogate pair
  3698. output.push(value);
  3699. counter--;
  3700. }
  3701. } else {
  3702. output.push(value);
  3703. }
  3704. }
  3705. return output;
  3706. }
  3707. /**
  3708. * Creates a string based on an array of numeric code points.
  3709. * @see `punycode.ucs2.decode`
  3710. * @memberOf punycode.ucs2
  3711. * @name encode
  3712. * @param {Array} codePoints The array of numeric code points.
  3713. * @returns {String} The new Unicode string (UCS-2).
  3714. */
  3715. function ucs2encode(array) {
  3716. return map(array, function(value) {
  3717. var output = '';
  3718. if (value > 0xFFFF) {
  3719. value -= 0x10000;
  3720. output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  3721. value = 0xDC00 | value & 0x3FF;
  3722. }
  3723. output += stringFromCharCode(value);
  3724. return output;
  3725. }).join('');
  3726. }
  3727. /**
  3728. * Converts a basic code point into a digit/integer.
  3729. * @see `digitToBasic()`
  3730. * @private
  3731. * @param {Number} codePoint The basic numeric code point value.
  3732. * @returns {Number} The numeric value of a basic code point (for use in
  3733. * representing integers) in the range `0` to `base - 1`, or `base` if
  3734. * the code point does not represent a value.
  3735. */
  3736. function basicToDigit(codePoint) {
  3737. if (codePoint - 48 < 10) {
  3738. return codePoint - 22;
  3739. }
  3740. if (codePoint - 65 < 26) {
  3741. return codePoint - 65;
  3742. }
  3743. if (codePoint - 97 < 26) {
  3744. return codePoint - 97;
  3745. }
  3746. return base;
  3747. }
  3748. /**
  3749. * Converts a digit/integer into a basic code point.
  3750. * @see `basicToDigit()`
  3751. * @private
  3752. * @param {Number} digit The numeric value of a basic code point.
  3753. * @returns {Number} The basic code point whose value (when used for
  3754. * representing integers) is `digit`, which needs to be in the range
  3755. * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
  3756. * used; else, the lowercase form is used. The behavior is undefined
  3757. * if `flag` is non-zero and `digit` has no uppercase form.
  3758. */
  3759. function digitToBasic(digit, flag) {
  3760. // 0..25 map to ASCII a..z or A..Z
  3761. // 26..35 map to ASCII 0..9
  3762. return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
  3763. }
  3764. /**
  3765. * Bias adaptation function as per section 3.4 of RFC 3492.
  3766. * https://tools.ietf.org/html/rfc3492#section-3.4
  3767. * @private
  3768. */
  3769. function adapt(delta, numPoints, firstTime) {
  3770. var k = 0;
  3771. delta = firstTime ? floor(delta / damp) : delta >> 1;
  3772. delta += floor(delta / numPoints);
  3773. for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
  3774. delta = floor(delta / baseMinusTMin);
  3775. }
  3776. return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
  3777. }
  3778. /**
  3779. * Converts a Punycode string of ASCII-only symbols to a string of Unicode
  3780. * symbols.
  3781. * @memberOf punycode
  3782. * @param {String} input The Punycode string of ASCII-only symbols.
  3783. * @returns {String} The resulting string of Unicode symbols.
  3784. */
  3785. function decode(input) {
  3786. // Don't use UCS-2
  3787. var output = [],
  3788. inputLength = input.length,
  3789. out,
  3790. i = 0,
  3791. n = initialN,
  3792. bias = initialBias,
  3793. basic,
  3794. j,
  3795. index,
  3796. oldi,
  3797. w,
  3798. k,
  3799. digit,
  3800. t,
  3801. /** Cached calculation results */
  3802. baseMinusT;
  3803. // Handle the basic code points: let `basic` be the number of input code
  3804. // points before the last delimiter, or `0` if there is none, then copy
  3805. // the first basic code points to the output.
  3806. basic = input.lastIndexOf(delimiter);
  3807. if (basic < 0) {
  3808. basic = 0;
  3809. }
  3810. for (j = 0; j < basic; ++j) {
  3811. // if it's not a basic code point
  3812. if (input.charCodeAt(j) >= 0x80) {
  3813. error('not-basic');
  3814. }
  3815. output.push(input.charCodeAt(j));
  3816. }
  3817. // Main decoding loop: start just after the last delimiter if any basic code
  3818. // points were copied; start at the beginning otherwise.
  3819. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
  3820. // `index` is the index of the next character to be consumed.
  3821. // Decode a generalized variable-length integer into `delta`,
  3822. // which gets added to `i`. The overflow checking is easier
  3823. // if we increase `i` as we go, then subtract off its starting
  3824. // value at the end to obtain `delta`.
  3825. for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
  3826. if (index >= inputLength) {
  3827. error('invalid-input');
  3828. }
  3829. digit = basicToDigit(input.charCodeAt(index++));
  3830. if (digit >= base || digit > floor((maxInt - i) / w)) {
  3831. error('overflow');
  3832. }
  3833. i += digit * w;
  3834. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  3835. if (digit < t) {
  3836. break;
  3837. }
  3838. baseMinusT = base - t;
  3839. if (w > floor(maxInt / baseMinusT)) {
  3840. error('overflow');
  3841. }
  3842. w *= baseMinusT;
  3843. }
  3844. out = output.length + 1;
  3845. bias = adapt(i - oldi, out, oldi == 0);
  3846. // `i` was supposed to wrap around from `out` to `0`,
  3847. // incrementing `n` each time, so we'll fix that now:
  3848. if (floor(i / out) > maxInt - n) {
  3849. error('overflow');
  3850. }
  3851. n += floor(i / out);
  3852. i %= out;
  3853. // Insert `n` at position `i` of the output
  3854. output.splice(i++, 0, n);
  3855. }
  3856. return ucs2encode(output);
  3857. }
  3858. /**
  3859. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  3860. * Punycode string of ASCII-only symbols.
  3861. * @memberOf punycode
  3862. * @param {String} input The string of Unicode symbols.
  3863. * @returns {String} The resulting Punycode string of ASCII-only symbols.
  3864. */
  3865. function encode(input) {
  3866. var n,
  3867. delta,
  3868. handledCPCount,
  3869. basicLength,
  3870. bias,
  3871. j,
  3872. m,
  3873. q,
  3874. k,
  3875. t,
  3876. currentValue,
  3877. output = [],
  3878. /** `inputLength` will hold the number of code points in `input`. */
  3879. inputLength,
  3880. /** Cached calculation results */
  3881. handledCPCountPlusOne,
  3882. baseMinusT,
  3883. qMinusT;
  3884. // Convert the input in UCS-2 to Unicode
  3885. input = ucs2decode(input);
  3886. // Cache the length
  3887. inputLength = input.length;
  3888. // Initialize the state
  3889. n = initialN;
  3890. delta = 0;
  3891. bias = initialBias;
  3892. // Handle the basic code points
  3893. for (j = 0; j < inputLength; ++j) {
  3894. currentValue = input[j];
  3895. if (currentValue < 0x80) {
  3896. output.push(stringFromCharCode(currentValue));
  3897. }
  3898. }
  3899. handledCPCount = basicLength = output.length;
  3900. // `handledCPCount` is the number of code points that have been handled;
  3901. // `basicLength` is the number of basic code points.
  3902. // Finish the basic string - if it is not empty - with a delimiter
  3903. if (basicLength) {
  3904. output.push(delimiter);
  3905. }
  3906. // Main encoding loop:
  3907. while (handledCPCount < inputLength) {
  3908. // All non-basic code points < n have been handled already. Find the next
  3909. // larger one:
  3910. for (m = maxInt, j = 0; j < inputLength; ++j) {
  3911. currentValue = input[j];
  3912. if (currentValue >= n && currentValue < m) {
  3913. m = currentValue;
  3914. }
  3915. }
  3916. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
  3917. // but guard against overflow
  3918. handledCPCountPlusOne = handledCPCount + 1;
  3919. if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
  3920. error('overflow');
  3921. }
  3922. delta += (m - n) * handledCPCountPlusOne;
  3923. n = m;
  3924. for (j = 0; j < inputLength; ++j) {
  3925. currentValue = input[j];
  3926. if (currentValue < n && ++delta > maxInt) {
  3927. error('overflow');
  3928. }
  3929. if (currentValue == n) {
  3930. // Represent delta as a generalized variable-length integer
  3931. for (q = delta, k = base; /* no condition */; k += base) {
  3932. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  3933. if (q < t) {
  3934. break;
  3935. }
  3936. qMinusT = q - t;
  3937. baseMinusT = base - t;
  3938. output.push(
  3939. stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
  3940. );
  3941. q = floor(qMinusT / baseMinusT);
  3942. }
  3943. output.push(stringFromCharCode(digitToBasic(q, 0)));
  3944. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  3945. delta = 0;
  3946. ++handledCPCount;
  3947. }
  3948. }
  3949. ++delta;
  3950. ++n;
  3951. }
  3952. return output.join('');
  3953. }
  3954. /**
  3955. * Converts a Punycode string representing a domain name or an email address
  3956. * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
  3957. * it doesn't matter if you call it on a string that has already been
  3958. * converted to Unicode.
  3959. * @memberOf punycode
  3960. * @param {String} input The Punycoded domain name or email address to
  3961. * convert to Unicode.
  3962. * @returns {String} The Unicode representation of the given Punycode
  3963. * string.
  3964. */
  3965. function toUnicode(input) {
  3966. return mapDomain(input, function(string) {
  3967. return regexPunycode.test(string)
  3968. ? decode(string.slice(4).toLowerCase())
  3969. : string;
  3970. });
  3971. }
  3972. /**
  3973. * Converts a Unicode string representing a domain name or an email address to
  3974. * Punycode. Only the non-ASCII parts of the domain name will be converted,
  3975. * i.e. it doesn't matter if you call it with a domain that's already in
  3976. * ASCII.
  3977. * @memberOf punycode
  3978. * @param {String} input The domain name or email address to convert, as a
  3979. * Unicode string.
  3980. * @returns {String} The Punycode representation of the given domain name or
  3981. * email address.
  3982. */
  3983. function toASCII(input) {
  3984. return mapDomain(input, function(string) {
  3985. return regexNonASCII.test(string)
  3986. ? 'xn--' + encode(string)
  3987. : string;
  3988. });
  3989. }
  3990. /*--------------------------------------------------------------------------*/
  3991. /** Define the public API */
  3992. punycode = {
  3993. /**
  3994. * A string representing the current Punycode.js version number.
  3995. * @memberOf punycode
  3996. * @type String
  3997. */
  3998. 'version': '1.4.1',
  3999. /**
  4000. * An object of methods to convert from JavaScript's internal character
  4001. * representation (UCS-2) to Unicode code points, and back.
  4002. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  4003. * @memberOf punycode
  4004. * @type Object
  4005. */
  4006. 'ucs2': {
  4007. 'decode': ucs2decode,
  4008. 'encode': ucs2encode
  4009. },
  4010. 'decode': decode,
  4011. 'encode': encode,
  4012. 'toASCII': toASCII,
  4013. 'toUnicode': toUnicode
  4014. };
  4015. /** Expose `punycode` */
  4016. // Some AMD build optimizers, like r.js, check for specific condition patterns
  4017. // like the following:
  4018. if (
  4019. true
  4020. ) {
  4021. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  4022. return punycode;
  4023. }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  4024. } else if (freeExports && freeModule) {
  4025. if (module.exports == freeExports) {
  4026. // in Node.js, io.js, or RingoJS v0.8.0+
  4027. freeModule.exports = punycode;
  4028. } else {
  4029. // in Narwhal or RingoJS v0.7.0-
  4030. for (key in punycode) {
  4031. punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
  4032. }
  4033. }
  4034. } else {
  4035. // in Rhino or a web browser
  4036. root.punycode = punycode;
  4037. }
  4038. }(this));
  4039. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module), (function() { return this; }())))
  4040. /***/ }),
  4041. /* 16 */
  4042. /***/ (function(module, exports) {
  4043. module.exports = ["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad","nom.ad","ae","co.ae","net.ae","org.ae","sch.ae","ac.ae","gov.ae","mil.ae","aero","accident-investigation.aero","accident-prevention.aero","aerobatic.aero","aeroclub.aero","aerodrome.aero","agents.aero","aircraft.aero","airline.aero","airport.aero","air-surveillance.aero","airtraffic.aero","air-traffic-control.aero","ambulance.aero","amusement.aero","association.aero","author.aero","ballooning.aero","broker.aero","caa.aero","cargo.aero","catering.aero","certification.aero","championship.aero","charter.aero","civilaviation.aero","club.aero","conference.aero","consultant.aero","consulting.aero","control.aero","council.aero","crew.aero","design.aero","dgca.aero","educator.aero","emergency.aero","engine.aero","engineer.aero","entertainment.aero","equipment.aero","exchange.aero","express.aero","federation.aero","flight.aero","freight.aero","fuel.aero","gliding.aero","government.aero","groundhandling.aero","group.aero","hanggliding.aero","homebuilt.aero","insurance.aero","journal.aero","journalist.aero","leasing.aero","logistics.aero","magazine.aero","maintenance.aero","media.aero","microlight.aero","modelling.aero","navigation.aero","parachuting.aero","paragliding.aero","passenger-association.aero","pilot.aero","press.aero","production.aero","recreation.aero","repbody.aero","res.aero","research.aero","rotorcraft.aero","safety.aero","scientist.aero","services.aero","show.aero","skydiving.aero","software.aero","student.aero","trader.aero","trading.aero","trainer.aero","union.aero","workinggroup.aero","works.aero","af","gov.af","com.af","org.af","net.af","edu.af","ag","com.ag","org.ag","net.ag","co.ag","nom.ag","ai","off.ai","com.ai","net.ai","org.ai","al","com.al","edu.al","gov.al","mil.al","net.al","org.al","am","ao","ed.ao","gv.ao","og.ao","co.ao","pb.ao","it.ao","aq","ar","com.ar","edu.ar","gob.ar","gov.ar","int.ar","mil.ar","musica.ar","net.ar","org.ar","tur.ar","arpa","e164.arpa","in-addr.arpa","ip6.arpa","iris.arpa","uri.arpa","urn.arpa","as","gov.as","asia","at","ac.at","co.at","gv.at","or.at","au","com.au","net.au","org.au","edu.au","gov.au","asn.au","id.au","info.au","conf.au","oz.au","act.au","nsw.au","nt.au","qld.au","sa.au","tas.au","vic.au","wa.au","act.edu.au","nsw.edu.au","nt.edu.au","qld.edu.au","sa.edu.au","tas.edu.au","vic.edu.au","wa.edu.au","qld.gov.au","sa.gov.au","tas.gov.au","vic.gov.au","wa.gov.au","aw","com.aw","ax","az","com.az","net.az","int.az","gov.az","org.az","edu.az","info.az","pp.az","mil.az","name.az","pro.az","biz.az","ba","com.ba","edu.ba","gov.ba","mil.ba","net.ba","org.ba","bb","biz.bb","co.bb","com.bb","edu.bb","gov.bb","info.bb","net.bb","org.bb","store.bb","tv.bb","*.bd","be","ac.be","bf","gov.bf","bg","a.bg","b.bg","c.bg","d.bg","e.bg","f.bg","g.bg","h.bg","i.bg","j.bg","k.bg","l.bg","m.bg","n.bg","o.bg","p.bg","q.bg","r.bg","s.bg","t.bg","u.bg","v.bg","w.bg","x.bg","y.bg","z.bg","0.bg","1.bg","2.bg","3.bg","4.bg","5.bg","6.bg","7.bg","8.bg","9.bg","bh","com.bh","edu.bh","net.bh","org.bh","gov.bh","bi","co.bi","com.bi","edu.bi","or.bi","org.bi","biz","bj","asso.bj","barreau.bj","gouv.bj","bm","com.bm","edu.bm","gov.bm","net.bm","org.bm","*.bn","bo","com.bo","edu.bo","gob.bo","int.bo","org.bo","net.bo","mil.bo","tv.bo","web.bo","academia.bo","agro.bo","arte.bo","blog.bo","bolivia.bo","ciencia.bo","cooperativa.bo","democracia.bo","deporte.bo","ecologia.bo","economia.bo","empresa.bo","indigena.bo","industria.bo","info.bo","medicina.bo","movimiento.bo","musica.bo","natural.bo","nombre.bo","noticias.bo","patria.bo","politica.bo","profesional.bo","plurinacional.bo","pueblo.bo","revista.bo","salud.bo","tecnologia.bo","tksat.bo","transporte.bo","wiki.bo","br","9guacu.br","abc.br","adm.br","adv.br","agr.br","aju.br","am.br","anani.br","aparecida.br","arq.br","art.br","ato.br","b.br","barueri.br","belem.br","bhz.br","bio.br","blog.br","bmd.br","boavista.br","bsb.br","campinagrande.br","campinas.br","caxias.br","cim.br","cng.br","cnt.br","com.br","contagem.br","coop.br","cri.br","cuiaba.br","curitiba.br","def.br","ecn.br","eco.br","edu.br","emp.br","eng.br","esp.br","etc.br","eti.br","far.br","feira.br","flog.br","floripa.br","fm.br","fnd.br","fortal.br","fot.br","foz.br","fst.br","g12.br","ggf.br","goiania.br","gov.br","ac.gov.br","al.gov.br","am.gov.br","ap.gov.br","ba.gov.br","ce.gov.br","df.gov.br","es.gov.br","go.gov.br","ma.gov.br","mg.gov.br","ms.gov.br","mt.gov.br","pa.gov.br","pb.gov.br","pe.gov.br","pi.gov.br","pr.gov.br","rj.gov.br","rn.gov.br","ro.gov.br","rr.gov.br","rs.gov.br","sc.gov.br","se.gov.br","sp.gov.br","to.gov.br","gru.br","imb.br","ind.br","inf.br","jab.br","jampa.br","jdf.br","joinville.br","jor.br","jus.br","leg.br","lel.br","londrina.br","macapa.br","maceio.br","manaus.br","maringa.br","mat.br","med.br","mil.br","morena.br","mp.br","mus.br","natal.br","net.br","niteroi.br","*.nom.br","not.br","ntr.br","odo.br","org.br","osasco.br","palmas.br","poa.br","ppg.br","pro.br","psc.br","psi.br","pvh.br","qsl.br","radio.br","rec.br","recife.br","ribeirao.br","rio.br","riobranco.br","riopreto.br","salvador.br","sampa.br","santamaria.br","santoandre.br","saobernardo.br","saogonca.br","sjc.br","slg.br","slz.br","sorocaba.br","srv.br","taxi.br","teo.br","the.br","tmp.br","trd.br","tur.br","tv.br","udi.br","vet.br","vix.br","vlog.br","wiki.br","zlg.br","bs","com.bs","net.bs","org.bs","edu.bs","gov.bs","bt","com.bt","edu.bt","gov.bt","net.bt","org.bt","bv","bw","co.bw","org.bw","by","gov.by","mil.by","com.by","of.by","bz","com.bz","net.bz","org.bz","edu.bz","gov.bz","ca","ab.ca","bc.ca","mb.ca","nb.ca","nf.ca","nl.ca","ns.ca","nt.ca","nu.ca","on.ca","pe.ca","qc.ca","sk.ca","yk.ca","gc.ca","cat","cc","cd","gov.cd","cf","cg","ch","ci","org.ci","or.ci","com.ci","co.ci","edu.ci","ed.ci","ac.ci","net.ci","go.ci","asso.ci","aéroport.ci","int.ci","presse.ci","md.ci","gouv.ci","*.ck","!www.ck","cl","gov.cl","gob.cl","co.cl","mil.cl","cm","co.cm","com.cm","gov.cm","net.cm","cn","ac.cn","com.cn","edu.cn","gov.cn","net.cn","org.cn","mil.cn","公司.cn","网络.cn","網絡.cn","ah.cn","bj.cn","cq.cn","fj.cn","gd.cn","gs.cn","gz.cn","gx.cn","ha.cn","hb.cn","he.cn","hi.cn","hl.cn","hn.cn","jl.cn","js.cn","jx.cn","ln.cn","nm.cn","nx.cn","qh.cn","sc.cn","sd.cn","sh.cn","sn.cn","sx.cn","tj.cn","xj.cn","xz.cn","yn.cn","zj.cn","hk.cn","mo.cn","tw.cn","co","arts.co","com.co","edu.co","firm.co","gov.co","info.co","int.co","mil.co","net.co","nom.co","org.co","rec.co","web.co","com","coop","cr","ac.cr","co.cr","ed.cr","fi.cr","go.cr","or.cr","sa.cr","cu","com.cu","edu.cu","org.cu","net.cu","gov.cu","inf.cu","cv","cw","com.cw","edu.cw","net.cw","org.cw","cx","gov.cx","cy","ac.cy","biz.cy","com.cy","ekloges.cy","gov.cy","ltd.cy","name.cy","net.cy","org.cy","parliament.cy","press.cy","pro.cy","tm.cy","cz","de","dj","dk","dm","com.dm","net.dm","org.dm","edu.dm","gov.dm","do","art.do","com.do","edu.do","gob.do","gov.do","mil.do","net.do","org.do","sld.do","web.do","dz","com.dz","org.dz","net.dz","gov.dz","edu.dz","asso.dz","pol.dz","art.dz","ec","com.ec","info.ec","net.ec","fin.ec","k12.ec","med.ec","pro.ec","org.ec","edu.ec","gov.ec","gob.ec","mil.ec","edu","ee","edu.ee","gov.ee","riik.ee","lib.ee","med.ee","com.ee","pri.ee","aip.ee","org.ee","fie.ee","eg","com.eg","edu.eg","eun.eg","gov.eg","mil.eg","name.eg","net.eg","org.eg","sci.eg","*.er","es","com.es","nom.es","org.es","gob.es","edu.es","et","com.et","gov.et","org.et","edu.et","biz.et","name.et","info.et","net.et","eu","fi","aland.fi","*.fj","*.fk","fm","fo","fr","com.fr","asso.fr","nom.fr","prd.fr","presse.fr","tm.fr","aeroport.fr","assedic.fr","avocat.fr","avoues.fr","cci.fr","chambagri.fr","chirurgiens-dentistes.fr","experts-comptables.fr","geometre-expert.fr","gouv.fr","greta.fr","huissier-justice.fr","medecin.fr","notaires.fr","pharmacien.fr","port.fr","veterinaire.fr","ga","gb","gd","ge","com.ge","edu.ge","gov.ge","org.ge","mil.ge","net.ge","pvt.ge","gf","gg","co.gg","net.gg","org.gg","gh","com.gh","edu.gh","gov.gh","org.gh","mil.gh","gi","com.gi","ltd.gi","gov.gi","mod.gi","edu.gi","org.gi","gl","co.gl","com.gl","edu.gl","net.gl","org.gl","gm","gn","ac.gn","com.gn","edu.gn","gov.gn","org.gn","net.gn","gov","gp","com.gp","net.gp","mobi.gp","edu.gp","org.gp","asso.gp","gq","gr","com.gr","edu.gr","net.gr","org.gr","gov.gr","gs","gt","com.gt","edu.gt","gob.gt","ind.gt","mil.gt","net.gt","org.gt","gu","com.gu","edu.gu","gov.gu","guam.gu","info.gu","net.gu","org.gu","web.gu","gw","gy","co.gy","com.gy","edu.gy","gov.gy","net.gy","org.gy","hk","com.hk","edu.hk","gov.hk","idv.hk","net.hk","org.hk","公司.hk","教育.hk","敎育.hk","政府.hk","個人.hk","个人.hk","箇人.hk","網络.hk","网络.hk","组織.hk","網絡.hk","网絡.hk","组织.hk","組織.hk","組织.hk","hm","hn","com.hn","edu.hn","org.hn","net.hn","mil.hn","gob.hn","hr","iz.hr","from.hr","name.hr","com.hr","ht","com.ht","shop.ht","firm.ht","info.ht","adult.ht","net.ht","pro.ht","org.ht","med.ht","art.ht","coop.ht","pol.ht","asso.ht","edu.ht","rel.ht","gouv.ht","perso.ht","hu","co.hu","info.hu","org.hu","priv.hu","sport.hu","tm.hu","2000.hu","agrar.hu","bolt.hu","casino.hu","city.hu","erotica.hu","erotika.hu","film.hu","forum.hu","games.hu","hotel.hu","ingatlan.hu","jogasz.hu","konyvelo.hu","lakas.hu","media.hu","news.hu","reklam.hu","sex.hu","shop.hu","suli.hu","szex.hu","tozsde.hu","utazas.hu","video.hu","id","ac.id","biz.id","co.id","desa.id","go.id","mil.id","my.id","net.id","or.id","sch.id","web.id","ie","gov.ie","il","ac.il","co.il","gov.il","idf.il","k12.il","muni.il","net.il","org.il","im","ac.im","co.im","com.im","ltd.co.im","net.im","org.im","plc.co.im","tt.im","tv.im","in","co.in","firm.in","net.in","org.in","gen.in","ind.in","nic.in","ac.in","edu.in","res.in","gov.in","mil.in","info","int","eu.int","io","com.io","iq","gov.iq","edu.iq","mil.iq","com.iq","org.iq","net.iq","ir","ac.ir","co.ir","gov.ir","id.ir","net.ir","org.ir","sch.ir","ایران.ir","ايران.ir","is","net.is","com.is","edu.is","gov.is","org.is","int.is","it","gov.it","edu.it","abr.it","abruzzo.it","aosta-valley.it","aostavalley.it","bas.it","basilicata.it","cal.it","calabria.it","cam.it","campania.it","emilia-romagna.it","emiliaromagna.it","emr.it","friuli-v-giulia.it","friuli-ve-giulia.it","friuli-vegiulia.it","friuli-venezia-giulia.it","friuli-veneziagiulia.it","friuli-vgiulia.it","friuliv-giulia.it","friulive-giulia.it","friulivegiulia.it","friulivenezia-giulia.it","friuliveneziagiulia.it","friulivgiulia.it","fvg.it","laz.it","lazio.it","lig.it","liguria.it","lom.it","lombardia.it","lombardy.it","lucania.it","mar.it","marche.it","mol.it","molise.it","piedmont.it","piemonte.it","pmn.it","pug.it","puglia.it","sar.it","sardegna.it","sardinia.it","sic.it","sicilia.it","sicily.it","taa.it","tos.it","toscana.it","trentin-sud-tirol.it","trentin-süd-tirol.it","trentin-sudtirol.it","trentin-südtirol.it","trentin-sued-tirol.it","trentin-suedtirol.it","trentino-a-adige.it","trentino-aadige.it","trentino-alto-adige.it","trentino-altoadige.it","trentino-s-tirol.it","trentino-stirol.it","trentino-sud-tirol.it","trentino-süd-tirol.it","trentino-sudtirol.it","trentino-südtirol.it","trentino-sued-tirol.it","trentino-suedtirol.it","trentino.it","trentinoa-adige.it","trentinoaadige.it","trentinoalto-adige.it","trentinoaltoadige.it","trentinos-tirol.it","trentinostirol.it","trentinosud-tirol.it","trentinosüd-tirol.it","trentinosudtirol.it","trentinosüdtirol.it","trentinosued-tirol.it","trentinosuedtirol.it","trentinsud-tirol.it","trentinsüd-tirol.it","trentinsudtirol.it","trentinsüdtirol.it","trentinsued-tirol.it","trentinsuedtirol.it","tuscany.it","umb.it","umbria.it","val-d-aosta.it","val-daosta.it","vald-aosta.it","valdaosta.it","valle-aosta.it","valle-d-aosta.it","valle-daosta.it","valleaosta.it","valled-aosta.it","valledaosta.it","vallee-aoste.it","vallée-aoste.it","vallee-d-aoste.it","vallée-d-aoste.it","valleeaoste.it","valléeaoste.it","valleedaoste.it","valléedaoste.it","vao.it","vda.it","ven.it","veneto.it","ag.it","agrigento.it","al.it","alessandria.it","alto-adige.it","altoadige.it","an.it","ancona.it","andria-barletta-trani.it","andria-trani-barletta.it","andriabarlettatrani.it","andriatranibarletta.it","ao.it","aosta.it","aoste.it","ap.it","aq.it","aquila.it","ar.it","arezzo.it","ascoli-piceno.it","ascolipiceno.it","asti.it","at.it","av.it","avellino.it","ba.it","balsan-sudtirol.it","balsan-südtirol.it","balsan-suedtirol.it","balsan.it","bari.it","barletta-trani-andria.it","barlettatraniandria.it","belluno.it","benevento.it","bergamo.it","bg.it","bi.it","biella.it","bl.it","bn.it","bo.it","bologna.it","bolzano-altoadige.it","bolzano.it","bozen-sudtirol.it","bozen-südtirol.it","bozen-suedtirol.it","bozen.it","br.it","brescia.it","brindisi.it","bs.it","bt.it","bulsan-sudtirol.it","bulsan-südtirol.it","bulsan-suedtirol.it","bulsan.it","bz.it","ca.it","cagliari.it","caltanissetta.it","campidano-medio.it","campidanomedio.it","campobasso.it","carbonia-iglesias.it","carboniaiglesias.it","carrara-massa.it","carraramassa.it","caserta.it","catania.it","catanzaro.it","cb.it","ce.it","cesena-forli.it","cesena-forlì.it","cesenaforli.it","cesenaforlì.it","ch.it","chieti.it","ci.it","cl.it","cn.it","co.it","como.it","cosenza.it","cr.it","cremona.it","crotone.it","cs.it","ct.it","cuneo.it","cz.it","dell-ogliastra.it","dellogliastra.it","en.it","enna.it","fc.it","fe.it","fermo.it","ferrara.it","fg.it","fi.it","firenze.it","florence.it","fm.it","foggia.it","forli-cesena.it","forlì-cesena.it","forlicesena.it","forlìcesena.it","fr.it","frosinone.it","ge.it","genoa.it","genova.it","go.it","gorizia.it","gr.it","grosseto.it","iglesias-carbonia.it","iglesiascarbonia.it","im.it","imperia.it","is.it","isernia.it","kr.it","la-spezia.it","laquila.it","laspezia.it","latina.it","lc.it","le.it","lecce.it","lecco.it","li.it","livorno.it","lo.it","lodi.it","lt.it","lu.it","lucca.it","macerata.it","mantova.it","massa-carrara.it","massacarrara.it","matera.it","mb.it","mc.it","me.it","medio-campidano.it","mediocampidano.it","messina.it","mi.it","milan.it","milano.it","mn.it","mo.it","modena.it","monza-brianza.it","monza-e-della-brianza.it","monza.it","monzabrianza.it","monzaebrianza.it","monzaedellabrianza.it","ms.it","mt.it","na.it","naples.it","napoli.it","no.it","novara.it","nu.it","nuoro.it","og.it","ogliastra.it","olbia-tempio.it","olbiatempio.it","or.it","oristano.it","ot.it","pa.it","padova.it","padua.it","palermo.it","parma.it","pavia.it","pc.it","pd.it","pe.it","perugia.it","pesaro-urbino.it","pesarourbino.it","pescara.it","pg.it","pi.it","piacenza.it","pisa.it","pistoia.it","pn.it","po.it","pordenone.it","potenza.it","pr.it","prato.it","pt.it","pu.it","pv.it","pz.it","ra.it","ragusa.it","ravenna.it","rc.it","re.it","reggio-calabria.it","reggio-emilia.it","reggiocalabria.it","reggioemilia.it","rg.it","ri.it","rieti.it","rimini.it","rm.it","rn.it","ro.it","roma.it","rome.it","rovigo.it","sa.it","salerno.it","sassari.it","savona.it","si.it","siena.it","siracusa.it","so.it","sondrio.it","sp.it","sr.it","ss.it","suedtirol.it","südtirol.it","sv.it","ta.it","taranto.it","te.it","tempio-olbia.it","tempioolbia.it","teramo.it","terni.it","tn.it","to.it","torino.it","tp.it","tr.it","trani-andria-barletta.it","trani-barletta-andria.it","traniandriabarletta.it","tranibarlettaandria.it","trapani.it","trento.it","treviso.it","trieste.it","ts.it","turin.it","tv.it","ud.it","udine.it","urbino-pesaro.it","urbinopesaro.it","va.it","varese.it","vb.it","vc.it","ve.it","venezia.it","venice.it","verbania.it","vercelli.it","verona.it","vi.it","vibo-valentia.it","vibovalentia.it","vicenza.it","viterbo.it","vr.it","vs.it","vt.it","vv.it","je","co.je","net.je","org.je","*.jm","jo","com.jo","org.jo","net.jo","edu.jo","sch.jo","gov.jo","mil.jo","name.jo","jobs","jp","ac.jp","ad.jp","co.jp","ed.jp","go.jp","gr.jp","lg.jp","ne.jp","or.jp","aichi.jp","akita.jp","aomori.jp","chiba.jp","ehime.jp","fukui.jp","fukuoka.jp","fukushima.jp","gifu.jp","gunma.jp","hiroshima.jp","hokkaido.jp","hyogo.jp","ibaraki.jp","ishikawa.jp","iwate.jp","kagawa.jp","kagoshima.jp","kanagawa.jp","kochi.jp","kumamoto.jp","kyoto.jp","mie.jp","miyagi.jp","miyazaki.jp","nagano.jp","nagasaki.jp","nara.jp","niigata.jp","oita.jp","okayama.jp","okinawa.jp","osaka.jp","saga.jp","saitama.jp","shiga.jp","shimane.jp","shizuoka.jp","tochigi.jp","tokushima.jp","tokyo.jp","tottori.jp","toyama.jp","wakayama.jp","yamagata.jp","yamaguchi.jp","yamanashi.jp","栃木.jp","愛知.jp","愛媛.jp","兵庫.jp","熊本.jp","茨城.jp","北海道.jp","千葉.jp","和歌山.jp","長崎.jp","長野.jp","新潟.jp","青森.jp","静岡.jp","東京.jp","石川.jp","埼玉.jp","三重.jp","京都.jp","佐賀.jp","大分.jp","大阪.jp","奈良.jp","宮城.jp","宮崎.jp","富山.jp","山口.jp","山形.jp","山梨.jp","岩手.jp","岐阜.jp","岡山.jp","島根.jp","広島.jp","徳島.jp","沖縄.jp","滋賀.jp","神奈川.jp","福井.jp","福岡.jp","福島.jp","秋田.jp","群馬.jp","香川.jp","高知.jp","鳥取.jp","鹿児島.jp","*.kawasaki.jp","*.kitakyushu.jp","*.kobe.jp","*.nagoya.jp","*.sapporo.jp","*.sendai.jp","*.yokohama.jp","!city.kawasaki.jp","!city.kitakyushu.jp","!city.kobe.jp","!city.nagoya.jp","!city.sapporo.jp","!city.sendai.jp","!city.yokohama.jp","aisai.aichi.jp","ama.aichi.jp","anjo.aichi.jp","asuke.aichi.jp","chiryu.aichi.jp","chita.aichi.jp","fuso.aichi.jp","gamagori.aichi.jp","handa.aichi.jp","hazu.aichi.jp","hekinan.aichi.jp","higashiura.aichi.jp","ichinomiya.aichi.jp","inazawa.aichi.jp","inuyama.aichi.jp","isshiki.aichi.jp","iwakura.aichi.jp","kanie.aichi.jp","kariya.aichi.jp","kasugai.aichi.jp","kira.aichi.jp","kiyosu.aichi.jp","komaki.aichi.jp","konan.aichi.jp","kota.aichi.jp","mihama.aichi.jp","miyoshi.aichi.jp","nishio.aichi.jp","nisshin.aichi.jp","obu.aichi.jp","oguchi.aichi.jp","oharu.aichi.jp","okazaki.aichi.jp","owariasahi.aichi.jp","seto.aichi.jp","shikatsu.aichi.jp","shinshiro.aichi.jp","shitara.aichi.jp","tahara.aichi.jp","takahama.aichi.jp","tobishima.aichi.jp","toei.aichi.jp","togo.aichi.jp","tokai.aichi.jp","tokoname.aichi.jp","toyoake.aichi.jp","toyohashi.aichi.jp","toyokawa.aichi.jp","toyone.aichi.jp","toyota.aichi.jp","tsushima.aichi.jp","yatomi.aichi.jp","akita.akita.jp","daisen.akita.jp","fujisato.akita.jp","gojome.akita.jp","hachirogata.akita.jp","happou.akita.jp","higashinaruse.akita.jp","honjo.akita.jp","honjyo.akita.jp","ikawa.akita.jp","kamikoani.akita.jp","kamioka.akita.jp","katagami.akita.jp","kazuno.akita.jp","kitaakita.akita.jp","kosaka.akita.jp","kyowa.akita.jp","misato.akita.jp","mitane.akita.jp","moriyoshi.akita.jp","nikaho.akita.jp","noshiro.akita.jp","odate.akita.jp","oga.akita.jp","ogata.akita.jp","semboku.akita.jp","yokote.akita.jp","yurihonjo.akita.jp","aomori.aomori.jp","gonohe.aomori.jp","hachinohe.aomori.jp","hashikami.aomori.jp","hiranai.aomori.jp","hirosaki.aomori.jp","itayanagi.aomori.jp","kuroishi.aomori.jp","misawa.aomori.jp","mutsu.aomori.jp","nakadomari.aomori.jp","noheji.aomori.jp","oirase.aomori.jp","owani.aomori.jp","rokunohe.aomori.jp","sannohe.aomori.jp","shichinohe.aomori.jp","shingo.aomori.jp","takko.aomori.jp","towada.aomori.jp","tsugaru.aomori.jp","tsuruta.aomori.jp","abiko.chiba.jp","asahi.chiba.jp","chonan.chiba.jp","chosei.chiba.jp","choshi.chiba.jp","chuo.chiba.jp","funabashi.chiba.jp","futtsu.chiba.jp","hanamigawa.chiba.jp","ichihara.chiba.jp","ichikawa.chiba.jp","ichinomiya.chiba.jp","inzai.chiba.jp","isumi.chiba.jp","kamagaya.chiba.jp","kamogawa.chiba.jp","kashiwa.chiba.jp","katori.chiba.jp","katsuura.chiba.jp","kimitsu.chiba.jp","kisarazu.chiba.jp","kozaki.chiba.jp","kujukuri.chiba.jp","kyonan.chiba.jp","matsudo.chiba.jp","midori.chiba.jp","mihama.chiba.jp","minamiboso.chiba.jp","mobara.chiba.jp","mutsuzawa.chiba.jp","nagara.chiba.jp","nagareyama.chiba.jp","narashino.chiba.jp","narita.chiba.jp","noda.chiba.jp","oamishirasato.chiba.jp","omigawa.chiba.jp","onjuku.chiba.jp","otaki.chiba.jp","sakae.chiba.jp","sakura.chiba.jp","shimofusa.chiba.jp","shirako.chiba.jp","shiroi.chiba.jp","shisui.chiba.jp","sodegaura.chiba.jp","sosa.chiba.jp","tako.chiba.jp","tateyama.chiba.jp","togane.chiba.jp","tohnosho.chiba.jp","tomisato.chiba.jp","urayasu.chiba.jp","yachimata.chiba.jp","yachiyo.chiba.jp","yokaichiba.chiba.jp","yokoshibahikari.chiba.jp","yotsukaido.chiba.jp","ainan.ehime.jp","honai.ehime.jp","ikata.ehime.jp","imabari.ehime.jp","iyo.ehime.jp","kamijima.ehime.jp","kihoku.ehime.jp","kumakogen.ehime.jp","masaki.ehime.jp","matsuno.ehime.jp","matsuyama.ehime.jp","namikata.ehime.jp","niihama.ehime.jp","ozu.ehime.jp","saijo.ehime.jp","seiyo.ehime.jp","shikokuchuo.ehime.jp","tobe.ehime.jp","toon.ehime.jp","uchiko.ehime.jp","uwajima.ehime.jp","yawatahama.ehime.jp","echizen.fukui.jp","eiheiji.fukui.jp","fukui.fukui.jp","ikeda.fukui.jp","katsuyama.fukui.jp","mihama.fukui.jp","minamiechizen.fukui.jp","obama.fukui.jp","ohi.fukui.jp","ono.fukui.jp","sabae.fukui.jp","sakai.fukui.jp","takahama.fukui.jp","tsuruga.fukui.jp","wakasa.fukui.jp","ashiya.fukuoka.jp","buzen.fukuoka.jp","chikugo.fukuoka.jp","chikuho.fukuoka.jp","chikujo.fukuoka.jp","chikushino.fukuoka.jp","chikuzen.fukuoka.jp","chuo.fukuoka.jp","dazaifu.fukuoka.jp","fukuchi.fukuoka.jp","hakata.fukuoka.jp","higashi.fukuoka.jp","hirokawa.fukuoka.jp","hisayama.fukuoka.jp","iizuka.fukuoka.jp","inatsuki.fukuoka.jp","kaho.fukuoka.jp","kasuga.fukuoka.jp","kasuya.fukuoka.jp","kawara.fukuoka.jp","keisen.fukuoka.jp","koga.fukuoka.jp","kurate.fukuoka.jp","kurogi.fukuoka.jp","kurume.fukuoka.jp","minami.fukuoka.jp","miyako.fukuoka.jp","miyama.fukuoka.jp","miyawaka.fukuoka.jp","mizumaki.fukuoka.jp","munakata.fukuoka.jp","nakagawa.fukuoka.jp","nakama.fukuoka.jp","nishi.fukuoka.jp","nogata.fukuoka.jp","ogori.fukuoka.jp","okagaki.fukuoka.jp","okawa.fukuoka.jp","oki.fukuoka.jp","omuta.fukuoka.jp","onga.fukuoka.jp","onojo.fukuoka.jp","oto.fukuoka.jp","saigawa.fukuoka.jp","sasaguri.fukuoka.jp","shingu.fukuoka.jp","shinyoshitomi.fukuoka.jp","shonai.fukuoka.jp","soeda.fukuoka.jp","sue.fukuoka.jp","tachiarai.fukuoka.jp","tagawa.fukuoka.jp","takata.fukuoka.jp","toho.fukuoka.jp","toyotsu.fukuoka.jp","tsuiki.fukuoka.jp","ukiha.fukuoka.jp","umi.fukuoka.jp","usui.fukuoka.jp","yamada.fukuoka.jp","yame.fukuoka.jp","yanagawa.fukuoka.jp","yukuhashi.fukuoka.jp","aizubange.fukushima.jp","aizumisato.fukushima.jp","aizuwakamatsu.fukushima.jp","asakawa.fukushima.jp","bandai.fukushima.jp","date.fukushima.jp","fukushima.fukushima.jp","furudono.fukushima.jp","futaba.fukushima.jp","hanawa.fukushima.jp","higashi.fukushima.jp","hirata.fukushima.jp","hirono.fukushima.jp","iitate.fukushima.jp","inawashiro.fukushima.jp","ishikawa.fukushima.jp","iwaki.fukushima.jp","izumizaki.fukushima.jp","kagamiishi.fukushima.jp","kaneyama.fukushima.jp","kawamata.fukushima.jp","kitakata.fukushima.jp","kitashiobara.fukushima.jp","koori.fukushima.jp","koriyama.fukushima.jp","kunimi.fukushima.jp","miharu.fukushima.jp","mishima.fukushima.jp","namie.fukushima.jp","nango.fukushima.jp","nishiaizu.fukushima.jp","nishigo.fukushima.jp","okuma.fukushima.jp","omotego.fukushima.jp","ono.fukushima.jp","otama.fukushima.jp","samegawa.fukushima.jp","shimogo.fukushima.jp","shirakawa.fukushima.jp","showa.fukushima.jp","soma.fukushima.jp","sukagawa.fukushima.jp","taishin.fukushima.jp","tamakawa.fukushima.jp","tanagura.fukushima.jp","tenei.fukushima.jp","yabuki.fukushima.jp","yamato.fukushima.jp","yamatsuri.fukushima.jp","yanaizu.fukushima.jp","yugawa.fukushima.jp","anpachi.gifu.jp","ena.gifu.jp","gifu.gifu.jp","ginan.gifu.jp","godo.gifu.jp","gujo.gifu.jp","hashima.gifu.jp","hichiso.gifu.jp","hida.gifu.jp","higashishirakawa.gifu.jp","ibigawa.gifu.jp","ikeda.gifu.jp","kakamigahara.gifu.jp","kani.gifu.jp","kasahara.gifu.jp","kasamatsu.gifu.jp","kawaue.gifu.jp","kitagata.gifu.jp","mino.gifu.jp","minokamo.gifu.jp","mitake.gifu.jp","mizunami.gifu.jp","motosu.gifu.jp","nakatsugawa.gifu.jp","ogaki.gifu.jp","sakahogi.gifu.jp","seki.gifu.jp","sekigahara.gifu.jp","shirakawa.gifu.jp","tajimi.gifu.jp","takayama.gifu.jp","tarui.gifu.jp","toki.gifu.jp","tomika.gifu.jp","wanouchi.gifu.jp","yamagata.gifu.jp","yaotsu.gifu.jp","yoro.gifu.jp","annaka.gunma.jp","chiyoda.gunma.jp","fujioka.gunma.jp","higashiagatsuma.gunma.jp","isesaki.gunma.jp","itakura.gunma.jp","kanna.gunma.jp","kanra.gunma.jp","katashina.gunma.jp","kawaba.gunma.jp","kiryu.gunma.jp","kusatsu.gunma.jp","maebashi.gunma.jp","meiwa.gunma.jp","midori.gunma.jp","minakami.gunma.jp","naganohara.gunma.jp","nakanojo.gunma.jp","nanmoku.gunma.jp","numata.gunma.jp","oizumi.gunma.jp","ora.gunma.jp","ota.gunma.jp","shibukawa.gunma.jp","shimonita.gunma.jp","shinto.gunma.jp","showa.gunma.jp","takasaki.gunma.jp","takayama.gunma.jp","tamamura.gunma.jp","tatebayashi.gunma.jp","tomioka.gunma.jp","tsukiyono.gunma.jp","tsumagoi.gunma.jp","ueno.gunma.jp","yoshioka.gunma.jp","asaminami.hiroshima.jp","daiwa.hiroshima.jp","etajima.hiroshima.jp","fuchu.hiroshima.jp","fukuyama.hiroshima.jp","hatsukaichi.hiroshima.jp","higashihiroshima.hiroshima.jp","hongo.hiroshima.jp","jinsekikogen.hiroshima.jp","kaita.hiroshima.jp","kui.hiroshima.jp","kumano.hiroshima.jp","kure.hiroshima.jp","mihara.hiroshima.jp","miyoshi.hiroshima.jp","naka.hiroshima.jp","onomichi.hiroshima.jp","osakikamijima.hiroshima.jp","otake.hiroshima.jp","saka.hiroshima.jp","sera.hiroshima.jp","seranishi.hiroshima.jp","shinichi.hiroshima.jp","shobara.hiroshima.jp","takehara.hiroshima.jp","abashiri.hokkaido.jp","abira.hokkaido.jp","aibetsu.hokkaido.jp","akabira.hokkaido.jp","akkeshi.hokkaido.jp","asahikawa.hokkaido.jp","ashibetsu.hokkaido.jp","ashoro.hokkaido.jp","assabu.hokkaido.jp","atsuma.hokkaido.jp","bibai.hokkaido.jp","biei.hokkaido.jp","bifuka.hokkaido.jp","bihoro.hokkaido.jp","biratori.hokkaido.jp","chippubetsu.hokkaido.jp","chitose.hokkaido.jp","date.hokkaido.jp","ebetsu.hokkaido.jp","embetsu.hokkaido.jp","eniwa.hokkaido.jp","erimo.hokkaido.jp","esan.hokkaido.jp","esashi.hokkaido.jp","fukagawa.hokkaido.jp","fukushima.hokkaido.jp","furano.hokkaido.jp","furubira.hokkaido.jp","haboro.hokkaido.jp","hakodate.hokkaido.jp","hamatonbetsu.hokkaido.jp","hidaka.hokkaido.jp","higashikagura.hokkaido.jp","higashikawa.hokkaido.jp","hiroo.hokkaido.jp","hokuryu.hokkaido.jp","hokuto.hokkaido.jp","honbetsu.hokkaido.jp","horokanai.hokkaido.jp","horonobe.hokkaido.jp","ikeda.hokkaido.jp","imakane.hokkaido.jp","ishikari.hokkaido.jp","iwamizawa.hokkaido.jp","iwanai.hokkaido.jp","kamifurano.hokkaido.jp","kamikawa.hokkaido.jp","kamishihoro.hokkaido.jp","kamisunagawa.hokkaido.jp","kamoenai.hokkaido.jp","kayabe.hokkaido.jp","kembuchi.hokkaido.jp","kikonai.hokkaido.jp","kimobetsu.hokkaido.jp","kitahiroshima.hokkaido.jp","kitami.hokkaido.jp","kiyosato.hokkaido.jp","koshimizu.hokkaido.jp","kunneppu.hokkaido.jp","kuriyama.hokkaido.jp","kuromatsunai.hokkaido.jp","kushiro.hokkaido.jp","kutchan.hokkaido.jp","kyowa.hokkaido.jp","mashike.hokkaido.jp","matsumae.hokkaido.jp","mikasa.hokkaido.jp","minamifurano.hokkaido.jp","mombetsu.hokkaido.jp","moseushi.hokkaido.jp","mukawa.hokkaido.jp","muroran.hokkaido.jp","naie.hokkaido.jp","nakagawa.hokkaido.jp","nakasatsunai.hokkaido.jp","nakatombetsu.hokkaido.jp","nanae.hokkaido.jp","nanporo.hokkaido.jp","nayoro.hokkaido.jp","nemuro.hokkaido.jp","niikappu.hokkaido.jp","niki.hokkaido.jp","nishiokoppe.hokkaido.jp","noboribetsu.hokkaido.jp","numata.hokkaido.jp","obihiro.hokkaido.jp","obira.hokkaido.jp","oketo.hokkaido.jp","okoppe.hokkaido.jp","otaru.hokkaido.jp","otobe.hokkaido.jp","otofuke.hokkaido.jp","otoineppu.hokkaido.jp","oumu.hokkaido.jp","ozora.hokkaido.jp","pippu.hokkaido.jp","rankoshi.hokkaido.jp","rebun.hokkaido.jp","rikubetsu.hokkaido.jp","rishiri.hokkaido.jp","rishirifuji.hokkaido.jp","saroma.hokkaido.jp","sarufutsu.hokkaido.jp","shakotan.hokkaido.jp","shari.hokkaido.jp","shibecha.hokkaido.jp","shibetsu.hokkaido.jp","shikabe.hokkaido.jp","shikaoi.hokkaido.jp","shimamaki.hokkaido.jp","shimizu.hokkaido.jp","shimokawa.hokkaido.jp","shinshinotsu.hokkaido.jp","shintoku.hokkaido.jp","shiranuka.hokkaido.jp","shiraoi.hokkaido.jp","shiriuchi.hokkaido.jp","sobetsu.hokkaido.jp","sunagawa.hokkaido.jp","taiki.hokkaido.jp","takasu.hokkaido.jp","takikawa.hokkaido.jp","takinoue.hokkaido.jp","teshikaga.hokkaido.jp","tobetsu.hokkaido.jp","tohma.hokkaido.jp","tomakomai.hokkaido.jp","tomari.hokkaido.jp","toya.hokkaido.jp","toyako.hokkaido.jp","toyotomi.hokkaido.jp","toyoura.hokkaido.jp","tsubetsu.hokkaido.jp","tsukigata.hokkaido.jp","urakawa.hokkaido.jp","urausu.hokkaido.jp","uryu.hokkaido.jp","utashinai.hokkaido.jp","wakkanai.hokkaido.jp","wassamu.hokkaido.jp","yakumo.hokkaido.jp","yoichi.hokkaido.jp","aioi.hyogo.jp","akashi.hyogo.jp","ako.hyogo.jp","amagasaki.hyogo.jp","aogaki.hyogo.jp","asago.hyogo.jp","ashiya.hyogo.jp","awaji.hyogo.jp","fukusaki.hyogo.jp","goshiki.hyogo.jp","harima.hyogo.jp","himeji.hyogo.jp","ichikawa.hyogo.jp","inagawa.hyogo.jp","itami.hyogo.jp","kakogawa.hyogo.jp","kamigori.hyogo.jp","kamikawa.hyogo.jp","kasai.hyogo.jp","kasuga.hyogo.jp","kawanishi.hyogo.jp","miki.hyogo.jp","minamiawaji.hyogo.jp","nishinomiya.hyogo.jp","nishiwaki.hyogo.jp","ono.hyogo.jp","sanda.hyogo.jp","sannan.hyogo.jp","sasayama.hyogo.jp","sayo.hyogo.jp","shingu.hyogo.jp","shinonsen.hyogo.jp","shiso.hyogo.jp","sumoto.hyogo.jp","taishi.hyogo.jp","taka.hyogo.jp","takarazuka.hyogo.jp","takasago.hyogo.jp","takino.hyogo.jp","tamba.hyogo.jp","tatsuno.hyogo.jp","toyooka.hyogo.jp","yabu.hyogo.jp","yashiro.hyogo.jp","yoka.hyogo.jp","yokawa.hyogo.jp","ami.ibaraki.jp","asahi.ibaraki.jp","bando.ibaraki.jp","chikusei.ibaraki.jp","daigo.ibaraki.jp","fujishiro.ibaraki.jp","hitachi.ibaraki.jp","hitachinaka.ibaraki.jp","hitachiomiya.ibaraki.jp","hitachiota.ibaraki.jp","ibaraki.ibaraki.jp","ina.ibaraki.jp","inashiki.ibaraki.jp","itako.ibaraki.jp","iwama.ibaraki.jp","joso.ibaraki.jp","kamisu.ibaraki.jp","kasama.ibaraki.jp","kashima.ibaraki.jp","kasumigaura.ibaraki.jp","koga.ibaraki.jp","miho.ibaraki.jp","mito.ibaraki.jp","moriya.ibaraki.jp","naka.ibaraki.jp","namegata.ibaraki.jp","oarai.ibaraki.jp","ogawa.ibaraki.jp","omitama.ibaraki.jp","ryugasaki.ibaraki.jp","sakai.ibaraki.jp","sakuragawa.ibaraki.jp","shimodate.ibaraki.jp","shimotsuma.ibaraki.jp","shirosato.ibaraki.jp","sowa.ibaraki.jp","suifu.ibaraki.jp","takahagi.ibaraki.jp","tamatsukuri.ibaraki.jp","tokai.ibaraki.jp","tomobe.ibaraki.jp","tone.ibaraki.jp","toride.ibaraki.jp","tsuchiura.ibaraki.jp","tsukuba.ibaraki.jp","uchihara.ibaraki.jp","ushiku.ibaraki.jp","yachiyo.ibaraki.jp","yamagata.ibaraki.jp","yawara.ibaraki.jp","yuki.ibaraki.jp","anamizu.ishikawa.jp","hakui.ishikawa.jp","hakusan.ishikawa.jp","kaga.ishikawa.jp","kahoku.ishikawa.jp","kanazawa.ishikawa.jp","kawakita.ishikawa.jp","komatsu.ishikawa.jp","nakanoto.ishikawa.jp","nanao.ishikawa.jp","nomi.ishikawa.jp","nonoichi.ishikawa.jp","noto.ishikawa.jp","shika.ishikawa.jp","suzu.ishikawa.jp","tsubata.ishikawa.jp","tsurugi.ishikawa.jp","uchinada.ishikawa.jp","wajima.ishikawa.jp","fudai.iwate.jp","fujisawa.iwate.jp","hanamaki.iwate.jp","hiraizumi.iwate.jp","hirono.iwate.jp","ichinohe.iwate.jp","ichinoseki.iwate.jp","iwaizumi.iwate.jp","iwate.iwate.jp","joboji.iwate.jp","kamaishi.iwate.jp","kanegasaki.iwate.jp","karumai.iwate.jp","kawai.iwate.jp","kitakami.iwate.jp","kuji.iwate.jp","kunohe.iwate.jp","kuzumaki.iwate.jp","miyako.iwate.jp","mizusawa.iwate.jp","morioka.iwate.jp","ninohe.iwate.jp","noda.iwate.jp","ofunato.iwate.jp","oshu.iwate.jp","otsuchi.iwate.jp","rikuzentakata.iwate.jp","shiwa.iwate.jp","shizukuishi.iwate.jp","sumita.iwate.jp","tanohata.iwate.jp","tono.iwate.jp","yahaba.iwate.jp","yamada.iwate.jp","ayagawa.kagawa.jp","higashikagawa.kagawa.jp","kanonji.kagawa.jp","kotohira.kagawa.jp","manno.kagawa.jp","marugame.kagawa.jp","mitoyo.kagawa.jp","naoshima.kagawa.jp","sanuki.kagawa.jp","tadotsu.kagawa.jp","takamatsu.kagawa.jp","tonosho.kagawa.jp","uchinomi.kagawa.jp","utazu.kagawa.jp","zentsuji.kagawa.jp","akune.kagoshima.jp","amami.kagoshima.jp","hioki.kagoshima.jp","isa.kagoshima.jp","isen.kagoshima.jp","izumi.kagoshima.jp","kagoshima.kagoshima.jp","kanoya.kagoshima.jp","kawanabe.kagoshima.jp","kinko.kagoshima.jp","kouyama.kagoshima.jp","makurazaki.kagoshima.jp","matsumoto.kagoshima.jp","minamitane.kagoshima.jp","nakatane.kagoshima.jp","nishinoomote.kagoshima.jp","satsumasendai.kagoshima.jp","soo.kagoshima.jp","tarumizu.kagoshima.jp","yusui.kagoshima.jp","aikawa.kanagawa.jp","atsugi.kanagawa.jp","ayase.kanagawa.jp","chigasaki.kanagawa.jp","ebina.kanagawa.jp","fujisawa.kanagawa.jp","hadano.kanagawa.jp","hakone.kanagawa.jp","hiratsuka.kanagawa.jp","isehara.kanagawa.jp","kaisei.kanagawa.jp","kamakura.kanagawa.jp","kiyokawa.kanagawa.jp","matsuda.kanagawa.jp","minamiashigara.kanagawa.jp","miura.kanagawa.jp","nakai.kanagawa.jp","ninomiya.kanagawa.jp","odawara.kanagawa.jp","oi.kanagawa.jp","oiso.kanagawa.jp","sagamihara.kanagawa.jp","samukawa.kanagawa.jp","tsukui.kanagawa.jp","yamakita.kanagawa.jp","yamato.kanagawa.jp","yokosuka.kanagawa.jp","yugawara.kanagawa.jp","zama.kanagawa.jp","zushi.kanagawa.jp","aki.kochi.jp","geisei.kochi.jp","hidaka.kochi.jp","higashitsuno.kochi.jp","ino.kochi.jp","kagami.kochi.jp","kami.kochi.jp","kitagawa.kochi.jp","kochi.kochi.jp","mihara.kochi.jp","motoyama.kochi.jp","muroto.kochi.jp","nahari.kochi.jp","nakamura.kochi.jp","nankoku.kochi.jp","nishitosa.kochi.jp","niyodogawa.kochi.jp","ochi.kochi.jp","okawa.kochi.jp","otoyo.kochi.jp","otsuki.kochi.jp","sakawa.kochi.jp","sukumo.kochi.jp","susaki.kochi.jp","tosa.kochi.jp","tosashimizu.kochi.jp","toyo.kochi.jp","tsuno.kochi.jp","umaji.kochi.jp","yasuda.kochi.jp","yusuhara.kochi.jp","amakusa.kumamoto.jp","arao.kumamoto.jp","aso.kumamoto.jp","choyo.kumamoto.jp","gyokuto.kumamoto.jp","kamiamakusa.kumamoto.jp","kikuchi.kumamoto.jp","kumamoto.kumamoto.jp","mashiki.kumamoto.jp","mifune.kumamoto.jp","minamata.kumamoto.jp","minamioguni.kumamoto.jp","nagasu.kumamoto.jp","nishihara.kumamoto.jp","oguni.kumamoto.jp","ozu.kumamoto.jp","sumoto.kumamoto.jp","takamori.kumamoto.jp","uki.kumamoto.jp","uto.kumamoto.jp","yamaga.kumamoto.jp","yamato.kumamoto.jp","yatsushiro.kumamoto.jp","ayabe.kyoto.jp","fukuchiyama.kyoto.jp","higashiyama.kyoto.jp","ide.kyoto.jp","ine.kyoto.jp","joyo.kyoto.jp","kameoka.kyoto.jp","kamo.kyoto.jp","kita.kyoto.jp","kizu.kyoto.jp","kumiyama.kyoto.jp","kyotamba.kyoto.jp","kyotanabe.kyoto.jp","kyotango.kyoto.jp","maizuru.kyoto.jp","minami.kyoto.jp","minamiyamashiro.kyoto.jp","miyazu.kyoto.jp","muko.kyoto.jp","nagaokakyo.kyoto.jp","nakagyo.kyoto.jp","nantan.kyoto.jp","oyamazaki.kyoto.jp","sakyo.kyoto.jp","seika.kyoto.jp","tanabe.kyoto.jp","uji.kyoto.jp","ujitawara.kyoto.jp","wazuka.kyoto.jp","yamashina.kyoto.jp","yawata.kyoto.jp","asahi.mie.jp","inabe.mie.jp","ise.mie.jp","kameyama.mie.jp","kawagoe.mie.jp","kiho.mie.jp","kisosaki.mie.jp","kiwa.mie.jp","komono.mie.jp","kumano.mie.jp","kuwana.mie.jp","matsusaka.mie.jp","meiwa.mie.jp","mihama.mie.jp","minamiise.mie.jp","misugi.mie.jp","miyama.mie.jp","nabari.mie.jp","shima.mie.jp","suzuka.mie.jp","tado.mie.jp","taiki.mie.jp","taki.mie.jp","tamaki.mie.jp","toba.mie.jp","tsu.mie.jp","udono.mie.jp","ureshino.mie.jp","watarai.mie.jp","yokkaichi.mie.jp","furukawa.miyagi.jp","higashimatsushima.miyagi.jp","ishinomaki.miyagi.jp","iwanuma.miyagi.jp","kakuda.miyagi.jp","kami.miyagi.jp","kawasaki.miyagi.jp","marumori.miyagi.jp","matsushima.miyagi.jp","minamisanriku.miyagi.jp","misato.miyagi.jp","murata.miyagi.jp","natori.miyagi.jp","ogawara.miyagi.jp","ohira.miyagi.jp","onagawa.miyagi.jp","osaki.miyagi.jp","rifu.miyagi.jp","semine.miyagi.jp","shibata.miyagi.jp","shichikashuku.miyagi.jp","shikama.miyagi.jp","shiogama.miyagi.jp","shiroishi.miyagi.jp","tagajo.miyagi.jp","taiwa.miyagi.jp","tome.miyagi.jp","tomiya.miyagi.jp","wakuya.miyagi.jp","watari.miyagi.jp","yamamoto.miyagi.jp","zao.miyagi.jp","aya.miyazaki.jp","ebino.miyazaki.jp","gokase.miyazaki.jp","hyuga.miyazaki.jp","kadogawa.miyazaki.jp","kawaminami.miyazaki.jp","kijo.miyazaki.jp","kitagawa.miyazaki.jp","kitakata.miyazaki.jp","kitaura.miyazaki.jp","kobayashi.miyazaki.jp","kunitomi.miyazaki.jp","kushima.miyazaki.jp","mimata.miyazaki.jp","miyakonojo.miyazaki.jp","miyazaki.miyazaki.jp","morotsuka.miyazaki.jp","nichinan.miyazaki.jp","nishimera.miyazaki.jp","nobeoka.miyazaki.jp","saito.miyazaki.jp","shiiba.miyazaki.jp","shintomi.miyazaki.jp","takaharu.miyazaki.jp","takanabe.miyazaki.jp","takazaki.miyazaki.jp","tsuno.miyazaki.jp","achi.nagano.jp","agematsu.nagano.jp","anan.nagano.jp","aoki.nagano.jp","asahi.nagano.jp","azumino.nagano.jp","chikuhoku.nagano.jp","chikuma.nagano.jp","chino.nagano.jp","fujimi.nagano.jp","hakuba.nagano.jp","hara.nagano.jp","hiraya.nagano.jp","iida.nagano.jp","iijima.nagano.jp","iiyama.nagano.jp","iizuna.nagano.jp","ikeda.nagano.jp","ikusaka.nagano.jp","ina.nagano.jp","karuizawa.nagano.jp","kawakami.nagano.jp","kiso.nagano.jp","kisofukushima.nagano.jp","kitaaiki.nagano.jp","komagane.nagano.jp","komoro.nagano.jp","matsukawa.nagano.jp","matsumoto.nagano.jp","miasa.nagano.jp","minamiaiki.nagano.jp","minamimaki.nagano.jp","minamiminowa.nagano.jp","minowa.nagano.jp","miyada.nagano.jp","miyota.nagano.jp","mochizuki.nagano.jp","nagano.nagano.jp","nagawa.nagano.jp","nagiso.nagano.jp","nakagawa.nagano.jp","nakano.nagano.jp","nozawaonsen.nagano.jp","obuse.nagano.jp","ogawa.nagano.jp","okaya.nagano.jp","omachi.nagano.jp","omi.nagano.jp","ookuwa.nagano.jp","ooshika.nagano.jp","otaki.nagano.jp","otari.nagano.jp","sakae.nagano.jp","sakaki.nagano.jp","saku.nagano.jp","sakuho.nagano.jp","shimosuwa.nagano.jp","shinanomachi.nagano.jp","shiojiri.nagano.jp","suwa.nagano.jp","suzaka.nagano.jp","takagi.nagano.jp","takamori.nagano.jp","takayama.nagano.jp","tateshina.nagano.jp","tatsuno.nagano.jp","togakushi.nagano.jp","togura.nagano.jp","tomi.nagano.jp","ueda.nagano.jp","wada.nagano.jp","yamagata.nagano.jp","yamanouchi.nagano.jp","yasaka.nagano.jp","yasuoka.nagano.jp","chijiwa.nagasaki.jp","futsu.nagasaki.jp","goto.nagasaki.jp","hasami.nagasaki.jp","hirado.nagasaki.jp","iki.nagasaki.jp","isahaya.nagasaki.jp","kawatana.nagasaki.jp","kuchinotsu.nagasaki.jp","matsuura.nagasaki.jp","nagasaki.nagasaki.jp","obama.nagasaki.jp","omura.nagasaki.jp","oseto.nagasaki.jp","saikai.nagasaki.jp","sasebo.nagasaki.jp","seihi.nagasaki.jp","shimabara.nagasaki.jp","shinkamigoto.nagasaki.jp","togitsu.nagasaki.jp","tsushima.nagasaki.jp","unzen.nagasaki.jp","ando.nara.jp","gose.nara.jp","heguri.nara.jp","higashiyoshino.nara.jp","ikaruga.nara.jp","ikoma.nara.jp","kamikitayama.nara.jp","kanmaki.nara.jp","kashiba.nara.jp","kashihara.nara.jp","katsuragi.nara.jp","kawai.nara.jp","kawakami.nara.jp","kawanishi.nara.jp","koryo.nara.jp","kurotaki.nara.jp","mitsue.nara.jp","miyake.nara.jp","nara.nara.jp","nosegawa.nara.jp","oji.nara.jp","ouda.nara.jp","oyodo.nara.jp","sakurai.nara.jp","sango.nara.jp","shimoichi.nara.jp","shimokitayama.nara.jp","shinjo.nara.jp","soni.nara.jp","takatori.nara.jp","tawaramoto.nara.jp","tenkawa.nara.jp","tenri.nara.jp","uda.nara.jp","yamatokoriyama.nara.jp","yamatotakada.nara.jp","yamazoe.nara.jp","yoshino.nara.jp","aga.niigata.jp","agano.niigata.jp","gosen.niigata.jp","itoigawa.niigata.jp","izumozaki.niigata.jp","joetsu.niigata.jp","kamo.niigata.jp","kariwa.niigata.jp","kashiwazaki.niigata.jp","minamiuonuma.niigata.jp","mitsuke.niigata.jp","muika.niigata.jp","murakami.niigata.jp","myoko.niigata.jp","nagaoka.niigata.jp","niigata.niigata.jp","ojiya.niigata.jp","omi.niigata.jp","sado.niigata.jp","sanjo.niigata.jp","seiro.niigata.jp","seirou.niigata.jp","sekikawa.niigata.jp","shibata.niigata.jp","tagami.niigata.jp","tainai.niigata.jp","tochio.niigata.jp","tokamachi.niigata.jp","tsubame.niigata.jp","tsunan.niigata.jp","uonuma.niigata.jp","yahiko.niigata.jp","yoita.niigata.jp","yuzawa.niigata.jp","beppu.oita.jp","bungoono.oita.jp","bungotakada.oita.jp","hasama.oita.jp","hiji.oita.jp","himeshima.oita.jp","hita.oita.jp","kamitsue.oita.jp","kokonoe.oita.jp","kuju.oita.jp","kunisaki.oita.jp","kusu.oita.jp","oita.oita.jp","saiki.oita.jp","taketa.oita.jp","tsukumi.oita.jp","usa.oita.jp","usuki.oita.jp","yufu.oita.jp","akaiwa.okayama.jp","asakuchi.okayama.jp","bizen.okayama.jp","hayashima.okayama.jp","ibara.okayama.jp","kagamino.okayama.jp","kasaoka.okayama.jp","kibichuo.okayama.jp","kumenan.okayama.jp","kurashiki.okayama.jp","maniwa.okayama.jp","misaki.okayama.jp","nagi.okayama.jp","niimi.okayama.jp","nishiawakura.okayama.jp","okayama.okayama.jp","satosho.okayama.jp","setouchi.okayama.jp","shinjo.okayama.jp","shoo.okayama.jp","soja.okayama.jp","takahashi.okayama.jp","tamano.okayama.jp","tsuyama.okayama.jp","wake.okayama.jp","yakage.okayama.jp","aguni.okinawa.jp","ginowan.okinawa.jp","ginoza.okinawa.jp","gushikami.okinawa.jp","haebaru.okinawa.jp","higashi.okinawa.jp","hirara.okinawa.jp","iheya.okinawa.jp","ishigaki.okinawa.jp","ishikawa.okinawa.jp","itoman.okinawa.jp","izena.okinawa.jp","kadena.okinawa.jp","kin.okinawa.jp","kitadaito.okinawa.jp","kitanakagusuku.okinawa.jp","kumejima.okinawa.jp","kunigami.okinawa.jp","minamidaito.okinawa.jp","motobu.okinawa.jp","nago.okinawa.jp","naha.okinawa.jp","nakagusuku.okinawa.jp","nakijin.okinawa.jp","nanjo.okinawa.jp","nishihara.okinawa.jp","ogimi.okinawa.jp","okinawa.okinawa.jp","onna.okinawa.jp","shimoji.okinawa.jp","taketomi.okinawa.jp","tarama.okinawa.jp","tokashiki.okinawa.jp","tomigusuku.okinawa.jp","tonaki.okinawa.jp","urasoe.okinawa.jp","uruma.okinawa.jp","yaese.okinawa.jp","yomitan.okinawa.jp","yonabaru.okinawa.jp","yonaguni.okinawa.jp","zamami.okinawa.jp","abeno.osaka.jp","chihayaakasaka.osaka.jp","chuo.osaka.jp","daito.osaka.jp","fujiidera.osaka.jp","habikino.osaka.jp","hannan.osaka.jp","higashiosaka.osaka.jp","higashisumiyoshi.osaka.jp","higashiyodogawa.osaka.jp","hirakata.osaka.jp","ibaraki.osaka.jp","ikeda.osaka.jp","izumi.osaka.jp","izumiotsu.osaka.jp","izumisano.osaka.jp","kadoma.osaka.jp","kaizuka.osaka.jp","kanan.osaka.jp","kashiwara.osaka.jp","katano.osaka.jp","kawachinagano.osaka.jp","kishiwada.osaka.jp","kita.osaka.jp","kumatori.osaka.jp","matsubara.osaka.jp","minato.osaka.jp","minoh.osaka.jp","misaki.osaka.jp","moriguchi.osaka.jp","neyagawa.osaka.jp","nishi.osaka.jp","nose.osaka.jp","osakasayama.osaka.jp","sakai.osaka.jp","sayama.osaka.jp","sennan.osaka.jp","settsu.osaka.jp","shijonawate.osaka.jp","shimamoto.osaka.jp","suita.osaka.jp","tadaoka.osaka.jp","taishi.osaka.jp","tajiri.osaka.jp","takaishi.osaka.jp","takatsuki.osaka.jp","tondabayashi.osaka.jp","toyonaka.osaka.jp","toyono.osaka.jp","yao.osaka.jp","ariake.saga.jp","arita.saga.jp","fukudomi.saga.jp","genkai.saga.jp","hamatama.saga.jp","hizen.saga.jp","imari.saga.jp","kamimine.saga.jp","kanzaki.saga.jp","karatsu.saga.jp","kashima.saga.jp","kitagata.saga.jp","kitahata.saga.jp","kiyama.saga.jp","kouhoku.saga.jp","kyuragi.saga.jp","nishiarita.saga.jp","ogi.saga.jp","omachi.saga.jp","ouchi.saga.jp","saga.saga.jp","shiroishi.saga.jp","taku.saga.jp","tara.saga.jp","tosu.saga.jp","yoshinogari.saga.jp","arakawa.saitama.jp","asaka.saitama.jp","chichibu.saitama.jp","fujimi.saitama.jp","fujimino.saitama.jp","fukaya.saitama.jp","hanno.saitama.jp","hanyu.saitama.jp","hasuda.saitama.jp","hatogaya.saitama.jp","hatoyama.saitama.jp","hidaka.saitama.jp","higashichichibu.saitama.jp","higashimatsuyama.saitama.jp","honjo.saitama.jp","ina.saitama.jp","iruma.saitama.jp","iwatsuki.saitama.jp","kamiizumi.saitama.jp","kamikawa.saitama.jp","kamisato.saitama.jp","kasukabe.saitama.jp","kawagoe.saitama.jp","kawaguchi.saitama.jp","kawajima.saitama.jp","kazo.saitama.jp","kitamoto.saitama.jp","koshigaya.saitama.jp","kounosu.saitama.jp","kuki.saitama.jp","kumagaya.saitama.jp","matsubushi.saitama.jp","minano.saitama.jp","misato.saitama.jp","miyashiro.saitama.jp","miyoshi.saitama.jp","moroyama.saitama.jp","nagatoro.saitama.jp","namegawa.saitama.jp","niiza.saitama.jp","ogano.saitama.jp","ogawa.saitama.jp","ogose.saitama.jp","okegawa.saitama.jp","omiya.saitama.jp","otaki.saitama.jp","ranzan.saitama.jp","ryokami.saitama.jp","saitama.saitama.jp","sakado.saitama.jp","satte.saitama.jp","sayama.saitama.jp","shiki.saitama.jp","shiraoka.saitama.jp","soka.saitama.jp","sugito.saitama.jp","toda.saitama.jp","tokigawa.saitama.jp","tokorozawa.saitama.jp","tsurugashima.saitama.jp","urawa.saitama.jp","warabi.saitama.jp","yashio.saitama.jp","yokoze.saitama.jp","yono.saitama.jp","yorii.saitama.jp","yoshida.saitama.jp","yoshikawa.saitama.jp","yoshimi.saitama.jp","aisho.shiga.jp","gamo.shiga.jp","higashiomi.shiga.jp","hikone.shiga.jp","koka.shiga.jp","konan.shiga.jp","kosei.shiga.jp","koto.shiga.jp","kusatsu.shiga.jp","maibara.shiga.jp","moriyama.shiga.jp","nagahama.shiga.jp","nishiazai.shiga.jp","notogawa.shiga.jp","omihachiman.shiga.jp","otsu.shiga.jp","ritto.shiga.jp","ryuoh.shiga.jp","takashima.shiga.jp","takatsuki.shiga.jp","torahime.shiga.jp","toyosato.shiga.jp","yasu.shiga.jp","akagi.shimane.jp","ama.shimane.jp","gotsu.shimane.jp","hamada.shimane.jp","higashiizumo.shimane.jp","hikawa.shimane.jp","hikimi.shimane.jp","izumo.shimane.jp","kakinoki.shimane.jp","masuda.shimane.jp","matsue.shimane.jp","misato.shimane.jp","nishinoshima.shimane.jp","ohda.shimane.jp","okinoshima.shimane.jp","okuizumo.shimane.jp","shimane.shimane.jp","tamayu.shimane.jp","tsuwano.shimane.jp","unnan.shimane.jp","yakumo.shimane.jp","yasugi.shimane.jp","yatsuka.shimane.jp","arai.shizuoka.jp","atami.shizuoka.jp","fuji.shizuoka.jp","fujieda.shizuoka.jp","fujikawa.shizuoka.jp","fujinomiya.shizuoka.jp","fukuroi.shizuoka.jp","gotemba.shizuoka.jp","haibara.shizuoka.jp","hamamatsu.shizuoka.jp","higashiizu.shizuoka.jp","ito.shizuoka.jp","iwata.shizuoka.jp","izu.shizuoka.jp","izunokuni.shizuoka.jp","kakegawa.shizuoka.jp","kannami.shizuoka.jp","kawanehon.shizuoka.jp","kawazu.shizuoka.jp","kikugawa.shizuoka.jp","kosai.shizuoka.jp","makinohara.shizuoka.jp","matsuzaki.shizuoka.jp","minamiizu.shizuoka.jp","mishima.shizuoka.jp","morimachi.shizuoka.jp","nishiizu.shizuoka.jp","numazu.shizuoka.jp","omaezaki.shizuoka.jp","shimada.shizuoka.jp","shimizu.shizuoka.jp","shimoda.shizuoka.jp","shizuoka.shizuoka.jp","susono.shizuoka.jp","yaizu.shizuoka.jp","yoshida.shizuoka.jp","ashikaga.tochigi.jp","bato.tochigi.jp","haga.tochigi.jp","ichikai.tochigi.jp","iwafune.tochigi.jp","kaminokawa.tochigi.jp","kanuma.tochigi.jp","karasuyama.tochigi.jp","kuroiso.tochigi.jp","mashiko.tochigi.jp","mibu.tochigi.jp","moka.tochigi.jp","motegi.tochigi.jp","nasu.tochigi.jp","nasushiobara.tochigi.jp","nikko.tochigi.jp","nishikata.tochigi.jp","nogi.tochigi.jp","ohira.tochigi.jp","ohtawara.tochigi.jp","oyama.tochigi.jp","sakura.tochigi.jp","sano.tochigi.jp","shimotsuke.tochigi.jp","shioya.tochigi.jp","takanezawa.tochigi.jp","tochigi.tochigi.jp","tsuga.tochigi.jp","ujiie.tochigi.jp","utsunomiya.tochigi.jp","yaita.tochigi.jp","aizumi.tokushima.jp","anan.tokushima.jp","ichiba.tokushima.jp","itano.tokushima.jp","kainan.tokushima.jp","komatsushima.tokushima.jp","matsushige.tokushima.jp","mima.tokushima.jp","minami.tokushima.jp","miyoshi.tokushima.jp","mugi.tokushima.jp","nakagawa.tokushima.jp","naruto.tokushima.jp","sanagochi.tokushima.jp","shishikui.tokushima.jp","tokushima.tokushima.jp","wajiki.tokushima.jp","adachi.tokyo.jp","akiruno.tokyo.jp","akishima.tokyo.jp","aogashima.tokyo.jp","arakawa.tokyo.jp","bunkyo.tokyo.jp","chiyoda.tokyo.jp","chofu.tokyo.jp","chuo.tokyo.jp","edogawa.tokyo.jp","fuchu.tokyo.jp","fussa.tokyo.jp","hachijo.tokyo.jp","hachioji.tokyo.jp","hamura.tokyo.jp","higashikurume.tokyo.jp","higashimurayama.tokyo.jp","higashiyamato.tokyo.jp","hino.tokyo.jp","hinode.tokyo.jp","hinohara.tokyo.jp","inagi.tokyo.jp","itabashi.tokyo.jp","katsushika.tokyo.jp","kita.tokyo.jp","kiyose.tokyo.jp","kodaira.tokyo.jp","koganei.tokyo.jp","kokubunji.tokyo.jp","komae.tokyo.jp","koto.tokyo.jp","kouzushima.tokyo.jp","kunitachi.tokyo.jp","machida.tokyo.jp","meguro.tokyo.jp","minato.tokyo.jp","mitaka.tokyo.jp","mizuho.tokyo.jp","musashimurayama.tokyo.jp","musashino.tokyo.jp","nakano.tokyo.jp","nerima.tokyo.jp","ogasawara.tokyo.jp","okutama.tokyo.jp","ome.tokyo.jp","oshima.tokyo.jp","ota.tokyo.jp","setagaya.tokyo.jp","shibuya.tokyo.jp","shinagawa.tokyo.jp","shinjuku.tokyo.jp","suginami.tokyo.jp","sumida.tokyo.jp","tachikawa.tokyo.jp","taito.tokyo.jp","tama.tokyo.jp","toshima.tokyo.jp","chizu.tottori.jp","hino.tottori.jp","kawahara.tottori.jp","koge.tottori.jp","kotoura.tottori.jp","misasa.tottori.jp","nanbu.tottori.jp","nichinan.tottori.jp","sakaiminato.tottori.jp","tottori.tottori.jp","wakasa.tottori.jp","yazu.tottori.jp","yonago.tottori.jp","asahi.toyama.jp","fuchu.toyama.jp","fukumitsu.toyama.jp","funahashi.toyama.jp","himi.toyama.jp","imizu.toyama.jp","inami.toyama.jp","johana.toyama.jp","kamiichi.toyama.jp","kurobe.toyama.jp","nakaniikawa.toyama.jp","namerikawa.toyama.jp","nanto.toyama.jp","nyuzen.toyama.jp","oyabe.toyama.jp","taira.toyama.jp","takaoka.toyama.jp","tateyama.toyama.jp","toga.toyama.jp","tonami.toyama.jp","toyama.toyama.jp","unazuki.toyama.jp","uozu.toyama.jp","yamada.toyama.jp","arida.wakayama.jp","aridagawa.wakayama.jp","gobo.wakayama.jp","hashimoto.wakayama.jp","hidaka.wakayama.jp","hirogawa.wakayama.jp","inami.wakayama.jp","iwade.wakayama.jp","kainan.wakayama.jp","kamitonda.wakayama.jp","katsuragi.wakayama.jp","kimino.wakayama.jp","kinokawa.wakayama.jp","kitayama.wakayama.jp","koya.wakayama.jp","koza.wakayama.jp","kozagawa.wakayama.jp","kudoyama.wakayama.jp","kushimoto.wakayama.jp","mihama.wakayama.jp","misato.wakayama.jp","nachikatsuura.wakayama.jp","shingu.wakayama.jp","shirahama.wakayama.jp","taiji.wakayama.jp","tanabe.wakayama.jp","wakayama.wakayama.jp","yuasa.wakayama.jp","yura.wakayama.jp","asahi.yamagata.jp","funagata.yamagata.jp","higashine.yamagata.jp","iide.yamagata.jp","kahoku.yamagata.jp","kaminoyama.yamagata.jp","kaneyama.yamagata.jp","kawanishi.yamagata.jp","mamurogawa.yamagata.jp","mikawa.yamagata.jp","murayama.yamagata.jp","nagai.yamagata.jp","nakayama.yamagata.jp","nanyo.yamagata.jp","nishikawa.yamagata.jp","obanazawa.yamagata.jp","oe.yamagata.jp","oguni.yamagata.jp","ohkura.yamagata.jp","oishida.yamagata.jp","sagae.yamagata.jp","sakata.yamagata.jp","sakegawa.yamagata.jp","shinjo.yamagata.jp","shirataka.yamagata.jp","shonai.yamagata.jp","takahata.yamagata.jp","tendo.yamagata.jp","tozawa.yamagata.jp","tsuruoka.yamagata.jp","yamagata.yamagata.jp","yamanobe.yamagata.jp","yonezawa.yamagata.jp","yuza.yamagata.jp","abu.yamaguchi.jp","hagi.yamaguchi.jp","hikari.yamaguchi.jp","hofu.yamaguchi.jp","iwakuni.yamaguchi.jp","kudamatsu.yamaguchi.jp","mitou.yamaguchi.jp","nagato.yamaguchi.jp","oshima.yamaguchi.jp","shimonoseki.yamaguchi.jp","shunan.yamaguchi.jp","tabuse.yamaguchi.jp","tokuyama.yamaguchi.jp","toyota.yamaguchi.jp","ube.yamaguchi.jp","yuu.yamaguchi.jp","chuo.yamanashi.jp","doshi.yamanashi.jp","fuefuki.yamanashi.jp","fujikawa.yamanashi.jp","fujikawaguchiko.yamanashi.jp","fujiyoshida.yamanashi.jp","hayakawa.yamanashi.jp","hokuto.yamanashi.jp","ichikawamisato.yamanashi.jp","kai.yamanashi.jp","kofu.yamanashi.jp","koshu.yamanashi.jp","kosuge.yamanashi.jp","minami-alps.yamanashi.jp","minobu.yamanashi.jp","nakamichi.yamanashi.jp","nanbu.yamanashi.jp","narusawa.yamanashi.jp","nirasaki.yamanashi.jp","nishikatsura.yamanashi.jp","oshino.yamanashi.jp","otsuki.yamanashi.jp","showa.yamanashi.jp","tabayama.yamanashi.jp","tsuru.yamanashi.jp","uenohara.yamanashi.jp","yamanakako.yamanashi.jp","yamanashi.yamanashi.jp","ke","ac.ke","co.ke","go.ke","info.ke","me.ke","mobi.ke","ne.ke","or.ke","sc.ke","kg","org.kg","net.kg","com.kg","edu.kg","gov.kg","mil.kg","*.kh","ki","edu.ki","biz.ki","net.ki","org.ki","gov.ki","info.ki","com.ki","km","org.km","nom.km","gov.km","prd.km","tm.km","edu.km","mil.km","ass.km","com.km","coop.km","asso.km","presse.km","medecin.km","notaires.km","pharmaciens.km","veterinaire.km","gouv.km","kn","net.kn","org.kn","edu.kn","gov.kn","kp","com.kp","edu.kp","gov.kp","org.kp","rep.kp","tra.kp","kr","ac.kr","co.kr","es.kr","go.kr","hs.kr","kg.kr","mil.kr","ms.kr","ne.kr","or.kr","pe.kr","re.kr","sc.kr","busan.kr","chungbuk.kr","chungnam.kr","daegu.kr","daejeon.kr","gangwon.kr","gwangju.kr","gyeongbuk.kr","gyeonggi.kr","gyeongnam.kr","incheon.kr","jeju.kr","jeonbuk.kr","jeonnam.kr","seoul.kr","ulsan.kr","kw","com.kw","edu.kw","emb.kw","gov.kw","ind.kw","net.kw","org.kw","ky","edu.ky","gov.ky","com.ky","org.ky","net.ky","kz","org.kz","edu.kz","net.kz","gov.kz","mil.kz","com.kz","la","int.la","net.la","info.la","edu.la","gov.la","per.la","com.la","org.la","lb","com.lb","edu.lb","gov.lb","net.lb","org.lb","lc","com.lc","net.lc","co.lc","org.lc","edu.lc","gov.lc","li","lk","gov.lk","sch.lk","net.lk","int.lk","com.lk","org.lk","edu.lk","ngo.lk","soc.lk","web.lk","ltd.lk","assn.lk","grp.lk","hotel.lk","ac.lk","lr","com.lr","edu.lr","gov.lr","org.lr","net.lr","ls","co.ls","org.ls","lt","gov.lt","lu","lv","com.lv","edu.lv","gov.lv","org.lv","mil.lv","id.lv","net.lv","asn.lv","conf.lv","ly","com.ly","net.ly","gov.ly","plc.ly","edu.ly","sch.ly","med.ly","org.ly","id.ly","ma","co.ma","net.ma","gov.ma","org.ma","ac.ma","press.ma","mc","tm.mc","asso.mc","md","me","co.me","net.me","org.me","edu.me","ac.me","gov.me","its.me","priv.me","mg","org.mg","nom.mg","gov.mg","prd.mg","tm.mg","edu.mg","mil.mg","com.mg","co.mg","mh","mil","mk","com.mk","org.mk","net.mk","edu.mk","gov.mk","inf.mk","name.mk","ml","com.ml","edu.ml","gouv.ml","gov.ml","net.ml","org.ml","presse.ml","*.mm","mn","gov.mn","edu.mn","org.mn","mo","com.mo","net.mo","org.mo","edu.mo","gov.mo","mobi","mp","mq","mr","gov.mr","ms","com.ms","edu.ms","gov.ms","net.ms","org.ms","mt","com.mt","edu.mt","net.mt","org.mt","mu","com.mu","net.mu","org.mu","gov.mu","ac.mu","co.mu","or.mu","museum","academy.museum","agriculture.museum","air.museum","airguard.museum","alabama.museum","alaska.museum","amber.museum","ambulance.museum","american.museum","americana.museum","americanantiques.museum","americanart.museum","amsterdam.museum","and.museum","annefrank.museum","anthro.museum","anthropology.museum","antiques.museum","aquarium.museum","arboretum.museum","archaeological.museum","archaeology.museum","architecture.museum","art.museum","artanddesign.museum","artcenter.museum","artdeco.museum","arteducation.museum","artgallery.museum","arts.museum","artsandcrafts.museum","asmatart.museum","assassination.museum","assisi.museum","association.museum","astronomy.museum","atlanta.museum","austin.museum","australia.museum","automotive.museum","aviation.museum","axis.museum","badajoz.museum","baghdad.museum","bahn.museum","bale.museum","baltimore.museum","barcelona.museum","baseball.museum","basel.museum","baths.museum","bauern.museum","beauxarts.museum","beeldengeluid.museum","bellevue.museum","bergbau.museum","berkeley.museum","berlin.museum","bern.museum","bible.museum","bilbao.museum","bill.museum","birdart.museum","birthplace.museum","bonn.museum","boston.museum","botanical.museum","botanicalgarden.museum","botanicgarden.museum","botany.museum","brandywinevalley.museum","brasil.museum","bristol.museum","british.museum","britishcolumbia.museum","broadcast.museum","brunel.museum","brussel.museum","brussels.museum","bruxelles.museum","building.museum","burghof.museum","bus.museum","bushey.museum","cadaques.museum","california.museum","cambridge.museum","can.museum","canada.museum","capebreton.museum","carrier.museum","cartoonart.museum","casadelamoneda.museum","castle.museum","castres.museum","celtic.museum","center.museum","chattanooga.museum","cheltenham.museum","chesapeakebay.museum","chicago.museum","children.museum","childrens.museum","childrensgarden.museum","chiropractic.museum","chocolate.museum","christiansburg.museum","cincinnati.museum","cinema.museum","circus.museum","civilisation.museum","civilization.museum","civilwar.museum","clinton.museum","clock.museum","coal.museum","coastaldefence.museum","cody.museum","coldwar.museum","collection.museum","colonialwilliamsburg.museum","coloradoplateau.museum","columbia.museum","columbus.museum","communication.museum","communications.museum","community.museum","computer.museum","computerhistory.museum","comunicações.museum","contemporary.museum","contemporaryart.museum","convent.museum","copenhagen.museum","corporation.museum","correios-e-telecomunicações.museum","corvette.museum","costume.museum","countryestate.museum","county.museum","crafts.museum","cranbrook.museum","creation.museum","cultural.museum","culturalcenter.museum","culture.museum","cyber.museum","cymru.museum","dali.museum","dallas.museum","database.museum","ddr.museum","decorativearts.museum","delaware.museum","delmenhorst.museum","denmark.museum","depot.museum","design.museum","detroit.museum","dinosaur.museum","discovery.museum","dolls.museum","donostia.museum","durham.museum","eastafrica.museum","eastcoast.museum","education.museum","educational.museum","egyptian.museum","eisenbahn.museum","elburg.museum","elvendrell.museum","embroidery.museum","encyclopedic.museum","england.museum","entomology.museum","environment.museum","environmentalconservation.museum","epilepsy.museum","essex.museum","estate.museum","ethnology.museum","exeter.museum","exhibition.museum","family.museum","farm.museum","farmequipment.museum","farmers.museum","farmstead.museum","field.museum","figueres.museum","filatelia.museum","film.museum","fineart.museum","finearts.museum","finland.museum","flanders.museum","florida.museum","force.museum","fortmissoula.museum","fortworth.museum","foundation.museum","francaise.museum","frankfurt.museum","franziskaner.museum","freemasonry.museum","freiburg.museum","fribourg.museum","frog.museum","fundacio.museum","furniture.museum","gallery.museum","garden.museum","gateway.museum","geelvinck.museum","gemological.museum","geology.museum","georgia.museum","giessen.museum","glas.museum","glass.museum","gorge.museum","grandrapids.museum","graz.museum","guernsey.museum","halloffame.museum","hamburg.museum","handson.museum","harvestcelebration.museum","hawaii.museum","health.museum","heimatunduhren.museum","hellas.museum","helsinki.museum","hembygdsforbund.museum","heritage.museum","histoire.museum","historical.museum","historicalsociety.museum","historichouses.museum","historisch.museum","historisches.museum","history.museum","historyofscience.museum","horology.museum","house.museum","humanities.museum","illustration.museum","imageandsound.museum","indian.museum","indiana.museum","indianapolis.museum","indianmarket.museum","intelligence.museum","interactive.museum","iraq.museum","iron.museum","isleofman.museum","jamison.museum","jefferson.museum","jerusalem.museum","jewelry.museum","jewish.museum","jewishart.museum","jfk.museum","journalism.museum","judaica.museum","judygarland.museum","juedisches.museum","juif.museum","karate.museum","karikatur.museum","kids.museum","koebenhavn.museum","koeln.museum","kunst.museum","kunstsammlung.museum","kunstunddesign.museum","labor.museum","labour.museum","lajolla.museum","lancashire.museum","landes.museum","lans.museum","läns.museum","larsson.museum","lewismiller.museum","lincoln.museum","linz.museum","living.museum","livinghistory.museum","localhistory.museum","london.museum","losangeles.museum","louvre.museum","loyalist.museum","lucerne.museum","luxembourg.museum","luzern.museum","mad.museum","madrid.museum","mallorca.museum","manchester.museum","mansion.museum","mansions.museum","manx.museum","marburg.museum","maritime.museum","maritimo.museum","maryland.museum","marylhurst.museum","media.museum","medical.museum","medizinhistorisches.museum","meeres.museum","memorial.museum","mesaverde.museum","michigan.museum","midatlantic.museum","military.museum","mill.museum","miners.museum","mining.museum","minnesota.museum","missile.museum","missoula.museum","modern.museum","moma.museum","money.museum","monmouth.museum","monticello.museum","montreal.museum","moscow.museum","motorcycle.museum","muenchen.museum","muenster.museum","mulhouse.museum","muncie.museum","museet.museum","museumcenter.museum","museumvereniging.museum","music.museum","national.museum","nationalfirearms.museum","nationalheritage.museum","nativeamerican.museum","naturalhistory.museum","naturalhistorymuseum.museum","naturalsciences.museum","nature.museum","naturhistorisches.museum","natuurwetenschappen.museum","naumburg.museum","naval.museum","nebraska.museum","neues.museum","newhampshire.museum","newjersey.museum","newmexico.museum","newport.museum","newspaper.museum","newyork.museum","niepce.museum","norfolk.museum","north.museum","nrw.museum","nuernberg.museum","nuremberg.museum","nyc.museum","nyny.museum","oceanographic.museum","oceanographique.museum","omaha.museum","online.museum","ontario.museum","openair.museum","oregon.museum","oregontrail.museum","otago.museum","oxford.museum","pacific.museum","paderborn.museum","palace.museum","paleo.museum","palmsprings.museum","panama.museum","paris.museum","pasadena.museum","pharmacy.museum","philadelphia.museum","philadelphiaarea.museum","philately.museum","phoenix.museum","photography.museum","pilots.museum","pittsburgh.museum","planetarium.museum","plantation.museum","plants.museum","plaza.museum","portal.museum","portland.museum","portlligat.museum","posts-and-telecommunications.museum","preservation.museum","presidio.museum","press.museum","project.museum","public.museum","pubol.museum","quebec.museum","railroad.museum","railway.museum","research.museum","resistance.museum","riodejaneiro.museum","rochester.museum","rockart.museum","roma.museum","russia.museum","saintlouis.museum","salem.museum","salvadordali.museum","salzburg.museum","sandiego.museum","sanfrancisco.museum","santabarbara.museum","santacruz.museum","santafe.museum","saskatchewan.museum","satx.museum","savannahga.museum","schlesisches.museum","schoenbrunn.museum","schokoladen.museum","school.museum","schweiz.museum","science.museum","scienceandhistory.museum","scienceandindustry.museum","sciencecenter.museum","sciencecenters.museum","science-fiction.museum","sciencehistory.museum","sciences.museum","sciencesnaturelles.museum","scotland.museum","seaport.museum","settlement.museum","settlers.museum","shell.museum","sherbrooke.museum","sibenik.museum","silk.museum","ski.museum","skole.museum","society.museum","sologne.museum","soundandvision.museum","southcarolina.museum","southwest.museum","space.museum","spy.museum","square.museum","stadt.museum","stalbans.museum","starnberg.museum","state.museum","stateofdelaware.museum","station.museum","steam.museum","steiermark.museum","stjohn.museum","stockholm.museum","stpetersburg.museum","stuttgart.museum","suisse.museum","surgeonshall.museum","surrey.museum","svizzera.museum","sweden.museum","sydney.museum","tank.museum","tcm.museum","technology.museum","telekommunikation.museum","television.museum","texas.museum","textile.museum","theater.museum","time.museum","timekeeping.museum","topology.museum","torino.museum","touch.museum","town.museum","transport.museum","tree.museum","trolley.museum","trust.museum","trustee.museum","uhren.museum","ulm.museum","undersea.museum","university.museum","usa.museum","usantiques.museum","usarts.museum","uscountryestate.museum","usculture.museum","usdecorativearts.museum","usgarden.museum","ushistory.museum","ushuaia.museum","uslivinghistory.museum","utah.museum","uvic.museum","valley.museum","vantaa.museum","versailles.museum","viking.museum","village.museum","virginia.museum","virtual.museum","virtuel.museum","vlaanderen.museum","volkenkunde.museum","wales.museum","wallonie.museum","war.museum","washingtondc.museum","watchandclock.museum","watch-and-clock.museum","western.museum","westfalen.museum","whaling.museum","wildlife.museum","williamsburg.museum","windmill.museum","workshop.museum","york.museum","yorkshire.museum","yosemite.museum","youth.museum","zoological.museum","zoology.museum","ירושלים.museum","иком.museum","mv","aero.mv","biz.mv","com.mv","coop.mv","edu.mv","gov.mv","info.mv","int.mv","mil.mv","museum.mv","name.mv","net.mv","org.mv","pro.mv","mw","ac.mw","biz.mw","co.mw","com.mw","coop.mw","edu.mw","gov.mw","int.mw","museum.mw","net.mw","org.mw","mx","com.mx","org.mx","gob.mx","edu.mx","net.mx","my","com.my","net.my","org.my","gov.my","edu.my","mil.my","name.my","mz","ac.mz","adv.mz","co.mz","edu.mz","gov.mz","mil.mz","net.mz","org.mz","na","info.na","pro.na","name.na","school.na","or.na","dr.na","us.na","mx.na","ca.na","in.na","cc.na","tv.na","ws.na","mobi.na","co.na","com.na","org.na","name","nc","asso.nc","nom.nc","ne","net","nf","com.nf","net.nf","per.nf","rec.nf","web.nf","arts.nf","firm.nf","info.nf","other.nf","store.nf","ng","com.ng","edu.ng","gov.ng","i.ng","mil.ng","mobi.ng","name.ng","net.ng","org.ng","sch.ng","ni","ac.ni","biz.ni","co.ni","com.ni","edu.ni","gob.ni","in.ni","info.ni","int.ni","mil.ni","net.ni","nom.ni","org.ni","web.ni","nl","bv.nl","no","fhs.no","vgs.no","fylkesbibl.no","folkebibl.no","museum.no","idrett.no","priv.no","mil.no","stat.no","dep.no","kommune.no","herad.no","aa.no","ah.no","bu.no","fm.no","hl.no","hm.no","jan-mayen.no","mr.no","nl.no","nt.no","of.no","ol.no","oslo.no","rl.no","sf.no","st.no","svalbard.no","tm.no","tr.no","va.no","vf.no","gs.aa.no","gs.ah.no","gs.bu.no","gs.fm.no","gs.hl.no","gs.hm.no","gs.jan-mayen.no","gs.mr.no","gs.nl.no","gs.nt.no","gs.of.no","gs.ol.no","gs.oslo.no","gs.rl.no","gs.sf.no","gs.st.no","gs.svalbard.no","gs.tm.no","gs.tr.no","gs.va.no","gs.vf.no","akrehamn.no","åkrehamn.no","algard.no","ålgård.no","arna.no","brumunddal.no","bryne.no","bronnoysund.no","brønnøysund.no","drobak.no","drøbak.no","egersund.no","fetsund.no","floro.no","florø.no","fredrikstad.no","hokksund.no","honefoss.no","hønefoss.no","jessheim.no","jorpeland.no","jørpeland.no","kirkenes.no","kopervik.no","krokstadelva.no","langevag.no","langevåg.no","leirvik.no","mjondalen.no","mjøndalen.no","mo-i-rana.no","mosjoen.no","mosjøen.no","nesoddtangen.no","orkanger.no","osoyro.no","osøyro.no","raholt.no","råholt.no","sandnessjoen.no","sandnessjøen.no","skedsmokorset.no","slattum.no","spjelkavik.no","stathelle.no","stavern.no","stjordalshalsen.no","stjørdalshalsen.no","tananger.no","tranby.no","vossevangen.no","afjord.no","åfjord.no","agdenes.no","al.no","ål.no","alesund.no","ålesund.no","alstahaug.no","alta.no","áltá.no","alaheadju.no","álaheadju.no","alvdal.no","amli.no","åmli.no","amot.no","åmot.no","andebu.no","andoy.no","andøy.no","andasuolo.no","ardal.no","årdal.no","aremark.no","arendal.no","ås.no","aseral.no","åseral.no","asker.no","askim.no","askvoll.no","askoy.no","askøy.no","asnes.no","åsnes.no","audnedaln.no","aukra.no","aure.no","aurland.no","aurskog-holand.no","aurskog-høland.no","austevoll.no","austrheim.no","averoy.no","averøy.no","balestrand.no","ballangen.no","balat.no","bálát.no","balsfjord.no","bahccavuotna.no","báhccavuotna.no","bamble.no","bardu.no","beardu.no","beiarn.no","bajddar.no","bájddar.no","baidar.no","báidár.no","berg.no","bergen.no","berlevag.no","berlevåg.no","bearalvahki.no","bearalváhki.no","bindal.no","birkenes.no","bjarkoy.no","bjarkøy.no","bjerkreim.no","bjugn.no","bodo.no","bodø.no","badaddja.no","bådåddjå.no","budejju.no","bokn.no","bremanger.no","bronnoy.no","brønnøy.no","bygland.no","bykle.no","barum.no","bærum.no","bo.telemark.no","bø.telemark.no","bo.nordland.no","bø.nordland.no","bievat.no","bievát.no","bomlo.no","bømlo.no","batsfjord.no","båtsfjord.no","bahcavuotna.no","báhcavuotna.no","dovre.no","drammen.no","drangedal.no","dyroy.no","dyrøy.no","donna.no","dønna.no","eid.no","eidfjord.no","eidsberg.no","eidskog.no","eidsvoll.no","eigersund.no","elverum.no","enebakk.no","engerdal.no","etne.no","etnedal.no","evenes.no","evenassi.no","evenášši.no","evje-og-hornnes.no","farsund.no","fauske.no","fuossko.no","fuoisku.no","fedje.no","fet.no","finnoy.no","finnøy.no","fitjar.no","fjaler.no","fjell.no","flakstad.no","flatanger.no","flekkefjord.no","flesberg.no","flora.no","fla.no","flå.no","folldal.no","forsand.no","fosnes.no","frei.no","frogn.no","froland.no","frosta.no","frana.no","fræna.no","froya.no","frøya.no","fusa.no","fyresdal.no","forde.no","førde.no","gamvik.no","gangaviika.no","gáŋgaviika.no","gaular.no","gausdal.no","gildeskal.no","gildeskål.no","giske.no","gjemnes.no","gjerdrum.no","gjerstad.no","gjesdal.no","gjovik.no","gjøvik.no","gloppen.no","gol.no","gran.no","grane.no","granvin.no","gratangen.no","grimstad.no","grong.no","kraanghke.no","kråanghke.no","grue.no","gulen.no","hadsel.no","halden.no","halsa.no","hamar.no","hamaroy.no","habmer.no","hábmer.no","hapmir.no","hápmir.no","hammerfest.no","hammarfeasta.no","hámmárfeasta.no","haram.no","hareid.no","harstad.no","hasvik.no","aknoluokta.no","ákŋoluokta.no","hattfjelldal.no","aarborte.no","haugesund.no","hemne.no","hemnes.no","hemsedal.no","heroy.more-og-romsdal.no","herøy.møre-og-romsdal.no","heroy.nordland.no","herøy.nordland.no","hitra.no","hjartdal.no","hjelmeland.no","hobol.no","hobøl.no","hof.no","hol.no","hole.no","holmestrand.no","holtalen.no","holtålen.no","hornindal.no","horten.no","hurdal.no","hurum.no","hvaler.no","hyllestad.no","hagebostad.no","hægebostad.no","hoyanger.no","høyanger.no","hoylandet.no","høylandet.no","ha.no","hå.no","ibestad.no","inderoy.no","inderøy.no","iveland.no","jevnaker.no","jondal.no","jolster.no","jølster.no","karasjok.no","karasjohka.no","kárášjohka.no","karlsoy.no","galsa.no","gálsá.no","karmoy.no","karmøy.no","kautokeino.no","guovdageaidnu.no","klepp.no","klabu.no","klæbu.no","kongsberg.no","kongsvinger.no","kragero.no","kragerø.no","kristiansand.no","kristiansund.no","krodsherad.no","krødsherad.no","kvalsund.no","rahkkeravju.no","ráhkkerávju.no","kvam.no","kvinesdal.no","kvinnherad.no","kviteseid.no","kvitsoy.no","kvitsøy.no","kvafjord.no","kvæfjord.no","giehtavuoatna.no","kvanangen.no","kvænangen.no","navuotna.no","návuotna.no","kafjord.no","kåfjord.no","gaivuotna.no","gáivuotna.no","larvik.no","lavangen.no","lavagis.no","loabat.no","loabát.no","lebesby.no","davvesiida.no","leikanger.no","leirfjord.no","leka.no","leksvik.no","lenvik.no","leangaviika.no","leaŋgaviika.no","lesja.no","levanger.no","lier.no","lierne.no","lillehammer.no","lillesand.no","lindesnes.no","lindas.no","lindås.no","lom.no","loppa.no","lahppi.no","láhppi.no","lund.no","lunner.no","luroy.no","lurøy.no","luster.no","lyngdal.no","lyngen.no","ivgu.no","lardal.no","lerdal.no","lærdal.no","lodingen.no","lødingen.no","lorenskog.no","lørenskog.no","loten.no","løten.no","malvik.no","masoy.no","måsøy.no","muosat.no","muosát.no","mandal.no","marker.no","marnardal.no","masfjorden.no","meland.no","meldal.no","melhus.no","meloy.no","meløy.no","meraker.no","meråker.no","moareke.no","moåreke.no","midsund.no","midtre-gauldal.no","modalen.no","modum.no","molde.no","moskenes.no","moss.no","mosvik.no","malselv.no","målselv.no","malatvuopmi.no","málatvuopmi.no","namdalseid.no","aejrie.no","namsos.no","namsskogan.no","naamesjevuemie.no","nååmesjevuemie.no","laakesvuemie.no","nannestad.no","narvik.no","narviika.no","naustdal.no","nedre-eiker.no","nes.akershus.no","nes.buskerud.no","nesna.no","nesodden.no","nesseby.no","unjarga.no","unjárga.no","nesset.no","nissedal.no","nittedal.no","nord-aurdal.no","nord-fron.no","nord-odal.no","norddal.no","nordkapp.no","davvenjarga.no","davvenjárga.no","nordre-land.no","nordreisa.no","raisa.no","ráisa.no","nore-og-uvdal.no","notodden.no","naroy.no","nærøy.no","notteroy.no","nøtterøy.no","odda.no","oksnes.no","øksnes.no","oppdal.no","oppegard.no","oppegård.no","orkdal.no","orland.no","ørland.no","orskog.no","ørskog.no","orsta.no","ørsta.no","os.hedmark.no","os.hordaland.no","osen.no","osteroy.no","osterøy.no","ostre-toten.no","østre-toten.no","overhalla.no","ovre-eiker.no","øvre-eiker.no","oyer.no","øyer.no","oygarden.no","øygarden.no","oystre-slidre.no","øystre-slidre.no","porsanger.no","porsangu.no","porsáŋgu.no","porsgrunn.no","radoy.no","radøy.no","rakkestad.no","rana.no","ruovat.no","randaberg.no","rauma.no","rendalen.no","rennebu.no","rennesoy.no","rennesøy.no","rindal.no","ringebu.no","ringerike.no","ringsaker.no","rissa.no","risor.no","risør.no","roan.no","rollag.no","rygge.no","ralingen.no","rælingen.no","rodoy.no","rødøy.no","romskog.no","rømskog.no","roros.no","røros.no","rost.no","røst.no","royken.no","røyken.no","royrvik.no","røyrvik.no","rade.no","råde.no","salangen.no","siellak.no","saltdal.no","salat.no","sálát.no","sálat.no","samnanger.no","sande.more-og-romsdal.no","sande.møre-og-romsdal.no","sande.vestfold.no","sandefjord.no","sandnes.no","sandoy.no","sandøy.no","sarpsborg.no","sauda.no","sauherad.no","sel.no","selbu.no","selje.no","seljord.no","sigdal.no","siljan.no","sirdal.no","skaun.no","skedsmo.no","ski.no","skien.no","skiptvet.no","skjervoy.no","skjervøy.no","skierva.no","skiervá.no","skjak.no","skjåk.no","skodje.no","skanland.no","skånland.no","skanit.no","skánit.no","smola.no","smøla.no","snillfjord.no","snasa.no","snåsa.no","snoasa.no","snaase.no","snåase.no","sogndal.no","sokndal.no","sola.no","solund.no","songdalen.no","sortland.no","spydeberg.no","stange.no","stavanger.no","steigen.no","steinkjer.no","stjordal.no","stjørdal.no","stokke.no","stor-elvdal.no","stord.no","stordal.no","storfjord.no","omasvuotna.no","strand.no","stranda.no","stryn.no","sula.no","suldal.no","sund.no","sunndal.no","surnadal.no","sveio.no","svelvik.no","sykkylven.no","sogne.no","søgne.no","somna.no","sømna.no","sondre-land.no","søndre-land.no","sor-aurdal.no","sør-aurdal.no","sor-fron.no","sør-fron.no","sor-odal.no","sør-odal.no","sor-varanger.no","sør-varanger.no","matta-varjjat.no","mátta-várjjat.no","sorfold.no","sørfold.no","sorreisa.no","sørreisa.no","sorum.no","sørum.no","tana.no","deatnu.no","time.no","tingvoll.no","tinn.no","tjeldsund.no","dielddanuorri.no","tjome.no","tjøme.no","tokke.no","tolga.no","torsken.no","tranoy.no","tranøy.no","tromso.no","tromsø.no","tromsa.no","romsa.no","trondheim.no","troandin.no","trysil.no","trana.no","træna.no","trogstad.no","trøgstad.no","tvedestrand.no","tydal.no","tynset.no","tysfjord.no","divtasvuodna.no","divttasvuotna.no","tysnes.no","tysvar.no","tysvær.no","tonsberg.no","tønsberg.no","ullensaker.no","ullensvang.no","ulvik.no","utsira.no","vadso.no","vadsø.no","cahcesuolo.no","čáhcesuolo.no","vaksdal.no","valle.no","vang.no","vanylven.no","vardo.no","vardø.no","varggat.no","várggát.no","vefsn.no","vaapste.no","vega.no","vegarshei.no","vegårshei.no","vennesla.no","verdal.no","verran.no","vestby.no","vestnes.no","vestre-slidre.no","vestre-toten.no","vestvagoy.no","vestvågøy.no","vevelstad.no","vik.no","vikna.no","vindafjord.no","volda.no","voss.no","varoy.no","værøy.no","vagan.no","vågan.no","voagat.no","vagsoy.no","vågsøy.no","vaga.no","vågå.no","valer.ostfold.no","våler.østfold.no","valer.hedmark.no","våler.hedmark.no","*.np","nr","biz.nr","info.nr","gov.nr","edu.nr","org.nr","net.nr","com.nr","nu","nz","ac.nz","co.nz","cri.nz","geek.nz","gen.nz","govt.nz","health.nz","iwi.nz","kiwi.nz","maori.nz","mil.nz","māori.nz","net.nz","org.nz","parliament.nz","school.nz","om","co.om","com.om","edu.om","gov.om","med.om","museum.om","net.om","org.om","pro.om","onion","org","pa","ac.pa","gob.pa","com.pa","org.pa","sld.pa","edu.pa","net.pa","ing.pa","abo.pa","med.pa","nom.pa","pe","edu.pe","gob.pe","nom.pe","mil.pe","org.pe","com.pe","net.pe","pf","com.pf","org.pf","edu.pf","*.pg","ph","com.ph","net.ph","org.ph","gov.ph","edu.ph","ngo.ph","mil.ph","i.ph","pk","com.pk","net.pk","edu.pk","org.pk","fam.pk","biz.pk","web.pk","gov.pk","gob.pk","gok.pk","gon.pk","gop.pk","gos.pk","info.pk","pl","com.pl","net.pl","org.pl","aid.pl","agro.pl","atm.pl","auto.pl","biz.pl","edu.pl","gmina.pl","gsm.pl","info.pl","mail.pl","miasta.pl","media.pl","mil.pl","nieruchomosci.pl","nom.pl","pc.pl","powiat.pl","priv.pl","realestate.pl","rel.pl","sex.pl","shop.pl","sklep.pl","sos.pl","szkola.pl","targi.pl","tm.pl","tourism.pl","travel.pl","turystyka.pl","gov.pl","ap.gov.pl","ic.gov.pl","is.gov.pl","us.gov.pl","kmpsp.gov.pl","kppsp.gov.pl","kwpsp.gov.pl","psp.gov.pl","wskr.gov.pl","kwp.gov.pl","mw.gov.pl","ug.gov.pl","um.gov.pl","umig.gov.pl","ugim.gov.pl","upow.gov.pl","uw.gov.pl","starostwo.gov.pl","pa.gov.pl","po.gov.pl","psse.gov.pl","pup.gov.pl","rzgw.gov.pl","sa.gov.pl","so.gov.pl","sr.gov.pl","wsa.gov.pl","sko.gov.pl","uzs.gov.pl","wiih.gov.pl","winb.gov.pl","pinb.gov.pl","wios.gov.pl","witd.gov.pl","wzmiuw.gov.pl","piw.gov.pl","wiw.gov.pl","griw.gov.pl","wif.gov.pl","oum.gov.pl","sdn.gov.pl","zp.gov.pl","uppo.gov.pl","mup.gov.pl","wuoz.gov.pl","konsulat.gov.pl","oirm.gov.pl","augustow.pl","babia-gora.pl","bedzin.pl","beskidy.pl","bialowieza.pl","bialystok.pl","bielawa.pl","bieszczady.pl","boleslawiec.pl","bydgoszcz.pl","bytom.pl","cieszyn.pl","czeladz.pl","czest.pl","dlugoleka.pl","elblag.pl","elk.pl","glogow.pl","gniezno.pl","gorlice.pl","grajewo.pl","ilawa.pl","jaworzno.pl","jelenia-gora.pl","jgora.pl","kalisz.pl","kazimierz-dolny.pl","karpacz.pl","kartuzy.pl","kaszuby.pl","katowice.pl","kepno.pl","ketrzyn.pl","klodzko.pl","kobierzyce.pl","kolobrzeg.pl","konin.pl","konskowola.pl","kutno.pl","lapy.pl","lebork.pl","legnica.pl","lezajsk.pl","limanowa.pl","lomza.pl","lowicz.pl","lubin.pl","lukow.pl","malbork.pl","malopolska.pl","mazowsze.pl","mazury.pl","mielec.pl","mielno.pl","mragowo.pl","naklo.pl","nowaruda.pl","nysa.pl","olawa.pl","olecko.pl","olkusz.pl","olsztyn.pl","opoczno.pl","opole.pl","ostroda.pl","ostroleka.pl","ostrowiec.pl","ostrowwlkp.pl","pila.pl","pisz.pl","podhale.pl","podlasie.pl","polkowice.pl","pomorze.pl","pomorskie.pl","prochowice.pl","pruszkow.pl","przeworsk.pl","pulawy.pl","radom.pl","rawa-maz.pl","rybnik.pl","rzeszow.pl","sanok.pl","sejny.pl","slask.pl","slupsk.pl","sosnowiec.pl","stalowa-wola.pl","skoczow.pl","starachowice.pl","stargard.pl","suwalki.pl","swidnica.pl","swiebodzin.pl","swinoujscie.pl","szczecin.pl","szczytno.pl","tarnobrzeg.pl","tgory.pl","turek.pl","tychy.pl","ustka.pl","walbrzych.pl","warmia.pl","warszawa.pl","waw.pl","wegrow.pl","wielun.pl","wlocl.pl","wloclawek.pl","wodzislaw.pl","wolomin.pl","wroclaw.pl","zachpomor.pl","zagan.pl","zarow.pl","zgora.pl","zgorzelec.pl","pm","pn","gov.pn","co.pn","org.pn","edu.pn","net.pn","post","pr","com.pr","net.pr","org.pr","gov.pr","edu.pr","isla.pr","pro.pr","biz.pr","info.pr","name.pr","est.pr","prof.pr","ac.pr","pro","aaa.pro","aca.pro","acct.pro","avocat.pro","bar.pro","cpa.pro","eng.pro","jur.pro","law.pro","med.pro","recht.pro","ps","edu.ps","gov.ps","sec.ps","plo.ps","com.ps","org.ps","net.ps","pt","net.pt","gov.pt","org.pt","edu.pt","int.pt","publ.pt","com.pt","nome.pt","pw","co.pw","ne.pw","or.pw","ed.pw","go.pw","belau.pw","py","com.py","coop.py","edu.py","gov.py","mil.py","net.py","org.py","qa","com.qa","edu.qa","gov.qa","mil.qa","name.qa","net.qa","org.qa","sch.qa","re","asso.re","com.re","nom.re","ro","arts.ro","com.ro","firm.ro","info.ro","nom.ro","nt.ro","org.ro","rec.ro","store.ro","tm.ro","www.ro","rs","ac.rs","co.rs","edu.rs","gov.rs","in.rs","org.rs","ru","ac.ru","edu.ru","gov.ru","int.ru","mil.ru","test.ru","rw","gov.rw","net.rw","edu.rw","ac.rw","com.rw","co.rw","int.rw","mil.rw","gouv.rw","sa","com.sa","net.sa","org.sa","gov.sa","med.sa","pub.sa","edu.sa","sch.sa","sb","com.sb","edu.sb","gov.sb","net.sb","org.sb","sc","com.sc","gov.sc","net.sc","org.sc","edu.sc","sd","com.sd","net.sd","org.sd","edu.sd","med.sd","tv.sd","gov.sd","info.sd","se","a.se","ac.se","b.se","bd.se","brand.se","c.se","d.se","e.se","f.se","fh.se","fhsk.se","fhv.se","g.se","h.se","i.se","k.se","komforb.se","kommunalforbund.se","komvux.se","l.se","lanbib.se","m.se","n.se","naturbruksgymn.se","o.se","org.se","p.se","parti.se","pp.se","press.se","r.se","s.se","t.se","tm.se","u.se","w.se","x.se","y.se","z.se","sg","com.sg","net.sg","org.sg","gov.sg","edu.sg","per.sg","sh","com.sh","net.sh","gov.sh","org.sh","mil.sh","si","sj","sk","sl","com.sl","net.sl","edu.sl","gov.sl","org.sl","sm","sn","art.sn","com.sn","edu.sn","gouv.sn","org.sn","perso.sn","univ.sn","so","com.so","net.so","org.so","sr","st","co.st","com.st","consulado.st","edu.st","embaixada.st","gov.st","mil.st","net.st","org.st","principe.st","saotome.st","store.st","su","sv","com.sv","edu.sv","gob.sv","org.sv","red.sv","sx","gov.sx","sy","edu.sy","gov.sy","net.sy","mil.sy","com.sy","org.sy","sz","co.sz","ac.sz","org.sz","tc","td","tel","tf","tg","th","ac.th","co.th","go.th","in.th","mi.th","net.th","or.th","tj","ac.tj","biz.tj","co.tj","com.tj","edu.tj","go.tj","gov.tj","int.tj","mil.tj","name.tj","net.tj","nic.tj","org.tj","test.tj","web.tj","tk","tl","gov.tl","tm","com.tm","co.tm","org.tm","net.tm","nom.tm","gov.tm","mil.tm","edu.tm","tn","com.tn","ens.tn","fin.tn","gov.tn","ind.tn","intl.tn","nat.tn","net.tn","org.tn","info.tn","perso.tn","tourism.tn","edunet.tn","rnrt.tn","rns.tn","rnu.tn","mincom.tn","agrinet.tn","defense.tn","turen.tn","to","com.to","gov.to","net.to","org.to","edu.to","mil.to","tr","com.tr","info.tr","biz.tr","net.tr","org.tr","web.tr","gen.tr","tv.tr","av.tr","dr.tr","bbs.tr","name.tr","tel.tr","gov.tr","bel.tr","pol.tr","mil.tr","k12.tr","edu.tr","kep.tr","nc.tr","gov.nc.tr","tt","co.tt","com.tt","org.tt","net.tt","biz.tt","info.tt","pro.tt","int.tt","coop.tt","jobs.tt","mobi.tt","travel.tt","museum.tt","aero.tt","name.tt","gov.tt","edu.tt","tv","tw","edu.tw","gov.tw","mil.tw","com.tw","net.tw","org.tw","idv.tw","game.tw","ebiz.tw","club.tw","網路.tw","組織.tw","商業.tw","tz","ac.tz","co.tz","go.tz","hotel.tz","info.tz","me.tz","mil.tz","mobi.tz","ne.tz","or.tz","sc.tz","tv.tz","ua","com.ua","edu.ua","gov.ua","in.ua","net.ua","org.ua","cherkassy.ua","cherkasy.ua","chernigov.ua","chernihiv.ua","chernivtsi.ua","chernovtsy.ua","ck.ua","cn.ua","cr.ua","crimea.ua","cv.ua","dn.ua","dnepropetrovsk.ua","dnipropetrovsk.ua","dominic.ua","donetsk.ua","dp.ua","if.ua","ivano-frankivsk.ua","kh.ua","kharkiv.ua","kharkov.ua","kherson.ua","khmelnitskiy.ua","khmelnytskyi.ua","kiev.ua","kirovograd.ua","km.ua","kr.ua","krym.ua","ks.ua","kv.ua","kyiv.ua","lg.ua","lt.ua","lugansk.ua","lutsk.ua","lv.ua","lviv.ua","mk.ua","mykolaiv.ua","nikolaev.ua","od.ua","odesa.ua","odessa.ua","pl.ua","poltava.ua","rivne.ua","rovno.ua","rv.ua","sb.ua","sebastopol.ua","sevastopol.ua","sm.ua","sumy.ua","te.ua","ternopil.ua","uz.ua","uzhgorod.ua","vinnica.ua","vinnytsia.ua","vn.ua","volyn.ua","yalta.ua","zaporizhzhe.ua","zaporizhzhia.ua","zhitomir.ua","zhytomyr.ua","zp.ua","zt.ua","ug","co.ug","or.ug","ac.ug","sc.ug","go.ug","ne.ug","com.ug","org.ug","uk","ac.uk","co.uk","gov.uk","ltd.uk","me.uk","net.uk","nhs.uk","org.uk","plc.uk","police.uk","*.sch.uk","us","dni.us","fed.us","isa.us","kids.us","nsn.us","ak.us","al.us","ar.us","as.us","az.us","ca.us","co.us","ct.us","dc.us","de.us","fl.us","ga.us","gu.us","hi.us","ia.us","id.us","il.us","in.us","ks.us","ky.us","la.us","ma.us","md.us","me.us","mi.us","mn.us","mo.us","ms.us","mt.us","nc.us","nd.us","ne.us","nh.us","nj.us","nm.us","nv.us","ny.us","oh.us","ok.us","or.us","pa.us","pr.us","ri.us","sc.us","sd.us","tn.us","tx.us","ut.us","vi.us","vt.us","va.us","wa.us","wi.us","wv.us","wy.us","k12.ak.us","k12.al.us","k12.ar.us","k12.as.us","k12.az.us","k12.ca.us","k12.co.us","k12.ct.us","k12.dc.us","k12.de.us","k12.fl.us","k12.ga.us","k12.gu.us","k12.ia.us","k12.id.us","k12.il.us","k12.in.us","k12.ks.us","k12.ky.us","k12.la.us","k12.ma.us","k12.md.us","k12.me.us","k12.mi.us","k12.mn.us","k12.mo.us","k12.ms.us","k12.mt.us","k12.nc.us","k12.ne.us","k12.nh.us","k12.nj.us","k12.nm.us","k12.nv.us","k12.ny.us","k12.oh.us","k12.ok.us","k12.or.us","k12.pa.us","k12.pr.us","k12.ri.us","k12.sc.us","k12.tn.us","k12.tx.us","k12.ut.us","k12.vi.us","k12.vt.us","k12.va.us","k12.wa.us","k12.wi.us","k12.wy.us","cc.ak.us","cc.al.us","cc.ar.us","cc.as.us","cc.az.us","cc.ca.us","cc.co.us","cc.ct.us","cc.dc.us","cc.de.us","cc.fl.us","cc.ga.us","cc.gu.us","cc.hi.us","cc.ia.us","cc.id.us","cc.il.us","cc.in.us","cc.ks.us","cc.ky.us","cc.la.us","cc.ma.us","cc.md.us","cc.me.us","cc.mi.us","cc.mn.us","cc.mo.us","cc.ms.us","cc.mt.us","cc.nc.us","cc.nd.us","cc.ne.us","cc.nh.us","cc.nj.us","cc.nm.us","cc.nv.us","cc.ny.us","cc.oh.us","cc.ok.us","cc.or.us","cc.pa.us","cc.pr.us","cc.ri.us","cc.sc.us","cc.sd.us","cc.tn.us","cc.tx.us","cc.ut.us","cc.vi.us","cc.vt.us","cc.va.us","cc.wa.us","cc.wi.us","cc.wv.us","cc.wy.us","lib.ak.us","lib.al.us","lib.ar.us","lib.as.us","lib.az.us","lib.ca.us","lib.co.us","lib.ct.us","lib.dc.us","lib.fl.us","lib.ga.us","lib.gu.us","lib.hi.us","lib.ia.us","lib.id.us","lib.il.us","lib.in.us","lib.ks.us","lib.ky.us","lib.la.us","lib.ma.us","lib.md.us","lib.me.us","lib.mi.us","lib.mn.us","lib.mo.us","lib.ms.us","lib.mt.us","lib.nc.us","lib.nd.us","lib.ne.us","lib.nh.us","lib.nj.us","lib.nm.us","lib.nv.us","lib.ny.us","lib.oh.us","lib.ok.us","lib.or.us","lib.pa.us","lib.pr.us","lib.ri.us","lib.sc.us","lib.sd.us","lib.tn.us","lib.tx.us","lib.ut.us","lib.vi.us","lib.vt.us","lib.va.us","lib.wa.us","lib.wi.us","lib.wy.us","pvt.k12.ma.us","chtr.k12.ma.us","paroch.k12.ma.us","ann-arbor.mi.us","cog.mi.us","dst.mi.us","eaton.mi.us","gen.mi.us","mus.mi.us","tec.mi.us","washtenaw.mi.us","uy","com.uy","edu.uy","gub.uy","mil.uy","net.uy","org.uy","uz","co.uz","com.uz","net.uz","org.uz","va","vc","com.vc","net.vc","org.vc","gov.vc","mil.vc","edu.vc","ve","arts.ve","co.ve","com.ve","e12.ve","edu.ve","firm.ve","gob.ve","gov.ve","info.ve","int.ve","mil.ve","net.ve","org.ve","rec.ve","store.ve","tec.ve","web.ve","vg","vi","co.vi","com.vi","k12.vi","net.vi","org.vi","vn","com.vn","net.vn","org.vn","edu.vn","gov.vn","int.vn","ac.vn","biz.vn","info.vn","name.vn","pro.vn","health.vn","vu","com.vu","edu.vu","net.vu","org.vu","wf","ws","com.ws","net.ws","org.ws","gov.ws","edu.ws","yt","امارات","հայ","বাংলা","бг","бел","中国","中國","الجزائر","مصر","ею","გე","ελ","香港","公司.香港","教育.香港","政府.香港","個人.香港","網絡.香港","組織.香港","ಭಾರತ","ଭାରତ","ভাৰত","भारतम्","भारोत","ڀارت","ഭാരതം","भारत","بارت","بھارت","భారత్","ભારત","ਭਾਰਤ","ভারত","இந்தியா","ایران","ايران","عراق","الاردن","한국","қаз","ලංකා","இலங்கை","المغرب","мкд","мон","澳門","澳门","مليسيا","عمان","پاکستان","پاكستان","فلسطين","срб","пр.срб","орг.срб","обр.срб","од.срб","упр.срб","ак.срб","рф","قطر","السعودية","السعودیة","السعودیۃ","السعوديه","سودان","新加坡","சிங்கப்பூர்","سورية","سوريا","ไทย","ศึกษา.ไทย","ธุรกิจ.ไทย","รัฐบาล.ไทย","ทหาร.ไทย","เน็ต.ไทย","องค์กร.ไทย","تونس","台灣","台湾","臺灣","укр","اليمن","xxx","*.ye","ac.za","agric.za","alt.za","co.za","edu.za","gov.za","grondar.za","law.za","mil.za","net.za","ngo.za","nis.za","nom.za","org.za","school.za","tm.za","web.za","zm","ac.zm","biz.zm","co.zm","com.zm","edu.zm","gov.zm","info.zm","mil.zm","net.zm","org.zm","sch.zm","zw","ac.zw","co.zw","gov.zw","mil.zw","org.zw","aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","academy","accenture","accountant","accountants","aco","active","actor","adac","ads","adult","aeg","aetna","afamilycompany","afl","africa","agakhan","agency","aig","aigo","airbus","airforce","airtel","akdn","alfaromeo","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","aol","apartments","app","apple","aquarelle","arab","aramco","archi","army","art","arte","asda","associates","athleta","attorney","auction","audi","audible","audio","auspost","author","auto","autos","avianca","aws","axa","azure","baby","baidu","banamex","bananarepublic","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bbc","bbt","bbva","bcg","bcn","beats","beauty","beer","bentley","berlin","best","bestbuy","bet","bharti","bible","bid","bike","bing","bingo","bio","black","blackfriday","blanco","blockbuster","blog","bloomberg","blue","bms","bmw","bnl","bnpparibas","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","bradesco","bridgestone","broadway","broker","brother","brussels","budapest","bugatti","build","builders","business","buy","buzz","bzh","cab","cafe","cal","call","calvinklein","cam","camera","camp","cancerresearch","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","cartier","casa","case","caseih","cash","casino","catering","catholic","cba","cbn","cbre","cbs","ceb","center","ceo","cern","cfa","cfd","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","chrysler","church","cipriani","circle","cisco","citadel","citi","citic","city","cityeats","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","coach","codes","coffee","college","cologne","comcast","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cookingchannel","cool","corsica","country","coupon","coupons","courses","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","csc","cuisinella","cymru","cyou","dabur","dad","dance","data","date","dating","datsun","day","dclk","dds","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dnp","docs","doctor","dodge","dog","doha","domains","dot","download","drive","dtv","dubai","duck","dunlop","duns","dupont","durban","dvag","dvr","earth","eat","eco","edeka","education","email","emerck","energy","engineer","engineering","enterprises","epost","epson","equipment","ericsson","erni","esq","estate","esurance","etisalat","eurovision","eus","events","everbank","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fiat","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","flickr","flights","flir","florist","flowers","fly","foo","food","foodnetwork","football","ford","forex","forsale","forum","foundation","fox","free","fresenius","frl","frogans","frontdoor","frontier","ftr","fujitsu","fujixerox","fun","fund","furniture","futbol","fyi","gal","gallery","gallo","gallup","game","games","gap","garden","gbiz","gdn","gea","gent","genting","george","ggee","gift","gifts","gives","giving","glade","glass","gle","global","globo","gmail","gmbh","gmo","gmx","godaddy","gold","goldpoint","golf","goo","goodhands","goodyear","goog","google","gop","got","grainger","graphics","gratis","green","gripe","grocery","group","guardian","gucci","guge","guide","guitars","guru","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hgtv","hiphop","hisamitsu","hitachi","hiv","hkt","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","honeywell","horse","hospital","host","hosting","hot","hoteles","hotels","hotmail","house","how","hsbc","hughes","hyatt","hyundai","ibm","icbc","ice","icu","ieee","ifm","ikano","imamat","imdb","immo","immobilien","inc","industries","infiniti","ing","ink","institute","insurance","insure","intel","international","intuit","investments","ipiranga","irish","iselect","ismaili","ist","istanbul","itau","itv","iveco","jaguar","java","jcb","jcp","jeep","jetzt","jewelry","jio","jlc","jll","jmp","jnj","joburg","jot","joy","jpmorgan","jprs","juegos","juniper","kaufen","kddi","kerryhotels","kerrylogistics","kerryproperties","kfh","kia","kim","kinder","kindle","kitchen","kiwi","koeln","komatsu","kosher","kpmg","kpn","krd","kred","kuokgroup","kyoto","lacaixa","ladbrokes","lamborghini","lamer","lancaster","lancia","lancome","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","liaison","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","linde","link","lipsy","live","living","lixil","llc","loan","loans","locker","locus","loft","lol","london","lotte","lotto","love","lpl","lplfinancial","ltd","ltda","lundbeck","lupin","luxe","luxury","macys","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","maserati","mattel","mba","mckinsey","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","metlife","miami","microsoft","mini","mint","mit","mitsubishi","mlb","mls","mma","mobile","mobily","moda","moe","moi","mom","monash","money","monster","mopar","mormon","mortgage","moscow","moto","motorcycles","mov","movie","movistar","msd","mtn","mtr","mutual","nab","nadex","nagoya","nationwide","natura","navy","nba","nec","netbank","netflix","network","neustar","new","newholland","news","next","nextdirect","nexus","nfl","ngo","nhk","nico","nike","nikon","ninja","nissan","nissay","nokia","northwesternmutual","norton","now","nowruz","nowtv","nra","nrw","ntt","nyc","obi","observer","off","office","okinawa","olayan","olayangroup","oldnavy","ollo","omega","one","ong","onl","online","onyourside","ooo","open","oracle","orange","organic","origins","osaka","otsuka","ott","ovh","page","panasonic","panerai","paris","pars","partners","parts","party","passagens","pay","pccw","pet","pfizer","pharmacy","phd","philips","phone","photo","photography","photos","physio","piaget","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","place","play","playstation","plumbing","plus","pnc","pohl","poker","politie","porn","pramerica","praxi","press","prime","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","pub","pwc","qpon","quebec","quest","qvc","racing","radio","raid","read","realestate","realtor","realty","recipes","red","redstone","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","rightathome","ril","rio","rip","rmit","rocher","rocks","rodeo","rogers","room","rsvp","rugby","ruhr","run","rwe","ryukyu","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sbi","sbs","sca","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scjohnson","scor","scot","search","seat","secure","security","seek","select","sener","services","ses","seven","sew","sex","sexy","sfr","shangrila","sharp","shaw","shell","shia","shiksha","shoes","shop","shopping","shouji","show","showtime","shriram","silk","sina","singles","site","ski","skin","sky","skype","sling","smart","smile","sncf","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","space","spiegel","sport","spot","spreadbetting","srl","srt","stada","staples","star","starhub","statebank","statefarm","statoil","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","sucks","supplies","supply","support","surf","surgery","suzuki","swatch","swiftcover","swiss","sydney","symantec","systems","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tci","tdk","team","tech","technology","telecity","telefonica","temasek","tennis","teva","thd","theater","theatre","tiaa","tickets","tienda","tiffany","tips","tires","tirol","tjmaxx","tjx","tkmaxx","tmall","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","trade","trading","training","travel","travelchannel","travelers","travelersinsurance","trust","trv","tube","tui","tunes","tushu","tvs","ubank","ubs","uconnect","unicom","university","uno","uol","ups","vacations","vana","vanguard","vegas","ventures","verisign","versicherung","vet","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","vista","vistaprint","viva","vivo","vlaanderen","vodka","volkswagen","volvo","vote","voting","voto","voyage","vuelos","wales","walmart","walter","wang","wanggou","warman","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","wtc","wtf","xbox","xerox","xfinity","xihuan","xin","कॉम","セール","佛山","慈善","集团","在线","大众汽车","点看","คอม","八卦","موقع","公益","公司","香格里拉","网站","移动","我爱你","москва","католик","онлайн","сайт","联通","קום","时尚","微博","淡马锡","ファッション","орг","नेट","ストア","삼성","商标","商店","商城","дети","ポイント","新闻","工行","家電","كوم","中文网","中信","娱乐","谷歌","電訊盈科","购物","クラウド","通販","网店","संगठन","餐厅","网络","ком","诺基亚","食品","飞利浦","手表","手机","ارامكو","العليان","اتصالات","بازار","موبايلي","ابوظبي","كاثوليك","همراه","닷컴","政府","شبكة","بيتك","عرب","机构","组织机构","健康","招聘","рус","珠宝","大拿","みんな","グーグル","世界","書籍","网址","닷넷","コム","天主教","游戏","vermögensberater","vermögensberatung","企业","信息","嘉里大酒店","嘉里","广东","政务","xyz","yachts","yahoo","yamaxun","yandex","yodobashi","yoga","yokohama","you","youtube","yun","zappos","zara","zero","zip","zippo","zone","zuerich","cc.ua","inf.ua","ltd.ua","beep.pl","*.compute.estate","*.alces.network","alwaysdata.net","cloudfront.net","*.compute.amazonaws.com","*.compute-1.amazonaws.com","*.compute.amazonaws.com.cn","us-east-1.amazonaws.com","cn-north-1.eb.amazonaws.com.cn","elasticbeanstalk.com","ap-northeast-1.elasticbeanstalk.com","ap-northeast-2.elasticbeanstalk.com","ap-northeast-3.elasticbeanstalk.com","ap-south-1.elasticbeanstalk.com","ap-southeast-1.elasticbeanstalk.com","ap-southeast-2.elasticbeanstalk.com","ca-central-1.elasticbeanstalk.com","eu-central-1.elasticbeanstalk.com","eu-west-1.elasticbeanstalk.com","eu-west-2.elasticbeanstalk.com","eu-west-3.elasticbeanstalk.com","sa-east-1.elasticbeanstalk.com","us-east-1.elasticbeanstalk.com","us-east-2.elasticbeanstalk.com","us-gov-west-1.elasticbeanstalk.com","us-west-1.elasticbeanstalk.com","us-west-2.elasticbeanstalk.com","*.elb.amazonaws.com","*.elb.amazonaws.com.cn","s3.amazonaws.com","s3-ap-northeast-1.amazonaws.com","s3-ap-northeast-2.amazonaws.com","s3-ap-south-1.amazonaws.com","s3-ap-southeast-1.amazonaws.com","s3-ap-southeast-2.amazonaws.com","s3-ca-central-1.amazonaws.com","s3-eu-central-1.amazonaws.com","s3-eu-west-1.amazonaws.com","s3-eu-west-2.amazonaws.com","s3-eu-west-3.amazonaws.com","s3-external-1.amazonaws.com","s3-fips-us-gov-west-1.amazonaws.com","s3-sa-east-1.amazonaws.com","s3-us-gov-west-1.amazonaws.com","s3-us-east-2.amazonaws.com","s3-us-west-1.amazonaws.com","s3-us-west-2.amazonaws.com","s3.ap-northeast-2.amazonaws.com","s3.ap-south-1.amazonaws.com","s3.cn-north-1.amazonaws.com.cn","s3.ca-central-1.amazonaws.com","s3.eu-central-1.amazonaws.com","s3.eu-west-2.amazonaws.com","s3.eu-west-3.amazonaws.com","s3.us-east-2.amazonaws.com","s3.dualstack.ap-northeast-1.amazonaws.com","s3.dualstack.ap-northeast-2.amazonaws.com","s3.dualstack.ap-south-1.amazonaws.com","s3.dualstack.ap-southeast-1.amazonaws.com","s3.dualstack.ap-southeast-2.amazonaws.com","s3.dualstack.ca-central-1.amazonaws.com","s3.dualstack.eu-central-1.amazonaws.com","s3.dualstack.eu-west-1.amazonaws.com","s3.dualstack.eu-west-2.amazonaws.com","s3.dualstack.eu-west-3.amazonaws.com","s3.dualstack.sa-east-1.amazonaws.com","s3.dualstack.us-east-1.amazonaws.com","s3.dualstack.us-east-2.amazonaws.com","s3-website-us-east-1.amazonaws.com","s3-website-us-west-1.amazonaws.com","s3-website-us-west-2.amazonaws.com","s3-website-ap-northeast-1.amazonaws.com","s3-website-ap-southeast-1.amazonaws.com","s3-website-ap-southeast-2.amazonaws.com","s3-website-eu-west-1.amazonaws.com","s3-website-sa-east-1.amazonaws.com","s3-website.ap-northeast-2.amazonaws.com","s3-website.ap-south-1.amazonaws.com","s3-website.ca-central-1.amazonaws.com","s3-website.eu-central-1.amazonaws.com","s3-website.eu-west-2.amazonaws.com","s3-website.eu-west-3.amazonaws.com","s3-website.us-east-2.amazonaws.com","t3l3p0rt.net","tele.amune.org","on-aptible.com","user.party.eus","pimienta.org","poivron.org","potager.org","sweetpepper.org","myasustor.com","myfritz.net","*.awdev.ca","*.advisor.ws","backplaneapp.io","betainabox.com","bnr.la","blackbaudcdn.net","boomla.net","boxfuse.io","square7.ch","bplaced.com","bplaced.de","square7.de","bplaced.net","square7.net","browsersafetymark.io","mycd.eu","ae.org","ar.com","br.com","cn.com","com.de","com.se","de.com","eu.com","gb.com","gb.net","hu.com","hu.net","jp.net","jpn.com","kr.com","mex.com","no.com","qc.com","ru.com","sa.com","se.net","uk.com","uk.net","us.com","uy.com","za.bz","za.com","africa.com","gr.com","in.net","us.org","co.com","c.la","certmgr.org","xenapponazure.com","virtueeldomein.nl","cleverapps.io","c66.me","cloud66.ws","jdevcloud.com","wpdevcloud.com","cloudaccess.host","freesite.host","cloudaccess.net","cloudcontrolled.com","cloudcontrolapp.com","co.ca","*.otap.co","co.cz","c.cdn77.org","cdn77-ssl.net","r.cdn77.net","rsc.cdn77.org","ssl.origin.cdn77-secure.org","cloudns.asia","cloudns.biz","cloudns.club","cloudns.cc","cloudns.eu","cloudns.in","cloudns.info","cloudns.org","cloudns.pro","cloudns.pw","cloudns.us","cloudeity.net","cnpy.gdn","co.nl","co.no","webhosting.be","hosting-cluster.nl","dyn.cosidns.de","dynamisches-dns.de","dnsupdater.de","internet-dns.de","l-o-g-i-n.de","dynamic-dns.info","feste-ip.net","knx-server.net","static-access.net","realm.cz","*.cryptonomic.net","cupcake.is","cyon.link","cyon.site","daplie.me","localhost.daplie.me","dattolocal.com","dattorelay.com","dattoweb.com","mydatto.com","dattolocal.net","mydatto.net","biz.dk","co.dk","firm.dk","reg.dk","store.dk","debian.net","dedyn.io","dnshome.de","drayddns.com","dreamhosters.com","mydrobo.com","drud.io","drud.us","duckdns.org","dy.fi","tunk.org","dyndns-at-home.com","dyndns-at-work.com","dyndns-blog.com","dyndns-free.com","dyndns-home.com","dyndns-ip.com","dyndns-mail.com","dyndns-office.com","dyndns-pics.com","dyndns-remote.com","dyndns-server.com","dyndns-web.com","dyndns-wiki.com","dyndns-work.com","dyndns.biz","dyndns.info","dyndns.org","dyndns.tv","at-band-camp.net","ath.cx","barrel-of-knowledge.info","barrell-of-knowledge.info","better-than.tv","blogdns.com","blogdns.net","blogdns.org","blogsite.org","boldlygoingnowhere.org","broke-it.net","buyshouses.net","cechire.com","dnsalias.com","dnsalias.net","dnsalias.org","dnsdojo.com","dnsdojo.net","dnsdojo.org","does-it.net","doesntexist.com","doesntexist.org","dontexist.com","dontexist.net","dontexist.org","doomdns.com","doomdns.org","dvrdns.org","dyn-o-saur.com","dynalias.com","dynalias.net","dynalias.org","dynathome.net","dyndns.ws","endofinternet.net","endofinternet.org","endoftheinternet.org","est-a-la-maison.com","est-a-la-masion.com","est-le-patron.com","est-mon-blogueur.com","for-better.biz","for-more.biz","for-our.info","for-some.biz","for-the.biz","forgot.her.name","forgot.his.name","from-ak.com","from-al.com","from-ar.com","from-az.net","from-ca.com","from-co.net","from-ct.com","from-dc.com","from-de.com","from-fl.com","from-ga.com","from-hi.com","from-ia.com","from-id.com","from-il.com","from-in.com","from-ks.com","from-ky.com","from-la.net","from-ma.com","from-md.com","from-me.org","from-mi.com","from-mn.com","from-mo.com","from-ms.com","from-mt.com","from-nc.com","from-nd.com","from-ne.com","from-nh.com","from-nj.com","from-nm.com","from-nv.com","from-ny.net","from-oh.com","from-ok.com","from-or.com","from-pa.com","from-pr.com","from-ri.com","from-sc.com","from-sd.com","from-tn.com","from-tx.com","from-ut.com","from-va.com","from-vt.com","from-wa.com","from-wi.com","from-wv.com","from-wy.com","ftpaccess.cc","fuettertdasnetz.de","game-host.org","game-server.cc","getmyip.com","gets-it.net","go.dyndns.org","gotdns.com","gotdns.org","groks-the.info","groks-this.info","ham-radio-op.net","here-for-more.info","hobby-site.com","hobby-site.org","home.dyndns.org","homedns.org","homeftp.net","homeftp.org","homeip.net","homelinux.com","homelinux.net","homelinux.org","homeunix.com","homeunix.net","homeunix.org","iamallama.com","in-the-band.net","is-a-anarchist.com","is-a-blogger.com","is-a-bookkeeper.com","is-a-bruinsfan.org","is-a-bulls-fan.com","is-a-candidate.org","is-a-caterer.com","is-a-celticsfan.org","is-a-chef.com","is-a-chef.net","is-a-chef.org","is-a-conservative.com","is-a-cpa.com","is-a-cubicle-slave.com","is-a-democrat.com","is-a-designer.com","is-a-doctor.com","is-a-financialadvisor.com","is-a-geek.com","is-a-geek.net","is-a-geek.org","is-a-green.com","is-a-guru.com","is-a-hard-worker.com","is-a-hunter.com","is-a-knight.org","is-a-landscaper.com","is-a-lawyer.com","is-a-liberal.com","is-a-libertarian.com","is-a-linux-user.org","is-a-llama.com","is-a-musician.com","is-a-nascarfan.com","is-a-nurse.com","is-a-painter.com","is-a-patsfan.org","is-a-personaltrainer.com","is-a-photographer.com","is-a-player.com","is-a-republican.com","is-a-rockstar.com","is-a-socialist.com","is-a-soxfan.org","is-a-student.com","is-a-teacher.com","is-a-techie.com","is-a-therapist.com","is-an-accountant.com","is-an-actor.com","is-an-actress.com","is-an-anarchist.com","is-an-artist.com","is-an-engineer.com","is-an-entertainer.com","is-by.us","is-certified.com","is-found.org","is-gone.com","is-into-anime.com","is-into-cars.com","is-into-cartoons.com","is-into-games.com","is-leet.com","is-lost.org","is-not-certified.com","is-saved.org","is-slick.com","is-uberleet.com","is-very-bad.org","is-very-evil.org","is-very-good.org","is-very-nice.org","is-very-sweet.org","is-with-theband.com","isa-geek.com","isa-geek.net","isa-geek.org","isa-hockeynut.com","issmarterthanyou.com","isteingeek.de","istmein.de","kicks-ass.net","kicks-ass.org","knowsitall.info","land-4-sale.us","lebtimnetz.de","leitungsen.de","likes-pie.com","likescandy.com","merseine.nu","mine.nu","misconfused.org","mypets.ws","myphotos.cc","neat-url.com","office-on-the.net","on-the-web.tv","podzone.net","podzone.org","readmyblog.org","saves-the-whales.com","scrapper-site.net","scrapping.cc","selfip.biz","selfip.com","selfip.info","selfip.net","selfip.org","sells-for-less.com","sells-for-u.com","sells-it.net","sellsyourhome.org","servebbs.com","servebbs.net","servebbs.org","serveftp.net","serveftp.org","servegame.org","shacknet.nu","simple-url.com","space-to-rent.com","stuff-4-sale.org","stuff-4-sale.us","teaches-yoga.com","thruhere.net","traeumtgerade.de","webhop.biz","webhop.info","webhop.net","webhop.org","worse-than.tv","writesthisblog.com","ddnss.de","dyn.ddnss.de","dyndns.ddnss.de","dyndns1.de","dyn-ip24.de","home-webserver.de","dyn.home-webserver.de","myhome-server.de","ddnss.org","definima.net","definima.io","bci.dnstrace.pro","ddnsfree.com","ddnsgeek.com","giize.com","gleeze.com","kozow.com","loseyourip.com","ooguy.com","theworkpc.com","casacam.net","dynu.net","accesscam.org","camdvr.org","freeddns.org","mywire.org","webredirect.org","myddns.rocks","blogsite.xyz","dynv6.net","e4.cz","mytuleap.com","enonic.io","customer.enonic.io","eu.org","al.eu.org","asso.eu.org","at.eu.org","au.eu.org","be.eu.org","bg.eu.org","ca.eu.org","cd.eu.org","ch.eu.org","cn.eu.org","cy.eu.org","cz.eu.org","de.eu.org","dk.eu.org","edu.eu.org","ee.eu.org","es.eu.org","fi.eu.org","fr.eu.org","gr.eu.org","hr.eu.org","hu.eu.org","ie.eu.org","il.eu.org","in.eu.org","int.eu.org","is.eu.org","it.eu.org","jp.eu.org","kr.eu.org","lt.eu.org","lu.eu.org","lv.eu.org","mc.eu.org","me.eu.org","mk.eu.org","mt.eu.org","my.eu.org","net.eu.org","ng.eu.org","nl.eu.org","no.eu.org","nz.eu.org","paris.eu.org","pl.eu.org","pt.eu.org","q-a.eu.org","ro.eu.org","ru.eu.org","se.eu.org","si.eu.org","sk.eu.org","tr.eu.org","uk.eu.org","us.eu.org","eu-1.evennode.com","eu-2.evennode.com","eu-3.evennode.com","eu-4.evennode.com","us-1.evennode.com","us-2.evennode.com","us-3.evennode.com","us-4.evennode.com","twmail.cc","twmail.net","twmail.org","mymailer.com.tw","url.tw","apps.fbsbx.com","ru.net","adygeya.ru","bashkiria.ru","bir.ru","cbg.ru","com.ru","dagestan.ru","grozny.ru","kalmykia.ru","kustanai.ru","marine.ru","mordovia.ru","msk.ru","mytis.ru","nalchik.ru","nov.ru","pyatigorsk.ru","spb.ru","vladikavkaz.ru","vladimir.ru","abkhazia.su","adygeya.su","aktyubinsk.su","arkhangelsk.su","armenia.su","ashgabad.su","azerbaijan.su","balashov.su","bashkiria.su","bryansk.su","bukhara.su","chimkent.su","dagestan.su","east-kazakhstan.su","exnet.su","georgia.su","grozny.su","ivanovo.su","jambyl.su","kalmykia.su","kaluga.su","karacol.su","karaganda.su","karelia.su","khakassia.su","krasnodar.su","kurgan.su","kustanai.su","lenug.su","mangyshlak.su","mordovia.su","msk.su","murmansk.su","nalchik.su","navoi.su","north-kazakhstan.su","nov.su","obninsk.su","penza.su","pokrovsk.su","sochi.su","spb.su","tashkent.su","termez.su","togliatti.su","troitsk.su","tselinograd.su","tula.su","tuva.su","vladikavkaz.su","vladimir.su","vologda.su","channelsdvr.net","fastlylb.net","map.fastlylb.net","freetls.fastly.net","map.fastly.net","a.prod.fastly.net","global.prod.fastly.net","a.ssl.fastly.net","b.ssl.fastly.net","global.ssl.fastly.net","fastpanel.direct","fastvps-server.com","fhapp.xyz","fedorainfracloud.org","fedorapeople.org","cloud.fedoraproject.org","app.os.fedoraproject.org","app.os.stg.fedoraproject.org","filegear.me","firebaseapp.com","flynnhub.com","flynnhosting.net","freebox-os.com","freeboxos.com","fbx-os.fr","fbxos.fr","freebox-os.fr","freeboxos.fr","freedesktop.org","*.futurecms.at","*.ex.futurecms.at","*.in.futurecms.at","futurehosting.at","futuremailing.at","*.ex.ortsinfo.at","*.kunden.ortsinfo.at","*.statics.cloud","service.gov.uk","github.io","githubusercontent.com","gitlab.io","homeoffice.gov.uk","ro.im","shop.ro","goip.de","*.0emm.com","appspot.com","blogspot.ae","blogspot.al","blogspot.am","blogspot.ba","blogspot.be","blogspot.bg","blogspot.bj","blogspot.ca","blogspot.cf","blogspot.ch","blogspot.cl","blogspot.co.at","blogspot.co.id","blogspot.co.il","blogspot.co.ke","blogspot.co.nz","blogspot.co.uk","blogspot.co.za","blogspot.com","blogspot.com.ar","blogspot.com.au","blogspot.com.br","blogspot.com.by","blogspot.com.co","blogspot.com.cy","blogspot.com.ee","blogspot.com.eg","blogspot.com.es","blogspot.com.mt","blogspot.com.ng","blogspot.com.tr","blogspot.com.uy","blogspot.cv","blogspot.cz","blogspot.de","blogspot.dk","blogspot.fi","blogspot.fr","blogspot.gr","blogspot.hk","blogspot.hr","blogspot.hu","blogspot.ie","blogspot.in","blogspot.is","blogspot.it","blogspot.jp","blogspot.kr","blogspot.li","blogspot.lt","blogspot.lu","blogspot.md","blogspot.mk","blogspot.mr","blogspot.mx","blogspot.my","blogspot.nl","blogspot.no","blogspot.pe","blogspot.pt","blogspot.qa","blogspot.re","blogspot.ro","blogspot.rs","blogspot.ru","blogspot.se","blogspot.sg","blogspot.si","blogspot.sk","blogspot.sn","blogspot.td","blogspot.tw","blogspot.ug","blogspot.vn","cloudfunctions.net","cloud.goog","codespot.com","googleapis.com","googlecode.com","pagespeedmobilizer.com","publishproxy.com","withgoogle.com","withyoutube.com","hashbang.sh","hasura.app","hasura-app.io","hepforge.org","herokuapp.com","herokussl.com","myravendb.com","ravendb.community","ravendb.me","development.run","ravendb.run","moonscale.net","iki.fi","biz.at","info.at","info.cx","ac.leg.br","al.leg.br","am.leg.br","ap.leg.br","ba.leg.br","ce.leg.br","df.leg.br","es.leg.br","go.leg.br","ma.leg.br","mg.leg.br","ms.leg.br","mt.leg.br","pa.leg.br","pb.leg.br","pe.leg.br","pi.leg.br","pr.leg.br","rj.leg.br","rn.leg.br","ro.leg.br","rr.leg.br","rs.leg.br","sc.leg.br","se.leg.br","sp.leg.br","to.leg.br","pixolino.com","ipifony.net","mein-iserv.de","test-iserv.de","myjino.ru","*.hosting.myjino.ru","*.landing.myjino.ru","*.spectrum.myjino.ru","*.vps.myjino.ru","*.triton.zone","*.cns.joyent.com","js.org","keymachine.de","knightpoint.systems","co.krd","edu.krd","git-repos.de","lcube-server.de","svn-repos.de","app.lmpm.com","linkitools.space","linkyard.cloud","linkyard-cloud.ch","we.bs","uklugs.org","glug.org.uk","lug.org.uk","lugs.org.uk","barsy.bg","barsy.co.uk","barsyonline.co.uk","barsycenter.com","barsyonline.com","barsy.club","barsy.de","barsy.eu","barsy.in","barsy.info","barsy.io","barsy.me","barsy.menu","barsy.mobi","barsy.net","barsy.online","barsy.org","barsy.pro","barsy.pub","barsy.shop","barsy.site","barsy.support","barsy.uk","*.magentosite.cloud","mayfirst.info","mayfirst.org","hb.cldmail.ru","miniserver.com","memset.net","cloud.metacentrum.cz","custom.metacentrum.cz","flt.cloud.muni.cz","usr.cloud.muni.cz","meteorapp.com","eu.meteorapp.com","co.pl","azurecontainer.io","azurewebsites.net","azure-mobile.net","cloudapp.net","mozilla-iot.org","bmoattachments.org","net.ru","org.ru","pp.ru","bitballoon.com","netlify.com","4u.com","ngrok.io","nh-serv.co.uk","nfshost.com","dnsking.ch","mypi.co","n4t.co","001www.com","ddnslive.com","myiphost.com","forumz.info","16-b.it","32-b.it","64-b.it","soundcast.me","tcp4.me","dnsup.net","hicam.net","now-dns.net","ownip.net","vpndns.net","dynserv.org","now-dns.org","x443.pw","now-dns.top","ntdll.top","freeddns.us","crafting.xyz","zapto.xyz","nsupdate.info","nerdpol.ovh","blogsyte.com","brasilia.me","cable-modem.org","ciscofreak.com","collegefan.org","couchpotatofries.org","damnserver.com","ddns.me","ditchyourip.com","dnsfor.me","dnsiskinky.com","dvrcam.info","dynns.com","eating-organic.net","fantasyleague.cc","geekgalaxy.com","golffan.us","health-carereform.com","homesecuritymac.com","homesecuritypc.com","hopto.me","ilovecollege.info","loginto.me","mlbfan.org","mmafan.biz","myactivedirectory.com","mydissent.net","myeffect.net","mymediapc.net","mypsx.net","mysecuritycamera.com","mysecuritycamera.net","mysecuritycamera.org","net-freaks.com","nflfan.org","nhlfan.net","no-ip.ca","no-ip.co.uk","no-ip.net","noip.us","onthewifi.com","pgafan.net","point2this.com","pointto.us","privatizehealthinsurance.net","quicksytes.com","read-books.org","securitytactics.com","serveexchange.com","servehumour.com","servep2p.com","servesarcasm.com","stufftoread.com","ufcfan.org","unusualperson.com","workisboring.com","3utilities.com","bounceme.net","ddns.net","ddnsking.com","gotdns.ch","hopto.org","myftp.biz","myftp.org","myvnc.com","no-ip.biz","no-ip.info","no-ip.org","noip.me","redirectme.net","servebeer.com","serveblog.net","servecounterstrike.com","serveftp.com","servegame.com","servehalflife.com","servehttp.com","serveirc.com","serveminecraft.net","servemp3.com","servepics.com","servequake.com","sytes.net","webhop.me","zapto.org","stage.nodeart.io","nodum.co","nodum.io","pcloud.host","nyc.mn","nom.ae","nom.af","nom.ai","nom.al","nym.by","nym.bz","nom.cl","nom.gd","nom.ge","nom.gl","nym.gr","nom.gt","nym.gy","nom.hn","nym.ie","nom.im","nom.ke","nym.kz","nym.la","nym.lc","nom.li","nym.li","nym.lt","nym.lu","nym.me","nom.mk","nym.mn","nym.mx","nom.nu","nym.nz","nym.pe","nym.pt","nom.pw","nom.qa","nym.ro","nom.rs","nom.si","nym.sk","nom.st","nym.su","nym.sx","nom.tj","nym.tw","nom.ug","nom.uy","nom.vc","nom.vg","cya.gg","cloudycluster.net","nid.io","opencraft.hosting","operaunite.com","outsystemscloud.com","ownprovider.com","own.pm","ox.rs","oy.lc","pgfog.com","pagefrontapp.com","art.pl","gliwice.pl","krakow.pl","poznan.pl","wroc.pl","zakopane.pl","pantheonsite.io","gotpantheon.com","mypep.link","on-web.fr","*.platform.sh","*.platformsh.site","xen.prgmr.com","priv.at","protonet.io","chirurgiens-dentistes-en-france.fr","byen.site","ras.ru","qa2.com","dev-myqnapcloud.com","alpha-myqnapcloud.com","myqnapcloud.com","*.quipelements.com","vapor.cloud","vaporcloud.io","rackmaze.com","rackmaze.net","rhcloud.com","resindevice.io","devices.resinstaging.io","hzc.io","wellbeingzone.eu","ptplus.fit","wellbeingzone.co.uk","sandcats.io","logoip.de","logoip.com","schokokeks.net","scrysec.com","firewall-gateway.com","firewall-gateway.de","my-gateway.de","my-router.de","spdns.de","spdns.eu","firewall-gateway.net","my-firewall.org","myfirewall.org","spdns.org","*.s5y.io","*.sensiosite.cloud","biz.ua","co.ua","pp.ua","shiftedit.io","myshopblocks.com","1kapp.com","appchizi.com","applinzi.com","sinaapp.com","vipsinaapp.com","bounty-full.com","alpha.bounty-full.com","beta.bounty-full.com","static.land","dev.static.land","sites.static.land","apps.lair.io","*.stolos.io","spacekit.io","customer.speedpartner.de","storj.farm","utwente.io","temp-dns.com","diskstation.me","dscloud.biz","dscloud.me","dscloud.mobi","dsmynas.com","dsmynas.net","dsmynas.org","familyds.com","familyds.net","familyds.org","i234.me","myds.me","synology.me","vpnplus.to","taifun-dns.de","gda.pl","gdansk.pl","gdynia.pl","med.pl","sopot.pl","gwiddle.co.uk","cust.dev.thingdust.io","cust.disrec.thingdust.io","cust.prod.thingdust.io","cust.testing.thingdust.io","bloxcms.com","townnews-staging.com","12hp.at","2ix.at","4lima.at","lima-city.at","12hp.ch","2ix.ch","4lima.ch","lima-city.ch","trafficplex.cloud","de.cool","12hp.de","2ix.de","4lima.de","lima-city.de","1337.pictures","clan.rip","lima-city.rocks","webspace.rocks","lima.zone","*.transurl.be","*.transurl.eu","*.transurl.nl","tuxfamily.org","dd-dns.de","diskstation.eu","diskstation.org","dray-dns.de","draydns.de","dyn-vpn.de","dynvpn.de","mein-vigor.de","my-vigor.de","my-wan.de","syno-ds.de","synology-diskstation.de","synology-ds.de","uber.space","*.uberspace.de","hk.com","hk.org","ltd.hk","inc.hk","virtualuser.de","virtual-user.de","lib.de.us","2038.io","router.management","v-info.info","wedeploy.io","wedeploy.me","wedeploy.sh","remotewd.com","wmflabs.org","half.host","xnbay.com","u2.xnbay.com","u2-local.xnbay.com","cistron.nl","demon.nl","xs4all.space","official.academy","yolasite.com","ybo.faith","yombo.me","homelink.one","ybo.party","ybo.review","ybo.science","ybo.trade","nohost.me","noho.st","za.net","za.org","now.sh","zone.id"]
  4044. /***/ }),
  4045. /* 17 */
  4046. /***/ (function(module, exports) {
  4047. /*!
  4048. * Copyright (c) 2015, Salesforce.com, Inc.
  4049. * All rights reserved.
  4050. *
  4051. * Redistribution and use in source and binary forms, with or without
  4052. * modification, are permitted provided that the following conditions are met:
  4053. *
  4054. * 1. Redistributions of source code must retain the above copyright notice,
  4055. * this list of conditions and the following disclaimer.
  4056. *
  4057. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4058. * this list of conditions and the following disclaimer in the documentation
  4059. * and/or other materials provided with the distribution.
  4060. *
  4061. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4062. * be used to endorse or promote products derived from this software without
  4063. * specific prior written permission.
  4064. *
  4065. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4066. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4067. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4068. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4069. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4070. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4071. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4072. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4073. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4074. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4075. * POSSIBILITY OF SUCH DAMAGE.
  4076. */
  4077. 'use strict';
  4078. /*jshint unused:false */
  4079. function Store() {
  4080. }
  4081. exports.Store = Store;
  4082. // Stores may be synchronous, but are still required to use a
  4083. // Continuation-Passing Style API. The CookieJar itself will expose a "*Sync"
  4084. // API that converts from synchronous-callbacks to imperative style.
  4085. Store.prototype.synchronous = false;
  4086. Store.prototype.findCookie = function(domain, path, key, cb) {
  4087. throw new Error('findCookie is not implemented');
  4088. };
  4089. Store.prototype.findCookies = function(domain, path, cb) {
  4090. throw new Error('findCookies is not implemented');
  4091. };
  4092. Store.prototype.putCookie = function(cookie, cb) {
  4093. throw new Error('putCookie is not implemented');
  4094. };
  4095. Store.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  4096. // recommended default implementation:
  4097. // return this.putCookie(newCookie, cb);
  4098. throw new Error('updateCookie is not implemented');
  4099. };
  4100. Store.prototype.removeCookie = function(domain, path, key, cb) {
  4101. throw new Error('removeCookie is not implemented');
  4102. };
  4103. Store.prototype.removeCookies = function(domain, path, cb) {
  4104. throw new Error('removeCookies is not implemented');
  4105. };
  4106. Store.prototype.getAllCookies = function(cb) {
  4107. throw new Error('getAllCookies is not implemented (therefore jar cannot be serialized)');
  4108. };
  4109. /***/ }),
  4110. /* 18 */
  4111. /***/ (function(module, exports, __webpack_require__) {
  4112. /*!
  4113. * Copyright (c) 2015, Salesforce.com, Inc.
  4114. * All rights reserved.
  4115. *
  4116. * Redistribution and use in source and binary forms, with or without
  4117. * modification, are permitted provided that the following conditions are met:
  4118. *
  4119. * 1. Redistributions of source code must retain the above copyright notice,
  4120. * this list of conditions and the following disclaimer.
  4121. *
  4122. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4123. * this list of conditions and the following disclaimer in the documentation
  4124. * and/or other materials provided with the distribution.
  4125. *
  4126. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4127. * be used to endorse or promote products derived from this software without
  4128. * specific prior written permission.
  4129. *
  4130. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4131. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4132. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4133. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4134. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4135. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4136. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4137. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4138. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4139. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4140. * POSSIBILITY OF SUCH DAMAGE.
  4141. */
  4142. 'use strict';
  4143. var Store = __webpack_require__(17).Store;
  4144. var permuteDomain = __webpack_require__(19).permuteDomain;
  4145. var pathMatch = __webpack_require__(20).pathMatch;
  4146. var util = __webpack_require__(9);
  4147. function MemoryCookieStore() {
  4148. Store.call(this);
  4149. this.idx = {};
  4150. }
  4151. util.inherits(MemoryCookieStore, Store);
  4152. exports.MemoryCookieStore = MemoryCookieStore;
  4153. MemoryCookieStore.prototype.idx = null;
  4154. // Since it's just a struct in RAM, this Store is synchronous
  4155. MemoryCookieStore.prototype.synchronous = true;
  4156. // force a default depth:
  4157. MemoryCookieStore.prototype.inspect = function() {
  4158. return "{ idx: "+util.inspect(this.idx, false, 2)+' }';
  4159. };
  4160. // Use the new custom inspection symbol to add the custom inspect function if
  4161. // available.
  4162. if (util.inspect.custom) {
  4163. MemoryCookieStore.prototype[util.inspect.custom] = MemoryCookieStore.prototype.inspect;
  4164. }
  4165. MemoryCookieStore.prototype.findCookie = function(domain, path, key, cb) {
  4166. if (!this.idx[domain]) {
  4167. return cb(null,undefined);
  4168. }
  4169. if (!this.idx[domain][path]) {
  4170. return cb(null,undefined);
  4171. }
  4172. return cb(null,this.idx[domain][path][key]||null);
  4173. };
  4174. MemoryCookieStore.prototype.findCookies = function(domain, path, cb) {
  4175. var results = [];
  4176. if (!domain) {
  4177. return cb(null,[]);
  4178. }
  4179. var pathMatcher;
  4180. if (!path) {
  4181. // null means "all paths"
  4182. pathMatcher = function matchAll(domainIndex) {
  4183. for (var curPath in domainIndex) {
  4184. var pathIndex = domainIndex[curPath];
  4185. for (var key in pathIndex) {
  4186. results.push(pathIndex[key]);
  4187. }
  4188. }
  4189. };
  4190. } else {
  4191. pathMatcher = function matchRFC(domainIndex) {
  4192. //NOTE: we should use path-match algorithm from S5.1.4 here
  4193. //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
  4194. Object.keys(domainIndex).forEach(function (cookiePath) {
  4195. if (pathMatch(path, cookiePath)) {
  4196. var pathIndex = domainIndex[cookiePath];
  4197. for (var key in pathIndex) {
  4198. results.push(pathIndex[key]);
  4199. }
  4200. }
  4201. });
  4202. };
  4203. }
  4204. var domains = permuteDomain(domain) || [domain];
  4205. var idx = this.idx;
  4206. domains.forEach(function(curDomain) {
  4207. var domainIndex = idx[curDomain];
  4208. if (!domainIndex) {
  4209. return;
  4210. }
  4211. pathMatcher(domainIndex);
  4212. });
  4213. cb(null,results);
  4214. };
  4215. MemoryCookieStore.prototype.putCookie = function(cookie, cb) {
  4216. if (!this.idx[cookie.domain]) {
  4217. this.idx[cookie.domain] = {};
  4218. }
  4219. if (!this.idx[cookie.domain][cookie.path]) {
  4220. this.idx[cookie.domain][cookie.path] = {};
  4221. }
  4222. this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
  4223. cb(null);
  4224. };
  4225. MemoryCookieStore.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  4226. // updateCookie() may avoid updating cookies that are identical. For example,
  4227. // lastAccessed may not be important to some stores and an equality
  4228. // comparison could exclude that field.
  4229. this.putCookie(newCookie,cb);
  4230. };
  4231. MemoryCookieStore.prototype.removeCookie = function(domain, path, key, cb) {
  4232. if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) {
  4233. delete this.idx[domain][path][key];
  4234. }
  4235. cb(null);
  4236. };
  4237. MemoryCookieStore.prototype.removeCookies = function(domain, path, cb) {
  4238. if (this.idx[domain]) {
  4239. if (path) {
  4240. delete this.idx[domain][path];
  4241. } else {
  4242. delete this.idx[domain];
  4243. }
  4244. }
  4245. return cb(null);
  4246. };
  4247. MemoryCookieStore.prototype.getAllCookies = function(cb) {
  4248. var cookies = [];
  4249. var idx = this.idx;
  4250. var domains = Object.keys(idx);
  4251. domains.forEach(function(domain) {
  4252. var paths = Object.keys(idx[domain]);
  4253. paths.forEach(function(path) {
  4254. var keys = Object.keys(idx[domain][path]);
  4255. keys.forEach(function(key) {
  4256. if (key !== null) {
  4257. cookies.push(idx[domain][path][key]);
  4258. }
  4259. });
  4260. });
  4261. });
  4262. // Sort by creationIndex so deserializing retains the creation order.
  4263. // When implementing your own store, this SHOULD retain the order too
  4264. cookies.sort(function(a,b) {
  4265. return (a.creationIndex||0) - (b.creationIndex||0);
  4266. });
  4267. cb(null, cookies);
  4268. };
  4269. /***/ }),
  4270. /* 19 */
  4271. /***/ (function(module, exports, __webpack_require__) {
  4272. /*!
  4273. * Copyright (c) 2015, Salesforce.com, Inc.
  4274. * All rights reserved.
  4275. *
  4276. * Redistribution and use in source and binary forms, with or without
  4277. * modification, are permitted provided that the following conditions are met:
  4278. *
  4279. * 1. Redistributions of source code must retain the above copyright notice,
  4280. * this list of conditions and the following disclaimer.
  4281. *
  4282. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4283. * this list of conditions and the following disclaimer in the documentation
  4284. * and/or other materials provided with the distribution.
  4285. *
  4286. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4287. * be used to endorse or promote products derived from this software without
  4288. * specific prior written permission.
  4289. *
  4290. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4291. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4292. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4293. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4294. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4295. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4296. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4297. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4298. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4299. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4300. * POSSIBILITY OF SUCH DAMAGE.
  4301. */
  4302. "use strict";
  4303. var pubsuffix = __webpack_require__(13);
  4304. // Gives the permutation of all possible domainMatch()es of a given domain. The
  4305. // array is in shortest-to-longest order. Handy for indexing.
  4306. function permuteDomain (domain) {
  4307. var pubSuf = pubsuffix.getPublicSuffix(domain);
  4308. if (!pubSuf) {
  4309. return null;
  4310. }
  4311. if (pubSuf == domain) {
  4312. return [domain];
  4313. }
  4314. var prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
  4315. var parts = prefix.split('.').reverse();
  4316. var cur = pubSuf;
  4317. var permutations = [cur];
  4318. while (parts.length) {
  4319. cur = parts.shift() + '.' + cur;
  4320. permutations.push(cur);
  4321. }
  4322. return permutations;
  4323. }
  4324. exports.permuteDomain = permuteDomain;
  4325. /***/ }),
  4326. /* 20 */
  4327. /***/ (function(module, exports) {
  4328. /*!
  4329. * Copyright (c) 2015, Salesforce.com, Inc.
  4330. * All rights reserved.
  4331. *
  4332. * Redistribution and use in source and binary forms, with or without
  4333. * modification, are permitted provided that the following conditions are met:
  4334. *
  4335. * 1. Redistributions of source code must retain the above copyright notice,
  4336. * this list of conditions and the following disclaimer.
  4337. *
  4338. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4339. * this list of conditions and the following disclaimer in the documentation
  4340. * and/or other materials provided with the distribution.
  4341. *
  4342. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4343. * be used to endorse or promote products derived from this software without
  4344. * specific prior written permission.
  4345. *
  4346. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4347. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4348. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4349. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4350. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4351. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4352. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4353. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4354. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4355. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4356. * POSSIBILITY OF SUCH DAMAGE.
  4357. */
  4358. "use strict";
  4359. /*
  4360. * "A request-path path-matches a given cookie-path if at least one of the
  4361. * following conditions holds:"
  4362. */
  4363. function pathMatch (reqPath, cookiePath) {
  4364. // "o The cookie-path and the request-path are identical."
  4365. if (cookiePath === reqPath) {
  4366. return true;
  4367. }
  4368. var idx = reqPath.indexOf(cookiePath);
  4369. if (idx === 0) {
  4370. // "o The cookie-path is a prefix of the request-path, and the last
  4371. // character of the cookie-path is %x2F ("/")."
  4372. if (cookiePath.substr(-1) === "/") {
  4373. return true;
  4374. }
  4375. // " o The cookie-path is a prefix of the request-path, and the first
  4376. // character of the request-path that is not included in the cookie- path
  4377. // is a %x2F ("/") character."
  4378. if (reqPath.substr(cookiePath.length, 1) === "/") {
  4379. return true;
  4380. }
  4381. }
  4382. return false;
  4383. }
  4384. exports.pathMatch = pathMatch;
  4385. /***/ }),
  4386. /* 21 */
  4387. /***/ (function(module, exports) {
  4388. module.exports = {"_from":"tough-cookie@2.4.3","_id":"tough-cookie@2.4.3","_inBundle":false,"_integrity":"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==","_location":"/tough-cookie","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"tough-cookie@2.4.3","name":"tough-cookie","escapedName":"tough-cookie","rawSpec":"2.4.3","saveSpec":null,"fetchSpec":"2.4.3"},"_requiredBy":["#DEV:/"],"_resolved":"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz","_shasum":"53f36da3f47783b0925afa06ff9f3b165280f781","_spec":"tough-cookie@2.4.3","_where":"/Users/sefa/Entwicklung/umd-tough-cookie","author":{"name":"Jeremy Stashewsky","email":"jstash@gmail.com"},"bugs":{"url":"https://github.com/salesforce/tough-cookie/issues"},"bundleDependencies":false,"contributors":[{"name":"Alexander Savin"},{"name":"Ian Livingstone"},{"name":"Ivan Nikulin"},{"name":"Lalit Kapoor"},{"name":"Sam Thompson"},{"name":"Sebastian Mayr"}],"dependencies":{"psl":"^1.1.24","punycode":"^1.4.1"},"deprecated":false,"description":"RFC6265 Cookies and Cookie Jar for node.js","devDependencies":{"async":"^1.4.2","nyc":"^11.6.0","string.prototype.repeat":"^0.2.0","vows":"^0.8.1"},"engines":{"node":">=0.8"},"files":["lib"],"homepage":"https://github.com/salesforce/tough-cookie","keywords":["HTTP","cookie","cookies","set-cookie","cookiejar","jar","RFC6265","RFC2965"],"license":"BSD-3-Clause","main":"./lib/cookie","name":"tough-cookie","repository":{"type":"git","url":"git://github.com/salesforce/tough-cookie.git"},"scripts":{"cover":"nyc --reporter=lcov --reporter=html vows test/*_test.js","test":"vows test/*_test.js"},"version":"2.4.3"}
  4389. /***/ })
  4390. /******/ ])
  4391. });
  4392. ;
  4393. });