{"version":3,"sources":["components/NavMenu.js","components/Settings.jsx","components/SearchBar.jsx","components/Dialog.jsx","components/PolicyWording.jsx","components/CookieBar.jsx","components/Snapshot.jsx","components/input.jsx","services/ferretService.js","components/Message.jsx","components/Form.jsx","components/ResultEntry.jsx","components/SearchResult.jsx","components/FilterBar.jsx","components/PreviousSearches.jsx","services/signalRservice.js","components/MainPage.jsx","services/filterService.js","registerServiceWorker.js","index.js","App.js"],"names":["NavMenu","_Component","props","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","toggleNavbar","bind","assertThisInitialized","state","collapsed","inherits","createClass","key","value","setState","_this2","react_default","a","createElement","className","xmlns","version","viewBox","preserveAspectRatio","style","zoom","transform","fill","stroke","d","percentage","onClick","onSettingsClicked","onMessgaeClicked","height","width","role","aria-valuenow","aria-valuemin","aria-valuemax","Component","displayName","name","Settings","_getPrototypeOf2","_len","arguments","length","args","Array","_key","apply","concat","applyAll","toWhat","stores","map","s","onStoreChange","columnSize","columnData","_","chunk","c","indexOf","i","handlerName","type","checked","enabled","onChange","isOk","cookieAcceptance","onAcceptanceChange","onClearSettings","SearchBar","searchTerm","handleChange","e","currentTarget","handleClick","onSearch","handleKeyPress","keyCode","which","canSearch","trim","placeholder","aria-label","onKeyPress","Dialog","docHeight","document","body","clientHeight","componentRef","useRef","useDimensions","id","ref","title","onClose","children","myRef","getDimensions","mobile","window","innerWidth","current","innerHeight","offsetTop","_useState","useState","_useState2","slicedToArray","dimensions","setDimensions","useEffect","handleResize","addEventListener","removeEventListener","PolicyWording","CookieBar","onShowPolicy","href","onAcceptance","Snapshot","imgLoaded","setImgLoaded","_useState3","_useState4","secImgLoaded","_useState5","_useState6","showMessage","setShowMessage","unescapedUrl","encodeURIComponent","_unescape","item","productPageUrl","firstPass","src","onLoad","aria-hidden","store","open","Input","_ref","label","error","rest","objectWithoutProperties","htmlFor","assign","TextArea","_ref2","sendMessage","_x4","_sendMessage","_callee2","message","response","data","regenerator_default","wrap","_context2","prev","next","fetch","method","headers","Content-type","JSON","stringify","sent","text","abrupt","t0","stop","Message","_Form","email","errors","responseMessage","doSubmit","asyncToGenerator","mark","_callee","_context","status","objectSpread","username","schema","Joi","string","required","min","onSubmit","handleSubmit","renderInput","renderTextArea","renderButton","validate","abortEarly","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","details","Symbol","iterator","done","path","err","return","validateProperty","obj","defineProperty","preventDefault","input","errorMessage","disabled","_this$state","input_Input","_this$state2","input_TextArea","ResultEntry","imgOk","openStore","level","onShowProduct","alt","description","imageUrl","onError","dangerouslySetInnerHTML","__html","descriptionMatch","formattedString","sku","onSelect","price","toFixed","stockLevelCss","inStock","stockLevelLabel","rel","target","SearchResult","results","r","ResultEntry_ResultEntry","FilterBar","direction","activeFilter","resultFilter","handleFilter","byWhat","onFilterChange","newDirection","handleResultFilter","resultCount","showIndicator","PreviousSearches","items","onRemove","connection","signalR","withUrl","build","start","_start","_callee5","_context5","console","log","setTimeout","on","callBackFunc","chkCallBackFunc","onclose","SearchService","callbackMethod","_start2","_callee3","_context3","_run","_callee4","what","storesToSearch","_context4","invoke","_x7","_x8","MainPage","showSettings","previousSearches","showCookiePolicy","filteredCount","displayItem","resultArray","checkService","found","toConsumableArray","filter","prevState","searchService","completed","parseInt","flatten","handleSettings","handleMessage","handleStoreChange","find","localStorage","setItem","storeStatus","run","handleSearch","handleFilterChange","push","t","handleClearSettings","removeItem","refs","settings","handleSelect","search","doSearch","handleRemove","x","handleShowProduct","handleAcceptanceChange","checkCookieAcceptance","previousStores","populatePreviousSearches","getStoresFromStorage","populateStores","then","location","params","queryString","parse","getItem","previousSearchesData","ex","_this3","filteredResults","byDirection","re","RegExp","test","toLowerCase","finalResults","orderBy","filterResults","NavMenu_NavMenu","SearchBar_SearchBar","PreviousSearches_PreviousSearches","FilterBar_FilterBar","Settings_Settings","Message_Message","Date","getFullYear","json","newData","match","loading","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","BrowserRouter","basename","Switch","Route","component","URL","process","origin","get","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"gSAGaA,SAAb,SAAAC,GAGE,SAAAD,EAAaE,GAAO,IAAAC,EAAA,OAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAAN,IAClBG,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,KAAAF,OAAAI,EAAA,EAAAJ,CAAAJ,GAAAS,KAAAH,KAAMJ,KAEDQ,aAAeP,EAAKO,aAAaC,KAAlBP,OAAAQ,EAAA,EAAAR,CAAAD,IACpBA,EAAKU,MAAQ,CACXC,WAAW,GALKX,EAHtB,OAAAC,OAAAW,EAAA,EAAAX,CAAAJ,EAAAC,GAAAG,OAAAY,EAAA,EAAAZ,CAAAJ,EAAA,EAAAiB,IAAA,eAAAC,MAAA,WAaIZ,KAAKa,SAAS,CACZL,WAAYR,KAAKO,MAAMC,cAd7B,CAAAG,IAAA,SAAAC,MAAA,WAoBW,IAAAE,EAAAd,KACP,OACEe,EAAAC,EAAAC,cAAA,cACEF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aAEbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,qBACLH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,eACXH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,iBAGXH,EAAAC,EAAAC,cAAA,OAAKE,MAAM,6BAA6BC,QAAQ,MAAMC,QAAQ,2BAC1DH,UAAU,cACVI,oBAAoB,gBAAgBC,MAAO,CAAEC,KAAM,IACnDT,EAAAC,EAAAC,cAAA,KAAGQ,UAAU,0DAA0DC,KAAK,UAAUC,OAAO,QACzFZ,EAAAC,EAAAC,cAAA,QAAMW,EAAE,qmCAA0mCb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,mEAAwEb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,6RAAkSb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,4MAAiNb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,4KAAiLb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,gMAAqMb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,gTAAqTb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,mQAAwQb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,+NAAoOb,EAAAC,EAAAC,cAAA,QAAMW,EAAE,oKAQp6Fb,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBACc,OAA1BlB,KAAKJ,MAAMiC,YAAuBd,EAAAC,EAAAC,cAAA,OAAKC,UAAU,gCAA+BH,EAAAC,EAAAC,cAAA,YAAQjB,KAAKJ,MAAMiC,YAAkBd,EAAAC,EAAAC,cAAA,mBAExHF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBAAf,IAAqCH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,aAAaY,QAAS,WAAQhB,EAAKlB,MAAMmC,wBAC3FhB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBAAf,IAAqCH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,kBAAkBY,QAAS,WAAQhB,EAAKlB,MAAMoC,wBAGvE,OAA1BhC,KAAKJ,MAAMiC,YACVd,EAAAC,EAAAC,cAAA,OAAKC,UAAU,2BAA2BK,MAAO,CAACU,OAAO,QACzDlB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,eAAeK,MAAO,CAAEW,MAAOlC,KAAKJ,MAAMiC,WAAW,KAAOM,KAAK,cAAcC,gBAAepC,KAAKJ,MAAMiC,WAAYQ,gBAAc,IAAIC,gBAAc,eAnDhL5C,EAAA,CAA6B6C,cAAhB7C,EACJ8C,YAAc9C,EAAQ+C,0BCDlBC,EAAb,SAAA/C,GAAA,SAAA+C,IAAA,IAAAC,EAAA9C,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAA0C,GAAA,QAAAE,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAAA,OAAApD,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,MAAA2C,EAAA7C,OAAAI,EAAA,EAAAJ,CAAA4C,IAAAvC,KAAA+C,MAAAP,EAAA,CAAA3C,MAAAmD,OAAAJ,MAEEK,SAAW,SAACC,GACVxD,EAAKD,MAAM0D,OAAOC,IAAI,SAAAC,GAAC,OAAI3D,EAAKD,MAAM6D,cAAcD,EAAGH,MAH3DxD,EAAA,OAAAC,OAAAW,EAAA,EAAAX,CAAA4C,EAAA/C,GAAAG,OAAAY,EAAA,EAAAZ,CAAA4C,EAAA,EAAA/B,IAAA,SAAAC,MAAA,WAOW,IAAAE,EAAAd,KAECsD,EAAWtD,KAAKJ,MAAhB0D,OAEFI,EAAcJ,EAAOR,OAAS,GAAMQ,EAAOR,OAAS,EAAI,EAAI,EAAG,GAE/Da,EAAaC,IAAEC,MAAMP,EAAQI,GAEnC,OACI3C,EAAAC,EAAAC,cAAA,OAAKC,UAAU,YACbH,EAAAC,EAAAC,cAAA,sBACOqC,EAAOR,OADd,sLAIJ/B,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OACZyC,EAAWJ,IAAI,SAAAO,GAAC,OAAI/C,EAAAC,EAAAC,cAAA,OAAKN,IAAKgD,EAAWI,QAAQD,GAAI5C,UAAU,qBAC7D4C,EAAEP,IAAI,SAAAS,GAAC,OAAIjD,EAAAC,EAAAC,cAAA,OAAKN,IAAKqD,EAAEC,aAAalD,EAAAC,EAAAC,cAAA,SAAON,IAAKqD,EAAEC,YAAa/C,UAAU,OAAOgD,KAAK,WAAWC,QAASH,EAAEI,QAASC,SAAU,kBAAMvD,EAAKlB,MAAM6D,cAAcO,MAAMjD,EAAAC,EAAAC,cAAA,YAAO+C,EAAEC,aAAmBlD,EAAAC,EAAAC,cAAA,KAAGC,UAAW8C,EAAEM,KAAO,mBAAoB,+BAG/OvD,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aACbH,EAAAC,EAAAC,cAAA,UAAQC,UAAU,sCAAsCY,QAAS,kBAAMhB,EAAKsC,UAAS,KAArF,cACArC,EAAAC,EAAAC,cAAA,UAAQC,UAAU,iCAAiCY,QAAS,kBAAMhB,EAAKsC,UAAS,KAAhF,iBAGArC,EAAAC,EAAAC,cAAA,4BAEAF,EAAAC,EAAAC,cAAA,WAAKF,EAAAC,EAAAC,cAAA,SAAOC,UAAU,OAAOgD,KAAK,WAAWC,QAASnE,KAAKJ,MAAM2E,iBAAkBF,SAAU,kBAAMvD,EAAKlB,MAAM4E,oBAAoB1D,EAAKlB,MAAM2E,qBAAqBxD,EAAAC,EAAAC,cAAA,sDAElKF,EAAAC,EAAAC,cAAA,KAAGC,UAAU,QAAb,oKACAH,EAAAC,EAAAC,cAAA,UAAQC,UAAU,iBAAiBY,QAAS9B,KAAKJ,MAAM6E,iBAAvD,uBApCR/B,EAAA,CAA8BH,aCDjBmC,EAAb,SAAA/E,GAAA,SAAA+E,IAAA,IAAA/B,EAAA9C,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAA0E,GAAA,QAAA9B,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAAA,OAAApD,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,MAAA2C,EAAA7C,OAAAI,EAAA,EAAAJ,CAAA4E,IAAAvE,KAAA+C,MAAAP,EAAA,CAAA3C,MAAAmD,OAAAJ,MAGExC,MAAQ,CACNoE,WAAW,IAJf9E,EAOE+E,aAAe,SAAAC,GACbhF,EAAKgB,SAAS,CAAE8D,WAAYE,EAAEC,cAAclE,SARhDf,EAWEkF,YAAc,WACZlF,EAAKD,MAAMoF,SAASnF,EAAKU,MAAMoE,aAZnC9E,EAeEoF,eAAiB,SAAAJ,GAEF,MADFA,EAAEK,SAAWL,EAAEM,QACPtF,EAAKuF,aACtBvF,EAAKkF,eAlBXlF,EA2BEuF,UAAY,WACV,OAAOvF,EAAKU,MAAMoE,YAAc9E,EAAKU,MAAMoE,WAAWU,OAAOvC,QAAU,GA5B3EjD,EAAA,OAAAC,OAAAW,EAAA,EAAAX,CAAA4E,EAAA/E,GAAAG,OAAAY,EAAA,EAAAZ,CAAA4E,EAAA,EAAA/D,IAAA,WAAAC,MAAA,SAsBW+D,GACP3E,KAAKa,SAAS,CAAE8D,WAAYA,IAC5B3E,KAAKJ,MAAMoF,SAASL,KAxBxB,CAAAhE,IAAA,SAAAC,MAAA,WA+BW,IAAAE,EAAAd,KACP,OACEe,EAAAC,EAAAC,cAAA,OAAKC,UAAU,oBACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,eACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0CACbH,EAAAC,EAAAC,cAAA,QAAMC,UAAU,oBAAhB,eAEFH,EAAAC,EAAAC,cAAA,SAAOiD,KAAK,OAAOoB,YAAY,eAAeC,aAAW,gBAAgBrE,UAAU,eAAeN,MAAOZ,KAAKO,MAAMoE,WAAYN,SAAUrE,KAAK4E,aAAcY,WAAYxF,KAAKiF,iBAE9KlE,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBAEZlB,KAAKO,MAAMoE,YAAc5D,EAAAC,EAAAC,cAAA,QAAMC,UAAU,oBAAmBH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,6BAA6BY,QAAS,kBAAMhB,EAAKD,SAAS,CAAE8D,WAAW,SAChJ3E,KAAKoF,aAAerE,EAAAC,EAAAC,cAAA,QAAMC,UAAU,oBAAmBH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,0BAA0BY,QAAS9B,KAAK+E,gBAC3G/E,KAAKoF,aAAerE,EAAAC,EAAAC,cAAA,QAAMC,UAAU,oBAAmBH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,mCA5ClFwD,EAAA,CAA+BnC,qBCAhB,SAASkD,EAAO7F,GAG7B,IAAM8F,EAAYC,SAASC,KAAKC,aAE1BC,EAAeC,iBAAO,MAEpB9D,EAAW+D,EAAcF,GAAzB7D,OAIR,OACElB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,mBAAmBK,MAAO,CAACU,OAAQyD,EAAU,OACtD3E,EAAAC,EAAAC,cAAA,OAAKC,UAAU,iBAAiB+E,GAAG,kBACrClF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,cACfH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,WAAWgF,IAAKJ,GAC3B/E,EAAAC,EAAAC,cAAA,OAAKC,UAAU,2CACbH,EAAAC,EAAAC,cAAA,UAAKrB,EAAMuG,QAEbpF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,oCACbH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,2BAA2BY,QAASlC,EAAMwG,YAG3DrF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,YACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,8BAA8BK,MAAO,CAAGU,OAAQA,EAAS,OAErErC,EAAMyG,cAUrB,IAGaL,EAAgB,SAAAM,GAC3B,IAAMC,EAAgB,WAEhB,IAAIC,EAAUC,OAAOC,YAAc,IAInC,MAAQ,CACNzE,OAHWqE,EAAMK,QAAUF,OAAOG,YAAcN,EAAMK,QAAQE,WAAaL,EAR7D,IACC,KAO2G,EAI1HA,WAT4BM,EAaAC,mBAAS,CAAE9E,OAAQ,IAbnB+E,EAAAlH,OAAAmH,EAAA,EAAAnH,CAAAgH,EAAA,GAa7BI,EAb6BF,EAAA,GAajBG,EAbiBH,EAAA,GAgCpC,OAjBAI,oBAAU,WACN,IAAMC,EAAe,WACnBF,EAAcZ,MAShB,OANID,EAAMK,SACRQ,EAAcZ,KAGhBE,OAAOa,iBAAiB,SAAUD,GAE3B,WACLZ,OAAOc,oBAAoB,SAAUF,KAGzC,CAACf,IAEIY,GCvEM,SAASM,EAAc5H,GAEpC,OACEmB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OAEbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OAEfH,EAAAC,EAAAC,cAAA,mFAEAF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,mCAEHF,EAAAC,EAAAC,cAAA,mcAEAF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,qCAEHF,EAAAC,EAAAC,cAAA,0YAEAF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,oCAEHF,EAAAC,EAAAC,cAAA,iaAEAF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,qCAEHF,EAAAC,EAAAC,cAAA,UACEF,EAAAC,EAAAC,cAAA,UACEF,EAAAC,EAAAC,cAAA,qCACAF,EAAAC,EAAAC,cAAA,+UAIJF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,sCACHF,EAAAC,EAAAC,cAAA,wLACAF,EAAAC,EAAAC,cAAA,UACEF,EAAAC,EAAAC,cAAA,UACEF,EAAAC,EAAAC,cAAA,4UAGJF,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,mCACHF,EAAAC,EAAAC,cAAA,8QACAF,EAAAC,EAAAC,cAAA,wIACAF,EAAAC,EAAAC,cAAA,UACEF,EAAAC,EAAAC,cAAA,qDC1CK,SAASwG,EAAU7H,GAGhC,OAEImB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,wBACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,SACfH,EAAAC,EAAAC,cAAA,+LAAsLF,EAAAC,EAAAC,cAAA,KAAGa,QAASlC,EAAM8H,aAAcC,KAAK,KAArC,mBAEtL5G,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBACfH,EAAAC,EAAAC,cAAA,UAAQC,UAAU,kBAAkBY,QAASlC,EAAMgI,cAAnD,mCCVG,SAASC,EAASjI,GAAO,IAAAkH,EAEFC,oBAAS,GAFPC,EAAAlH,OAAAmH,EAAA,EAAAnH,CAAAgH,EAAA,GAE7BgB,EAF6Bd,EAAA,GAElBe,EAFkBf,EAAA,GAAAgB,EAGIjB,oBAAS,GAHbkB,EAAAnI,OAAAmH,EAAA,EAAAnH,CAAAkI,EAAA,GAG7BE,EAH6BD,EAAA,GAAAE,GAAAF,EAAA,GAIElB,oBAAS,IAJXqB,EAAAtI,OAAAmH,EAAA,EAAAnH,CAAAqI,EAAA,GAI7BE,EAJ6BD,EAAA,GAIhBE,EAJgBF,EAAA,GAM9BG,EAAeC,mBAAmBC,IAAU7I,EAAM8I,KAAKC,iBAGzDC,EAAS,qBAAAzF,OAAwBoF,GACvB,qBAAApF,OAAwBoF,EAAxB,oBAYhB,OACIxH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,cACT4G,GAAa/G,EAAAC,EAAAC,cAAA,OAAKC,UAAU,YAC1BH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,qBACbH,EAAAC,EAAAC,cAAA,qDAIFiH,GAAgBnH,EAAAC,EAAAC,cAAA,OAAKC,UAAS,mBAAAiC,QAAuB2E,EAAY,UAAY,UAAYe,IAAKD,EAAW9G,QAAS,WAAQwG,GAAe,IAASQ,OAAQ,kBAAMf,GAAa,MAE9KD,GAAaO,GAAetH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,WACxCH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,qCAEXH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0CACXH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,gCAAgC6H,cAAY,SACzDhI,EAAAC,EAAAC,cAAA,kEAA0DrB,EAAM8I,KAAKM,MAArE,0DAIRjI,EAAAC,EAAAC,cAAA,OAAKC,UAAU,qCACXH,EAAAC,EAAAC,cAAA,UAAQC,UAAU,iCAAiCY,QAzB3C,WAClBwG,GAAe,GACjB7B,OAAOwC,KAAKR,IAAU7I,EAAM8I,KAAKC,gBAAiB,YAuBtC,OACA5H,EAAAC,EAAAC,cAAA,UAAQC,UAAU,4BAA4BY,QA9BvC,WACjBwG,GAAe,KA6BL,8CC7CZY,EAAQ,SAAAC,GAAmC,IAAjC1G,EAAiC0G,EAAjC1G,KAAM2G,EAA2BD,EAA3BC,MAAOC,EAAoBF,EAApBE,MAAUC,EAAUxJ,OAAAyJ,EAAA,EAAAzJ,CAAAqJ,EAAA,0BAC7C,OAAQpI,EAAAC,EAAAC,cAAA,OAAKC,UAAU,cACvBH,EAAAC,EAAAC,cAAA,SAAOuI,QAAS/G,GAAO2G,GACvBrI,EAAAC,EAAAC,cAAA,QAAAnB,OAAA2J,OAAA,GACIH,EADJ,CAEA7G,KAAMA,EACLwD,GAAIxD,EAAMvB,UAAU,kBACpBmI,GAAQtI,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBAAsBmI,KAI5CK,EAAW,SAAAC,GAAqC,IAAlClH,EAAkCkH,EAAlClH,KAAM2G,EAA4BO,EAA5BP,MAAOC,EAAqBM,EAArBN,MAAUC,EAAWxJ,OAAAyJ,EAAA,EAAAzJ,CAAA6J,EAAA,0BACpD,OAAO5I,EAAAC,EAAAC,cAAA,OAAKC,UAAU,cACbH,EAAAC,EAAAC,cAAA,SAAOuI,QAAS/G,GAAO2G,GACvBrI,EAAAC,EAAAC,cAAA,WAAAnB,OAAA2J,OAAA,GACMH,EADN,CAEE7G,KAAMA,EACLwD,GAAIxD,EAAMvB,UAAU,kBACtBmI,GAAStI,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBAAsBmI,KCFnD,SAAeO,EAAtBC,GAAA,OAAAC,EAAA5G,MAAAlD,KAAA6C,sDAAO,SAAAkH,EAA2BC,GAA3B,IAAAC,EAAAC,EAAA,OAAAC,EAAAnJ,EAAAoJ,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAEoBC,MAAK,oBAC1B,CACEC,OAAQ,OACRC,QAAS,CACPC,eAAgB,oBAElB/E,KAAMgF,KAAKC,UAAUb,KARtB,cAEGC,EAFHI,EAAAS,KAAAT,EAAAE,KAAA,EAWgBN,EAASc,OAXzB,cAWGb,EAXHG,EAAAS,KAAAT,EAAAW,OAAA,SAaI,CACL1G,MAAM,EACN0F,QAAQE,IAfP,eAAAG,EAAAC,KAAA,GAAAD,EAAAY,GAAAZ,EAAA,SAAAA,EAAAW,OAAA,SAkBI,CACL1G,MAAM,EACN0F,QAAQ,4BApBP,yBAAAK,EAAAa,SAAAnB,EAAA,yCCbA,IAAMoB,EAAb,SAAAC,GAAA,SAAAD,IAAA,IAAAxI,EAAA9C,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAAmL,GAAA,QAAAvI,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAAA,OAAApD,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,MAAA2C,EAAA7C,OAAAI,EAAA,EAAAJ,CAAAqL,IAAAhL,KAAA+C,MAAAP,EAAA,CAAA3C,MAAAmD,OAAAJ,MAGExC,MAAQ,CACN2J,KAAM,CACJzH,KAAM,GACN4I,MAAO,GACPrB,QAAS,IAEXsB,OAAQ,GAGRR,MAAM,EACNS,gBAAgB,MAbpB1L,EAgBE2L,SAhBF1L,OAAA2L,EAAA,EAAA3L,CAAAqK,EAAAnJ,EAAA0K,KAgBa,SAAAC,IAAA,IAAA1B,EAAAqB,EAAA,OAAAnB,EAAAnJ,EAAAoJ,KAAA,SAAAwB,GAAA,cAAAA,EAAAtB,KAAAsB,EAAArB,MAAA,cAAAqB,EAAAtB,KAAA,EAAAsB,EAAArB,KAAA,EAEgBX,EAAY/J,EAAKU,MAAM2J,MAFvC,OAEDD,EAFC2B,EAAAd,KAIPjL,EAAKgB,SAAS,CAAEiK,KAAMb,EAAS3F,KAAMiH,gBAAgBtB,EAASD,UAJvD4B,EAAArB,KAAA,gBAAAqB,EAAAtB,KAAA,EAAAsB,EAAAX,GAAAW,EAAA,SAOHA,EAAAX,GAAGhB,UAAmC,MAAvB2B,EAAAX,GAAGhB,SAAS4B,UACvBP,EADuCxL,OAAAgM,EAAA,EAAAhM,CAAA,GACzBD,EAAKU,MAAM+K,SACxBS,SAAWH,EAAAX,GAAGhB,SAASC,KAC9BrK,EAAKgB,SAAS,CAAEyK,YAVX,yBAAAM,EAAAV,SAAAS,EAAA,iBAhBb9L,EAgCEmM,OAAS,CACPX,MAAOY,IAAIC,SAASb,QAAQc,WAAW/C,MAAM,SAC7C3G,KAAMwJ,IAAIC,SAASE,IAAI,GAAGD,WAAW/C,MAAM,QAC3CY,QAASiC,IAAIC,SAASC,WAAW/C,MAAM,YAnC3CvJ,EAAA,OAAAC,OAAAW,EAAA,EAAAX,CAAAqL,EAAAC,GAAAtL,OAAAY,EAAA,EAAAZ,CAAAqL,EAAA,EAAAxK,IAAA,SAAAC,MAAA,WAuCI,OAAQG,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OACbH,EAAAC,EAAAC,cAAA,6KACAF,EAAAC,EAAAC,cAAA,QAAMoL,SAAUrM,KAAKsM,cAClBtM,KAAKuM,YAAY,OAAQ,OAAQ,QACjCvM,KAAKuM,YAAY,QAAS,QAAS,SACnCvM,KAAKwM,eAAe,UAAW,YAC9BxM,KAAKO,MAAMuK,MAAQ9K,KAAKyM,aAAa,SAGhDzM,KAAKO,MAAMgL,iBAAmBxK,EAAAC,EAAAC,cAAA,OAAKC,UAAU,IAC5CH,EAAAC,EAAAC,cAAA,YAAOjB,KAAKO,MAAMgL,uBAjD1BJ,EAAA,4MCAI5K,MAAQ,CACJ2J,KAAK,GACLoB,OAAO,MAGVoB,SAAW,WAER,IAGOrD,EAAS4C,IAAIS,SAAS7M,EAAKU,MAAM2J,KAAMrK,EAAKmM,OAHvC,CACRW,YAAW,IAERtD,MAEP,IAAIA,EAAM,OAAO,KAEjB,IAAMiC,EAAS,GATFsB,GAAA,EAAAC,GAAA,EAAAC,OAAAC,EAAA,IAUb,QAAAC,EAAAC,EAAgB5D,EAAM6D,QAAtBC,OAAAC,cAAAR,GAAAI,EAAAC,EAAA1C,QAAA8C,MAAAT,GAAA,OAAQlE,EAARsE,EAAApM,MACI0K,EAAO5C,EAAK4E,KAAK,IAAM5E,EAAKsB,SAXnB,MAAAuD,GAAAV,GAAA,EAAAC,EAAAS,EAAA,YAAAX,GAAA,MAAAK,EAAAO,QAAAP,EAAAO,SAAA,WAAAX,EAAA,MAAAC,GAYb,OAAOxB,KAIXmC,iBAAmB,SAAAtE,GAAkB,IAAhB1G,EAAgB0G,EAAhB1G,KAAK7B,EAAWuI,EAAXvI,MAEhB8M,EAAG5N,OAAA6N,EAAA,EAAA7N,CAAA,GAAK2C,EAAO7B,GACfoL,EAAMlM,OAAA6N,EAAA,EAAA7N,CAAA,GAAK2C,EAAO5C,EAAKmM,OAAOvJ,IAC7B4G,EAAS4C,IAAIS,SAASgB,EAAK1B,GAA3B3C,MACP,OAAOA,EAAQA,EAAM6D,QAAQ,GAAGlD,QAAU,QAG9CsC,aAAa,SAAAzH,GACTA,EAAE+I,iBAEF,IAAMtC,EAASzL,EAAK6M,WACpB7M,EAAKgB,SAAS,CAACyK,OAAQA,GAAU,KAC9BA,GAEHzL,EAAK2L,cAGT5G,aAAe,SAAA+E,GAA2B,IAAVkE,EAAUlE,EAAzB7E,cACPwG,EAAMxL,OAAAgM,EAAA,EAAAhM,CAAA,GAAOD,EAAKU,MAAM+K,QAExBwC,EAAejO,EAAK4N,iBAAiBI,GACxCC,EAAaxC,EAAOuC,EAAMpL,MAAQqL,SACzBxC,EAAOuC,EAAMpL,MAEzB,IAAIyH,EAAIpK,OAAAgM,EAAA,EAAAhM,CAAA,GAAOD,EAAKU,MAAM2J,MAC1BA,EAAK2D,EAAMpL,MAAQoL,EAAMjN,MACzBf,EAAKgB,SAAS,CAACqJ,OAAMoB,wFAGZlC,GAGV,OAAOrI,EAAAC,EAAAC,cAAA,UAAQ8M,SAAU/N,KAAK0M,WAAYxL,UAAU,mBAAmBkI,uCAG9D3G,EAAM2G,GAClB,IADyBlF,EACzBrB,UAAAC,OAAA,QAAAiK,IAAAlK,UAAA,GAAAA,UAAA,GADgC,OAChCmL,EAC2BhO,KAAKO,MAArB2J,EADX8D,EACW9D,KAAMoB,EADjB0C,EACiB1C,OACf,OAAOvK,EAAAC,EAAAC,cAACgN,EAAD,CAAO/J,KAAMA,EAAMmF,MAAOiC,EAAO7I,GAAOA,KAAMA,EAAM7B,MAAOsJ,EAAKzH,GAAO2G,MAAOA,EAAO/E,SAAUrE,KAAK4E,sDAG9FnC,EAAM2G,GAAsB,IAAflF,EAAerB,UAAAC,OAAA,QAAAiK,IAAAlK,UAAA,GAAAA,UAAA,GAAR,OAAQqL,EAChBlO,KAAKO,MAAtB2J,EADiCgE,EACjChE,KAAMoB,EAD2B4C,EAC3B5C,OACd,OAAOvK,EAAAC,EAAAC,cAACkN,EAAD,CAAUjK,KAAMA,EAAMmF,MAAOiC,EAAO7I,GAAOA,KAAMA,EAAM7B,MAAOsJ,EAAKzH,GAAO2G,MAAOA,EAAO/E,SACrGrE,KAAK4E,sBAnEcrC,cCDN6L,EAAb,SAAAzO,GAAA,SAAAyO,IAAA,IAAAzL,EAAA9C,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAAoO,GAAA,QAAAxL,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAAA,OAAApD,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,MAAA2C,EAAA7C,OAAAI,EAAA,EAAAJ,CAAAsO,IAAAjO,KAAA+C,MAAAP,EAAA,CAAA3C,MAAAmD,OAAAJ,MAEExC,MAAQ,CACN8N,OAAM,GAHVxO,EAsCEyO,UAAY,SAAA5F,KAtCd7I,EAAA,OAAAC,OAAAW,EAAA,EAAAX,CAAAsO,EAAAzO,GAAAG,OAAAY,EAAA,EAAAZ,CAAAsO,EAAA,EAAAzN,IAAA,gBAAAC,MAAA,SAMgB2N,GACZ,OAAQA,GACN,KAAK,EACH,MAAO,iCACT,KAAK,EACH,MAAO,gCACT,KAAK,EACH,MAAO,iCACT,KAAK,EACH,MAAO,iCACT,QACE,MAAO,iCAjBf,CAAA5N,IAAA,kBAAAC,MAAA,SAsBkB2N,GACd,OAAQA,GACN,KAAK,EACH,MAAO,UACT,KAAK,EACH,MAAO,WACT,KAAK,EACH,MAAO,YACT,KAAK,EACH,MAAO,WACV,QACG,MAAO,cAjCf,CAAA5N,IAAA,SAAAC,MAAA,WA0CW,IAAAE,EAAAd,KAEQ0I,EAAS1I,KAAKJ,MAArBgB,MACR,OACEG,EAAAC,EAAAC,cAAA,OAAKC,UAAU,gCAEbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,2EAA2EY,QAAS,kBAAMhB,EAAKlB,MAAM4O,cAAc9F,KAC/H1I,KAAKO,MAAM8N,OAAStN,EAAAC,EAAAC,cAAA,OAAKC,UAAU,YAAYuN,IAAK/F,EAAKgG,YAAa7F,IAAKJ,IAAUC,EAAKiG,UAAWC,QAAS,WAAQ9N,EAAKD,SAAS,CAAEwN,OAAO,QAC5IrO,KAAKO,MAAM8N,OAAStN,EAAAC,EAAAC,cAAA,KAAGC,UAAU,+BAGrCH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,mEAEbH,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAAA,OAAK4N,wBAAyB,CAAEC,OAAQpG,EAAKqG,iBAAiBC,iBAAmBlN,QAAS,kBAAMhB,EAAKlB,MAAM4O,cAAc9F,MACxHA,EAAKuG,KAAOlO,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sCAAsCY,QAAS,kBAAMhB,EAAKlB,MAAMsP,SAASxG,EAAKuG,OAAMlO,EAAAC,EAAAC,cAAA,KAAGC,UAAU,iCAAoCwH,EAAKuG,KACtKlO,EAAAC,EAAAC,cAAA,OAAKC,UAAU,wBAAwBY,QAAS,kBAAMhB,EAAKlB,MAAM4O,cAAc9F,EAAKC,kBAAkBD,EAAKM,MAA3G,OAMJjI,EAAAC,EAAAC,cAAA,OAAKC,UAAU,gEAAgEY,QAAS,kBAAMhB,EAAKlB,MAAM4O,cAAc9F,KAErH3H,EAAAC,EAAAC,cAAA,OAAKC,UAAU,iBACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,OACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,6BACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BAAyBH,EAAAC,EAAAC,cAAA,QAAMC,UAAU,SAAhB,QAAgD,IAAfwH,EAAKyG,MAAcpO,EAAAC,EAAAC,cAAA,QAAMC,UAAU,YAAhB,OAAwCH,EAAAC,EAAAC,cAAA,QAAMC,UAAU,SAASwH,EAAKyG,MAAMC,QAAQ,MAGlLrO,EAAAC,EAAAC,cAAA,OAAKC,UAAU,6BACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BAAyBH,EAAAC,EAAAC,cAAA,QAAMC,UAAWlB,KAAKqP,cAAc3G,EAAK4G,UAAWtP,KAAKuP,gBAAgB7G,EAAK4G,eAQ9HvO,EAAAC,EAAAC,cAAA,OAAKC,UAAU,+DACbH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,cAAcyG,KAAMc,IAAUC,EAAKC,gBAAiB6G,IAAI,sBAAsBC,OAAO,UAEhG1O,EAAAC,EAAAC,cAAA,KAAGC,UAAU,+CACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,qBAAf,sBArFZkN,EAAA,CAAiC7L,aCA1B,SAASmN,EAAa9P,GAGzB,OACEmB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aACZtB,EAAM+P,SAAW/P,EAAM+P,QAAQpM,IAAI,SAAAqM,GAAC,OAAI7O,EAAAC,EAAAC,cAAC4O,EAAD,CAAalP,IAAKiP,EAAEjH,eAAgB/H,MAAOgP,EAAGV,SAAUtP,EAAMsP,SAAUV,cAAe5O,EAAM4O,mBCNvI,IAAMsB,EAAb,SAAAnQ,GAAA,SAAAmQ,IAAA,IAAAnN,EAAA9C,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAA8P,GAAA,QAAAlN,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAAA,OAAApD,EAAAC,OAAAG,EAAA,EAAAH,CAAAE,MAAA2C,EAAA7C,OAAAI,EAAA,EAAAJ,CAAAgQ,IAAA3P,KAAA+C,MAAAP,EAAA,CAAA3C,MAAAmD,OAAAJ,MAEExC,MAAQ,CACNwP,WAAU,EACVC,aAAc,OACdC,aAAa,IALjBpQ,EASEqQ,aAAe,SAAAC,GAEb,GAAItQ,EAAKU,MAAMyP,eAAiBG,EAG9B,OAFAtQ,EAAKgB,SAAS,CAAEmP,aAAcG,EAAQJ,WAAW,SACjDlQ,EAAKD,MAAMwQ,eAAeD,GAAQ,EAAMtQ,EAAKU,MAAM0P,cAIrD,IAAII,GAAgBxQ,EAAKU,MAAMwP,UAE/BlQ,EAAKgB,SAAS,CAAEkP,UAAWM,IAE3BxQ,EAAKD,MAAMwQ,eAAeD,EAAQE,EAAcxQ,EAAKU,MAAM0P,eArB/DpQ,EA4BEyQ,mBAAqB,SAAAL,GAAgB,IAAAjC,EAECnO,EAAKU,MAAjCwP,EAF2B/B,EAE3B+B,UAAWC,EAFgBhC,EAEhBgC,aAEnBnQ,EAAKgB,SAAS,CAAEoP,iBAEhBpQ,EAAKD,MAAMwQ,eAAeJ,EAAcD,EAAWE,IAlCvDpQ,EAAA,OAAAC,OAAAW,EAAA,EAAAX,CAAAgQ,EAAAnQ,GAAAG,OAAAY,EAAA,EAAAZ,CAAAgQ,EAAA,EAAAnP,IAAA,gBAAAC,MAAA,SAwBgBL,GACZ,OAAOA,EAAQ,oBAAsB,oBAzBzC,CAAAI,IAAA,SAAAC,MAAA,WAqCW,IAAAE,EAAAd,KACP,OAAQe,EAAAC,EAAAC,cAAA,OAAKC,UAAU,2CAErBH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBAAsBH,EAAAC,EAAAC,cAAA,qBAAajB,KAAKJ,MAAM2Q,YAAxB,cAE7BxP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,kBACbH,EAAAC,EAAAC,cAAA,KAAGa,QAAS,kBAAMhB,EAAKoP,aAAa,SAASvI,KAAK,IAAIzG,UAAU,IAAhE,iBAA8G,SAA5BlB,KAAKO,MAAMyP,cAA2BjP,EAAAC,EAAAC,cAAA,KAAGC,UAAWlB,KAAKwQ,cAAcxQ,KAAKO,MAAMwP,eAG9KhP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,kBACLH,EAAAC,EAAAC,cAAA,KAAGa,QAAS,kBAAMhB,EAAKoP,aAAa,SAASvI,KAAK,IAAIzG,UAAU,IAAhE,kBAA+G,SAA5BlB,KAAKO,MAAMyP,cAA2BjP,EAAAC,EAAAC,cAAA,KAAGC,UAAWlB,KAAKwQ,cAAcxQ,KAAKO,MAAMwP,eAE/KhP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,kBACLH,EAAAC,EAAAC,cAAA,KAAGa,QAAS,kBAAMhB,EAAKoP,aAAa,UAAUvI,KAAK,IAAIzG,UAAU,IAAjE,YAA0G,UAA5BlB,KAAKO,MAAMyP,cAA4BjP,EAAAC,EAAAC,cAAA,KAAGC,UAAWlB,KAAKwQ,cAAcxQ,KAAKO,MAAMwP,eAE3KhP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,kBACLH,EAAAC,EAAAC,cAAA,KAAGa,QAAS,kBAAMhB,EAAKoP,aAAa,UAAUvI,KAAK,IAAIzG,UAAU,IAAjE,YAA0G,UAA5BlB,KAAKO,MAAMyP,cAA4BjP,EAAAC,EAAAC,cAAA,KAAGC,UAAWlB,KAAKwQ,cAAcxQ,KAAKO,MAAMwP,eAE3KhP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,kBACLH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,8BACbH,EAAAC,EAAAC,cAAA,SAAOiD,KAAK,OAAOhD,UAAU,eAAeoE,YAAY,sBAAsB1E,MAAOZ,KAAKO,MAAM0P,aAAc5L,SAAU,SAAAQ,GAAC,OAAI/D,EAAKwP,mBAAmBzL,EAAEC,cAAclE,UACrKG,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBACpBlB,KAAKO,MAAM0P,cAAgBlP,EAAAC,EAAAC,cAAA,QAAMC,UAAU,oBAAmBH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,6BAA6BY,QAAS,kBAAMhB,EAAKwP,mBAAmB,gBA3D5JR,EAAA,CAA+BvN,aCAlBkO,EAAb,SAAA9Q,GAAA,SAAA8Q,IAAA,OAAA3Q,OAAAC,EAAA,EAAAD,CAAAE,KAAAyQ,GAAA3Q,OAAAG,EAAA,EAAAH,CAAAE,KAAAF,OAAAI,EAAA,EAAAJ,CAAA2Q,GAAAvN,MAAAlD,KAAA6C,YAAA,OAAA/C,OAAAW,EAAA,EAAAX,CAAA2Q,EAAA9Q,GAAAG,OAAAY,EAAA,EAAAZ,CAAA2Q,EAAA,EAAA9P,IAAA,SAAAC,MAAA,WACW,IAAAf,EAAAG,KACP,OAAQe,EAAAC,EAAAC,cAAA,OAAKC,UAAU,aACpBlB,KAAKJ,MAAM8Q,MAAMnN,IAAI,SAAAS,GAAC,OAAIjD,EAAAC,EAAAC,cAAA,OAAKN,IAAKqD,EAAG9C,UAAU,+CAA8CH,EAAAC,EAAAC,cAAA,QAAMC,UAAU,iBAAiBY,QAAS,kBAAMjC,EAAKD,MAAMsP,SAASlL,KAAKA,GAASjD,EAAAC,EAAAC,cAAA,KAAGC,UAAU,0BAA0BY,QAAS,kBAAIjC,EAAKD,MAAM+Q,SAAS3M,cAHhQyM,EAAA,CAAsClO,yBCAhCqO,GAAa,IAAIC,KACpBC,QAAQ,cACRC,QAiBI,SAAeC,IAAtB,OAAAC,EAAA/N,MAAAlD,KAAA6C,sDAAO,SAAAqO,IAAA,OAAA/G,EAAAnJ,EAAAoJ,KAAA,SAAA+G,GAAA,cAAAA,EAAA7G,KAAA6G,EAAA5G,MAAA,cAAA4G,EAAA7G,KAAA,EAAA6G,EAAA5G,KAAA,EAGGqG,EAAWI,QAHd,OAAAG,EAAA5G,KAAA,eAAA4G,EAAA7G,KAAA,EAAA6G,EAAAlG,GAAAkG,EAAA,SAKHC,QAAQC,IAARF,EAAAlG,IACAqG,WAAW,kBAAMN,KAAS,KANvB,wBAAAG,EAAAjG,SAAAgG,EAAA,wCAdPN,EAAWW,GAAG,cACZ,SAASrH,GACPsH,EAAatH,KAGjB0G,EAAWW,GAAG,cACZ,SAAUrH,GACRuH,EAAgBvH,KAGpB0G,EAAWc,QAAX5R,OAAA2L,EAAA,EAAA3L,CAAAqK,EAAAnJ,EAAA0K,KAAmB,SAAAC,IAAA,OAAAxB,EAAAnJ,EAAAoJ,KAAA,SAAAwB,GAAA,cAAAA,EAAAtB,KAAAsB,EAAArB,MAAA,cAAAqB,EAAArB,KAAA,EACXyG,IADW,wBAAApF,EAAAV,SAAAS,OAcnB,IAAI6F,EAAe,KACfC,EAAkB,KAaf,IAAME,EAAb,WAGE,SAAAA,EAAYlH,EAAQmH,EAAgBJ,GAAc,IAAA3R,EAAAG,KAAAF,OAAAC,EAAA,EAAAD,CAAAE,KAAA2R,GAIhD3R,KAAKyK,OAASA,EACdzK,KAAK4R,eAAiBA,EACtB5R,KAAKwR,aAAeA,EAEpBxR,KAAK4Q,YAAa,IAAIC,KACnBC,QAAQ,cACRC,QAEH/Q,KAAK4Q,WAAWW,GAAGK,EACjB,SAAU1H,GACRsH,EAAatH,KAGjBlK,KAAK4Q,WAAWc,QAAhB5R,OAAA2L,EAAA,EAAA3L,CAAAqK,EAAAnJ,EAAA0K,KAAwB,SAAA3B,IAAA,OAAAI,EAAAnJ,EAAAoJ,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChB1K,EAAKmR,QADW,wBAAA3G,EAAAa,SAAAnB,OApB5B,OAAAjK,OAAAY,EAAA,EAAAZ,CAAA6R,EAAA,EAAAhR,IAAA,QAAAC,MAAA,eAAAiR,EAAA/R,OAAA2L,EAAA,EAAA3L,CAAAqK,EAAAnJ,EAAA0K,KAAA,SAAAoG,IAAA,IAAAhR,EAAAd,KAAA,OAAAmK,EAAAnJ,EAAAoJ,KAAA,SAAA2H,GAAA,cAAAA,EAAAzH,KAAAyH,EAAAxH,MAAA,cAAAwH,EAAAzH,KAAA,EAAAyH,EAAAxH,KAAA,EA4BavK,KAAK4Q,WAAWI,QA5B7B,OAAAe,EAAAxH,KAAA,eAAAwH,EAAAzH,KAAA,EAAAyH,EAAA9G,GAAA8G,EAAA,SA8BOX,QAAQC,IAARU,EAAA9G,IACAqG,WAAW,kBAAMxQ,EAAKkQ,SAAS,KA/BtC,wBAAAe,EAAA7G,SAAA4G,EAAA9R,KAAA,qCAAA6R,EAAA3O,MAAAlD,KAAA6C,YAAA,KAAAlC,IAAA,MAAAC,MAAA,eAAAoR,EAAAlS,OAAA2L,EAAA,EAAA3L,CAAAqK,EAAAnJ,EAAA0K,KAAA,SAAAuG,EAmCYC,EAAMC,GAnClB,OAAAhI,EAAAnJ,EAAAoJ,KAAA,SAAAgI,GAAA,cAAAA,EAAA9H,KAAA8H,EAAA7H,MAAA,OAoCIvK,KAAK4Q,WAAWyB,OAAOrS,KAAKyK,OAAQyH,EAAMC,GApC9C,wBAAAC,EAAAlH,SAAA+G,EAAAjS,SAAA,gBAAAsS,EAAAC,GAAA,OAAAP,EAAA9O,MAAAlD,KAAA6C,YAAA,MAAA8O,EAAA,oBC1BqBa,8MAGnBjS,MAAQ,CACNkS,cAAc,EACdpK,aAAa,EACb/E,OAAQ,GACRqM,QAAS,GACT9N,WAAY,KACZ6Q,iBAAkB,GAClBnO,kBAAkB,EAClBoO,kBAAkB,EAClBC,cAAe,EACfC,YAAa,QAIfC,YAAc,KAEdC,aAAe,IAAIpB,EAAc,aAAc,cAAe,SAAC3I,GAGzC,eAAhBA,EAAMA,QACRA,EAAMgK,OAAQ,GAGhB,IAAI1P,EAAMxD,OAAAmT,EAAA,EAAAnT,CAAOD,EAAKU,MAAM+C,QACZA,EAAO4P,OAAO,SAAA1P,GAAC,OAAIA,EAAES,cAAgB+E,EAAMA,QAAO,GAExD1E,KAAO0E,EAAMgK,MAEvBnT,EAAKgB,SAAS,SAAUsS,EAAWvT,GACjC,MAAO,CAAE0D,gBAMb8P,cAAgB,IAAIzB,EAAc,cAAe,cAAe,SAAC3I,GAI/D,IAAIxF,EAAI3D,EAAKiT,YAAYI,OAAO,SAAA1P,GAAC,OAAIA,EAAES,cAAgB+E,EAAMA,QAAO,GAEpExF,EAAE6P,WAAY,EACd7P,EAAEmM,QAAU3G,EAAM2G,QAGlB,IAAI0D,EAAYxT,EAAKiT,YAAYI,OAAO,SAAA1P,GAAC,OAAIA,EAAE6P,YAAWvQ,OACtDjB,EAAayR,SAAUD,EAAYxT,EAAKiT,YAAYhQ,OAAU,KAMlE,GAJmB,MAAfjB,GACFyP,WAAW,WAAQzR,EAAKgB,SAAS,CAAEgB,WAAY,QAAW,KAGvDmH,EAAM2G,QAAX,CAKA,IAAIA,EAAO7P,OAAAmT,EAAA,EAAAnT,CAAO8D,IAAE2P,QAAQ1T,EAAKiT,YAAYI,OAAO,SAAAlS,GAAC,OAAiB,MAAbA,EAAE2O,UAAiBpM,IAAI,SAAAvC,GAAC,OAAIA,EAAE2O,QAAQpM,IAAI,SAAAqM,GAAC,OAAIA,QAExG/P,EAAKgB,SAAS,SAAUsS,EAAWvT,GACjC,MAAO,CAAE+P,QAASA,EAAS9N,qBAP3BhC,EAAKgB,SAAS,CAAEgB,mBA+DpB2R,eAAiB,WACf,IAAMf,EAAe5S,EAAKU,MAAMkS,aAChC5S,EAAKgB,SAAS,CAAE4R,cAAeA,OAGjCgB,cAAgB,WACd,IAAMpL,EAAcxI,EAAKU,MAAM8H,YAC/BxI,EAAKgB,SAAS,CAAEwH,aAAcA,OAKhCqL,kBAAoB,SAAC1K,EAAO3F,GAE1B,IAAIC,EAAMxD,OAAAmT,EAAA,EAAAnT,CAAOD,EAAKU,MAAM+C,QAETA,EAAOqQ,KAAK,SAAAnQ,GAAC,OAAIA,EAAES,cAAgB+E,EAAM/E,cAE/CG,aAAsB2I,IAAX1J,GAAyB2F,EAAM5E,QAAUf,EAEjExD,EAAKgB,SAAS,CAAEyC,WAEZzD,EAAKU,MAAMgE,kBAAkBqP,aAAaC,QAAQ,YAAajJ,KAAKC,UAAUvH,OAIpFwQ,YAAc,WAEZjU,EAAKkT,aAAagB,IAAI,UAAtBjU,OAAAmT,EAAA,EAAAnT,CAAqCD,EAAKU,MAAM+C,YAIlD0Q,aAAe,SAAArP,GAEb9E,EAAKoU,mBAAmB,QAAQ,EAAM,IAEtC,IAAM9B,EAAiBtS,EAAKU,MAAM+C,OAAO4P,OAAO,SAAA1P,GAAC,OAAIA,EAAEY,UAEvD,GAA8B,IAA1B+N,EAAerP,SAGnBjD,EAAKiT,YAAc,GAEnBX,EAAe5O,IAAI,SAAAC,GAAC,OAAI3D,EAAKiT,YAAYoB,KAAK,CAC5CjQ,YAAaT,EAAES,gBAIjBpE,EAAKuT,cAAcW,IAAIpP,EAAYwN,GA+BnCb,WAAW,kBAAMzR,EAAKgB,SAAS,CAAEgB,WAAY,KAAM,IAG9BhC,EAAKU,MAAMmS,iBAAiBiB,KAAK,SAAAQ,GAAC,OAAIA,IAAMxP,KAC5C,CACnB,IAAM+N,EAAgB,GAAAvP,OAAArD,OAAAmT,EAAA,EAAAnT,CAAOD,EAAKU,MAAMmS,kBAAlB,CAAoC/N,IAC1D9E,EAAKgB,SAAS,CAAE6R,qBACZ7S,EAAKU,MAAMgE,kBAAkBqP,aAAaC,QAAQ,mBAAoBjJ,KAAKC,UAAU6H,QAI7F0B,oBAAsB,WACpBR,aAAaS,WAAW,oBACxBT,aAAaS,WAAW,aACxBT,aAAaS,WAAW,oBACxBxU,EAAKgB,SAAS,CAAE6R,iBAAkB,GAAInO,kBAAkB,IACxD1E,EAAKyU,KAAKC,SAASnR,UAAS,MAI9BoR,aAAe,SAAA9L,GACb7I,EAAKyU,KAAKG,OAAOC,SAAShM,MAG5BiM,aAAe,SAAAjM,GACb,IAAIgK,EAAmB7S,EAAKU,MAAMmS,iBAAiBQ,OAAO,SAAA0B,GAAC,OAAIA,IAAMlM,IACrE7I,EAAKgB,SAAS,CAAE6R,qBACZ7S,EAAKU,MAAMgE,kBAAkBqP,aAAaC,QAAQ,mBAAoBjJ,KAAKC,UAAU6H,OAG3FuB,mBAAqB,SAAC/B,EAAMnC,EAAWE,GACrCpQ,EAAKgB,SAAS,CAAEqR,OAAMnC,YAAWE,oBAGnC4E,kBAAoB,SAACnM,GAGnB7I,EAAKgB,SAAS,CAAEgS,YAAanK,OAkC/BoM,uBAAyB,SAAAvQ,GACnBA,GACFqP,aAAaC,QAAQ,oBAAoB,GACzChU,EAAKgB,SAAS,CAAE0D,sBAEhB1E,EAAKuU,wOA3MPpU,KAAK+S,aAAa/B,QAClBhR,KAAKoT,cAAcpC,iBAEbA,WAEAzM,EAAmBvE,KAAK+U,wBAE1BC,EAAiB,KAEjBzQ,IACFvE,KAAKiV,2BACLD,EAAiBhV,KAAKkV,wBAGxBlV,KAAKmV,eAAeH,GAAgBI,KAAK,WAEvC,GAAItU,EAAKlB,MAAMyV,SAASZ,OAAQ,CAC9B,IAAMa,EAASC,IAAYC,MAAM1U,EAAKlB,MAAMyV,SAASZ,QAClDa,EAAOb,QAAO3T,EAAK0T,aAAac,EAAOb,WAK9CzU,KAAKa,SAAS,CAAE0D,qBAEhBvE,KAAK8T,iKAML,IAAMvP,EAAmBqP,aAAa6B,QAAQ,oBAC9C,OAAOlR,GAAyC,SAArBA,qDAK3B,IAAMmR,EAAuB9B,aAAa6B,QAAQ,oBAClD,GAAIC,EACF,IACE1V,KAAKa,SAAS,CAAE6R,iBAAkB9H,KAAK4K,MAAME,KAC7C,MAAOC,sCA+HJ,IAAAC,EAAA5V,KACC6B,EAAe7B,KAAKO,MAApBsB,WACFgU,EClQH,SAAuBlG,EAASQ,EAAQ2F,EAAa7F,GAE1D,IAAI8F,EAAK,KACLF,EAAkB,GAEtB,IAEEA,GADAE,EAAK,IAAIC,OAAO/F,IACInQ,OAAAmT,EAAA,EAAAnT,CAAO6P,EAAQuD,OAAO,SAAA0B,GAAC,OAAImB,EAAGE,KAAKrB,EAAElG,YAAYwH,gBAAmBtB,EAAE3F,KAAO8G,EAAGE,KAAKrB,EAAE3F,IAAIiH,kBAA3FpW,OAAAmT,EAAA,EAAAnT,CAAmH6P,GACvI,MAAOgG,GACPE,EAAe/V,OAAAmT,EAAA,EAAAnT,CAAO6P,GAGxB,IAAMI,EAAY+F,EAAc,OAAS,MAErCK,EAAe,KAEnB,OAAQhG,GAEN,IAAK,OACHgG,EAAevS,IAAEwS,QAAQzG,EAAS,CAAC,SAAUjH,GAAQ,OAAOA,EAAKgG,YAAYrJ,SAAW,CAAC0K,IACzF,MACF,IAAK,QACHoG,EAAevS,IAAEwS,QAAQP,EAAiB,CAAC,SAAUnN,GAAQ,OAAOA,EAAKyG,QAAU,CAACY,IACpF,MACF,IAAK,QACHoG,EAAevS,IAAEwS,QAAQP,EAAiB,CAAC,SAAUnN,GAAQ,OAAOA,EAAK4G,UAAY,CAACS,IACtF,MACF,QACEoG,EAAevS,IAAEwS,QAAQP,EAAiB,CAAC,SAAUnN,GAAQ,OAAOA,EAAKqG,iBAAiB7K,MAAQ,SAAUwE,GAAQ,OAAOA,EAAKyG,QAAU,CAACY,EAAW,SAI1J,OAAOoG,EDkOmBE,CAAcrW,KAAKO,MAAMoP,QAAS3P,KAAKO,MAAM2R,KAAMlS,KAAKO,MAAMwP,UAAW/P,KAAKO,MAAM0P,cAC5G,OACElP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,qBACbH,EAAAC,EAAAC,cAACqV,EAAD,CAASvU,kBAAmB/B,KAAKwT,eAAgBxR,iBAAkBhC,KAAKyT,cAAe5R,WAAY7B,KAAKO,MAAMsB,aAE9Gd,EAAAC,EAAAC,cAACsV,EAAD,CAAWvR,SAAUhF,KAAKgU,aAAc9N,IAAI,WAC3ClG,KAAKO,MAAMmS,kBAAoB1S,KAAKO,MAAMmS,iBAAiB5P,OAAS,GAAK/B,EAAAC,EAAAC,cAACuV,EAAD,CAAkB9F,MAAO1Q,KAAKO,MAAMmS,iBAAkBxD,SAAUlP,KAAKwU,aAAc7D,SAAU3Q,KAAK2U,eAC3K3U,KAAKO,MAAMoP,SAAW3P,KAAKO,MAAMoP,QAAQ7M,OAAS,GAAK/B,EAAAC,EAAAC,cAACwV,EAAD,CAAWlG,YAAasF,EAAgB/S,OAAQsN,eAAgBpQ,KAAKiU,qBAE7HlT,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACZ2U,GAAmBA,EAAgB/S,OAAS,GAAK/B,EAAAC,EAAAC,cAACyO,EAAD,CAAcC,QAASkG,EAAiB3G,SAAUlP,KAAKwU,aAAchG,cAAexO,KAAK6U,oBAC3H,IAAfhT,GAAoBd,EAAAC,EAAAC,cAAA,OAAKC,UAAU,iCAAgCH,EAAAC,EAAAC,cAAA,KAAGC,UAAU,yBAA2BH,EAAAC,EAAAC,cAAA,0EAI7GjB,KAAKO,MAAMkS,cAAgB1R,EAAAC,EAAAC,cAACwE,EAAD,CAAQU,MAAM,WAAWC,QAAS,kBAAMwP,EAAK/U,SAAS,CAAE4R,cAAc,MAAtE,IAAiF1R,EAAAC,EAAAC,cAACyV,EAAD,CAAUxQ,IAAI,WAAW5C,OAAQtD,KAAKO,MAAM+C,OAAQG,cAAezD,KAAK0T,kBAAmBjP,gBAAiBzE,KAAKoU,oBAC5N7P,iBAAkBvE,KAAKO,MAAMgE,iBAAkBC,mBAAoBxE,KAAK8U,0BACzE9U,KAAKO,MAAM8H,aAAetH,EAAAC,EAAAC,cAACwE,EAAD,CAAQU,MAAM,UAAUC,QAAS,kBAAMwP,EAAK/U,SAAS,CAAEwH,aAAa,MAApE,IAA+EtH,EAAAC,EAAAC,cAAC0V,EAAD,CAASzQ,IAAI,cACrHlG,KAAKO,MAAMgE,kBAAoBxD,EAAAC,EAAAC,cAACwG,EAAD,CAAWG,aAAc,kBAAMgO,EAAKd,wBAAuB,IAAOpN,aAAc,WAAQkO,EAAK/U,SAAS,CAAE8R,kBAAkB,OAC1J3S,KAAKO,MAAMoS,kBAAoB5R,EAAAC,EAAAC,cAACwE,EAAD,CAAQU,MAAM,gBAAgBC,QAAS,kBAAMwP,EAAK/U,SAAS,CAAE8R,kBAAkB,MAAU5R,EAAAC,EAAAC,cAACuG,EAAD,MAAzF,KAC/BxH,KAAKO,MAAMsS,aAAe9R,EAAAC,EAAAC,cAACwE,EAAD,CAAQU,MAAM,GAAGC,QAAS,kBAAMwP,EAAK/U,SAAS,CAAEgS,YAAa,SAAS9R,EAAAC,EAAAC,cAAC4G,EAAD,CAAUa,KAAM1I,KAAKO,MAAMsS,cAAjG,KAC3B9R,EAAAC,EAAAC,cAAA,OAAKC,UAAU,SAAQH,EAAAC,EAAAC,cAAA,KAAG0G,KAAK,0BAA0B8H,OAAO,SAASD,IAAI,uBAAtD,iCAA0G,IAAIoH,MAAOC,gEAkBhJ,IAAI7B,EAAiB,KACrB,IACEA,EAAiBpK,KAAK4K,MAAM5B,aAAa6B,QAAQ,cACjD,MAAOE,IAIT,OADIX,GAAgBhV,KAAKa,SAAS,CAAEyC,OAAQ0R,IACrCA,iFAGYA,6FACIxK,MAAM,+BAAvBP,kBACaA,EAAS6M,cAAtB5M,SAEF6M,EAAU,KAEZA,EADE/B,EACQlV,OAAAmT,EAAA,EAAAnT,CAAIoK,GAAM3G,IAAI,SAAAS,GACtB,IAAMgT,EAAQhC,EAAerB,KAAK,SAAAiB,GAAC,OAAIA,EAAE3Q,cAAgBD,EAAEC,cAC3D,OAAI+S,EACKlX,OAAAgM,EAAA,EAAAhM,CAAA,GAAMkE,EAAb,CAAgBI,QAAS4S,EAAM5S,UAExBtE,OAAAgM,EAAA,EAAAhM,CAAA,GAAMkE,EAAb,CAAgBI,SAAS,MAKnBtE,OAAAmT,EAAA,EAAAnT,CAAIoK,GAAM3G,IAAI,SAAAS,GAAC,OAAAlE,OAAAgM,EAAA,EAAAhM,CAAA,GAAUkE,EAAV,CAAaI,SAAS,MAIjDpE,KAAKa,SAAS,CAAEyC,OAAQyT,EAASE,SAAS,IAEtCjX,KAAKO,MAAMgE,kBAAkBqP,aAAaC,QAAQ,YAAajJ,KAAKC,UAAUkM,+GAxThDxU,+BETtC,IAAM2U,GAAcC,QACW,cAA7B1Q,OAAO4O,SAAS+B,UAEa,UAA7B3Q,OAAO4O,SAAS+B,UAEhB3Q,OAAO4O,SAAS+B,SAASJ,MACvB,2DA6BJ,SAASK,GAAiBC,GACxBC,UAAUC,cACPC,SAASH,GACTlC,KAAK,SAAAsC,GACJA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACtCD,EAAiBE,cAAgB,WACA,cAA3BF,EAAiBrX,QACfgX,UAAUC,cAAcO,WAK1B3G,QAAQC,IAAI,6CAKZD,QAAQC,IAAI,2CAMrB2G,MAAM,SAAA3O,GACL+H,QAAQ/H,MAAM,4CAA6CA,KC/DjE,IAAM4O,GAAUtS,SAASuS,qBAAqB,QAAQ,GAAGC,aAAa,QAChEC,GAAczS,SAAS0S,eAAe,QAE5CC,IAASC,OACPxX,EAAAC,EAAAC,cAACuX,EAAA,EAAD,CAAeC,SAAUR,IACvBlX,EAAAC,EAAAC,cCJW,WACb,OACEF,EAAAC,EAAAC,cAACuX,EAAA,EAAD,KACEzX,EAAAC,EAAAC,cAAA,WAIEF,EAAAC,EAAAC,cAACyX,GAAA,EAAD,KACE3X,EAAAC,EAAAC,cAAC0X,GAAA,EAAD,CAAOrL,KAAK,IAAIsL,UAAWpG,SDJjC,OAEF4F,IDMa,WACb,GAA6C,kBAAmBb,UAAW,CAGzE,GADkB,IAAIsB,IAAIC,GAAwBrS,OAAO4O,UAC3C0D,SAAWtS,OAAO4O,SAAS0D,OAIvC,OAGFtS,OAAOa,iBAAiB,OAAQ,WAC9B,IAAMgQ,EAAK,GAAAnU,OAAM2V,GAAN,sBAEP5B,GAwCV,SAAkCI,GAEhC9M,MAAM8M,GACHlC,KAAK,SAAAnL,GAGkB,MAApBA,EAAS4B,SACuD,IAAhE5B,EAASS,QAAQsO,IAAI,gBAAgBjV,QAAQ,cAG7CwT,UAAUC,cAAcyB,MAAM7D,KAAK,SAAAsC,GACjCA,EAAawB,aAAa9D,KAAK,WAC7B3O,OAAO4O,SAAS8D,aAKpB9B,GAAgBC,KAGnBU,MAAM,WACL5G,QAAQC,IACN,mEA5DA+H,CAAwB9B,GAGxBD,GAAgBC,MCvBxB+B","file":"static/js/main.0563af9f.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor (props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n {this.props.percentage !== null &&
{this.props.percentage}%
}\r\n
\r\n
{ this.props.onSettingsClicked()}}>
\r\n
{ this.props.onMessgaeClicked() }}>
\r\n
\r\n\r\n {this.props.percentage !== null &&\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport _ from \"lodash\";\r\n\r\nexport class Settings extends Component {\r\n\r\n applyAll = (toWhat) => {\r\n this.props.stores.map(s => this.props.onStoreChange(s, toWhat));\r\n }\r\n \r\n\r\n render() {\r\n\r\n const { stores } = this.props;\r\n\r\n const columnSize = (stores.length / 3) + (stores.length % 3 > 0 ? 1 :0);\r\n\r\n const columnData = _.chunk(stores, columnSize);\r\n\r\n return (\r\n
\r\n

\r\n There are {stores.length} stores that can be searched. The stores with a check mark are the stores that will be included in a search. If you wish to remove a store from a search simply uncheck the store.\r\n

\r\n\r\n
\r\n {columnData.map(c =>
\r\n {c.map(i =>
this.props.onStoreChange(i)} />{i.handlerName}
)}
)}\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n

Other settings

\r\n\r\n
this.props.onAcceptanceChange(!this.props.cookieAcceptance)} />Cookie / LocalStorage policy accepted
\r\n\r\n

This site stores settings locally in your browser to improve the user experience. If you would like to clear this data, click the 'Reset settings' button below.

\r\n \r\n\r\n
);\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class SearchBar extends Component {\r\n\r\n\r\n state = {\r\n searchTerm:\"\"\r\n }\r\n\r\n handleChange = e => {\r\n this.setState({ searchTerm: e.currentTarget.value });\r\n }\r\n \r\n handleClick = () => {\r\n this.props.onSearch(this.state.searchTerm);\r\n }\r\n\r\n handleKeyPress = e => {\r\n var code = e.keyCode || e.which;\r\n if (code === 13 && this.canSearch()) {\r\n this.handleClick();\r\n } \r\n }\r\n\r\n doSearch(searchTerm) {\r\n this.setState({ searchTerm: searchTerm });\r\n this.props.onSearch(searchTerm);\r\n }\r\n\r\n canSearch = () => {\r\n return this.state.searchTerm && this.state.searchTerm.trim().length >= 3;\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n Search for\r\n
\r\n \r\n\r\n
\r\n\r\n {this.state.searchTerm && this.setState({ searchTerm:\"\"})}>}\r\n {this.canSearch() && }\r\n {!this.canSearch() && }\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { useRef, useState, useEffect } from 'react';\r\n\r\nexport default function Dialog(props)\r\n{\r\n\r\n const docHeight = document.body.clientHeight;\r\n\r\n const componentRef = useRef(null);\r\n\r\n const { height } = useDimensions(componentRef);\r\n\r\n //style={{ marginTop: 110 + offset + 'px'}}\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{props.title}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {props.children}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst MobileHeightAdj = 200;\r\nconst DefaultHeightAdj = 280;\r\n\r\nexport const useDimensions = myRef => {\r\n const getDimensions = () => {\r\n\r\n let mobile = (window.innerWidth <= 760);\r\n\r\n let height = myRef.current ? window.innerHeight - myRef.current.offsetTop - (mobile ? MobileHeightAdj : DefaultHeightAdj) : 0;\r\n\r\n return ({\r\n height,\r\n mobile\r\n });\r\n };\r\n\r\n const [dimensions, setDimensions] = useState({ height: 0});\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setDimensions(getDimensions());\r\n }\r\n\r\n if (myRef.current) {\r\n setDimensions(getDimensions());\r\n }\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n }\r\n },\r\n [myRef]);\r\n\r\n return dimensions;\r\n};\r\n\r\n\r\n\r\n\r\nexport const useContainerDimensions = myRef => {\r\n const getDimensions = () => ({\r\n width: myRef.current ? myRef.current.offsetWidth : 0,\r\n height: myRef.current ? myRef.current.offsetHeight : 0\r\n \r\n });\r\n\r\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setDimensions(getDimensions());\r\n }\r\n\r\n if (myRef.current) {\r\n setDimensions(getDimensions());\r\n }\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n }\r\n },\r\n [myRef]);\r\n\r\n return dimensions;\r\n};\r\n","import React from 'react';\r\n\r\nexport default function PolicyWording(props) {\r\n\r\n return ( \r\n
\r\n
\r\n\r\n
\r\n\r\n

This is the Cookie Policy for RCFerret, accessible from rcferret.co.uk

\r\n\r\n

What Are Cookies

\r\n\r\n

As is common practice with almost all professional websites this site uses cookies, which are tiny files that are downloaded to your computer, to improve your experience. This page describes what information they gather, how we use it and why we sometimes need to store these cookies. We will also share how you can prevent these cookies from being stored however this may downgrade or 'break' certain elements of the sites functionality.

\r\n\r\n

How We Use Cookies

\r\n\r\n

We use cookies for a variety of reasons detailed below. Unfortunately in most cases there are no industry standard options for disabling cookies without completely disabling the functionality and features they add to this site. It is recommended that you leave on all cookies if you are not sure whether you need them or not in case they are used to provide a service that you use.

\r\n\r\n

Disabling Cookies

\r\n\r\n

You can prevent the setting of cookies by adjusting the settings on your browser (see your browser Help for how to do this). Be aware that disabling cookies will affect the functionality of this and many other websites that you visit. Disabling cookies will usually result in also disabling certain functionality and features of the this site. Therefore it is recommended that you do not disable cookies.

\r\n\r\n

The Cookies We Set

\r\n\r\n
    \r\n
  • \r\n

    Site preferences cookies

    \r\n

    In order to provide you with a great experience on this site we provide the functionality to set your preferences for how this site runs when you use it. In order to remember your preferences we need to set cookies so that this information can be called whenever you interact with a page is affected by your preferences.

    \r\n
  • \r\n
\r\n\r\n

Third Party Cookies

\r\n

In some special cases we also use cookies provided by trusted third parties. The following section details which third party cookies you might encounter through this site.

\r\n
    \r\n
  • \r\n

    From time to time we test new features and make subtle changes to the way that the site is delivered. When we are still testing new features these cookies may be used to ensure that you receive a consistent experience whilst on the site whilst ensuring we understand which optimisations our users appreciate the most.

    \r\n
  • \r\n
\r\n

More Information

\r\n

Hopefully that has clarified things for you and as was previously mentioned if there is something that you aren't sure whether you need or not it's usually safer to leave cookies enabled in case it does interact with one of the features you use on our site.

\r\n

However if you are still looking for more information then you can contact us through one of our preferred contact methods:

\r\n
    \r\n
  • By emailing: contact@rcferret.co.uk
  • \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\n","import React from 'react';\r\n\r\nexport default function CookieBar(props) {\r\n \r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n

RC Ferret uses local storage to improve your experience on our site. By continuing to use this website, you consent to the use of cookies and local storage in accordance with our Cookie Policy

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\n","import React, { useState } from 'react';\r\nimport _unescape from 'lodash/unescape';\r\nimport Dialog from './Dialog';\r\n\r\nexport default function Snapshot(props) {\r\n\r\n const [imgLoaded, setImgLoaded] = useState(false);\r\n const [secImgLoaded, setSecImgLoaded] = useState(false);\r\n const [showMessage, setShowMessage] = useState(false);\r\n\r\n const unescapedUrl = encodeURIComponent(_unescape(props.item.productPageUrl));\r\n\r\n \r\n var firstPass = `/api/Snapshot?url=${unescapedUrl}`;\r\n var secondPass = `/api/Snapshot?url=${unescapedUrl}&firstPass=false`;\r\n\r\n\r\n const closeMessage = () => {\r\n setShowMessage(false);\r\n };\r\n\r\n const openStorePage = () => {\r\n setShowMessage(false);\r\n window.open(_unescape(props.item.productPageUrl), '_blank');\r\n };\r\n\r\n return (\r\n
\r\n {!imgLoaded &&
\r\n \r\n
Snapshot of product page loading...
\r\n \r\n
}\r\n \r\n {!secImgLoaded && { setShowMessage(true) }} onLoad={() => setImgLoaded(true)} />}\r\n \r\n {imgLoaded && showMessage &&
\r\n
\r\n \r\n
\r\n \r\n This is a snapshot of the product page and not the {props.item.store} website, would you like to be taken to the website?\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n
}\r\n
\r\n );\r\n\r\n\r\n \r\n\r\n}\r\n","import React from 'react';\r\n\r\nconst Input = ({name, label, error, ...rest}) => { // ...rest captures the other attribues passed\r\n return
\r\n \r\n \r\n {error &&
{error}
}\r\n
;\r\n}\r\n\r\nconst TextArea = ({ name, label, error, ...rest }) => { // ...rest captures the other attribues passed\r\n return
\r\n \r\n \r\n {error &&
{error}
}\r\n
;\r\n}\r\n\r\nexport { Input, TextArea }","export function doSearch(stores, searchTerm, callback) {\r\n stores.map(s => storeSearch(s, searchTerm, callback));\r\n}\r\n\r\nasync function storeSearch(store, searchTerm, callback) {\r\n try {\r\n const response = await fetch(`api/FerretSearch?search=${searchTerm}&key=${store.handlerName}`);\r\n const data = await response.json();\r\n store.results = data ? data.results : null;\r\n store.completed = true;\r\n } catch (ex) {\r\n store.completed = true;\r\n store.results = null;\r\n }\r\n \r\n callback(store);\r\n}\r\n\r\nexport async function sendMessage(message) {\r\n try {\r\n const response = await fetch(`api/FerretMessage`,\r\n {\r\n method: 'post',\r\n headers: {\r\n \"Content-type\": \"application/json\"\r\n },\r\n body: JSON.stringify(message)\r\n });\r\n\r\n const data = await response.text();\r\n\r\n return {\r\n isOk: true,\r\n message:data\r\n }\r\n } catch (ex) {\r\n return {\r\n isOk: false,\r\n message:'Could not send message.'\r\n }\r\n }\r\n\r\n}","import React from 'react';\r\nimport Form from \"./Form\";\r\nimport Joi from 'joi-browser';\r\nimport { sendMessage } from '../services/ferretService.js';\r\n\r\nexport class Message extends Form {\r\n\r\n\r\n state = {\r\n data: {\r\n name: \"\",\r\n email: \"\",\r\n message: \"\"\r\n },\r\n errors: {\r\n\r\n },\r\n sent: false,\r\n responseMessage:null\r\n };\r\n\r\n doSubmit = async () => {\r\n try {\r\n const response = await sendMessage(this.state.data);\r\n\r\n this.setState({ sent: response.isOk, responseMessage:response.message });\r\n\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.username = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n }\r\n\r\n schema = {\r\n email: Joi.string().email().required().label('Email'),\r\n name: Joi.string().min(5).required().label('Name'),\r\n message: Joi.string().required().label('Message')\r\n }\r\n\r\n render() {\r\n return (
\r\n

Use this form to send us a message, we love to have feedback good or bad. If you would like to see a store added or have a feature request, please get in touch.

\r\n
\r\n {this.renderInput(\"name\", \"Name\", \"text\")}\r\n {this.renderInput(\"email\", \"Email\", \"email\")}\r\n {this.renderTextArea(\"message\", \"Message\")}\r\n {!this.state.sent && this.renderButton(\"Send\")}\r\n
\r\n\r\n {this.state.responseMessage &&
\r\n {this.state.responseMessage}\r\n
}\r\n \r\n
);\r\n }\r\n}","import React, { Component } from 'react';\r\nimport Joi from 'joi-browser';\r\nimport {Input, TextArea } from './input';\r\n\r\nclass Form extends Component {\r\n state = { \r\n data:{},\r\n errors:{}\r\n }\r\n\r\n validate = () =>{\r\n\r\n const opts ={\r\n abortEarly:false\r\n }\r\n const {error} = Joi.validate(this.state.data, this.schema, opts);\r\n\r\n if(!error)return null;\r\n\r\n const errors = {};\r\n for(let item of error.details)\r\n errors[item.path[0]] = item.message;\r\n return errors;\r\n \r\n };\r\n\r\n validateProperty = ({name,value}) => {\r\n\r\n const obj = {[name]: value};\r\n const schema = {[name]: this.schema[name]} // [] is es6 computed property\r\n const {error} = Joi.validate(obj, schema); \r\n return error ? error.details[0].message : null;\r\n }\r\n\r\n handleSubmit=e=>{\r\n e.preventDefault();\r\n \r\n const errors = this.validate();\r\n this.setState({errors: errors || {} }); // if errors is null set empty object\r\n if(errors)return;\r\n\r\n this.doSubmit();\r\n }\r\n \r\n handleChange = ({currentTarget: input}) =>{ // deconstruct e for currentTarget prop and alias it as input\r\n const errors = {...this.state.errors};\r\n\r\n const errorMessage = this.validateProperty(input);\r\n if(errorMessage)errors[input.name] = errorMessage;\r\n else delete errors[input.name];\r\n\r\n var data = {...this.state.data};\r\n data[input.name] = input.value;\r\n this.setState({data, errors});\r\n }\r\n\r\n renderButton(label){\r\n\r\n\r\n return \r\n }\r\n\r\n renderInput(name, label, type = \"text\")\r\n {\r\n const {data, errors} = this.state;\r\n return ;\r\n }\r\n\r\n renderTextArea(name, label, type = \"text\") {\r\n const { data, errors } = this.state;\r\n return ;\r\n }\r\n}\r\n \r\nexport default Form;","import React, { Component } from 'react';\r\nimport _unescape from 'lodash/unescape';\r\n\r\nexport class ResultEntry extends Component {\r\n\r\n state = {\r\n imgOk:true\r\n }\r\n\r\n stockLevelCss(level) {\r\n switch (level) {\r\n case 0:\r\n return \"badge badge-pill badge-primary\";\r\n case 1:\r\n return \"badge badge-pill badge-danger\";\r\n case 2:\r\n return \"badge badge-pill badge-warning\";\r\n case 3:\r\n return \"badge badge-pill badge-success\";\r\n default :\r\n return \"badge badge-pill badge-dark\";\r\n\r\n }\r\n }\r\n\r\n stockLevelLabel(level) {\r\n switch (level) {\r\n case 0:\r\n return \"Unknown\";\r\n case 1:\r\n return \"No Stock\";\r\n case 2:\r\n return \"Low Stock\";\r\n case 3:\r\n return \"In Stock\";\r\n default:\r\n return \"See Info\";\r\n\r\n }\r\n }\r\n\r\n openStore = item => {\r\n \r\n }\r\n\r\n render() {\r\n//\r\n const { value: item } = this.props;\r\n return (\r\n
\r\n\r\n
this.props.onShowProduct(item)} >\r\n {this.state.imgOk && {item.description} { this.setState({ imgOk: false }) }} />}\r\n {!this.state.imgOk && }\r\n
\r\n\r\n
\r\n\r\n
\r\n
this.props.onShowProduct(item)}>
\r\n {item.sku &&
this.props.onSelect(item.sku)}>{item.sku}
}\r\n
this.props.onShowProduct(item.productPageUrl)}>{item.store}
\r\n
\r\n\r\n \r\n
\r\n \r\n
this.props.onShowProduct(item)}>\r\n\r\n
\r\n
\r\n
\r\n
£{item.price === 0 ? N/A : {item.price.toFixed(2)}}
\r\n\r\n
\r\n
\r\n
{this.stockLevelLabel(item.inStock)}
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
Visit store
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { ResultEntry } from './ResultEntry';\r\n\r\nexport function SearchResult(props){\r\n\r\n \r\n return (\r\n
\r\n {props.results && props.results.map(r => )}\r\n
\r\n );\r\n \r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class FilterBar extends Component {\r\n\r\n state = {\r\n direction:true,\r\n activeFilter: 'best',\r\n resultFilter:\"\"\r\n }\r\n\r\n\r\n handleFilter = byWhat => {\r\n\r\n if (this.state.activeFilter !== byWhat) {\r\n this.setState({ activeFilter: byWhat, direction: true });\r\n this.props.onFilterChange(byWhat, true, this.state.resultFilter);\r\n return;\r\n }\r\n\r\n var newDirection = !this.state.direction;\r\n\r\n this.setState({ direction: newDirection });\r\n\r\n this.props.onFilterChange(byWhat, newDirection, this.state.resultFilter);\r\n }\r\n\r\n showIndicator(state) {\r\n return state ? \"fas fa-angle-down\" : \"fas fa-angle-up\";\r\n }\r\n\r\n handleResultFilter = resultFilter => {\r\n\r\n const { direction, activeFilter } = this.state;\r\n\r\n this.setState({ resultFilter});\r\n\r\n this.props.onFilterChange(activeFilter, direction, resultFilter);\r\n }\r\n\r\n render() {\r\n return (
\r\n\r\n
Order {this.props.resultCount} results
\r\n\r\n
\r\n this.handleFilter('best')} href=\"#\" className=\"\">By Best Match {this.state.activeFilter === 'best' && }\r\n
\r\n\r\n
\r\n this.handleFilter('desc')} href=\"#\" className=\"\">By Description {this.state.activeFilter === 'desc' && }\r\n
\r\n
\r\n this.handleFilter('price')} href=\"#\" className=\"\">By Price {this.state.activeFilter === 'price' && }\r\n
\r\n
\r\n this.handleFilter('stock')} href=\"#\" className=\"\">By Stock {this.state.activeFilter === 'stock' && }\r\n
\r\n
\r\n
\r\n this.handleResultFilter(e.currentTarget.value)} />\r\n
\r\n {this.state.resultFilter && this.handleResultFilter('')}>}\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n
);\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class PreviousSearches extends Component {\r\n render() {\r\n return (
\r\n {this.props.items.map(i =>
this.props.onSelect(i)}>{i}this.props.onRemove(i)}>
)}\r\n
);\r\n }\r\n}","import * as signalR from \"@microsoft/signalr\";\r\n\r\nconst connection = new signalR.HubConnectionBuilder()\r\n .withUrl(\"/searchHub\")\r\n .build();\r\n\r\n\r\nconnection.on(\"StoreResult\",\r\n function(data) {\r\n callBackFunc(data);\r\n });\r\n\r\nconnection.on(\"CheckResult\",\r\n function (data) {\r\n chkCallBackFunc(data);\r\n });\r\n\r\nconnection.onclose(async () => {\r\n await start();\r\n});\r\n\r\nexport async function start()\r\n{\r\n try {\r\n await connection.start();\r\n } catch (err) {\r\n console.log(err);\r\n setTimeout(() => start(), 2000);\r\n }\r\n}\r\n\r\nvar callBackFunc = null;\r\nvar chkCallBackFunc = null;\r\n\r\nexport async function startSearch(what, storesToSearch, callBack) {\r\n callBackFunc = callBack;\r\n connection.invoke(\"SearchStore\", what, storesToSearch);\r\n}\r\n\r\nexport async function checkStores(what, storesToSearch, callBack) {\r\n chkCallBackFunc = callBack;\r\n connection.invoke(\"CheckStore\", what, storesToSearch);\r\n}\r\n\r\n\r\nexport class SearchService {\r\n\r\n\r\n constructor(method, callbackMethod, callBackFunc) {\r\n\r\n \r\n\r\n this.method = method;\r\n this.callbackMethod = callbackMethod;\r\n this.callBackFunc = callBackFunc;\r\n\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl(\"/searchHub\")\r\n .build();\r\n\r\n this.connection.on(callbackMethod, //\"StoreResult\"\r\n function (data) {\r\n callBackFunc(data);\r\n });\r\n\r\n this.connection.onclose(async () => {\r\n await this.start();\r\n });\r\n }\r\n\r\n\r\n async start() {\r\n try {\r\n await this.connection.start();\r\n } catch (err) {\r\n console.log(err);\r\n setTimeout(() => this.start(), 2000);\r\n }\r\n }\r\n\r\n async run(what, storesToSearch) {\r\n this.connection.invoke(this.method, what, storesToSearch);\r\n }\r\n\r\n};\r\n","import React, { Component } from 'react';\r\nimport { NavMenu } from './NavMenu';\r\nimport { Settings } from './Settings';\r\nimport { SearchBar } from './SearchBar';\r\nimport Dialog from './Dialog';\r\nimport PolicyWording from './PolicyWording';\r\nimport CookieBar from './CookieBar';\r\nimport Snapshot from './Snapshot';\r\nimport { Message } from './Message';\r\nimport { SearchResult } from './SearchResult';\r\nimport { FilterBar } from './FilterBar';\r\nimport { PreviousSearches } from './PreviousSearches';\r\nimport { doSearch } from \"../services/ferretService\";\r\nimport { filterResults } from \"../services/filterService\";\r\nimport { start, startSearch, checkStores, SearchService } from '../services/signalRservice';\r\nimport _ from \"lodash\";\r\nimport queryString from 'query-string';\r\n\r\n\r\nexport default class MainPage extends Component {\r\n \r\n\r\n state = {\r\n showSettings: false,\r\n showMessage: false,\r\n stores: [],\r\n results: [],\r\n percentage: null,\r\n previousSearches: [],\r\n cookieAcceptance: false,\r\n showCookiePolicy: false,\r\n filteredCount: 0,\r\n displayItem: null\r\n };\r\n\r\n\r\n resultArray = [];\r\n\r\n checkService = new SearchService('CheckStore', 'CheckResult', (store) => {\r\n\r\n\r\n if (store.store === \"Spartan RC\") {\r\n store.found = true;\r\n }\r\n\r\n var stores = [...this.state.stores];\r\n var thisStore = stores.filter(s => s.handlerName === store.store)[0];\r\n\r\n thisStore.isOk = store.found;\r\n\r\n this.setState(function (prevState, props) {\r\n return { stores }\r\n });\r\n\r\n });\r\n\r\n \r\n searchService = new SearchService('SearchStore', 'StoreResult', (store) => {\r\n\r\n \r\n\r\n var s = this.resultArray.filter(s => s.handlerName === store.store)[0];\r\n\r\n s.completed = true;\r\n s.results = store.results;\r\n\r\n\r\n var completed = this.resultArray.filter(s => s.completed).length;\r\n var percentage = parseInt((completed / this.resultArray.length) * 100);\r\n\r\n if (percentage === 100) {\r\n setTimeout(() => { this.setState({ percentage: null }) }, 4000);\r\n }\r\n\r\n if (!store.results) {\r\n this.setState({ percentage });\r\n return;\r\n }\r\n\r\n var results = [..._.flatten(this.resultArray.filter(a => a.results != null).map(a => a.results.map(r => r)))];\r\n\r\n this.setState(function (prevState, props) {\r\n return { results: results, percentage }\r\n });\r\n\r\n });\r\n\r\n\r\n async componentDidMount() {\r\n\r\n this.checkService.start();\r\n this.searchService.start();\r\n\r\n await start();\r\n\r\n const cookieAcceptance = this.checkCookieAcceptance();\r\n\r\n let previousStores = null;\r\n\r\n if (cookieAcceptance) {\r\n this.populatePreviousSearches();\r\n previousStores = this.getStoresFromStorage();\r\n }\r\n\r\n this.populateStores(previousStores).then(() => {\r\n \r\n if (this.props.location.search) {\r\n const params = queryString.parse(this.props.location.search);\r\n if(params.search)this.handleSelect(params.search);\r\n }\r\n\r\n });\r\n\r\n this.setState({ cookieAcceptance });\r\n\r\n this.storeStatus();\r\n\r\n\r\n }\r\n\r\n checkCookieAcceptance() {\r\n const cookieAcceptance = localStorage.getItem(\"cookieAcceptance\");\r\n return cookieAcceptance && cookieAcceptance === \"true\";\r\n }\r\n\r\n\r\n populatePreviousSearches() {\r\n const previousSearchesData = localStorage.getItem(\"previousSearches\");\r\n if (previousSearchesData) {\r\n try {\r\n this.setState({ previousSearches: JSON.parse(previousSearchesData) });\r\n } catch (ex) {\r\n\r\n }\r\n }\r\n }\r\n\r\n\r\n handleSettings = () => {\r\n const showSettings = this.state.showSettings;\r\n this.setState({ showSettings: !showSettings });\r\n }\r\n\r\n handleMessage = () => {\r\n const showMessage = this.state.showMessage;\r\n this.setState({ showMessage: !showMessage });\r\n\r\n }\r\n\r\n\r\n handleStoreChange = (store, toWhat) => {\r\n\r\n var stores = [...this.state.stores];\r\n\r\n var matchedStore = stores.find(s => s.handlerName === store.handlerName);\r\n\r\n matchedStore.enabled = (toWhat === undefined) ? !store.enabled : toWhat;\r\n\r\n this.setState({ stores });\r\n\r\n if (this.state.cookieAcceptance) localStorage.setItem(\"providers\", JSON.stringify(stores));\r\n }\r\n\r\n\r\n storeStatus = () => {\r\n\r\n this.checkService.run('battery', [...this.state.stores]);\r\n }\r\n\r\n\r\n handleSearch = searchTerm => {\r\n\r\n this.handleFilterChange('best', true, '');\r\n\r\n const storesToSearch = this.state.stores.filter(s => s.enabled);\r\n\r\n if (storesToSearch.length === 0) return;\r\n\r\n\r\n this.resultArray = [];\r\n\r\n storesToSearch.map(s => this.resultArray.push({\r\n handlerName: s.handlerName\r\n }));\r\n\r\n\r\n this.searchService.run(searchTerm, storesToSearch);\r\n\r\n //startSearch(searchTerm, storesToSearch, (store) => {\r\n\r\n //var s = this.resultArray.filter(s => s.handlerName === store.store)[0];\r\n\r\n //s.completed = true;\r\n //s.results = store.results;\r\n\r\n\r\n //var completed = this.resultArray.filter(s => s.completed).length;\r\n //var percentage = parseInt((completed / this.resultArray.length) * 100);\r\n\r\n //if (percentage === 100) {\r\n // setTimeout(() => { this.setState({ percentage: null }) }, 4000);\r\n //}\r\n\r\n //if (!store.results) {\r\n // this.setState({ percentage });\r\n // return;\r\n //}\r\n\r\n //var results = [..._.flatten(this.resultArray.filter(a => a.results != null).map(a => a.results.map(r => r)))];\r\n\r\n //this.setState(function (prevState, props) {\r\n // return { results: results, percentage }\r\n //});\r\n\r\n\r\n // });\r\n\r\n setTimeout(() => this.setState({ percentage: 0 }), 1);\r\n\r\n\r\n var isSearchStored = this.state.previousSearches.find(t => t === searchTerm);\r\n if (!isSearchStored) {\r\n const previousSearches = [...this.state.previousSearches, searchTerm];\r\n this.setState({ previousSearches });\r\n if (this.state.cookieAcceptance) localStorage.setItem(\"previousSearches\", JSON.stringify(previousSearches));\r\n }\r\n }\r\n\r\n handleClearSettings = () => {\r\n localStorage.removeItem(\"previousSearches\");\r\n localStorage.removeItem(\"providers\");\r\n localStorage.removeItem(\"cookieAcceptance\");\r\n this.setState({ previousSearches: [], cookieAcceptance: false });\r\n this.refs.settings.applyAll(true);\r\n }\r\n\r\n\r\n handleSelect = item => {\r\n this.refs.search.doSearch(item);\r\n }\r\n\r\n handleRemove = item => {\r\n var previousSearches = this.state.previousSearches.filter(x => x !== item);\r\n this.setState({ previousSearches });\r\n if (this.state.cookieAcceptance) localStorage.setItem(\"previousSearches\", JSON.stringify(previousSearches));\r\n }\r\n\r\n handleFilterChange = (what, direction, resultFilter) => {\r\n this.setState({ what, direction, resultFilter });\r\n }\r\n\r\n handleShowProduct = (item) => {\r\n\r\n\r\n this.setState({ displayItem: item });\r\n }\r\n\r\n\r\n render() {\r\n const { percentage } = this.state;\r\n const filteredResults = filterResults(this.state.results, this.state.what, this.state.direction, this.state.resultFilter);\r\n return (\r\n
\r\n \r\n\r\n \r\n {this.state.previousSearches && this.state.previousSearches.length > 0 && }\r\n {this.state.results && this.state.results.length > 0 && }\r\n\r\n
\r\n {filteredResults && filteredResults.length > 0 && }\r\n {percentage === 0 &&
Warming up the engine. Your results will be here shortly.
}\r\n \r\n \r\n
\r\n {this.state.showSettings && this.setState({ showSettings: false })}> }\r\n {this.state.showMessage && this.setState({ showMessage: false })}> }\r\n {!this.state.cookieAcceptance && this.handleAcceptanceChange(true)} onShowPolicy={() => { this.setState({ showCookiePolicy: true }) }} />}\r\n {this.state.showCookiePolicy && this.setState({ showCookiePolicy: false })}> }\r\n {this.state.displayItem && this.setState({ displayItem: null })}> }\r\n \r\n
\r\n\r\n );\r\n }\r\n\r\n\r\n handleAcceptanceChange = cookieAcceptance => {\r\n if (cookieAcceptance) {\r\n localStorage.setItem(\"cookieAcceptance\", true);\r\n this.setState({ cookieAcceptance });\r\n } else {\r\n this.handleClearSettings();\r\n }\r\n\r\n }\r\n\r\n getStoresFromStorage() {\r\n let previousStores = null;\r\n try {\r\n previousStores = JSON.parse(localStorage.getItem(\"providers\"));\r\n } catch (ex) {\r\n\r\n }\r\n if (previousStores) this.setState({ stores: previousStores });\r\n return previousStores;\r\n }\r\n\r\n async populateStores(previousStores) {\r\n const response = await fetch('api/Providers');\r\n const data = await response.json();\r\n\r\n let newData = null;\r\n if (previousStores) {\r\n newData = [...data].map(i => {\r\n const match = previousStores.find(x => x.handlerName === i.handlerName);\r\n if (match) {\r\n return ({ ...i, enabled: match.enabled });\r\n } else {\r\n return ({ ...i, enabled: true });\r\n }\r\n\r\n });\r\n } else {\r\n newData = [...data].map(i => ({ ...i, enabled: true }));\r\n }\r\n\r\n\r\n this.setState({ stores: newData, loading: false });\r\n\r\n if (this.state.cookieAcceptance) localStorage.setItem(\"providers\", JSON.stringify(newData));\r\n }\r\n\r\n}\r\n","import _ from \"lodash\";\r\n\r\nexport function filterResults(results, byWhat, byDirection, resultFilter) {\r\n \r\n let re = null;\r\n let filteredResults = [];\r\n\r\n try {\r\n re = new RegExp(resultFilter);\r\n filteredResults = re ? [...results.filter(x => re.test(x.description.toLowerCase()) || (x.sku && re.test(x.sku.toLowerCase())))] : [...results];\r\n } catch (ex) {\r\n filteredResults = [...results];\r\n }\r\n\r\n const direction = byDirection ? 'desc' : 'asc';\r\n\r\n let finalResults = null;\r\n\r\n switch (byWhat) {\r\n\r\n case 'desc':\r\n finalResults = _.orderBy(results, [function (item) { return item.description.trim() }], [direction]);\r\n break;\r\n case 'price':\r\n finalResults = _.orderBy(filteredResults, [function (item) { return item.price }], [direction]);\r\n break;\r\n case 'stock':\r\n finalResults = _.orderBy(filteredResults, [function (item) { return item.inStock }], [direction]);\r\n break;\r\n default:\r\n finalResults = _.orderBy(filteredResults, [function (item) { return item.descriptionMatch.type }, function (item) { return item.price }], [direction, 'desc']);\r\n\r\n }\r\n\r\n return finalResults;\r\n}","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n","import React from \"react\";\r\nimport MainPage from \"./components/MainPage\"\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n} from \"react-router-dom\";\r\n\r\nexport default function App() {\r\n return (\r\n \r\n
\r\n \r\n {/* A looks through its children s and\r\n renders the first one that matches the current URL. */}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}"],"sourceRoot":""}