{"version":3,"sources":["serviceWorker.js","components/editor-components/editor-map.js","components/editor-components/editor-autocomplete.js","components/geolocationComponent.js","api/timezonedb-api.js","components/editor-components/editor-datePicker.js","components/editor-components/editor-materials.js","utils/utils.js","components/editor-components/editor-sidebar.js","components/editor.js","components/audio-components/editor-map.js","components/audio-components/editor-materials.js","components/audio-components/editor-sidebar.js","components/audio-components/editor.js","components/cart-components/cart-form.js","components/header.js","components/footer.js","api/shipping-api.js","components/cart.js","components/completed.js","components/admin-components/admin-sky.js","components/admin-components/admin-city.js","components/admin-components/admin-fileLoader.js","components/admin-components/admin.js","components/login-components/backendLoginService.js","components/login-components/login.js","components/login-components/logout.js","api/promo-api.js","utils/toast.js","components/promo-components/promo-list.js","components/promo-components/promo-add.js","components/admin-components/admin-novaPoshta.js","components/promo-components/promo.js","i18n.js","index.js"],"names":["Boolean","window","location","hostname","match","Map","props","isSmallScreen","updateWindowDimensions","console","log","innerWidth","updateConfig","needChangeCanvasSize","config","getInitialCelestialConfig","redrawCelestialWhenRenderIsComplete","getUpdatedCelestialConfig","cel","apply","isRendering","setTimeout","display","updateMapPosition","that","skyview","date","latitude","longitude","getMapSize","width","_map","current","firstChild","offsetWidth","height","offsetHeight","containerWidth","_poster","containerHeight","_text1","getFixedText1","text1","React","createRef","img","Image","src","add","file","type","callback","error","json","warn","mw","Celestial","container","selectAll","data","features","enter","append","attr","redraw","mwStyle","fill","context","createPattern","opacity","each","d","setStyle","map","addEventListener","this","removeEventListener","DOMPurify","sanitize","replace","e","call","stack","nextProps","styleId","getAdditionalDividerByStyleId","nextState","text2","ratio","indexOf","sizeDivider","lang","i18n","language","isNamesEnabled","find","f","id","projection","adaptable","interactive","form","controls","culture","datapath","stars","show","limit","colors","style","designation","size","dsos","planets","constellations","names","isEnabled","namesType","nameStyle","align","baseline","stroke","background","font","lines","lineStyle","graticule","equatorial","ecliptic","galactic","supergalactic","horizon","daylight","class","ref","overflow","fontFamily","fontSize","bottom","process","dangerouslySetInnerHTML","__html","Component","whyDidYouRender","Autocomplete","handleAutocompleteSelect","address","geocodeByPlaceId","place_id","then","results","geometry","lat","getAddressAndCoordinates","place","description","onPlaceChanged","catch","onClear","_autocomplete","changeValue","_textInput","focus","renderInput","placeholder","onClick","state","ukraineBounds","west","east","north","south","city","country","idx","address_components","long_name","types","getLatLng","latLng","getAddress","lng","initialValue","autocompletionRequest","onSelect","suggestionsClassNames","suggestion","suggestionActive","api","axios","create","baseURL","apis","getTimeZoneOffset","time","get","headers","r","message","response","status","statusText","JSON","stringify","request","Error","EditorDatePicker","onChange","dateTime","hasTime","dateTimeSplit","item","length","slice","join","moment","isValid","isTimePickerAllowed","currentLocalDateTime","recalculateUtcOnDateUpdate","renderDateInput","openCalendar","closeCalendar","onFocus","onAllowTimePickerClick","set","hour","minute","second","millisecond","utcDateTime","getUtcTimeFromLocal","onDateChanged","setState","timeZoneResponse","currentUtcOffset","utcOffset","prevProps","recalculateUtcOnCoordinatesUpdate","Math","round","gmtOffset","utcDateTimeString","clone","format","utc","timeStamp","unix","timezoneDbApi","zoneName","raiseDateUpdate","zoneStart","zoneEnd","t","viewMode","locale","defaultValue","dateFormat","timeFormat","closeOnSelect","inputProps","inputMode","PureComponent","withTranslation","EditorMaterials","riseUpdate","material","materials","selectedMaterialId","sizes","selectedSizeId","price","hanger","hangers","h","selectedHangerId","proposalHangerName","proposalHangerPrice","frameHanger","name","onChanged","selectedMaterialName","selectedHangerName","proposalHangerId","onMaterialChanged","changeEvent","materialId","target","value","s","hangerId","sizeId","isDefault","onSizeChanged","onHangerChanged","onMaterialInfoClick","preventDefault","modalName","info","modalDescription","modalImages","images","isModalOpen","onHangerInfoClick","onModalClose","renderModalWindow","isOpen","requestClose","classes","contentClassName","closeIconClassName","wrapperClassName","whiteSpace","Carousel","index","Item","key","className","alt","renderSizesOld","checked","oldPrice","renderSizes","data-check-icon","data-uncheck-icon","renderHangers","Fragment","initialSelectedMaterialId","initialSelectedSizeId","initialSelectedHangerId","prevState","getPublicUrl","split","result","i","getUrlQuery","obj","printWidth","printHeight","centerLat","centerLon","mapWidth","mapHeight","isGridEnabled","isConstellationsEnabled","isMWEnabled","query","encodeURIComponent","getAllStyles","isTest","styles","push","getStyleSettingsByStyleId","EditorSidebar","_isSmallScreen","scrollToBottom","_bottom","scrollIntoView","behavior","block","inline","onChatClick","jivo_api","open","onSideBarMenuClick","sidebarMenuLinks","materialInfo","onMakeOrderClick","onAddFrameClick","materialAlterInfo","onContinueWithoutFrameClick","renderStyles","selectedStyleId","onStyleChanged","renderFeatures","feature","onFeatureChanged","proposedTextModalOpen","isProposedTextModalOpen","onProposedTextModalClose","onProposedTextSwitched","selectedIndex","_selectedProposedTextIndex","onProposedTextSelected","_proposedTexts","text","onText1Selected","createItem","icon","array","itemClass","classNames","active","role","href","renderSidebarMenu","rows","onText1Changed","onText2Changed","maxWidth","interval","slide","Caption","bsPrefix","EditorComponent","event","updatePlaceAndText2","startsWith","gtag","send_to","event_category","event_label","fbq","search_string","localDate","utcDate","isTimePicked","local","toDate","updateDateAndText2","featureId","el","applyStyle","materialUpdateInfo","store","Date","text2BeforeManualEdit","convertedMap","convertedDescription","product","productType","rest","redirect","initialPlace","initialDate","setHours","setMinutes","setSeconds","setMilliseconds","initialUtcDate","getTime","queryParams","queryString","parse","search","toLowerCase","getText2","editorStateDateString","editorStateDate","setDate","getDate","restoredState","content_name","momentDate","formatcoords","latLonSeparator","decimalPlaces","styleSettings","to","pathname","updatePosterSize","margin","_content","maxHeight","ratioSplit","ratioX","parseInt","ratioY","tempHeight","posterWidth","posterHeight","_posterWrapper","CartForm","memo","useTranslation","canShipFromFactory","needPrepayment","isFreeShippingTurnedOn","isLiqpayEnabled","isWayForPayEnabled","canPayByCash","shippingDates","enableReinitialize","initialValues","lastName","email","phone","paymentType","shippingType","warehouse","comment","subscribe","validate","values","errors","test","onSubmit","actions","setSubmitting","formikProps","touched","handleChange","handleBlur","handleSubmit","setFieldValue","wayForPayLabel","disabled","shippingCost","trim","shippingDate","onShippingCostChanged","autoComplete","required","onBlur","aria-expanded","aria-controls","Collapse","in","Header","isProductTypeAudio","homeUrl","Footer","aria-hidden","data-toggle","data-placement","title","data-original-title","getShippingDates","getShippingDatesForVlad","canShipByVlad","Cart","onPomocodeChanged","promocode","onPomocodeApplied","superagent","basePrice","end","alert","isCorrect","newPrice","isNaN","priceWithoutShipping","isPromocodeFailed","succeededPromocode","getPrice","randomIntFromInterval","min","max","floor","random","isSubmitting","str","suffix","order","orderId","shipping","wayForPay","clientEmail","clientPhone","referral","Cookies","gTagId","currency","pixelId","post","send","_liqpayForm","submit","_wayForPayForm","history","fixMapLanguage","containsAny","cyrrilicRegex","areTextsInSameLanguage","ukChars","ruChars","substrings","substring","renderWayForPayProduct","productName","productCount","productPrice","readOnly","count","isTestActive","wayForPayId","getFullYear","toString","substr","getMonth","url","protocol","host","redirectUrl","serverUrl","note","canShipFromByVlad","buttonData","buttonSignature","updateWayForPayFormParameters","shippingApi","sum","isLoading","getWayForPayFormParameters","res","returnUrl","serviceUrl","orderReference","amount","getLiqpayFormParameters","signature","aria-multiselectable","data-parent","aria-labelledby","method","action","acceptCharset","merchantAccount","merchantDomainName","merchantSignature","orderDate","Completed","params","remove","version","xmlns","xmlnsXlink","x","y","viewBox","enableBackground","space","renderSendAudioButttons","AdminSky","onStyleChange","settings","urlQuery","onSettingsChanged","onSizeChange","onDateChange","dateUpdatedForOrderId","parsedUtcDate","formattedDate","isSubtitleRequiresChange","onInputChange","onUrlQueryInputChange","generateConfigFileFromState","stringResult","content","onSaveFile","sendToOrder","onSendFileToOrder","onAdditionalInfoClick","isAdditionalInfoOpen","copyRedHeart","navigator","clipboard","writeText","err","additionalStateValues","getAdditionalStateValues","stylesId","checkStyleIsCorrect","onShowError","formattedCoordinates","parseFloat","getFormattedCoordinates","isHangerNotValid","for","selected","readonly","subtitle","renderAdditionalInfo","AdminCity","styleSrc","styleSrcFolder","getMapSettingsByMaterialAndLabeStyle","labelStyle","padding","paddingInt","initialPadding","initialMapWidth","initialMapHeight","onMaterialChange","isMapDirty","mapSettings","onLabelStyleChange","onMarkersCoordinatesInputChange","markersCoordinates","Object","keys","validateForm","validateMarkers","coordinates","isChangingLocationNotAllowed","lastIndex","lastIndexOf","markersStyle","zoom","pitch","AdminFileLoader","fixStringBoolean","loweredValue","extractSettings","fileName","jsonContent","urlQueryParams","getUrlQueryParameters","raiseOnFileLoaded","onFileChangeHandler","files","processFile","onFilesSelected","readFromClipboard","readText","processContent","raiseOnFileException","reader","FileReader","readAsText","onload","fixedContent","rjson","transform","onerror","onFileLoaded","onFileException","pl","decode","decodeURIComponent","urlParams","exec","onDrop","multiple","accept","noClick","getRootProps","getInputProps","isDragActive","isDragAccept","Admin","fileKey","showError","blob","Blob","msSaveOrOpenBlob","msSaveBlob","elem","document","createElement","URL","createObjectURL","download","body","appendChild","click","removeChild","File","formData","FormData","showSuccess","errorMessage","onCloseToast","toast","isShow","alertType","Toast","onClose","delay","autohide","position","top","right","zIndex","Body","Spinner","animation","BackendLoginService","instance","isLoggedIn","createAuthProvider","accessTokenKey","customFetch","onUpdateToken","token","refreshToken","authFetch","loginInternal","logoutInternal","authGet","authPost","authPut","authDelete","login","googleResponse","logout","isLoggedInFun","getInstance","Login","clientId","onSuccess","profileObj","serverLoginFailed","from","serverEmail","onFailure","renderSuccessAccountInfo","renderFailedAccountInfo","renderAccountInfo","isSuccess","isServerLoginFailed","buttonText","cookiePolicy","marginTop","isSignedIn","Logout","onLogoutSuccess","insertPromo","payload","getAllPromos","updatePromo","deletePromoByCode","code","getPromoByCode","ToastFun","PromoList","componentDidMount","promos","showMessage","onAddClick","onEditClick","currentTarget","onDeleteClick","confirm","onLogoutClick","showTable","discount","expirationDate","PromoAdd","_isUpdatingMode","promo","isFailed","onCancelClick","startOf","expirationDateFormatted","expirationDateUtc","AdminNovaPoshta","onCopyClick","uk","onTypeheadChange","options","clearButton","highlightOnlyResult","labelKey","option","onSearch","fetch","resp","ru","use","Backend","LanguageDetector","initReactI18next","init","detection","lookupFromPathIndex","checkWhitelist","backend","loadPath","fallbackLng","debug","whitelist","load","interpolation","escapeValue","nsSeparator","keySeparator","pathSplit","baseName","ReactDOM","render","fallback","basename","path","component","exact","Editor","AudioEditor","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"saAYoBA,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2D,oHCXeC,E,kDAInB,WAAYC,GAAQ,IAAD,8BACjB,cAAMA,IAHRC,eAAgB,EAEG,EA8EnBC,uBAAyB,WACvBC,QAAQC,IAAI,2BACZ,IACIH,EADQN,OAAOU,WACS,IAC5B,EAAKJ,cAAgBA,GAlFJ,EA6TnBK,aAAe,SAACN,EAAOC,EAAeM,GAGpC,GAFAJ,QAAQC,IAAI,6BAERG,EAAsB,CACxB,IAAIC,EAAS,EAAKC,0BAA0BT,EAAOC,GAEnD,EAAKS,oCAAoCF,OACpC,CACDA,EAAS,EAAKG,0BAA0BX,EAAOC,GACnDW,cAAgBC,MAAML,KAtUP,EA0UnBE,oCAAsC,SAACF,GACjC,EAAKM,aACPX,QAAQC,IAAI,mCACZT,OAAOoB,WAAW,EAAKL,oCAAqC,IAAMF,KAElEL,QAAQC,IAAI,sBACZQ,cAAgBI,QAAQR,KAhVT,EAoVnBS,kBAAoB,SAACjB,GACnBG,QAAQC,IAAI,+BAEZ,EAAKU,aAAc,EACnB,IAAII,EAAI,eACRH,YAAW,WACTG,EAAKJ,aAAc,IAClB,KACHF,cAAgBO,QAAQ,CACtBC,KAAMpB,EAAMoB,KACZxB,SAAU,CAACI,EAAMqB,SAAUrB,EAAMsB,cA9VlB,EAkWnBC,WAAa,WAGX,MAAO,CACLC,MAAO,EAAKC,KAAKC,QAAQC,WAAWC,YACpCC,OAAQ,EAAKJ,KAAKC,QAAQC,WAAWG,aACrCC,eAAgB,EAAKC,QAAQN,QAAQE,YACrCK,gBAAiB,EAAKD,QAAQN,QAAQI,eAvWxC,EAAKI,OAAS,EAAKC,cAAcnC,EAAMoC,OACvC,EAAKJ,QAAUK,IAAMC,YACrB,EAAKb,KAAOY,IAAMC,YAClB,EAAKxB,aAAc,EALF,E,oDAUjB,IAAIyB,EAAM,IAAIC,MAEdD,EAAIE,IACF,iLAEF7B,cAAgB8B,IAAI,CAClBC,KAAM,qBACNC,KAAM,OAENC,SAAU,SAAUC,EAAOC,GACzB,GAAID,EAAO,OAAO3C,QAAQ6C,KAAKF,GAE/B,IAAIG,EAAKF,EAELG,EAAYtC,cAKhBsC,EAAUC,UACPC,UAAU,SACVC,KAAKJ,EAAGK,UACRC,QACAC,OAAO,QACPC,KAAK,QAAS,OAGjBP,EAAUQ,UAGZA,OAAQ,WACN,IAAIR,EAAYtC,cAIZ+C,EAAU,CACZC,KAHcV,EAAUW,QAAQC,cAAcvB,EAAK,UAKnDwB,QAAS,OAGXb,EAAUC,UAAUC,UAAU,QAAQY,MAAK,SAAUC,GACnDf,EAAUgB,SAASP,GACnBT,EAAUiB,IAAIF,GAGdf,EAAUW,QAAQD,e,0CAOxBjE,OAAOyE,iBAAiB,SAAUC,KAAKnE,wBACvCmE,KAAKnE,yBAEL,IAAIM,EAAS6D,KAAK5D,0BAA0B4D,KAAKrE,MAAOqE,KAAKpE,eAI7DW,cAAgBI,QAAQR,GACxB6D,KAAKpD,kBAAkBoD,KAAKrE,S,6CAI5BL,OAAO2E,oBAAoB,SAAUD,KAAKnE,0B,oCAU9BkC,GACZ,GAAIA,EACF,IACE,OAAOmC,IAAUC,SAASpC,GAAOqC,QAC/B,gBACA,+BAEF,MAAOC,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAG5D,MAAO,K,gDAeiBG,GASxB,GARAR,KAAKnC,OAASmC,KAAKlC,cAAc0C,EAAUzC,OAEzCyC,EAAUxD,WAAagD,KAAKrE,MAAMqB,UAClCwD,EAAUvD,YAAc+C,KAAKrE,MAAMsB,WACnCuD,EAAUzD,OAASiD,KAAKrE,MAAMoB,MAE9BiD,KAAKpD,kBAAkB4D,GAErBA,EAAUV,KAAOE,KAAKrE,MAAMmE,IAAK,CACnC,IAAI5D,GAAuB,EAC3B,GAAIsE,EAAUC,UAAYT,KAAKrE,MAAM8E,QACjBT,KAAKU,8BACrBV,KAAKrE,MAAM8E,WAEKT,KAAKU,8BAA8BF,EAAUC,WAE7DvE,GAAuB,GAG3B8D,KAAK/D,aAAauE,EAAWR,KAAKpE,cAAeM,M,4CAI/BsE,EAAWG,GAC/B,OACEH,EAAUzC,QAAUiC,KAAKrE,MAAMoC,OAC/ByC,EAAUI,QAAUZ,KAAKrE,MAAMiF,OAC/BJ,EAAUK,QAAUb,KAAKrE,MAAMkF,OAC/BL,EAAUC,UAAYT,KAAKrE,MAAM8E,SAEjC3E,QAAQC,IAAI,uBACL,IAEPD,QAAQC,IAAI,yBACL,K,oDAImB0E,GAC5B,OAAIA,GAAWA,EAAQK,QAAQ,eAAiB,EACvC,IAEA,I,gDAIenF,EAAOC,GAC/B,IAAImF,EAAc,EACdnF,IACFmF,EAAc,GAGZpF,IACFoF,GACgBf,KAAKU,8BAA8B/E,EAAM8E,UAG3D,IAAIO,EAAOC,IAAKC,SAEZC,EAAiBxF,EAAMmE,IAAIb,SAASmC,MACtC,SAACC,GAAD,MAAe,kBAARA,EAAEC,MAyGX,MAvGa,CACXnE,MAAO,IAAM4D,EACbQ,WAAY,gBACZC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNC,UAAU,EACVX,KAAM,GAENY,QAAS,GACT9C,UAAW,gBACX+C,SAAU,aACVC,MAAO,CACLC,MAAM,EACNC,MAAO,EACPC,QAAQ,EACRC,MAAO,CAAE3C,KAAM,UAAWG,QAAS,GACnCyC,aAAa,EACbC,KAAM,EAAIrB,GAEZsB,KAAM,CACJN,MAAM,GAERO,QAAS,CACPP,MAAM,GAERQ,eAAgB,CACdC,QAAOrB,GAAiBA,EAAesB,UACvCC,UAAW1B,EAEX2B,UAAW,CACTpD,KAAM,UACNqD,MAAO,SACPC,SAAU,SACV1F,MAAO,CAAC,GAAM4D,EAAa,GAAMA,EAAa,GAAMA,GACpD+B,OAAQ,CACNnH,EAAMmE,IAAIiD,WACVpH,EAAMmE,IAAIiD,WACVpH,EAAMmE,IAAIiD,YAEZrD,QAAS,EACTsD,KAAM,CACJ,OACG,KAAO,EAAKjC,EACb,iCACF,OACG,KAAO,EAAKA,EACb,iCACF,OACG,KAAYA,EACb,mCAGNkC,MAAOtH,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,2BAARA,EAAEC,MACrCmB,UACHS,UAAW,CACTJ,OAAQ,UACR3F,MAAO,IAAM4D,EACbrB,QAAS,KAGbd,GAAI,CACFmD,KAAMpG,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,eAARA,EAAEC,MAAqBmB,WAG9DQ,MAAO,CAELE,UAAW,CACTpB,KAAMpG,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,iBAARA,EAAEC,MACpCmB,UACHK,OAAQ,UACR3F,MAAO,GAAM4D,EACbrB,QAAS,IAEX0D,WAAY,CACVrB,MAAM,GAERsB,SAAU,CACRtB,MAAM,GAERuB,SAAU,CACRvB,MAAM,GAERwB,cAAe,CACbxB,MAAM,IAGVgB,WAAY,CACVxD,KAAM5D,EAAMmE,IAAIiD,WAChBrD,QAAS,EACToD,OAAQnH,EAAMmE,IAAIgD,OAClB3F,MAAO,EAAI4D,GAEbyC,QAAS,CAEPzB,MAAM,GAER0B,SAAU,CAER1B,MAAM,M,gDAOcpG,EAAOC,GAC/B,IAAImF,EAAc,EACdnF,IACFmF,EAAc,GAGhB,IAAII,EAAiBxF,EAAMmE,IAAIb,SAASmC,MACtC,SAACC,GAAD,MAAe,kBAARA,EAAEC,MA2BX,MAzBa,CACXiB,eAAgB,CACdC,QAAOrB,GAAiBA,EAAesB,UAEvCQ,MAAOtH,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,2BAARA,EAAEC,MACrCmB,WAEL7D,GAAI,CACFmD,KAAMpG,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,eAARA,EAAEC,MAAqBmB,WAE9DQ,MAAO,CACLE,UAAW,CACTpB,KAAMpG,EAAMmE,IAAIb,SAASmC,MAAK,SAACC,GAAD,MAAe,iBAARA,EAAEC,MACpCmB,UACHK,OAAQ,UACR3F,MAAO,GAAM4D,EACbrB,QAAS,KAGbqD,WAAY,CACVxD,KAAM5D,EAAMmE,IAAIiD,WAChBD,OAAQnH,EAAMmE,IAAIgD,W,+BAwDtB,IAAqBrC,EAkBrB,OADA3E,QAAQC,IAAI,wBAEV,yBAAK2H,MAAO,wBAA+B1D,KAAKrE,MAAMkF,OACpD,yBACE6C,MAAO,wBAA0B1D,KAAKrE,MAAM8E,QAC5CkD,IAAK3D,KAAKrC,SAEV,yBAAK+F,MAAM,uBACT,yBAAKA,MAAM,qCAET,yBACExB,MAAO,CACL1E,OAAQ,EACRL,MAAO,EACPyG,SAAU,WAGZ,0BAAM1B,MAAO,CAAE2B,WAAY,SAAUC,SAAU,QAA/C,qFAYF,yBACEJ,MAAM,kCACNxB,MAAO,CAAE0B,SAAU,WAEnB,yBACEtC,GAAG,gBACHoC,MACE,kBACC1D,KAAKrE,MAAM8E,SACZT,KAAKrE,MAAM8E,QAAQK,QAAQ,eAAiB,EACxC,uBACA,IAEN6C,IAAK3D,KAAK5C,OAGZ,yBACEsG,MACE,KACC1D,KAAKrE,MAAM8E,SACZT,KAAKrE,MAAM8E,QAAQK,QAAQ,SAAW,EAClC,aAAed,KAAKrE,MAAM8E,QAC1B,cApECA,EAwEMT,KAAKrE,MAAM8E,UAvET,gCAAZA,EAEX,yBACEiD,MAAM,oBACNxB,MAAO,CAAE6B,OAAQ,OAAQ5G,MAAO,SAEhC,yBACEiB,IAAK4F,6BACLN,MAAM,YACNxB,MAAO,CAAE/E,MAAO,UAKjB,MA2DC,yBAAKuG,MAAM,yDACT,yBAAKA,MAAM,iBACT,uBAAGO,wBAAyB,CAAEC,OAAQlE,KAAKnC,YAG/C,yBAAK6F,MAAM,gBACT,2BAAI1D,KAAKrE,MAAMiF,gB,GAlcEuD,aAAZzI,EACZ0I,iBAAkB,E,6GCCNC,G,gEACnB,WAAY1I,GAAQ,IAAD,8BACjB,cAAMA,IAgER2I,yBAA2B,SAACC,GAC1BzI,QAAQC,IAAIwI,GACZC,2BAAiBD,EAAQE,UACtBC,MAAK,SAACC,GAGL,OAFA7I,QAAQC,IAAI,cAAe4I,GAC3B7I,QAAQC,IAAI,OAAQ4I,EAAQ,GAAGC,SAASrJ,SAASsJ,OAC1C,EAAKC,yBAAyBH,EAAQ,OAE9CD,MAAK,SAACK,GACLjJ,QAAQC,IAAI,SAAUgJ,GACtBA,EAAMC,YAAcT,EAAQS,YAC5B,EAAKrJ,MAAMsJ,eAAeF,MAE3BG,OAAM,SAACzG,GAAD,OAAW3C,QAAQ2C,MAAM,QAASA,OA9E1B,EAiFnB0G,QAAU,SAAC9E,GACT,IACE,EAAK+E,cAAc/H,QAAQgI,YAAY,IACvC,EAAKC,WAAWjI,QAAQkI,QACxB,MAAOlF,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAtFzC,EA0FnBmF,YAAc,SAAC7J,GACb,OACE,yBAAK+H,MAAM,oCACT,2CACM/H,EADN,CAEE+H,MAAM,yCACNnF,KAAK,OACLkH,YAAY,GACZ9B,IAAK,EAAK2B,cAEZ,yBAAK5B,MAAM,sBACT,4BACEA,MAAM,kEACNnF,KAAK,SACLmH,QAAS,EAAKP,SAEd,uBAAGzB,MAAM,mCAxGjB,EAAK0B,cAAgBpH,IAAMC,YAC3B,EAAK0H,MAAQ,GACb,EAAKL,WAAatH,IAAMC,YACxB,EAAK2H,cAAgB,CACnBC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,UATQ,E,uDAaRjB,GACT,IACIkB,EACAC,EAHY,EACZC,EAAM,EADM,cAKIpB,EAAMqB,oBALV,IAKhB,2BAA8C,CAAC,IAAtC7B,EAAqC,QAEhC,MADZ4B,IAEEF,EAAO1B,EAAQ8B,WAGb9B,EAAQ+B,MAAMxF,QAAQ,YAAc,IACtCoF,EAAU3B,EAAQ8B,YAZN,8BAehB,MAAO,CACLJ,OACAC,a,+CAIqBnB,GAAQ,IAAD,OAC9B,OAAOwB,oBAAUxB,GAAOL,MAAK,SAAC8B,GAC5B1K,QAAQC,IAAI,oBAAqByK,GACjC,IAAIjC,EAAU,EAAKkC,WAAW1B,GAE9B,GADAjJ,QAAQC,IAAI,gBAAiBwI,IACxBA,EAAQ2B,SAETM,EAAO3B,KAAO,EAAKe,cAAcG,OACjCS,EAAO3B,KAAO,EAAKe,cAAcI,OACjCQ,EAAOE,KAAO,EAAKd,cAAcE,MACjCU,EAAOE,KAAO,EAAKd,cAAcC,KACjC,CACAtB,EAAQ2B,QAAU,6CAClB,IAEe,OADFjF,IAAKC,WAEdqD,EAAQ2B,QAAU,8CAEpB,MAAO7F,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,IAI9D,MAAO,CACL4F,KAAM1B,EAAQ0B,KACdC,QAAS3B,EAAQ2B,QACjBlJ,SAAUwJ,EAAO3B,IACjB5H,UAAWuJ,EAAOE,U,+BAwDtB,OACE,6BACE,6BACE,kBAAC,IAAD,CACEC,aAAc3G,KAAKrE,MAAMgL,aACzBC,sBARoB,CAC1BN,MAAO,CAAC,aAQFO,SAAU7G,KAAKsE,yBACfkB,YAAaxF,KAAKwF,YAClB7B,IAAK3D,KAAKoF,cACV0B,sBAAuB,CACrBhI,UAAW,oDACXiI,WAAY,2BACZC,iBAAkB,4C,GAlIU7C,c,YCLQA,Y,yECF5C8C,EAAMC,IAAMC,OAAO,CACvBC,QAAS,oCAwCIC,EAJF,CACXC,kBAlC+B,SAACzC,EAAK6B,EAAKa,GAE1C,OADAzL,QAAQC,IAAI,aAAcwL,GACnBN,EACJO,IADI,qDAPG,eAOH,gBAEsD3C,EAFtD,gBAEiE6B,EAFjE,iBAE6Ea,GAChF,CACEE,QAAS,CACP,eAAgB,sBAIrB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,QCzBhBQ,E,kDACJ,WAAYxM,GAAQ,IAAD,uBACjB,cAAMA,IAyGRyM,SAAW,SAACC,GACVvM,QAAQC,IAAI,qBAAsBsM,GAClC,IAAIC,GAAU,EAGd,IACE,GAAID,GAAgC,kBAAbA,EAAuB,CAC5C,IAAIE,EAAgBF,EAAS5M,MAC3B,qEAyBF,GAtBI8M,IAQFF,GAPAE,EAAgBA,EAAczI,KAAI,SAAC0I,GAIjC,OAHIA,GAAuB,GAAfA,EAAKC,SACfD,EAAO,IAAMA,GAERA,MAGgBE,MAAM,EAAG,GAAGC,KAAK,KAGxCJ,EAAcE,QAAU,GACxBF,EAAc,IACdA,EAAc,KAEdD,GAAU,EACVD,GAAY,IAAME,EAAcG,MAAM,EAAG,GAAGC,KAAK,MAEnD7M,QAAQC,IAAI,aAAcsM,MAG5BA,EAAWO,IAAOP,EAAU,qBACdQ,UACZ,KAAM,iBAAmBR,OAG3BC,EAAU,EAAK3C,MAAMmD,oBAOrB,EAAKC,qBAAuBV,EAC9B,EAAKC,QAAUA,EAEf,EAAKU,6BACL,MAAO3I,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA3JzC,EA+JnB4I,gBAAkB,SAACtN,EAAOuN,EAAcC,GACtC,OACE,yBAAKzF,MAAM,oCACT,2CACO,cAAGgC,QAAH,EAAY0D,QAAZ,6CAAyCzN,GADhD,CAEE+H,MAAM,0DACNnF,KAAK,UAEP,yBAAKmF,MAAM,sBACT,4BACEA,MAAM,kEACNnF,KAAK,SACLmH,QAASwD,GAET,uBAAGxF,MAAM,sCA7KA,EA0LnB2F,uBAAyB,WACvB,IACM,EAAK1D,MAAMmD,qBACP,EAAKC,sBACL,EAAKA,qBAAqBO,IAAI,CAChCC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,YAAa,IAIjB,IAAIC,EAAc,EAAKC,sBACvB,EAAKjO,MAAMkO,cACP,EAAKd,qBAAsBY,GAC9B,EAAKhE,MAAMmD,qBAEd,MAAOzI,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAE1D,EAAKyJ,SAAS,CAAEhB,qBAAsB,EAAKnD,MAAMmD,uBA3MjD,EAAKnD,MAAQ,CACXmD,qBAAqB,GAGvB,EAAKiB,iBAAmB,KACxB,EAAKzB,QAAU,EAAK3C,MAAMmD,oBAC1B,IACI,EAAKC,qBAAuBH,IAAO,EAAKjN,MAAMoB,MAC9C,EAAKiN,iBAAmB,EAAKjB,qBAAqBkB,YACpD,MAAO5J,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAbzC,S,gEAkBjBL,KAAKgJ,+B,yCAEYkB,GACjBpO,QAAQC,IAAI,YAAaiE,KAAKrE,MAAMqB,UAEpClB,QAAQC,IAAI,aAAciE,KAAKrE,MAAMsB,WAGnCiN,EAAUlN,WAAagD,KAAKrE,MAAMqB,UAClCkN,EAAUjN,YAAc+C,KAAKrE,MAAMsB,WAEnC+C,KAAKmK,sC,sCAIOJ,GACd/J,KAAK+J,iBAAmBA,EAEQ,WAA5BA,EAAiBlC,OAEjB7H,KAAKgK,iBAA2D,GAAxCI,KAAKC,MAAMrK,KAAKrE,MAAMsB,UAAY,IAE1D+C,KAAKgK,iBAAmBD,EAAiBO,UAAY,GAEvD,IAAIX,EAAc3J,KAAK4J,sBACvB5J,KAAKrE,MAAMkO,cAAc7J,KAAK+I,qBAAsBY,EAAa3J,KAAKsI,W,4CAIpExM,QAAQC,IAAI,mBAAoBiE,KAAKgK,kBACrC,IAAIO,EAAoBvK,KAAK+I,qBAAqByB,QAAQnM,KAAM2B,KAAKgK,iBAAkB,WAAWS,OAAO,uBACrGd,EAAcf,IAAO8B,IAAIH,GAE7B,OADAzO,QAAQC,IAAI,YAAa4N,GAClBA,I,0DAGwB,IAAD,OAClC7N,QAAQC,IAAI,qCACV,IAAI4O,EAAY3K,KAAK+I,qBAAqB6B,OAE5CC,EACGvD,kBAAkBtH,KAAKrE,MAAMqB,SAAUgD,KAAKrE,MAAMsB,UAAW0N,GAC7DjG,MAAK,SAACgD,GAEH,EAAKqC,kBACLrC,GACA,EAAKqC,iBAAiBe,WAAapD,EAAEoD,SAErChP,QAAQC,IACN,6DAGF,EAAKgP,gBAAgBrD,MAGxBxC,OAAM,SAAC7E,IACHvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACxD,IAAIsJ,EAAc,EAAKC,sBACvB,EAAKjO,MAAMkO,cAAc,EAAKd,qBAAsBY,EAAa,EAAKrB,c,mDAIhD,IAAD,OAC3BxM,QAAQC,IAAI,sBACV,IAAI4O,EAAY3K,KAAK+I,qBAAqB6B,OAC5C,GAAI5K,KAAK+J,kBAELY,GAAa3K,KAAK+J,iBAAiBiB,WACnCL,GAAa3K,KAAK+J,iBAAiBkB,QAInC,OAFAnP,QAAQC,IAAI,yCACZiE,KAAK+K,gBAAgB/K,KAAK+J,kBAK5Bc,EACKvD,kBAAkBtH,KAAKrE,MAAMqB,SAAUgD,KAAKrE,MAAMsB,UAAW0N,GACjEjG,MAAK,SAACgD,GACL,EAAKqD,gBAAgBrD,MAEtBxC,OAAM,SAAC7E,IACHvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACxD,IAAIsJ,EAAc,EAAKC,sBACvB,EAAKjO,MAAMkO,cAAc,EAAKd,qBAAsBY,EAAa,EAAKrB,c,+BA4G5ExM,QAAQC,IAAI,+BADL,MAEaiE,KAAKrE,MAAjBuP,EAFD,EAECA,EAAGjK,EAFJ,EAEIA,KACX,OACE,yBAAKyC,MAAM,sBACT,yBAAKA,MAAM,6DACT,2BAAOA,MAAM,WAAWwH,EAAE,4DAC1B,4BACExH,MACE1D,KAAK2F,MAAMmD,oBACP,2BACA,mCAENpD,QAAS1F,KAAKqJ,wBAEb6B,EAAE,6FAIP,kBAAC,IAAD,CACEC,SAAS,QACTC,OAAQnK,EAAKC,SACbkH,SAAUpI,KAAKoI,SACfiD,aAAcrL,KAAKrE,MAAMoB,KACzBuO,WAAW,aACXC,aAAYvL,KAAK2F,MAAMmD,qBAAsB,QAC7C0C,eAAe,EACfhG,YAAaxF,KAAKiJ,gBAClBwC,WAAY,CACVhG,YAAazF,KAAK2F,MAAMmD,oBACpBoC,EAAE,gFACFA,EAAE,sDACNQ,UAAW1L,KAAK2F,MAAMmD,oBAAsB,OAAS,kB,GAlPlC6C,iBA0PhBC,gBAAkBzD,G,kCC7P3B0D,E,kDACJ,WAAYlQ,GAAQ,IAAD,uBACjB,cAAMA,IA4XRmQ,WAAa,WACXhQ,QAAQC,IAAI,qBAEZ,IACE,IAAIgQ,EAAW,EAAKC,UAAU5K,MAAK,SAAC2K,GAClC,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAGhC7J,EAAO2J,EAASG,MAAM9K,MAAK,SAACgB,GAC9B,OAAOA,EAAKd,KAAO,EAAKqE,MAAMwG,kBAG1BC,EAAgChK,EAAhCgK,MAAOvL,EAAyBuB,EAAzBvB,MAAO1D,EAAkBiF,EAAlBjF,MAAOK,EAAW4E,EAAX5E,OAEvB6O,EAASjK,EAAKkK,QAAQlL,MAAK,SAACmL,GAC9B,OAAOA,EAAEjL,KAAO,EAAKqE,MAAM6G,oBAG7BJ,GAASC,EAAOD,MAEhB,IACIK,EAAqB,GACrBC,EAAsB,EAC1B,GACoC,yCAAlC,EAAK/G,MAAMsG,oBACoB,sBAA/B,EAAKtG,MAAM6G,iBACX,CACA,IAAIG,EAAcvK,EAAKkK,QAAQlL,MAAK,SAACmL,GACnC,MARmB,mCAQZA,EAAEjL,MAEPqL,IACFF,EAAqBE,EAAYC,KACjCF,EAAsBC,EAAYP,OAItC,EAAKzQ,MAAMkR,UAAU,CACnBZ,mBAAoB,EAAKtG,MAAMsG,mBAC/BE,eAAgB,EAAKxG,MAAMwG,eAC3BK,iBAAkB,EAAK7G,MAAM6G,iBAC7BM,qBAAsBf,EAASa,KAC/BG,mBAAoBV,EAAOO,KAC3BR,QACAvL,QACA1D,QACAK,SACAwP,iBA1BqB,iCA2BrBP,qBACAC,wBAEF,MAAOrM,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAhbzC,EAscnB4M,kBAAoB,SAACC,GACnB,IAAIC,EAAaD,EAAYE,OAAOC,MAChCtB,EAAW,EAAKC,UAAU5K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO6L,KACnD,GAAIpB,EAAU,CACZ,IAAI3J,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMwG,kBACrD/J,IACHA,EAAO2J,EAASG,MAAM,IAExB,IAEIqB,EAFAC,EAASpL,EAAKd,GAGhB+K,EAAS,KAEuB,uBAAhC,EAAK1G,MAAM6G,kBACuB,uBAAlC,EAAK7G,MAAMsG,qBAEXI,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAM6G,qBAEnDH,KACHA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,eACrBrL,EAAKkK,QAAQ7D,OAAS,IACnC4D,EAASjK,EAAKkK,QAAQ,IAI1BiB,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZmC,mBAAoBkB,EACpBhB,eAAgBqB,EAChBhB,iBAAkBe,MApeL,EAyenBG,cAAgB,SAACR,GACf,IAAInB,EAAW,EAAKC,UAAU5K,MAC5B,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMsG,sBAE7B,GAAIF,EAAU,CACZ,IAAIyB,EAASN,EAAYE,OAAOC,MAC5BjL,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAOkM,KAE/C,GAAIpL,EAAM,CACR,IAAImL,EACFlB,EAAS,KAUX,GARkC,uBAAhC,EAAK1G,MAAM6G,kBACuB,uBAAlC,EAAK7G,MAAMsG,qBAEXI,EAASjK,EAAKkK,QAAQlL,MACpB,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAM6G,sBAI1BH,IACCA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,eACzBrL,EAAKkK,QAAQ7D,OAAS,IACnC4D,EAASjK,EAAKkK,QAAQ,IAI1BiB,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZqC,eAAgBqB,EAChBhB,iBAAkBe,OAxgBP,EA8gBnBI,gBAAkB,SAACT,GACjB,IAAInB,EAAW,EAAKC,UAAU5K,MAC5B,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMsG,sBAE7B,GAAIF,EAAU,CACZ,IAAI3J,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMwG,kBAC1D,GAAI/J,EAAM,CACR,IAAImL,EAAWL,EAAYE,OAAOC,MAC9BhB,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAOiM,KAC1ClB,IACHA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,cAEtCF,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZ0C,iBAAkBe,OA7hBP,EAmiBnBK,oBAAsB,SAACvN,EAAG0L,GACxB1L,EAAEwN,iBAEE9B,GACF,EAAKjC,SAAS,CACZgE,UAAW/B,EAASgC,KAAKnB,KACzBoB,iBAAkBjC,EAASgC,KAAK/I,YAChCiJ,YAAalC,EAASgC,KAAKG,OAC3BC,aAAa,KA3iBA,EAgjBnBC,kBAAoB,SAAC/N,EAAGgM,GACtBhM,EAAEwN,iBAEExB,GACF,EAAKvC,SAAS,CACZgE,UAAWzB,EAAO0B,KAAKnB,KACvBoB,iBAAkB3B,EAAO0B,KAAK/I,YAC9BiJ,YAAa5B,EAAO0B,KAAKG,OACzBC,aAAa,KAxjBA,EA6jBnBE,aAAe,SAAChO,GACd,EAAKyJ,SAAS,CACZqE,aAAa,KA/jBE,EAmkBnBG,kBAAoB,SAAC3S,GACnB,OACE,kBAAC,IAAD,CACE4S,OAAQ5S,EAAMwS,YACdK,aAAc7S,EAAM0S,aACpBI,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAe/H,EAAMiR,OAEjC,yBAAKlJ,MAAM,6BACT,uBAAGxB,MAAO,CAAE2M,WAAY,aAAelT,EAAMqJ,aAC7C,kBAAC8J,EAAA,EAAD,KACGnT,EAAMuS,QACLvS,EAAMuS,OAAOpO,KAAI,SAAC1B,EAAK2Q,GACrB,OACE,kBAACD,EAAA,EAASE,KAAV,CAAeC,IAAK,gBAAkBF,GACpC,yBAAKG,UAAU,gBAAgB9Q,IAAKA,EAAK+Q,IAAKxT,EAAMiR,eAxlBnD,EAkmBnBwC,eAAiB,SAACzT,GAAW,IACnBuP,EAAM,EAAKvP,MAAXuP,EACR,OACE,yBAAKxH,MAAM,sCACR,EAAKsI,UACH5K,MAAK,SAAC2K,GACL,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAEnCC,MAAMpM,KAAI,SAACsC,EAAM2M,GAChB,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,QAAUF,GAChD,2BACErL,MAAM,4CACNnF,KAAK,QACL8O,MAAOjL,EAAKd,GACZ+N,QAAS,EAAK1J,MAAMwG,iBAAmB/J,EAAKd,GAC5C8G,SAAU,EAAKsF,gBAEjB,0BAAMhK,MAAM,uGACTtB,EAAKwK,KADR,IACc,6BACZ,8BACGxK,EAAKgK,MADR,IACgBlB,EAAE,sBAAQ,KAE1B,uBAAGxH,MAAM,uCACNtB,EAAKkN,iBA1nBL,EAooBnBC,YAAc,SAAC5T,GAAW,IAChBuP,EAAM,EAAKvP,MAAXuP,EACR,OACE,6BACG,EAAKc,UACH5K,MAAK,SAAC2K,GACL,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAEnCC,MAAMpM,KAAI,SAACsC,EAAM2M,GAChB,OACE,yBAAKrL,MAAM,qBAAqBuL,IAAK,QAAUF,GAC7C,2BAAOrL,MAAM,mBACX,2BACEA,MAAM,4CACNkJ,KAAK,aACLrO,KAAK,QACL8O,MAAOjL,EAAKd,GACZ+N,QAAS,EAAK1J,MAAMwG,iBAAmB/J,EAAKd,GAC5C8G,SAAU,EAAKsF,gBAEjB,yBAAKhK,MAAM,qDACT,uBAAGA,MAAM,KAAK8L,kBAAgB,SAAIC,oBAAkB,YAErDrN,EAAKwK,KACL,MACD,uBAAGlJ,MAAM,uCACNtB,EAAKkN,SADR,IACmBpE,EAAE,uBAChB,IACJ9I,EAAKgK,MAjBR,IAiBgBlB,EAAE,sBAAQ,WAhqBrB,EAyqBnBwE,cAAgB,SAAC/T,GAAW,IAClBuP,EAAM,EAAKvP,MAAXuP,EACFoB,EAAU3Q,EAAM2Q,QACtB,OAAKA,GAAWA,EAAQ7D,QAAU,EACzB,KAGP,kBAAC,IAAMkH,SAAP,KACE,wBAAIjM,MAAM,kDACPwH,EAAE,2DAEL,yBAAKxH,MAAM,sCACR4I,EAAQxM,KAAI,SAACuM,EAAQ0C,GACpB,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,UAAYF,GAClD,2BACErL,MAAM,6CACNnF,KAAK,QACL8O,MAAOhB,EAAO/K,GACd+N,QAAS1T,EAAM6Q,mBAAqBH,EAAO/K,GAC3C8G,SAAUzM,EAAMgS,kBAGlB,0BAAMjK,MAAM,8JACV,8BACG2I,EAAOO,KAEO,mCAAdP,EAAO/K,GACN,oCACE,6BACA,8BAAO4J,EAAE,wEAEO,GAAhBmB,EAAOD,MACT,oCACE,6BACA,kCACIC,EAAOD,MADX,IACmBlB,EAAE,wBAIvB,8BAAO,UAIZmB,EAAO0B,KACN,uBACErK,MAAM,qGACNgC,QAAS,SAACrF,GAAD,OAAO1E,EAAMyS,kBAAkB/N,EAAGgM,KAF7C,KAME,YA5tBC,IAETnB,EAAMvP,EAANuP,EAFS,OAIjB,EAAKc,UAAY,CACf,CACE1K,GAAI,uCACJsL,KAAM1B,EAAE,kCACR6C,KAAM,CACJnB,KAAM1B,EAAE,8EACRlG,YAAakG,EACX,srCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,+BAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,OACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAMV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAMV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAMV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,oCAQd,CACE1C,GAAI,qBACJsL,KAAM1B,EAAE,8CACR6C,KAAM,CACJnB,KAAM1B,EAAE,4DACRlG,YAAakG,EACX,siDAEFgD,OAAQ,CACNlK,+BACAA,+BACAA,iCAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAiBV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAiBV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,KACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM,iCAASR,MAAO,GACnC,CACE9K,GAAI4J,EAAE,kCACN0B,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,qjCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,oCAmBd,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACR6C,KAAM,CACJnB,KAAM1B,EAAE,8EACRlG,YAAakG,EACX,y1CAEFgD,OAAQ,CACNlK,8BACAA,8BACAA,gCAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,KAErD,CACE9K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,KACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,KAErD,CACE9K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,KACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,QAM3D,EAAKzG,MAAQ,CACXsG,mBAAoBtQ,EAAMiU,0BAC1BzD,eAAgBxQ,EAAMkU,sBACtBrD,iBAAkB7Q,EAAMmU,wBACxB3B,aAAa,EACbL,UAAW,GACXE,iBAAkB,GAClBC,YAAa,IAzXE,E,+DAobA/D,EAAW6F,GAE1B/P,KAAK2F,MAAMsG,qBAAuB8D,EAAU9D,oBAC5CjM,KAAK2F,MAAMwG,iBAAmB4D,EAAU5D,gBACxCnM,KAAK2F,MAAM6G,mBAAqBuD,EAAUvD,kBAE1CxM,KAAK8L,e,0CAKP9L,KAAK8L,e,+BAsSG,IAAD,OACPhQ,QAAQC,IAAI,+BADL,IAECmP,EAAMlL,KAAKrE,MAAXuP,EACJ9I,EAAOpC,KAAKgM,UACb5K,MAAK,SAAC2K,GACL,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAEnCC,MAAM9K,MAAK,SAACgB,GACX,OAAOA,EAAKd,KAAO,EAAKqE,MAAMwG,kBAE9BG,EAAU,KAKd,OAJIlK,IACFkK,EAAUlK,EAAKkK,SAIf,kBAAC,IAAMqD,SAAP,KACE,wBAAIjM,MAAM,MAAV,oDACA,yBAAKA,MAAM,sCACR1D,KAAKgM,UAAUlM,KAAI,SAACiM,EAAUgD,GAC7B,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,YAAcF,GACpD,2BACErL,MAAM,4CACNnF,KAAK,QACL8O,MAAOtB,EAASzK,GAChB+N,QAAS,EAAK1J,MAAMsG,qBAAuBF,EAASzK,GACpD8G,SAAU,EAAK6E,oBAEjB,0BAAMvJ,MAAM,uGACTqI,EAASa,MAEZ,uBACElJ,MAAM,qGACNgC,QAAS,SAACrF,GAAD,OAAO,EAAKuN,oBAAoBvN,EAAG0L,KAF9C,UAUR,yBAAKrI,MAAM,aACT,yBAAKA,MAAM,IACT,wBAAIA,MAAM,kDACPwH,EAAE,0CAGP,yBAAKxH,MAAM,8CACT,0BAAMA,MAAM,0FACTwH,EAAE,2EAIT,uBAAMqE,YAAN,MACA,uBAAMG,cAAN,CACEpD,QAASA,EACTE,iBAAkBxM,KAAK2F,MAAM6G,iBAC7BmB,gBAAiB3N,KAAK2N,gBACtBS,kBAAmBpO,KAAKoO,oBAG1B,uBAAME,kBAAN,CACEH,YAAanO,KAAK2F,MAAMwI,YACxBE,aAAcrO,KAAKqO,aACnBzB,KAAM5M,KAAK2F,MAAMmI,UACjB9I,YAAahF,KAAK2F,MAAMqI,iBACxBE,OAAQlO,KAAK2F,MAAMsI,mB,GAzyBCtC,iBAgzBfC,gBAAkBC,GCvzBpBmE,G,OAAe,SAAC/O,GAC3B,IACE,IAAIgP,EAAQjM,OAAuBiM,MAAM,KACrCC,EAASD,EAAM,GAEG,OAAlBhP,EAAKC,WACPgP,GAAU,IAAMjP,EAAKC,UAGvB,IAAK,IAAIiP,EAAI,EAAGA,EAAIF,EAAMxH,OAAQ0H,IAChCD,GAAU,IAAMD,EAAME,GAGxB,OAAOD,EACP,MAAO7P,GAEP,OADCvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACjD2D,UAIEoM,EAAc,SAACC,GAC1B,IAAK,IAEDtT,EAiBEsT,EAjBFtT,KACAuT,EAgBED,EAhBFC,WACAC,EAeEF,EAfFE,YACArO,EAcEmO,EAdFnO,MACAsO,EAaEH,EAbFG,UACAC,EAYEJ,EAZFI,UACAC,EAWEL,EAXFK,SACAC,EAUEN,EAVFM,UACAjT,EASE2S,EATF3S,eACAE,EAQEyS,EARFzS,gBACAmF,EAOEsN,EAPFtN,WACAD,EAMEuN,EANFvN,OACA8N,EAKEP,EALFO,cACAC,EAIER,EAJFQ,wBACAC,EAGET,EAHFS,YACA3P,EAEEkP,EAFFlP,eACAD,EACEmP,EADFnP,SAGE6P,EAAQ,IAMZ,OALAA,GAAK,oBAAiBP,EAAjB,sBAAwCC,EAAxC,iBAA0D1T,EAA1D,qBAA2E2T,EAA3E,sBAAiGC,EAAjG,2BAA6HjT,EAA7H,4BAA+JE,EAA/J,uBAA6LoT,mBAChMjO,GADG,mBAEOiO,mBACVlO,GAHG,0BAIc8N,EAJd,oCAIuDC,EAJvD,wBAI8FC,EAJ9F,2BAI4H3P,EAJ5H,qBAIuJD,EAJvJ,uBAI8KoP,EAJ9K,wBAIwMC,EAJxM,kBAI6NrO,GAElO,MAAO7B,GAEP,OADCvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACjD,OAIE4Q,EAAe,SAACC,GAC3B,IAAIC,EAAS,CACX,CACE7P,GAAI,eACJsL,KAAM,SAER,CACEtL,GAAI,eACJsL,KAAM,SAER,CACEtL,GAAI,OACJsL,KAAM,QAER,CACEtL,GAAI,8BACJsL,KAAM,WAcV,OAVIsE,IACFC,EAAOC,KAAK,CACV9P,GAAI,0BACJsL,KAAM,gBAERuE,EAAOC,KAAK,CACV9P,GAAI,0BACJsL,KAAM,iBAGHuE,GAEIE,EAA4B,SAAC5Q,GACxC,IACE,IAAIsC,EAAa,GACbD,EAAS,GAEb,OAAQrC,GACN,IAAK,eACHsC,EAAa,UACbD,EAAS,UAET,MACF,IAAK,eACHC,EAAa,UACbD,EAAS,UAET,MAEF,IAAK,OACHC,EAAa,UACbD,EAAS,UACT,MACF,IAAK,8BAKL,IAAK,0BACHC,EAAa,UACbD,EAAS,UAET,MACF,IAAK,0BACHC,EAAa,UACbD,EAAS,UAET,MACF,QACE,KAAM,wGAA0BrC,EAEpC,MAAO,CACLsC,aACAD,UAEF,MAAOzC,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KClHtDiR,E,kDACJ,WAAY3V,GAAQ,IAAD,uBACjB,cAAMA,IAwCRE,uBAAyB,WACvBC,QAAQC,IAAI,2BACZ,IAAIoB,EAAQ7B,OAAOU,WACnB,EAAKuV,eAAiBpU,EAAQ,KA5Cb,EA+CnBqU,eAAiB,WACf1V,QAAQC,IAAI,aACZ,IACE,EAAK0V,QAAQpU,QAAQqU,eAAe,CAClCC,SAAU,SACVC,MAAO,MACPC,OAAQ,YAEV,MAAOxR,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAxDzC,EA4DnByR,YAAc,SAACzR,GACbA,EAAEwN,iBACF,IACEvS,OAAOyW,SAASC,OAChB,MAAO3R,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAjEzC,EAqEnB4R,mBAAqB,SAAC5R,EAAG0O,GACvB1O,EAAEwN,iBAIF,IAFA,IAAIqE,EAAgB,YAAO,EAAKvM,MAAMuM,kBAE7B/B,EAAI,EAAGA,EAAI+B,EAAiBzJ,OAAQ0H,IAEzC+B,EAAiB/B,GADfA,IAAMpB,EAMR,EAAKwC,eACP,EAAKzH,SACH,CAAEoI,iBAAkBA,GACpB,EAAKV,gBAGP,EAAK1H,SAAS,CAAEoI,iBAAkBA,KAvFnB,EA2FnBjF,kBAAoB,SAACc,GACnB,EAAKoE,aAAepE,EACpB,EAAKpS,MAAMsR,kBAAkBc,IA7FZ,EAgGnBqE,iBAAmB,SAAC/R,GAClBA,EAAEwN,iBACE,EAAKsE,cAAgB,EAAKA,aAAazF,oBAAsB,EAC/D,EAAK5C,SAAS,CACZqE,aAAa,EACbzB,oBAAqB,EAAKyF,aAAazF,sBAGzC,EAAK/Q,MAAMyW,oBAxGI,EA4GnBC,gBAAkB,SAAChS,GACjBA,EAAEwN,iBACF,IAAIyE,EAAoB,CACtB9F,iBAAkB,EAAK2F,aAAanF,iBACpCD,mBAAoB,EAAKoF,aAAa1F,mBACtCL,MAAO,EAAK+F,aAAa/F,MAAQ,EAAK+F,aAAazF,qBAErD,EAAK/Q,MAAMyW,iBAAiBE,IAnHX,EAsHnBC,4BAA8B,SAAClS,GAC7BA,EAAEwN,iBACF,EAAKlS,MAAMyW,oBAxHM,EA+JnBI,aAAe,WACC,EAAK7W,MAAXuP,EAER,OACE,yBAAKxH,MAAM,0DACR,EAAKyN,OAAOrR,KAAI,SAACoC,EAAO6M,GACvB,OACE,2BAAOrL,MAAM,SAASuL,IAAK,SAAWF,GACpC,yBACErL,MACE,qEACC,EAAK/H,MAAM8W,kBAAoBvQ,EAAMZ,GAClC,0BACA,KAGN,yBAAKoC,MAAM,iCACT,yBACEtF,IACE4F,0BAEA9B,EAAMZ,GACN,OAEFoC,MAAM,6CAGV,2BACEA,MAAM,8CACNnF,KAAK,QACLqO,KAAK,eACLyC,QAAS,EAAK1T,MAAM8W,kBAAoBvQ,EAAMZ,GAC9C8G,SAAU,SAAC/H,GAAD,OAAO,EAAK1E,MAAM+W,eAAerS,EAAG6B,EAAMZ,OAEtD,uBAAGoC,MAAM,sGAEX,uBAAGA,MAAM,cAAcxB,MAAO,CAAE4B,SAAU,SACvC5B,EAAM0K,YApMF,EAkQnB+F,eAAiB,WAAO,IACdzH,EAAM,EAAKvP,MAAXuP,EAER,OACE,yBAAKxH,MAAM,0DACR,EAAK/H,MAAMsD,SAASa,KAAI,SAAC8S,EAAS7D,GACjC,OACE,2BAAOrL,MAAM,UAAUuL,IAAK,WAAaF,GACvC,yBACErL,MACE,kEACCkP,EAAQnQ,UAAY,0BAA4B,KAGnD,yBAAKiB,MAAM,iCACT,yBACEtF,IACE4F,iCAEA4O,EAAQtR,GACR,OAEFoC,MAAM,6CAGV,2BACEA,MAAM,8CACNnF,KAAK,WACL8Q,QAASuD,EAAQnQ,UACjB2F,SAAU,SAAC/H,GAAD,OAAO,EAAK1E,MAAMkX,iBAAiBxS,EAAGuS,EAAQtR,OAE1D,uBAAGoC,MAAM,sGAEX,uBAAGA,MAAM,cAAcxB,MAAO,CAAE4B,SAAU,SACvCoH,EAAE0H,EAAQhG,aApSN,EA4TnByB,aAAe,SAAChO,GACd,EAAKyJ,SAAS,CACZqE,aAAa,KA9TE,EAkUnB2E,sBAAwB,SAACzS,GACvBA,EAAEwN,iBACF,EAAK/D,SAAS,CACZiJ,yBAAyB,KArUV,EAyUnBC,yBAA2B,SAAC3S,GAC1B,EAAKyJ,SAAS,CACZiJ,yBAAyB,KA3UV,EA+UnBE,uBAAyB,SAACC,EAAe7S,GACvC,EAAK8S,2BAA6BD,GAhVjB,EAmVnBE,uBAAyB,SAAC/S,GACpB,EAAK8S,4BAA8B,EAAKE,eAAe5K,SACzD,EAAK0K,2BAA6B,EAAKE,eAAe5K,OAAS,GAEjE,IAAI6K,EAAO,EAAKD,eAAe,EAAKF,4BAEpC,EAAKH,2BACL,EAAKrX,MAAM4X,gBAAgBD,IA1VV,IAGTpI,EAAMvP,EAANuP,EAHS,OAKjB,EAAKuG,QAAUzT,IAAMC,YACrB,EAAKkU,aAAe,KACpB,EAAKhB,OAASF,GAAa,GAE3B,EAAKtL,MAAQ,CACXuM,iBAAkB,EAAC,GAAM,GAAO,GAAO,GAAO,GAC9C/D,aAAa,EACb4E,yBAAyB,EACzBrG,oBAAqB,GAGvB,EAAK2G,eAAiB,CACpBnI,EAAE,mNACFA,EAAE,0LACFA,EAAE,qFACFA,EAAE,0FACFA,EAAE,yJACFA,EAAE,6EACFA,EAAE,0IACFA,EAAE,oJACFA,EAAE,4KACFA,EAAE,+LAEJ,EAAKiI,2BAA6B,EAClC,EAAK5B,gBAAiB,EA7BL,E,gEAiCjBjW,OAAOyE,iBAAiB,SAAUC,KAAKnE,wBACvCmE,KAAKnE,2B,6CAILP,OAAO2E,oBAAoB,SAAUD,KAAKnE,0B,2CAqFlB,IAAD,OAALqP,EAAK,EAALA,EACdsI,EAAa,SAAC5G,EAAM6G,GACtB,MAAO,CAAE7G,KAAMA,EAAM6G,KAAMA,IAU7B,MAPY,CACVD,EAAWtI,EAAE,kCAAU,iBACvBsI,EAAWtI,EAAE,kCAAU,kBACvBsI,EAAWtI,EAAE,oDAAa,UAC1BsI,EAAWtI,EAAE,wCAAW,cAGbpL,KAAI,SAAC0I,EAAMuG,EAAO2E,GAC7B,IAAIC,EAAYC,IACd,yGACA,CACEC,OAAQ,EAAKlO,MAAMuM,iBAAiBnD,KAGxC,OACE,wBAAIrL,MAAM,QAAQuL,IAAK,WAAaF,GAClC,uBACEG,UAAWyE,EACXG,KAAK,SACLC,KAAK,IACLrO,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG0O,KAE3C,0BAAMrL,MAAO,MAAQ8E,EAAKiL,OAC1B,6BACCjL,EAAKoE,Y,+BAqMN,IAAD,OACP9Q,QAAQC,IAAI,4BADL,MAEaiE,KAAKrE,MAAjBuP,EAFD,EAECA,EAAGjK,EAFJ,EAEIA,KAEX,OACE,kBAAC,IAAM0O,SAAP,KACE,yBAAKjM,MAAM,oFACT,wBAAIA,MAAM,kFACR,wBAAIA,MAAM,0BACR,uBACEqQ,KAAM/D,EAAa/O,GACnByC,MAAM,yGACNoQ,KAAK,UAEL,yBACE1V,IACE4F,uCAEFN,MAAM,gBAIX1D,KAAKgU,kBAAkBhU,KAAKrE,SAGjC,yBACE+H,MAAM,6CACNC,IAAK3D,KAAKyR,SAEV,yBAAK/N,MAAM,+CACT,yBACEpC,GAAG,YACHoC,MAAM,mFAEN,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,yBAAKxO,MAAM,cACT,wBAAIA,MAAM,MAAMwH,EAAE,oCAEpB,yBAAKxH,MAAM,sBACT,kBAAC,EAAD,CACE3G,KAAMiD,KAAKrE,MAAMoB,KACjBC,SAAUgD,KAAKrE,MAAMqB,SACrBC,UAAW+C,KAAKrE,MAAMsB,UACtB4M,cAAe7J,KAAKrE,MAAMkO,iBAG9B,yBAAKnG,MAAM,sBACT,6BACE,2BAAOA,MAAM,WAAWwH,EAAE,mEAU5B,kBAAC,EAAD,CACEvE,aAAc3G,KAAKrE,MAAMsK,KACzBhB,eAAgBjF,KAAKrE,MAAMsJ,kBAM/B,4BACEvB,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,8DALL,IAKuB,uBAAGxH,MAAM,wBAGlC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,wBAAIxO,MAAM,MAAV,mCACC1D,KAAKwS,eA2CN,wBAAI9O,MAAM,+BAA+BwH,EAAE,qDAC1ClL,KAAK2S,iBACN,4BACEjP,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,gFALL,IAK0B,uBAAGxH,MAAM,wBAGrC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,kBAAC,EAAD,CACEtC,0BACE5P,KAAKrE,MAAMiU,0BAEbC,sBAAuB7P,KAAKrE,MAAMkU,sBAClCC,wBAAyB9P,KAAKrE,MAAMmU,wBACpCjD,UAAW7M,KAAKiN,oBAGlB,4BACEvJ,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,oEALL,IAKwB,uBAAGxH,MAAM,wBAGnC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,wBAAIxO,MAAM,MAAMwH,EAAE,yCAElB,yBAAKxH,MAAM,sBACT,yBAAKA,MAAM,6DACT,2BAAOA,MAAM,WAAWwH,EAAE,mCAC1B,4BACExH,MAAM,mCACNgC,QAAS1F,KAAK8S,uBAEb5H,EAAE,+EAIP,8BACExH,MAAM,uDACNuQ,KAAK,IACL5G,MAAOrN,KAAKrE,MAAMoC,MAClBqK,SAAUpI,KAAKrE,MAAMuY,kBAGzB,yBAAKxQ,MAAM,sBACT,2BAAOA,MAAM,WAAWwH,EAAE,yCAC1B,8BACExH,MAAM,uDACNuQ,KAAK,IACL5G,MAAOrN,KAAKrE,MAAMiF,MAClBwH,SAAUpI,KAAKrE,MAAMwY,kBAGzB,4BACEzQ,MAAM,oFACNnF,KAAK,SACLmH,QAAS1F,KAAKoS,kBAEblH,EAAE,oEALL,IAKwB,uBAAGxH,MAAM,yBAKrC,yBAAKA,MAAM,8BACT,yBAAKA,MAAM,8DACT,wBAAIA,MAAM,kFACR,wBAAIA,MAAM,SACR,uBACEA,MAAM,uEACNoQ,KAAK,SACLC,KAAK,IACLrO,QAAS1F,KAAK8R,aAEd,0BAAMpO,MAAM,mBACZ,6BACCwH,EAAE,yEAGP,wBAAIxH,MAAM,SACR,uBACEA,MAAM,uEACNoQ,KAAK,SACLC,KAAK,IACLrO,QAAS1F,KAAKoS,kBAEd,0BAAM1O,MAAM,wBACZ,6BACA,kCAAQwH,EAAE,yCAAkB,IAC5B,8BACG,IACAlL,KAAKrE,MAAMyQ,MAFd,IAEsBlB,EAAE,2BAMhC,yBAAKxH,MAAM,qBACT,uBACEqQ,KAAK,IACLrO,QAAS1F,KAAK8R,YACdpO,MAAM,uHAEN,8BACE,uBAAGA,MAAM,qBADX,IACoCwH,EAAE,yEAIxC,4BACExH,MAAM,iEACNnF,KAAK,SACLmH,QAAS1F,KAAKoS,kBAEd,0BAAM1O,MAAM,cACV,uBAAGA,MAAM,wBADX,IACuC1D,KAAKrE,MAAMyQ,MAAO,IACtDlB,EAAE,uBAEL,0BAAMxH,MAAM,eACTwH,EAAE,wCADL,IACgB,uBAAGxH,MAAM,4BAOnC,kBAAC,IAAD,CACE6K,OAAQvO,KAAK2F,MAAMwI,YACnBK,aAAcxO,KAAKqO,aACnBI,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAewH,EAAE,gFAE7B,yBAAKxH,MAAM,cACT,4BACGwH,EAAE,qTAEL,yBAAKxH,MAAM,0BACT,yBAAKA,MAAM,YACT,yBACEA,MAAM,YACNtF,IAAK4F,gCACLmL,IAAI,GACJjN,MAAO,CAAEkS,SAAU,OAGvB,yBAAK1Q,MAAM,eACT,4BAAKwH,EAAE,mCACP,uBAAGxH,MAAM,uBACNwH,EACC,+xBAIN,yBAAKxH,MAAM,gCACT,4BACEA,MAAM,yCACNnF,KAAK,SACLmH,QAAS1F,KAAKqS,iBAEbnH,EAAE,yCAEL,6BACA,2BAAOxH,MAAM,8CAAb,IACI1D,KAAK2F,MAAM+G,oBADf,IACqCxB,EAAE,0BAK7C,yBAAKxH,MAAM,gBACT,4BACEA,MAAM,kEACNnF,KAAK,SACLmH,QAAS1F,KAAKuS,6BAEbrH,EAAE,qHAIT,kBAAC,IAAD,CACEqD,OAAQvO,KAAK2F,MAAMoN,wBACnBvE,aAAcxO,KAAKgT,yBACnBvE,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAewH,EAAE,+EAE7B,yBAAKxH,MAAM,8BACT,kBAACoL,EAAA,EAAD,CACEjI,SAAU7G,KAAKiT,uBACfoB,SAAU,KACVC,OAAO,GAENtU,KAAKqT,eAAevT,KAAI,SAACwT,EAAMvE,GAC9B,OACE,kBAACD,EAAA,EAASE,KAAV,CAAeC,IAAKF,GAClB,yBACEG,UAAU,gBACV9Q,IAAK4F,8BAEP,kBAAC8K,EAAA,EAASyF,QAAV,CAAkBC,SAAS,2BACzB,6BACE,uBAAG9Q,MAAM,uCACN4P,WASjB,yBAAK5P,MAAM,gBACT,4BACEA,MAAM,uDACNnF,KAAK,SACLmH,QAAS1F,KAAKoT,wBAEblI,EAAE,8G,GA3sBWS,iBAmtBbC,gBAAkB0F,G,qBCvtB3BmD,G,kDAGJ,WAAY9Y,GAAQ,IAAD,uBACjB,cAAMA,IAmLRuY,eAAiB,SAACQ,GAChB,IACE,EAAK5K,SAAS,CAAE/L,MAAO2W,EAAMtH,OAAOC,QACpC,MAAOhN,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAxLzC,EA4LnBkT,gBAAkB,SAACD,GACjB,IACE,EAAKxJ,SAAS,CAAE/L,MAAOuV,IACvB,MAAOjT,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAhMzC,EAoMnB8T,eAAiB,SAACO,GAChB,IACE,EAAK5K,SAAS,CAAElJ,MAAO8T,EAAMtH,OAAOC,QACpC,MAAOhN,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAxMzC,EA4MnB4E,eAAiB,SAACF,GAChB,IAGE,GAFA,EAAK4P,oBAAoB5P,GAErBA,GAASA,EAAMkB,KACN3K,OAAOC,SAASC,SACjBoZ,WAAW,eACnBtZ,OAAOuZ,KAAK,QAAS,SAAU,CAC7BC,QAAS,iBACTC,eAAgB,OAChBC,YAAajQ,EAAMkB,OAErB3K,OAAO2Z,IAAI,cAAe,kBAAmB,SAAU,CACrDC,cAAenQ,EAAMkB,QAI3B,MAAO5F,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA9NzC,EAkOnBwJ,cAAgB,SAACsL,EAAWC,EAASC,GACnC,IACE,IAAIC,EAAQH,EAAUI,SACpBzZ,QAAQC,IAAI,cAAeuZ,GAC3B,IAAI5K,EAAM0K,EAAQG,SAClBzZ,QAAQC,IAAI,YAAa2O,GACzB,EAAK8K,mBAAmBF,EAAO5K,EAAK2K,GACtC,MAAOhV,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA1OzC,EAgRnBwS,iBAAmB,SAAC6B,EAAOe,GACzB,IACMpI,EADSqH,EAAMtH,OACAiC,QAErB,EAAKvF,UAAS,SAACiG,GAAD,MAAgB,CAC5BjQ,IAAI,eACCiQ,EAAUjQ,IADZ,CAEDb,SAAU8Q,EAAUjQ,IAAIb,SAASa,KAAI,SAAC4V,GAAD,OACnCA,EAAGpU,KAAOmU,EAAV,eAA2BC,EAA3B,CAA+BjT,UAAW4K,IAAUqI,YAxRzC,EA8RnBhD,eAAiB,SAACrS,EAAGI,GACJJ,EAAE+M,OACIiC,SAEnB,EAAKsG,WAAWlV,IAlSD,EAkTnBwM,kBAAoB,SAACc,GAAU,IAE3B3B,EASE2B,EATF3B,MACAvL,EAQEkN,EARFlN,MACAoL,EAOE8B,EAPF9B,mBACAE,EAME4B,EANF5B,eACAK,EAKEuB,EALFvB,iBACAM,EAIEiB,EAJFjB,qBACAC,EAGEgB,EAHFhB,mBACOuD,EAELvC,EAFF5Q,MACQoT,EACNxC,EADFvQ,OAEF,EAAKsM,SAAS,CACZsC,QACAvL,QACAoL,qBACAE,iBACAK,mBACAM,uBACAC,qBACAuD,aACAC,iBAvUe,EA2UnB6B,iBAAmB,SAACwD,GAClB,IAAIjQ,EAAQ,KAEVA,EADEiQ,EACG,eAAQ,EAAKjQ,MAAb,GAAuBiQ,GAEvB,eAAQ,EAAKjQ,OAEpBkQ,IAAMvM,IAAI,kBAAmB,IAAIwM,MACjCD,IAAMvM,IAAI,cAAe3D,GARgB,MA0BrCA,EAfAyP,EAXqC,EAWrCA,QACFrX,EAZuC,EAYvCA,MACA6C,EAbuC,EAavCA,MACAmV,EAduC,EAcvCA,sBACA3J,EAfuC,EAevCA,MACAH,EAhBuC,EAgBvCA,mBACAE,EAjBuC,EAiBvCA,eACAK,EAlBuC,EAkBvCA,iBACAM,EAnBuC,EAmBvCA,qBACAC,EApBuC,EAoBvCA,mBACA0F,EArBuC,EAqBvCA,gBACA1N,EAtBuC,EAsBvCA,MACAjF,EAvBuC,EAuBvCA,IACAwQ,EAxBuC,EAwBvCA,WACAC,EAzBuC,EAyBvCA,YAzBuC,EAiCrC,EAAKnT,KAAKC,QAAQH,aAJbwT,EA7BgC,EA6BvCvT,MACQwT,EA9B+B,EA8BvCnT,OACAE,EA/BuC,EA+BvCA,eACAE,EAhCuC,EAgCvCA,gBAGIuD,EAAiBrB,EAAIb,SAASmC,MAAK,SAACC,GAAD,MAAgB,mBAATA,EAAEC,MAC5C0U,EAAe,CACnBtF,WACAC,YACAjT,iBACAE,kBACAmF,WAAYjD,EAAIiD,WAChBD,OAAQhD,EAAIgD,OACZ8N,cAAe9Q,EAAIb,SAASmC,MAAK,SAACC,GAAD,MAAgB,kBAATA,EAAEC,MACvCmB,UACHoO,wBAAyB/Q,EAAIb,SAASmC,MACpC,SAACC,GAAD,MAAgB,4BAATA,EAAEC,MACTmB,UACFqO,YAAahR,EAAIb,SAASmC,MAAK,SAACC,GAAD,MAAgB,gBAATA,EAAEC,MAAsBmB,UAC9DtB,iBAAgBA,GAAiBA,EAAesB,UAChDvB,SAAUD,IAAKC,UAGX+U,EAAuB,CAC3BlK,SAAUe,EACV1K,KAAM+J,EACNE,OAAQU,EACR7K,MAAOuQ,GAGHyD,EAAU,CACZC,YAAa,MACbpZ,KAAMqY,EACRrX,QACA6C,QACAmV,wBACA3J,QACAL,SAAUE,EACV7J,KAAM+J,EACNE,OAAQG,EACRtK,MAAOuQ,EACPnC,aACAC,cACAxL,MAAQ,gBAAG/H,EAAH,EAAGA,SAAUC,EAAb,EAAaA,UAAcmZ,EAA3B,4DACN5F,UAAWxT,EACXyT,UAAWxT,GACRmZ,GAHG,CAIJrR,GACJjF,IAAKkW,EACLhR,YAAaiR,GAEfJ,IAAMvM,IAAI,UAAW4M,GAErB,EAAKpM,SAAS,CAAEuM,SAAU,UA5Z1B,EAAKjZ,KAAOY,IAAMC,YAFD,IAITiN,EAAMvP,EAANuP,EACJoL,EAAe,CACjBrQ,KAAMiF,EAAE,4BACRlG,YAAakG,EAAE,4BACfhF,QAASgF,EAAE,8CACXlO,SAAU,SACVC,UAAW,SAGTsZ,EAAc,IAAIT,KACtBS,EAAYC,SAAS,GACrBD,EAAYE,WAAW,GACvBF,EAAYG,WAAW,GACrBH,EAAYI,gBAAgB,GAG5B,IAAIC,EAAiB,IAAId,KAAKS,EAAYM,WAAa,MAErD3U,EAAQ,eACRE,EAAO,CACT+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEXW,GAAS,EAEP4F,EAAcC,KAAYC,MAAMrb,EAAMJ,SAAS0b,QACrD,GAAIH,EAAa,CAIf,GAHIA,EAAY5U,QACdA,EAAQ4U,EAAY5U,OAElB4U,EAAY1U,KAEd,OADAtG,QAAQC,IAAI,QAAS+a,EAAY1U,MACzB0U,EAAY1U,MAClB,IAAK,KACHA,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,2BAChBtL,MAAO,OACPyP,WAAY,IACZC,YAAa,KAKjBuG,EAAY5F,QAC2B,SAArC4F,EAAY5F,OAAOgG,gBACrBhG,GAAS,GAIf,IAAItQ,EAAQ,EAAKuW,SAASb,EAAcC,GAAa,GACjD5Q,EAAK,aACP0Q,SAAU,KACVza,eAAe,EACfsV,OAAQA,EAERpR,IAAK,CACHiD,WAAY,UACZD,OAAQ,UACR7D,SAAU,CACR,CACEqC,GAAI,0BACJsL,KAAM1B,EAAE,yCACRzI,WAAW,GAEb,CACEnB,GAAI,gBACJsL,KAAM1B,EAAE,kCACRzI,WAAW,GAGb,CACEnB,GAAI,cACJsL,KAAM1B,EAAE,mFACRzI,WAAW,GAGb,CACEnB,GAAI,iBACJsL,KAAM1B,EAAE,8EACRzI,WAAW,KAIjBsC,MAAOuR,EACLnB,UAAWoB,EACXnB,QAASwB,EACXvB,cAAc,EAEdtX,MAAOmN,EAAE,mNAETtK,MAAOA,EACPmV,sBAAuBnV,EACvBwL,MAAO,EACPH,mBAAoB,uCACpBO,iBAAkB,qBAClBM,qBAAsB,iCACtBC,mBAAoB,iCACpB0F,gBAAiBvQ,GACdE,GAGL,IACE,IAAIgV,EAAwBvB,IAAMrO,IAAI,mBACtC,GAAI4P,EAAuB,CACzB,IAAIC,EAAkB,IAAIvB,KAAKsB,GAG/B,GADAC,EAAgBC,QAAQD,EAAgBE,UAAY,GAChD,IAAIzB,KAASuB,EAAiB,CAChCvb,QAAQC,IAAI,sBACZ,IAAIyb,EAAgB3B,IAAMrO,IAAI,eAC1BgQ,IACFA,EAAcza,KAAO,IAAI+Y,KAAK0B,EAAcza,MAE5C4I,EAAK,eAAQA,EAAR,GAAkB6R,GACvB1b,QAAQC,IAAI,qBAIlB,MAAOsE,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GArJzC,OAwJjBsF,EAAMiK,0BAA4BjK,EAAMsG,mBACxCtG,EAAMkK,sBAAwBlK,EAAMwG,eACpCxG,EAAMmK,wBAA0BnK,EAAM6G,iBACtC,EAAK7G,MAAQA,EA3JI,E,gEAmKjB,IACarK,OAAOC,SAASC,SACjBoZ,WAAW,eACnBtZ,OAAO2Z,IAAI,cAAe,kBAAmB,OAAQ,CACnDwC,aAAc,WAGhBnc,OAAOuZ,KAAK,QAAS,OAAQ,CAC3BC,QAAS,iBACTC,eAAgB,UAGpB,MAAO1U,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,M,+BA8DnD0E,EAAOhI,EAAMsY,GACpB,IAAK,IACKpP,EAAuClB,EAAvCkB,KAAMC,EAAiCnB,EAAjCmB,QAASlJ,EAAwB+H,EAAxB/H,SAAUC,EAAc8H,EAAd9H,UAC7Bya,EAAa,IAAI9O,IAAO7L,GAC5B,OACEkJ,EACA,KACAC,EACA,MACCmP,EACGqC,EAAWjN,OAAO,oBAClBiN,EAAWjN,OAAO,eACtB,KAEAkN,IAAa3a,EAAUC,GAAWwN,OAAO,cAAY,CACnDmN,gBAAiB,IACjBC,cAAe,IAGnB,MAAOxX,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,M,yCAIzC8U,EAAWC,EAASC,GACnC,IAAIzU,EAAQZ,KAAKmX,SAASnX,KAAK2F,MAAMZ,MAAOoQ,EAAWE,GACvDrV,KAAK8J,SAAS,CAAEsL,QAASA,EAASD,UAAWA,EAAWvU,QAAOyU,eAAcU,sBAAuBnV,M,0CAGpFmE,GAChB,IAAInE,EAAQZ,KAAKmX,SAASpS,EAAO/E,KAAK2F,MAAMwP,UAAWnV,KAAK2F,MAAM0P,cACpErV,KAAK8J,SAAS,CAAE/E,QAAOnE,QAAOmV,sBAAuBnV,M,iCAyB5CH,GACT,IAAIqX,EAAgBzG,EAA0B5Q,GAE9CT,KAAK8J,UAAS,SAACiG,GAAD,MAAgB,CAC5BjQ,IAAI,eACCiQ,EAAUjQ,IADZ,GAEEgY,GAELrF,gBAAiBhS,Q,+BAoHnB,OAAIT,KAAK2F,MAAM0Q,SAEX,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,aAM7Bva,QAAQC,IAAI,qBAEV,yBAAK2H,MAAM,4CACT,yBAAKA,MAAM,+CACT,kBAAC,EAAD,CACE3G,KAAMiD,KAAK2F,MAAMwP,UACjBtL,cAAe7J,KAAK6J,cACpB5D,KAAMjG,KAAK2F,MAAMZ,MAAMC,YACvBhI,SAAUgD,KAAK2F,MAAMZ,MAAM/H,SAC3BC,UAAW+C,KAAK2F,MAAMZ,MAAM9H,UAC5BgI,eAAgBjF,KAAKiF,eACrBwN,gBAAiBzS,KAAK2F,MAAM8M,gBAC5BC,eAAgB1S,KAAK0S,eACrBzT,SAAUe,KAAK2F,MAAM7F,IAAIb,SACzB4T,iBAAkB7S,KAAK6S,iBACvBjD,0BAA2B5P,KAAK2F,MAAMiK,0BACtCC,sBAAuB7P,KAAK2F,MAAMkK,sBAClCC,wBAAyB9P,KAAK2F,MAAMmK,wBACpC7C,kBAAmBjN,KAAKiN,kBACxBlP,MAAOiC,KAAK2F,MAAM5H,MAClBmW,eAAgBlU,KAAKkU,eACrBX,gBAAiBvT,KAAKuT,gBACtB3S,MAAOZ,KAAK2F,MAAM/E,MAClBuT,eAAgBnU,KAAKmU,eACrB/B,iBAAkBpS,KAAKoS,iBACvBhG,MAAOpM,KAAK2F,MAAMyG,MAClB8E,OAAQlR,KAAK2F,MAAMuL,UAGvB,yBAAKxN,MAAM,4BACT,yBAAKA,MAAM,qDACT,kBAAC,EAAD,CACEC,IAAK3D,KAAK5C,KACV0C,IAAKE,KAAK2F,MAAM7F,IAChB9C,SAAUgD,KAAK2F,MAAMZ,MAAM/H,SACjBC,UAAW+C,KAAK2F,MAAMZ,MAAM9H,UAC5BF,KAAMiD,KAAK2F,MAAMyP,QAC3BrX,MAAOiC,KAAK2F,MAAM5H,MAClB6C,MAAOZ,KAAK2F,MAAM/E,MAClBH,QAAST,KAAK2F,MAAM8M,gBACpB5R,MAAOb,KAAK2F,MAAM9E,MAClBqQ,OAAQlR,KAAK2F,MAAMuL,iB,GAzdH/M,aAAxBsQ,GACGrQ,iBAAkB,EAgeZwH,qBAAkB6I,ICxeZ/Y,I,yDAInB,WAAYC,GAAQ,IAAD,8BACjB,cAAMA,IAHRC,eAAgB,EAEG,EAsBnBC,uBAAyB,WACvBC,QAAQC,IAAI,2BACZ,IACIH,EADcN,OAAOU,WACS,IAClC,EAAKJ,cAAgBA,EAErB,EAAKqc,iBAAiB,EAAKtc,MAAMkF,QA5BhB,EAoCnBoX,iBAAmB,SAACpX,GAClB,IAAIqX,EAAS,GACR,EAAKtc,gBACRsc,EAAS,KAEX,IAAI9D,EAAW,EAAK+D,SAAS9a,QAAQE,YAAc2a,EAC/CE,EAAY,EAAKD,SAAS9a,QAAQI,aAAeya,EACjDG,EAAaxX,EAAMoP,MAAM,KACzBqI,EAASC,SAASF,EAAW,IAC7BG,EAASD,SAASF,EAAW,IAC7Blb,GAAS,EACTK,GAAU,EACVib,EAAcrE,EAAWkE,EAAUE,EACnCC,EAAaL,EACfjb,EAASib,EAAYI,EAAUF,EAE/B9a,EAASib,EAGX,EAAK3O,SAAS,CACZ4O,YAAavb,EACbwb,aAAcnb,KAvDhB,EAAKG,QAAUK,IAAMC,YACrB,EAAK2a,eAAiB5a,IAAMC,YAC5B,EAAKka,SAAWna,IAAMC,YACtB,EAAKb,KAAOY,IAAMC,YAElB,EAAK0H,MAAQ,CACX+S,YAAa,KACbC,aAAc,MATC,E,gEAcjBrd,OAAOyE,iBAAiB,SAAUC,KAAKnE,wBACvCmE,KAAKnE,2B,6CAILP,OAAO2E,oBAAoB,SAAUD,KAAKnE,0B,oCA0C9BkC,GACZ,GAAIA,EACF,IACE,OAAOmC,IAAUC,SAASpC,GAAOqC,QAC/B,gBACA,+BAEF,MAAOC,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAG5D,MAAO,K,gDAGiBG,GACxBR,KAAK8J,SAAS,CACZ/L,MAAOiC,KAAKlC,cAAc0C,EAAUzC,SAGlCyC,EAAUK,QAAUb,KAAKrE,MAAMkF,OACjCb,KAAKiY,iBAAiBzX,EAAUK,S,+BAqBlC,OADA/E,QAAQC,IAAI,wBAEV,yBACE2H,MAAM,+FACNC,IAAK3D,KAAKmY,UAGV,yBACEjW,MAAO,CACL1E,OAAQ,EACRL,MAAO,EACPyG,SAAU,WAGZ,0BAAM1B,MAAO,CAAE2B,WAAY,SAAUC,SAAU,QAA/C,qFAIF,yBAAKJ,MAAM,yBACT,yBAAKA,MAAM,eACT,uBAAGA,MAAM,mDACP,uBAAGA,MAAM,sBADX,ioBAOJ,yBAAKA,MAAM,gEACT,yBACEA,MACE,0CAEA1D,KAAKrE,MAAMkF,QACkB,GAA5Bb,KAAK2F,MAAMgT,aAAqB,sBAAwB,MAC7B,GAA3B3Y,KAAK2F,MAAM+S,YAAoB,eAAiB,IAEnDxW,MAAO,CACL1E,QAC8B,GAA5BwC,KAAK2F,MAAMgT,aACP3Y,KAAK2F,MAAMgT,aACX,OACNxb,OAC6B,GAA3B6C,KAAK2F,MAAM+S,YAAoB1Y,KAAK2F,MAAM+S,YAAc,QAE5D/U,IAAK3D,KAAK4Y,gBAEV,yBACElV,MAAO,8BAAgC1D,KAAKrE,MAAM8E,QAClDkD,IAAK3D,KAAKrC,SAEV,yBAAK+F,MAAM,+CACT,yBAAKA,MAAM,6EACT,yBAAKA,MAAM,4BACT,uBACEO,wBAAyB,CAAEC,OAAQlE,KAAK2F,MAAM5H,UAIlD,yBACE2F,MAAM,wEACNxB,MAAO,CAAE1E,OAAQ,QAEjB,yBACEkG,MAAM,aACNxB,MAAO,CAAEkW,UAAW,QACpBha,IACE4F,kCAEAhE,KAAKrE,MAAM8E,QACX,UAON,yBAAKiD,MAAM,4BACT,2BAAI1D,KAAKrE,MAAMiF,SAGnB,yBACE8C,MAAM,qDACNxB,MAAO,CAAE1E,OAAQ,MACjBY,IAAK4F,+C,GA5LUG,cAAZzI,GACZ0I,iBAAkB,E,ICDrByH,G,kDACJ,WAAYlQ,GAAQ,IAAD,uBACjB,cAAMA,IA8VRmQ,WAAa,WACXhQ,QAAQC,IAAI,qBAEZ,IACE,IAAIgQ,EAAW,EAAKC,UAAU5K,MAAK,SAAC2K,GAClC,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAGhC7J,EAAO2J,EAASG,MAAM9K,MAAK,SAACgB,GAC9B,OAAOA,EAAKd,KAAO,EAAKqE,MAAMwG,kBAG1BC,EAAgChK,EAAhCgK,MAAOvL,EAAyBuB,EAAzBvB,MAAO1D,EAAkBiF,EAAlBjF,MAAOK,EAAW4E,EAAX5E,OAEvB6O,EAASjK,EAAKkK,QAAQlL,MAAK,SAACmL,GAC9B,OAAOA,EAAEjL,KAAO,EAAKqE,MAAM6G,oBAG7BJ,GAASC,EAAOD,MAEhB,IACIK,EAAqB,GACrBC,EAAsB,EAC1B,GACoC,yCAAlC,EAAK/G,MAAMsG,oBACoB,sBAA/B,EAAKtG,MAAM6G,iBACX,CACA,IAAIG,EAAcvK,EAAKkK,QAAQlL,MAAK,SAACmL,GACnC,MARmB,mCAQZA,EAAEjL,MAEPqL,IACFF,EAAqBE,EAAYC,KACjCF,EAAsBC,EAAYP,OAItC,EAAKzQ,MAAMkR,UAAU,CACnBZ,mBAAoB,EAAKtG,MAAMsG,mBAC/BE,eAAgB,EAAKxG,MAAMwG,eAC3BK,iBAAkB,EAAK7G,MAAM6G,iBAC7BM,qBAAsBf,EAASa,KAC/BG,mBAAoBV,EAAOO,KAC3BR,QACAvL,QACA1D,QACAK,SACAwP,iBA1BqB,iCA2BrBP,qBACAC,wBAEF,MAAOrM,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAlZzC,EAwanB4M,kBAAoB,SAACC,GACnB,IAAIC,EAAaD,EAAYE,OAAOC,MAChCtB,EAAW,EAAKC,UAAU5K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO6L,KACnD,GAAIpB,EAAU,CACZ,IAAI3J,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMwG,kBACrD/J,IACHA,EAAO2J,EAASG,MAAM,IAExB,IAEIqB,EAFAC,EAASpL,EAAKd,GAGhB+K,EAAS,KAEuB,uBAAhC,EAAK1G,MAAM6G,kBACuB,uBAAlC,EAAK7G,MAAMsG,qBAEXI,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAM6G,qBAEnDH,KACHA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,eACrBrL,EAAKkK,QAAQ7D,OAAS,IACnC4D,EAASjK,EAAKkK,QAAQ,IAI1BiB,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZmC,mBAAoBkB,EACpBhB,eAAgBqB,EAChBhB,iBAAkBe,MAtcL,EA2cnBG,cAAgB,SAACR,GACf,IAAInB,EAAW,EAAKC,UAAU5K,MAC5B,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMsG,sBAE7B,GAAIF,EAAU,CACZ,IAAIyB,EAASN,EAAYE,OAAOC,MAC5BjL,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAOkM,KAE/C,GAAIpL,EAAM,CACR,IAAImL,EACFlB,EAAS,KAUX,GARkC,uBAAhC,EAAK1G,MAAM6G,kBACuB,uBAAlC,EAAK7G,MAAMsG,qBAEXI,EAASjK,EAAKkK,QAAQlL,MACpB,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAM6G,sBAI1BH,IACCA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,eACzBrL,EAAKkK,QAAQ7D,OAAS,IACnC4D,EAASjK,EAAKkK,QAAQ,IAI1BiB,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZqC,eAAgBqB,EAChBhB,iBAAkBe,OA1eP,EAgfnBI,gBAAkB,SAACT,GACjB,IAAInB,EAAW,EAAKC,UAAU5K,MAC5B,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMsG,sBAE7B,GAAIF,EAAU,CACZ,IAAI3J,EAAO2J,EAASG,MAAM9K,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAO,EAAKqE,MAAMwG,kBAC1D,GAAI/J,EAAM,CACR,IAAImL,EAAWL,EAAYE,OAAOC,MAC9BhB,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEhM,KAAOiM,KAC1ClB,IACHA,EAASjK,EAAKkK,QAAQlL,MAAK,SAACkM,GAAD,OAAOA,EAAEG,cAEtCF,EAAWlB,EAAO/K,GAElB,EAAKwI,SAAS,CACZ0C,iBAAkBe,OA/fP,EAqgBnBK,oBAAsB,SAACvN,EAAG0L,GACxB1L,EAAEwN,iBAEE9B,GACF,EAAKjC,SAAS,CACZgE,UAAW/B,EAASgC,KAAKnB,KACzBoB,iBAAkBjC,EAASgC,KAAK/I,YAChCiJ,YAAalC,EAASgC,KAAKG,OAC3BC,aAAa,KA7gBA,EAkhBnBC,kBAAoB,SAAC/N,EAAGgM,GACtBhM,EAAEwN,iBAEExB,GACF,EAAKvC,SAAS,CACZgE,UAAWzB,EAAO0B,KAAKnB,KACvBoB,iBAAkB3B,EAAO0B,KAAK/I,YAC9BiJ,YAAa5B,EAAO0B,KAAKG,OACzBC,aAAa,KA1hBA,EA+hBnBE,aAAe,SAAChO,GACd,EAAKyJ,SAAS,CACZqE,aAAa,KAjiBE,EAqiBnBG,kBAAoB,SAAC3S,GACnB,OACE,kBAAC,IAAD,CACE4S,OAAQ5S,EAAMwS,YACdK,aAAc7S,EAAM0S,aACpBI,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAe/H,EAAMiR,OAEjC,yBAAKlJ,MAAM,6BACT,uBAAGxB,MAAO,CAAE2M,WAAY,aAAelT,EAAMqJ,aAC7C,kBAAC8J,EAAA,EAAD,KACGnT,EAAMuS,QACLvS,EAAMuS,OAAOpO,KAAI,SAAC1B,EAAK2Q,GACrB,OACE,kBAACD,EAAA,EAASE,KAAV,CAAeC,IAAK,gBAAkBF,GACpC,yBAAKG,UAAU,gBAAgB9Q,IAAKA,EAAK+Q,IAAKxT,EAAMiR,eA1jBnD,EAokBnB8C,cAAgB,SAAC/T,GAAW,IAClBuP,EAAM,EAAKvP,MAAXuP,EACFoB,EAAU3Q,EAAM2Q,QACtB,OAAKA,GAAWA,EAAQ7D,QAAU,EACzB,KAGP,kBAAC,IAAMkH,SAAP,KACE,wBAAIjM,MAAM,kDACPwH,EAAE,2DAEL,yBAAKxH,MAAM,sCACR4I,EAAQxM,KAAI,SAACuM,EAAQ0C,GACpB,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,UAAYF,GAClD,2BACErL,MAAM,6CACNnF,KAAK,QACL8O,MAAOhB,EAAO/K,GACd+N,QAAS1T,EAAM6Q,mBAAqBH,EAAO/K,GAC3C8G,SAAUzM,EAAMgS,kBAGlB,0BAAMjK,MAAM,8JACV,8BACG2I,EAAOO,KAEO,mCAAdP,EAAO/K,GACN,oCACE,6BACA,8BAAO4J,EAAE,wEAEO,GAAhBmB,EAAOD,MACT,oCACE,6BACA,kCACIC,EAAOD,MADX,IACmBlB,EAAE,wBAIvB,8BAAO,UAIZmB,EAAO0B,KACN,uBACErK,MAAM,qGACNgC,QAAS,SAACrF,GAAD,OAAO1E,EAAMyS,kBAAkB/N,EAAGgM,KAF7C,KAME,YAvnBC,IAETnB,EAAMvP,EAANuP,EAFS,OAIjB,EAAKc,UAAY,CACf,CACE1K,GAAI,uCACJsL,KAAM1B,EAAE,kCACR6C,KAAM,CACJnB,KAAM1B,EAAE,8EACRlG,YAAakG,EACX,srCAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,+BAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAMV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAMV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,oCAQd,CACE1C,GAAI,qBACJsL,KAAM1B,EAAE,8CACR6C,KAAM,CACJnB,KAAM1B,EAAE,4DACRlG,YAAakG,EACX,siDAEFgD,OAAQ,CACNlK,+BACAA,+BACAA,iCAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAiBV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,IACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM1B,EAAE,kCAAUkB,MAAO,GACtC,CACE9K,GAAI,iCACJsL,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,kCAiBV,CACE1C,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,KACVhD,QAAS,CACP,CAAEhL,GAAI,qBAAOsL,KAAM,iCAASR,MAAO,GACnC,CACE9K,GAAI4J,EAAE,kCACN0B,KAAM1B,EAAE,mFACRkB,MAAO,EACPqB,WAAW,EACXM,KAAM,CACJnB,KAAM1B,EAAE,mFACRlG,YAAakG,EACX,kjBAEFgD,OAAQ,CAAClK,kCAGb,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACRkB,MAAO,IACP2B,KAAM,CACJnB,KAAM1B,EAAE,gGACRlG,YAAakG,EACX,23BAEFgD,OAAQ,CACNlK,6BACAA,6BACAA,6BACAA,6BACAA,oCAmBd,CACE1C,GAAI,iCACJsL,KAAM1B,EAAE,kCACR6C,KAAM,CACJnB,KAAM1B,EAAE,8EACRlG,YAAakG,EACX,y1CAEFgD,OAAQ,CACNlK,8BACAA,8BACAA,gCAGJkI,MAAO,CACL,CACE5K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,IACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,KAErD,CACE9K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,KACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,KAErD,CACE9K,GAAI,0BACJsL,KAAM,0BACNzP,MAAO,IACPK,OAAQ,IACRqD,MAAO,MACPuL,MAAO,KACPkD,SAAU,KACVhD,QAAS,CAAC,CAAEhL,GAAI,uCAAUsL,KAAM1B,EAAE,kCAAUkB,MAAO,QAM3D,EAAKzG,MAAQ,CACXsG,mBAAoBtQ,EAAMiU,0BAC1BzD,eAAgBxQ,EAAMkU,sBACtBrD,iBAAkB7Q,EAAMmU,wBACxB3B,aAAa,EACbL,UAAW,GACXE,iBAAkB,GAClBC,YAAa,IA3VE,E,+DAsZA/D,EAAW6F,GAE1B/P,KAAK2F,MAAMsG,qBAAuB8D,EAAU9D,oBAC5CjM,KAAK2F,MAAMwG,iBAAmB4D,EAAU5D,gBACxCnM,KAAK2F,MAAM6G,mBAAqBuD,EAAUvD,kBAE1CxM,KAAK8L,e,0CAKP9L,KAAK8L,e,+BA+NG,IAAD,OACPhQ,QAAQC,IAAI,+BADL,IAECmP,EAAMlL,KAAKrE,MAAXuP,EACJ9I,EAAOpC,KAAKgM,UACb5K,MAAK,SAAC2K,GACL,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAEnCC,MAAM9K,MAAK,SAACgB,GACX,OAAOA,EAAKd,KAAO,EAAKqE,MAAMwG,kBAE9BG,EAAU,KAKd,OAJIlK,IACFkK,EAAUlK,EAAKkK,SAIf,kBAAC,IAAMqD,SAAP,KACE,wBAAIjM,MAAM,MAAV,oDACA,yBAAKA,MAAM,sCACR1D,KAAKgM,UAAUlM,KAAI,SAACiM,EAAUgD,GAC7B,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,YAAcF,GACpD,2BACErL,MAAM,4CACNnF,KAAK,QACL8O,MAAOtB,EAASzK,GAChB+N,QAAS,EAAK1J,MAAMsG,qBAAuBF,EAASzK,GACpD8G,SAAU,EAAK6E,oBAEjB,0BAAMvJ,MAAM,uGACTqI,EAASa,MAEZ,uBACElJ,MAAM,qGACNgC,QAAS,SAACrF,GAAD,OAAO,EAAKuN,oBAAoBvN,EAAG0L,KAF9C,UAUR,yBAAKrI,MAAM,aACT,yBAAKA,MAAM,IACT,wBAAIA,MAAM,kDACPwH,EAAE,0CAGP,yBAAKxH,MAAM,8CACT,0BAAMA,MAAM,0FACTwH,EAAE,2EAIT,yBAAKxH,MAAM,sCACR1D,KAAKgM,UACH5K,MAAK,SAAC2K,GACL,OAAOA,EAASzK,KAAO,EAAKqE,MAAMsG,sBAEnCC,MAAMpM,KAAI,SAACsC,EAAM2M,GAChB,OACE,2BAAOrL,MAAM,sBAAsBuL,IAAK,QAAUF,GAChD,2BACErL,MAAM,4CACNnF,KAAK,QACL8O,MAAOjL,EAAKd,GACZ+N,QAAS,EAAK1J,MAAMwG,iBAAmB/J,EAAKd,GAC5C8G,SAAU,EAAKsF,gBAEjB,0BAAMhK,MAAM,uGACTtB,EAAKwK,KADR,IACc,6BACZ,8BACGxK,EAAKgK,MADR,IACgBlB,EAAE,sBAAQ,KAE1B,uBAAGxH,MAAM,uCACNtB,EAAKkN,gBAOpB,uBAAMI,cAAN,CACEpD,QAASA,EACTE,iBAAkBxM,KAAK2F,MAAM6G,iBAC7BmB,gBAAiB3N,KAAK2N,gBACtBS,kBAAmBpO,KAAKoO,oBAG1B,uBAAME,kBAAN,CACEH,YAAanO,KAAK2F,MAAMwI,YACxBE,aAAcrO,KAAKqO,aACnBzB,KAAM5M,KAAK2F,MAAMmI,UACjB9I,YAAahF,KAAK2F,MAAMqI,iBACxBE,OAAQlO,KAAK2F,MAAMsI,mB,GA/tBCtC,iBAsuBfC,iBAAkBC,ICjuB3ByF,G,kDACJ,WAAY3V,GAAQ,IAAD,uBACjB,cAAMA,IAiDRE,uBAAyB,WACvBC,QAAQC,IAAI,2BACZ,IAAIoB,EAAQ7B,OAAOU,WACnB,EAAKuV,eAAiBpU,EAAQ,KArDb,EAwDnBqU,eAAiB,WACf1V,QAAQC,IAAI,aACZ,IACE,EAAK0V,QAAQpU,QAAQqU,eAAe,CAClCC,SAAU,SACVC,MAAO,MACPC,OAAQ,YAEV,MAAOxR,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAjEzC,EAqEnByR,YAAc,SAACzR,GACbA,EAAEwN,iBACF,IACEvS,OAAOyW,SAASC,OAChB,MAAO3R,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA1EzC,EA8EnB4R,mBAAqB,SAAC5R,EAAG0O,GACvB1O,EAAEwN,iBAIF,IAFA,IAAIqE,EAAgB,YAAO,EAAKvM,MAAMuM,kBAE7B/B,EAAI,EAAGA,EAAI+B,EAAiBzJ,OAAQ0H,IAEzC+B,EAAiB/B,GADfA,IAAMpB,EAMR,EAAKwC,eACP,EAAKzH,SACH,CAAEoI,iBAAkBA,GACpB,EAAKV,gBAGP,EAAK1H,SAAS,CAAEoI,iBAAkBA,KAhGnB,EAoGnBjF,kBAAoB,SAACc,GACnB,EAAKoE,aAAepE,EACpB,EAAKpS,MAAMsR,kBAAkBc,IAtGZ,EAyGnBqE,iBAAmB,SAAC/R,GAClBA,EAAEwN,iBACE,EAAKsE,cAAgB,EAAKA,aAAazF,oBAAsB,EAC/D,EAAK5C,SAAS,CACZqE,aAAa,EACbzB,oBAAqB,EAAKyF,aAAazF,sBAGzC,EAAK/Q,MAAMyW,oBAjHI,EAqHnBC,gBAAkB,SAAChS,GACjBA,EAAEwN,iBACF,IAAIyE,EAAoB,CACtB9F,iBAAkB,EAAK2F,aAAanF,iBACpCD,mBAAoB,EAAKoF,aAAa1F,mBACtCL,MAAO,EAAK+F,aAAa/F,MAAQ,EAAK+F,aAAazF,qBAErD,EAAK/Q,MAAMyW,iBAAiBE,IA5HX,EA+HnBC,4BAA8B,SAAClS,GAC7BA,EAAEwN,iBACF,EAAKlS,MAAMyW,oBAjIM,EAwKnBI,aAAe,WACC,EAAK7W,MAAXuP,EAER,OACE,yBAAKxH,MAAM,0DACR,EAAKyN,OAAOrR,KAAI,SAACoC,EAAO6M,GACvB,OACE,2BAAOrL,MAAM,UAAUuL,IAAK,SAAWF,GACrC,yBACErL,MACE,qEACC,EAAK/H,MAAM8W,kBAAoBvQ,EAAMZ,GAClC,0BACA,KAGN,yBAAKoC,MAAM,iCACT,yBACEtF,IACE4F,gCAEA9B,EAAMZ,GACN,OAEFoC,MAAM,6CAGV,2BACEA,MAAM,8CACNnF,KAAK,QACLqO,KAAK,eACLyC,QAAS,EAAK1T,MAAM8W,kBAAoBvQ,EAAMZ,GAC9C8G,SAAU,SAAC/H,GAAD,OAAO,EAAK1E,MAAM+W,eAAerS,EAAG6B,EAAMZ,OAEtD,uBAAGoC,MAAM,sGAEX,uBAAGA,MAAM,cAAcxB,MAAO,CAAE4B,SAAU,SACvC5B,EAAM0K,YA7MF,EA0RnByB,aAAe,SAAChO,GACd,EAAKyJ,SAAS,CACZqE,aAAa,KA5RE,EAgSnB2E,sBAAwB,SAACzS,GACvBA,EAAEwN,iBACF,EAAK/D,SAAS,CACZiJ,yBAAyB,KAnSV,EAuSnBC,yBAA2B,SAAC3S,GAC1B,EAAKyJ,SAAS,CACZiJ,yBAAyB,KAzSV,EA6SnBE,uBAAyB,SAACC,EAAe7S,GACvC,EAAK8S,2BAA6BD,GA9SjB,EAiTnBE,uBAAyB,SAAC/S,GACpB,EAAK8S,4BAA8B,EAAKE,eAAe5K,SACzD,EAAK0K,2BAA6B,EAAKE,eAAe5K,OAAS,GAEjE,IAAI6K,EAAO,EAAKD,eAAe,EAAKF,4BAEpC,EAAKH,2BACL,EAAKrX,MAAM4X,gBAAgBD,IAxTV,IAGTpI,EAAMvP,EAANuP,EAHS,OAKjB,EAAKuG,QAAUzT,IAAMC,YACrB,EAAKkU,aAAe,KACpB,EAAKhB,OAAS,CACZ,CACE7P,GAAI,eACJsL,KAAM,SAER,CACEtL,GAAI,eACJsL,KAAM,UAIV,EAAKjH,MAAQ,CACXuM,iBAAkB,EAAC,GAAM,GAAO,GAAO,GACvC/D,aAAa,EACb4E,yBAAyB,EACzBrG,oBAAqB,GAGvB,EAAK2G,eAAiB,CACpBnI,EAAE,mNACFA,EAAE,0LACFA,EAAE,qFACFA,EAAE,0FACFA,EAAE,yJACFA,EAAE,6EACFA,EAAE,0IACFA,EAAE,oJACFA,EAAE,4KACFA,EAAE,+LAEJ,EAAKiI,2BAA6B,EAClC,EAAK5B,gBAAiB,EAtCL,E,gEA0CjBjW,OAAOyE,iBAAiB,SAAUC,KAAKnE,wBACvCmE,KAAKnE,2B,6CAILP,OAAO2E,oBAAoB,SAAUD,KAAKnE,0B,2CAqFlB,IAAD,OAALqP,EAAK,EAALA,EACdsI,EAAa,SAAC5G,EAAM6G,GACtB,MAAO,CAAE7G,KAAMA,EAAM6G,KAAMA,IAU7B,MAPY,CACVD,EAAWtI,EAAE,kCAAU,kBACvBsI,EAAWtI,EAAE,oDAAa,UAC1BsI,EAAWtI,EAAE,wCAAW,aACxBsI,EAAWtI,EAAE,kCAAU,kBAGZpL,KAAI,SAAC0I,EAAMuG,EAAO2E,GAC7B,IAAIC,EAAYC,IACd,yGACA,CACEC,OAAQ,EAAKlO,MAAMuM,iBAAiBnD,KAGxC,OACE,wBAAIrL,MAAM,QAAQuL,IAAK,WAAaF,GAClC,uBACEG,UAAWyE,EACXG,KAAK,SACLC,KAAK,IACLrO,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG0O,KAE3C,0BAAMrL,MAAO,MAAQ8E,EAAKiL,OAC1B,6BACCjL,EAAKoE,Y,+BA0JN,IAAD,OACP9Q,QAAQC,IAAI,4BADL,MAEaiE,KAAKrE,MAAjBuP,EAFD,EAECA,EAFD,EAEIjK,KAEX,OACE,kBAAC,IAAM0O,SAAP,KACE,yBAAKjM,MAAM,oFACT,wBAAIA,MAAM,kFACR,wBAAIA,MAAM,0BACR,uBACEqQ,KAAK,SACLrQ,MAAM,yGACNoQ,KAAK,UAEL,yBACE1V,IACE4F,uCAEFN,MAAM,gBAIX1D,KAAKgU,kBAAkBhU,KAAKrE,SAGjC,yBACE+H,MAAM,6CACNC,IAAK3D,KAAKyR,SAEV,yBAAK/N,MAAM,+CACT,yBACEpC,GAAG,YACHoC,MAAM,mFAEN,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,wBAAIxO,MAAM,MAAV,mCACC1D,KAAKwS,eA4CN,4BACE9O,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,gFALL,IAK0B,uBAAGxH,MAAM,wBAGrC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,kBAAC,GAAD,CACEtC,0BACE5P,KAAKrE,MAAMiU,0BAEbC,sBAAuB7P,KAAKrE,MAAMkU,sBAClCC,wBAAyB9P,KAAKrE,MAAMmU,wBACpCjD,UAAW7M,KAAKiN,oBAGlB,4BACEvJ,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,oEALL,IAKwB,uBAAGxH,MAAM,wBAGnC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAG3D,wBAAIxO,MAAM,MAAMwH,EAAE,yCAElB,yBAAKxH,MAAM,sBACT,yBAAKA,MAAM,6DACT,2BAAOA,MAAM,WAAWwH,EAAE,oCAS5B,8BACExH,MAAM,uDACNuQ,KAAK,IACL5G,MAAOrN,KAAKrE,MAAMoC,MAClBqK,SAAUpI,KAAKrE,MAAMuY,kBAGzB,yBAAKxQ,MAAM,sBACT,2BAAOA,MAAM,WAAWwH,EAAE,yCAC1B,8BACExH,MAAM,uDACNuQ,KAAK,IACL5G,MAAOrN,KAAKrE,MAAMiF,MAClBwH,SAAUpI,KAAKrE,MAAMwY,kBAGzB,4BACEzQ,MAAM,oFACNnF,KAAK,SACLmH,QAAS,SAACrF,GAAD,OAAO,EAAK4R,mBAAmB5R,EAAG,KAE1C6K,EAAE,8DALL,IAKuB,uBAAGxH,MAAM,wBAGlC,yBACEwL,UACE,aAAelP,KAAK2F,MAAMuM,iBAAiB,GAAK,OAAS,KAI3D,yBACExO,MAAM,wDACNoQ,KAAK,SAEL,wBAAIpQ,MAAM,MACR,uBAAGA,MAAM,sBADX,qEAIA,g0BAMF,4BACEA,MAAM,oFACNnF,KAAK,SACLmH,QAAS1F,KAAKoS,kBAEblH,EAAE,oEALL,IAKwB,uBAAGxH,MAAM,yBAKrC,yBAAKA,MAAM,8BACT,yBAAKA,MAAM,8DACT,wBAAIA,MAAM,kFACR,wBAAIA,MAAM,SACR,uBACEA,MAAM,uEACNoQ,KAAK,SACLC,KAAK,IACLrO,QAAS1F,KAAK8R,aAEd,0BAAMpO,MAAM,mBACZ,6BACCwH,EAAE,yEAGP,wBAAIxH,MAAM,SACR,uBACEA,MAAM,uEACNoQ,KAAK,SACLC,KAAK,IACLrO,QAAS1F,KAAKoS,kBAEd,0BAAM1O,MAAM,wBACZ,6BACA,kCAAQwH,EAAE,yCAAkB,IAC5B,8BACG,IACAlL,KAAKrE,MAAMyQ,MAFd,IAEsBlB,EAAE,2BAMhC,yBAAKxH,MAAM,qBACT,uBACEqQ,KAAK,IACLrO,QAAS1F,KAAK8R,YACdpO,MAAM,uHAEN,8BACE,uBAAGA,MAAM,qBADX,IACoCwH,EAAE,yEAIxC,4BACExH,MAAM,iEACNnF,KAAK,SACLmH,QAAS1F,KAAKoS,kBAEd,0BAAM1O,MAAM,cACV,uBAAGA,MAAM,wBADX,IACuC1D,KAAKrE,MAAMyQ,MAAO,IACtDlB,EAAE,uBAEL,0BAAMxH,MAAM,eACTwH,EAAE,wCADL,IACgB,uBAAGxH,MAAM,4BAOnC,kBAAC,IAAD,CACE6K,OAAQvO,KAAK2F,MAAMwI,YACnBK,aAAcxO,KAAKqO,aACnBI,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAewH,EAAE,gFAE7B,yBAAKxH,MAAM,cACT,4BACGwH,EAAE,qTAEL,yBAAKxH,MAAM,0BACT,yBAAKA,MAAM,YACT,yBACEA,MAAM,YACNtF,IAAK4F,gCACLmL,IAAI,GACJjN,MAAO,CAAEkS,SAAU,OAGvB,yBAAK1Q,MAAM,eACT,4BAAKwH,EAAE,mCACP,uBAAGxH,MAAM,uBACNwH,EACC,0mBAIN,yBAAKxH,MAAM,gCACT,4BACEA,MAAM,yCACNnF,KAAK,SACLmH,QAAS1F,KAAKqS,iBAEbnH,EAAE,yCAEL,6BACA,2BAAOxH,MAAM,8CAAb,IACI1D,KAAK2F,MAAM+G,oBADf,IACqCxB,EAAE,0BAK7C,yBAAKxH,MAAM,gBACT,4BACEA,MAAM,kEACNnF,KAAK,SACLmH,QAAS1F,KAAKuS,6BAEbrH,EAAE,qHAIT,kBAAC,IAAD,CACEqD,OAAQvO,KAAK2F,MAAMoN,wBACnBvE,aAAcxO,KAAKgT,yBACnBvE,QAAS,CACPC,iBAAkB,uBAClBC,mBAAoB,oBACpBC,iBAAkB,yBAGpB,yBAAKlL,MAAM,gBACT,wBAAIA,MAAM,eAAewH,EAAE,+EAE7B,yBAAKxH,MAAM,8BACT,kBAACoL,EAAA,EAAD,CACEjI,SAAU7G,KAAKiT,uBACfoB,SAAU,KACVC,OAAO,GAENtU,KAAKqT,eAAevT,KAAI,SAACwT,EAAMvE,GAC9B,OACE,kBAACD,EAAA,EAASE,KAAV,CAAeC,IAAKF,GAClB,yBACEG,UAAU,gBACV9Q,IAAK4F,8BAEP,kBAAC8K,EAAA,EAASyF,QAAV,CAAkBC,SAAS,2BACzB,6BACE,uBAAG9Q,MAAM,uCACN4P,WASjB,yBAAK5P,MAAM,gBACT,4BACEA,MAAM,uDACNnF,KAAK,SACLmH,QAAS1F,KAAKoT,wBAEblI,EAAE,8G,GAxpBWS,iBAgqBbC,iBAAkB0F,ICjqB3BmD,G,kDAGJ,WAAY9Y,GAAQ,IAAD,uBACjB,cAAMA,IAqHRuY,eAAiB,SAACQ,GAChB,IACE,EAAK5K,SAAS,CAAE/L,MAAO2W,EAAMtH,OAAOC,QACpC,MAAOhN,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA1HzC,EA8HnBkT,gBAAkB,SAACD,GACjB,IACE,EAAKxJ,SAAS,CAAE/L,MAAOuV,IACvB,MAAOjT,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAlIzC,EAsInB8T,eAAiB,SAACO,GAChB,IACE,EAAK5K,SAAS,CAAElJ,MAAO8T,EAAMtH,OAAOC,QACpC,MAAOhN,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KA1IzC,EA8InBqS,eAAiB,SAACrS,EAAGI,GACJJ,EAAE+M,OACIiC,SAEnB,EAAKvF,SAAL,eACK,EAAKnE,MADV,CAEE8M,gBAAiBhS,MApJJ,EAyJnBwM,kBAAoB,SAACc,GAAU,IAE3B3B,EASE2B,EATF3B,MACAvL,EAQEkN,EARFlN,MACAoL,EAOE8B,EAPF9B,mBACAE,EAME4B,EANF5B,eACAK,EAKEuB,EALFvB,iBACAM,EAIEiB,EAJFjB,qBACAC,EAGEgB,EAHFhB,mBACOuD,EAELvC,EAFF5Q,MACQoT,EACNxC,EADFvQ,OAEF,EAAKsM,SAAS,CACZsC,QACAvL,QACAoL,qBACAE,iBACAK,mBACAM,uBACAC,qBACAuD,aACAC,iBA9Ke,EAkLnB6B,iBAAmB,SAACwD,GAClB,IAAIjQ,EAAQ,KAEVA,EADEiQ,EACG,eAAQ,EAAKjQ,MAAb,GAAuBiQ,GAEvB,eAAQ,EAAKjQ,OAEpBkQ,IAAMvM,IAAI,uBAAwB,IAAIwM,MACtCD,IAAMvM,IAAI,mBAAoB3D,GARW,MAsBrCA,EAXF5H,EAXuC,EAWvCA,MACA6C,EAZuC,EAYvCA,MACAwL,EAbuC,EAavCA,MACAH,EAduC,EAcvCA,mBACAE,EAfuC,EAevCA,eACAK,EAhBuC,EAgBvCA,iBACAM,EAjBuC,EAiBvCA,qBACAC,EAlBuC,EAkBvCA,mBACA0F,EAnBuC,EAmBvCA,gBAYIyD,EAAU,CACdC,YAAa,QACbpY,QACA6C,QACAwL,QACAL,SAAUE,EACV7J,KAAM+J,EACNE,OAAQG,EACRtK,MAAOuQ,EACPnC,WAxCuC,EAoBvCA,WAqBAC,YAzCuC,EAqBvCA,YAqBAvL,YAlB2B,CAC3B+G,SAAUe,EACV1K,KAAM+J,EACNE,OAAQU,EACR7K,MAAOuQ,IAgBToD,IAAMvM,IAAI,UAAW4M,GAErB,EAAKpM,SAAS,CAAEuM,SAAU,UA9N1B,EAAKjZ,KAAOY,IAAMC,YAFD,IAITiN,EAAMvP,EAANuP,EAEJhJ,EAAQ,eACRE,EAAO,CACT+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAGTuG,EAAcC,KAAYC,MAAMrb,EAAMJ,SAAS0b,QACrD,GAAIH,IACEA,EAAY5U,QACdA,EAAQ4U,EAAY5U,OAElB4U,EAAY1U,MAEd,OADAtG,QAAQC,IAAI,QAAS+a,EAAY1U,MACzB0U,EAAY1U,MAClB,IAAK,KACHA,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,0BAChBtL,MAAO,MACPyP,WAAY,IACZC,YAAa,KAEf,MACF,IAAK,KACHnO,EAAO,CACL+J,eAAgB,2BAChBtL,MAAO,OACPyP,WAAY,IACZC,YAAa,KAMvB,IAAI5K,EAAK,aACP0Q,SAAU,KACVza,eAAe,EAEfmC,MAAOmN,EAAE,IACTtK,MAAOsK,EAAE,IACTkB,MAAO,EACPH,mBAAoB,uCACpBO,iBAAkB,qBAClBM,qBAAsB,iCACtBC,mBAAoB,iCACpB0F,gBAAiBvQ,GACdE,GAGL,IACE,IAAIgV,EAAwBvB,IAAMrO,IAAI,wBACtC,GAAI4P,EAAuB,CACzB,IAAIC,EAAkB,IAAIvB,KAAKsB,GAG/B,GADAC,EAAgBC,QAAQD,EAAgBE,UAAY,GAChD,IAAIzB,KAASuB,EAAiB,CAChCvb,QAAQC,IAAI,sBACZ,IAAIyb,EAAgB3B,IAAMrO,IAAI,oBAC1BgQ,IACFA,EAAcza,KAAO,IAAI+Y,KAAK0B,EAAcza,MAE5C4I,EAAK,eAAQA,EAAR,GAAkB6R,GACvB1b,QAAQC,IAAI,qBAIlB,MAAOsE,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GA1FzC,OA6FjBsF,EAAMiK,0BAA4BjK,EAAMsG,mBACxCtG,EAAMkK,sBAAwBlK,EAAMwG,eACpCxG,EAAMmK,wBAA0BnK,EAAM6G,iBACtC,EAAK7G,MAAQA,EAhGI,E,gEAqGjB,IACarK,OAAOC,SAASC,SACjBoZ,WAAW,eACnBtZ,OAAO2Z,IAAI,cAAe,kBAAmB,OAAQ,CACnDwC,aAAc,WAGhBnc,OAAOuZ,KAAK,QAAS,OAAQ,CAC3BC,QAAS,iBACTC,eAAgB,UAGpB,MAAO1U,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,M,+BAkH1D,OAAIL,KAAK2F,MAAM0Q,SAEX,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,aAM7Bva,QAAQC,IAAI,qBAEV,yBAAK2H,MAAM,uDACT,yBAAKA,MAAM,+CACT,kBAAC,GAAD,CACE+O,gBAAiBzS,KAAK2F,MAAM8M,gBAC5BC,eAAgB1S,KAAK0S,eACrB9C,0BAA2B5P,KAAK2F,MAAMiK,0BACtCC,sBAAuB7P,KAAK2F,MAAMkK,sBAClCC,wBAAyB9P,KAAK2F,MAAMmK,wBACpC7C,kBAAmBjN,KAAKiN,kBACxBlP,MAAOiC,KAAK2F,MAAM5H,MAClB6C,MAAOZ,KAAK2F,MAAM/E,MAClBsT,eAAgBlU,KAAKkU,eACrBC,eAAgBnU,KAAKmU,eACrBZ,gBAAiBvT,KAAKuT,gBACtBnB,iBAAkBpS,KAAKoS,iBACvBhG,MAAOpM,KAAK2F,MAAMyG,SAGtB,yBAAK1I,MAAM,uDACT,kBAAC,GAAD,CACEC,IAAK3D,KAAK5C,KACVW,MAAOiC,KAAK2F,MAAM5H,MAClB6C,MAAOZ,KAAK2F,MAAM/E,MAClBH,QAAST,KAAK2F,MAAM8M,gBACpB5R,MAAOb,KAAK2F,MAAM9E,e,GA5QAsD,aAAxBsQ,GACGrQ,iBAAkB,EAkRZwH,qBAAkB6I,I,gDCwlBlBoE,GA92BE7a,IAAM8a,MAAK,SAACnd,GAAW,IAC9BuP,EAAM6N,eAAN7N,EASF8N,EAAqBrd,EAAMqd,mBAC3BC,EAAiBtd,EAAMsd,eACvBC,EAAyBvd,EAAMud,uBAC/BC,EAAkBxd,EAAMwd,gBACxBC,EAAqBzd,EAAMyd,mBAC3BC,EAAe1d,EAAM0d,aAMrBC,EAAgB3d,EAAM2d,cAC5B,OACE,kBAAC,KAAD,CACEC,oBAAkB,EAClBC,cAAe,CACb5M,KAAM,GACN6M,SAAU,GACVC,MAAO,GACPC,MAAO,GACPC,YA3BsB,WA4BtBC,aAAc,cACd5T,KAAM,GACN6T,UAAW,GACXC,QAAS,GACTC,WAAW,GAEbC,SAAU,SAACC,GACT,IAAMC,EAAS,GAqCf,OAlCKD,EAAOtN,OACVuN,EAAOvN,KAAO1B,EAAE,mEAGbgP,EAAOT,WACVU,EAAOV,SAAWvO,EAAE,gGAGjBgP,EAAOR,MAGT,4CAA4CU,KAAKF,EAAOR,SAEzDS,EAAOT,MAAQxO,EAAE,6EAJjBiP,EAAOT,MAAQxO,EAAE,oDAOdgP,EAAOP,QACVQ,EAAOR,MAAQzO,EAAE,0FAGdgP,EAAOjU,OACVkU,EAAOlU,KAAOiF,EAAE,8EAGU,gBAAxBgP,EAAOL,aACJK,EAAOJ,YACVK,EAAOL,UAAY5O,EAAE,qIAEU,YAAxBgP,EAAOL,eACXK,EAAO3V,UACV4V,EAAO5V,QAAU2G,EAAE,oHAIhBiP,GAETE,SAAU,SAACH,EAAQI,GAKjB3e,EAAM0e,SAASH,GAJf,WACEI,EAAQC,eAAc,SAMzB,SAACC,GAAiB,IAEfN,EAOEM,EAPFN,OACAO,EAMED,EANFC,QACAN,EAKEK,EALFL,OACAO,EAIEF,EAJFE,aACAC,EAGEH,EAHFG,WACAC,EAEEJ,EAFFI,aACAC,EACEL,EADFK,cAIE1B,IAaae,EAAON,YAQf1O,EAAE,uEAMFA,EAAE,8CAMF8N,IACC,aACQ9N,EAAE,sEAAqBA,EAAE,4IAIhCA,EAAE,8MAEIA,EAAE,0JAMnB,IAAI4P,EAAiB,KACjB1B,IACF0B,EACE,2BACEpX,MACE,2DACE0V,EAAqC,GAAhB,gBAGzB,2BACE1V,MAAM,4CACNkJ,KAAK,kBACLrO,KAAK,QACL8O,MAvJe,YAwJfgC,QAxJe,cAwJN6K,EAAON,YAChBxR,SAAU,SAAC/H,GAAD,OAAOwa,EAAc,cAAexa,EAAE+M,OAAOC,QACvD0N,UAAU3B,IAEZ,yBAAK1V,MAAM,2EACT,uBAAGA,MAAM,8EAEX,8BACGwH,EAAE,uEACH,yBACExH,MAAM,gCACNtF,IACE4F,qCAEF9B,MAAO,CAAE1E,OAAQ,MAElB0N,EAAE,8CACH,yBACExH,MAAM,iCACNtF,IAAK4F,kCAEP,6BACA,0BAAMN,MAAM,kBACTsV,EACC,4CACI,2BAAI9N,EAAE,uEAAoB,IAC3BA,EAAE,2IACH,8BAEA,KAPN,QAQKA,EAAE,8MACJ8N,EACC,oCACE,6BACA,sCAAS9N,EAAE,2JAEX,SAOd,IAAI8P,EAAe,KACnB,GAA2B,SAAvBd,EAAON,YACT,GAA4B,YAAxBM,EAAOL,cACT,GAAIb,GACEkB,EAAOjU,KAAM,CACf,IAAIA,EAAOiU,EAAOjU,KAAKiR,cAAc+D,OAE1B,6BAAThV,GACS,SAATA,GACS,6BAATA,GACS,SAATA,IAEA+U,EAAe,UASG,gBAAxBd,EAAOL,cACPb,GACAE,IAEA8B,EAAe,GAInB,IACmB,EADfE,EAAe,KACf5B,IACF4B,EAAY,UAAG5B,EAAclY,MAC3B,SAACxB,GAAD,OAAOA,EAAEga,cAAgBM,EAAON,sBADtB,aAAG,EAEZ7c,MAIL,OADApB,EAAMwf,sBAAsBH,GAE1B,0BAAMX,SAAUO,GACd,6BACE,6BACE,6BACE,6BACE,6BACE,uBAAGlX,MAAM,sBAAyB,IACjCwH,EACC,udAGJ,6BACGA,EACC,+gBAEF,uBACE6I,KAAK,mCACL3G,OAAO,SACP1J,MAAM,wBAHR,kBASF,wBAAIA,MAAM,WAAWwH,EAAE,qDACvB,yBAAKxH,MAAM,OACT,yBAAKA,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOvN,MAAQ6N,EAAQ7N,KACpB,kBACA,KAGN,2BAAOlJ,MAAM,WAAWwH,EAAE,6BAC1B,2BACExH,MAAM,yCACNkJ,KAAK,OACLrO,KAAK,OACL6c,aAAa,aACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOtN,KACd0O,OAAQX,IAETR,EAAOvN,MAAQ6N,EAAQ7N,KACtB,2BAAOlJ,MAAM,yBACVyW,EAAOvN,MAER,OAGR,yBAAKlJ,MAAM,aACT,yBACEA,MACE,cACCyW,EAAOV,UAAYgB,EAAQhB,SACxB,kBACA,KAGN,2BAAO/V,MAAM,WAAWwH,EAAE,qDAC1B,2BACExH,MAAM,yCACNkJ,KAAK,WACLrO,KAAK,OACL6c,aAAa,cACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOT,SACd6B,OAAQX,IAETR,EAAOV,UAAYgB,EAAQhB,SAC1B,2BAAO/V,MAAM,yBACVyW,EAAOV,UAER,QAIV,yBAAK/V,MAAM,OACT,yBAAKA,MAAM,wBACT,yBACEA,MACE,cACCyW,EAAOT,OAASe,EAAQf,MACrB,kBACA,KAGN,2BAAOhW,MAAM,WAAb,SACA,2BACEA,MAAM,yCACNkJ,KAAK,QACLrO,KAAK,QACL6c,aAAa,QACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOR,MACd4B,OAAQX,IAETR,EAAOT,OAASe,EAAQf,MACvB,2BAAOhW,MAAM,yBACVyW,EAAOT,OAER,OAGR,yBAAKhW,MAAM,wBACT,yBACEA,MACE,cACCyW,EAAOR,OAASc,EAAQd,MACrB,kBACA,KAGN,2BAAOjW,MAAM,WAAWwH,EAAE,+CAC1B,2BACExH,MAAM,yCACNkJ,KAAK,QACLrO,KAAK,OACL6c,aAAa,MACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOP,MACd2B,OAAQX,EACRlV,YAAayF,EAAE,mFAEhBiP,EAAOR,OAASc,EAAQd,MACvB,2BAAOjW,MAAM,yBACVyW,EAAOR,OAER,QAIV,4BAAKzO,EAAE,8EACP,2BAAOxH,MAAM,0DACX,2BACEA,MAAM,4CACNkJ,KAAK,kBACLrO,KAAK,QACL8O,MA5XM,WA6XNgC,QA7XM,aA6XG6K,EAAON,YAChBxR,SAAU,SAAC/H,GAAD,OACRwa,EAAc,cAAexa,EAAE+M,OAAOC,UAG1C,yBAAK3J,MAAM,2EACT,uBAAGA,MAAM,8EAEX,8BACGwH,EAAE,gGAOH,6BACA,0BAAMxH,MAAM,kBACTwV,GAA0BF,EACzB,4CACI,2BAAI9N,EAAE,uEAAoB,IAC3BA,EAAE,2IACH,8BAEA,KAPN,QAQKA,EAAE,8MACJ8N,EACC,oCACE,6BACA,sCACK9N,EAAE,2JAGP,QAKT4P,EACD,2BACEpX,MACE,0DACC2V,EAAe,GAAK,gBAGvB,2BACE3V,MAAM,4CACNkJ,KAAK,kBACLrO,KAAK,QACL8O,MA7aE,OA8aFgC,QA9aE,SA8aO6K,EAAON,YAChBmB,UAAW1B,EACXjR,SAAU,SAAC/H,GACTwa,EAAc,cAAexa,EAAE+M,OAAOC,OACtCwN,EAAc,eA9aP,kBAibX,yBAAKnX,MAAM,2EACT,uBAAGA,MAAM,8EAEX,8BACGwH,EAAE,gIACH,sCACExH,MAAM,YACNtF,IACE4F,mCAHJ,QAMQ,iBAEPqV,EAAe,KACd,8BAAOnO,EAAE,kLAEX,6BACA,0BAAMxH,MAAM,kBACTuV,EACC,2CACI,IACF,2BACG/N,EACC,+QAGJ,8BAEA,KACHgO,GAA0BF,EACzB,sCACK9N,EAAE,0IACL,8BAEA,KAjBN,QAkBKA,EAAE,+NAKX,wBAAIxH,MAAM,WAAWwH,EAAE,0FAEvB,2BAAOxH,MAAM,kDACX,2BACEpC,GAAG,0BACHoC,MAAM,4CACNkJ,KAAK,mBACLrO,KAAK,QACL8O,MAjeS,cAkeTgC,QAleS,gBAkeA6K,EAAOL,aAChBzR,SAAU,SAAC/H,GAAD,OACRwa,EAAc,eAAgBxa,EAAE+M,OAAOC,QAEzCkO,gBAteS,gBAuePrB,EAAOL,aAET2B,gBAAc,oCAEhB,yBAAK9X,MAAM,2EACT,uBAAGA,MAAM,8EAEX,8BACGwH,EAAE,+HACH,uBACE6I,KAAK,kCACL3G,OAAO,UAEP,sCACE1J,MAAM,YACNtF,IACE4F,mCAHJ,QAMQ,kBAEL,IACJkH,EAAE,mGACH,6BACCgQ,EACC,0BAAMxX,MAAM,kBAAZ,QACKwH,EAAE,gLAAqC,IACzCgQ,GAED,KACJ,6BACA,0BAAMxX,MAAM,kBAAZ,OACI,IACDwV,GACDF,IA9gBI,aA+gBHkB,EAAON,aA5gBH,cA6gBHM,EAAON,aACL1O,EAAE,uHACFA,EACE,iQAEA,IACR,6BACA,0BAAMxH,MAAM,kBAAZ,QACKwH,EAAE,sPAKX,2BACExH,MACE,kDACwB,SAAvBwW,EAAON,YAAyB,cAAgB,KAGnD,2BACElW,MAAM,4CACNkJ,KAAK,mBACLrO,KAAK,QACL8O,MAjiBM,UAkiBNgC,QAliBM,YAkiBG6K,EAAOL,aAChBzR,SAAU,SAAC/H,GAAD,OACRwa,EAAc,eAAgBxa,EAAE+M,OAAOC,QAEzC0N,SA3iBE,SA4iBAb,EAAON,YAET2B,gBAziBM,YA0iBJrB,EAAOL,aAET2B,gBAAc,iCAEhB,yBAAK9X,MAAM,2EACT,uBAAGA,MAAM,8EAEX,8BACG,IACAwH,EAAE,gMACH,6BACCgQ,EACC,0BAAMxX,MAAM,kBAAZ,QACKwH,EAAE,gLAAqC,IACzCgQ,GAED,KACJ,6BACA,0BAAMxX,MAAM,kBAAZ,OACI,IAEEwH,EADH8N,EAEK,kZAGA,iQAGR,6BACA,0BAAMtV,MAAM,kBAAZ,QACKwH,EAAE,sPAIX,6BACE,kBAACuQ,GAAA,EAAD,CACEC,GA/kBS,gBA+kBLxB,EAAOL,cAEX,yBAAKvY,GAAG,mCACN,6BACG4J,EACC,kgBAEF,uBACE6I,KAAK,mCACL3G,OAAO,SACP1J,MAAM,wBAHR,mBAQDsV,GAnmBG,aAomBHkB,EAAON,aAjmBH,cAkmBHM,EAAON,YAQL,KAPF,oCACE,6BACG1O,EACC,2fAKR,yBAAKxH,MAAM,eACT,yBAAKA,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOlU,MAAQwU,EAAQxU,KACpB,kBACA,KAGN,2BAAOvC,MAAM,WAAWwH,EAAE,mCAC1B,2BACExH,MAAM,yCACNkJ,KAAK,OACLrO,KAAK,OACL6c,aAAa,iBACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOjU,KACdqV,OAAQX,IAETR,EAAOlU,MAAQwU,EAAQxU,KACtB,2BAAOvC,MAAM,yBACVyW,EAAOlU,MAER,OAGR,yBAAKvC,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOL,WAAaW,EAAQX,UACzB,kBACA,KAGN,2BAAOpW,MAAM,WACVwH,EAAE,8JAEL,2BACExH,MAAM,yCACNkJ,KAAK,YACLrO,KAAK,SACLkH,YAAayF,EAAE,uEACf9C,SAAUsS,EACVrN,MAAO6M,EAAOJ,UACdwB,OAAQX,IAETR,EAAOL,WAAaW,EAAQX,UAC3B,2BAAOpW,MAAM,yBACVyW,EAAOL,WAER,KACJ,yBAAKpW,MAAM,eACT,uBACEqQ,KAAK,kCACL3G,OAAO,UAENlC,EAAE,uKAMb,yBAAKxH,MAAM,OACT,yBAAKA,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOJ,SAAWU,EAAQV,QACvB,kBACA,KAGN,2BAAOrW,MAAM,WACVwH,EAAE,qIAEL,8BACExH,MAAM,yCACNkJ,KAAK,UACLxE,SAAUsS,EACVrN,MAAO6M,EAAOH,QACduB,OAAQX,EACR1G,KAAK,MAENkG,EAAOJ,SAAWU,EAAQV,QACzB,2BAAOrW,MAAM,yBACVyW,EAAOJ,SAER,UAMd,kBAAC0B,GAAA,EAAD,CACEC,GAzsBM,YAysBFxB,EAAOL,cAEX,yBAAKvY,GAAG,gCACN,6BACG4J,EACC,kgBAEF,uBACE6I,KAAK,mCACL3G,OAAO,SACP1J,MAAM,wBAHR,mBAQDsV,GA9tBG,aA+tBHkB,EAAON,aA5tBH,cA6tBHM,EAAON,YAQL,KAPF,oCACE,6BACG1O,EACC,2fAKR,yBAAKxH,MAAM,eACT,yBAAKA,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOlU,MAAQwU,EAAQxU,KACpB,kBACA,KAGN,2BAAOvC,MAAM,WAAWwH,EAAE,mCAC1B,2BACExH,MAAM,yCACNkJ,KAAK,OACLrO,KAAK,OACL6c,aAAa,iBACbC,UAAQ,EACRjT,SAAUsS,EACVrN,MAAO6M,EAAOjU,KACdqV,OAAQX,IAETR,EAAOlU,MAAQwU,EAAQxU,KACtB,2BAAOvC,MAAM,yBACVyW,EAAOlU,MAER,QAIV,yBAAKvC,MAAM,OACT,yBAAKA,MAAM,YACT,yBACEA,MACE,cACCyW,EAAO5V,SAAWkW,EAAQlW,QACvB,kBACA,KAGN,2BAAOb,MAAM,WACVwH,EAAE,0FAEL,8BACExH,MAAM,yCACN0E,SAAUsS,EACVrN,MAAO6M,EAAO3V,QACd+W,OAAQX,EACR1G,KAAK,IACLrH,KAAK,UACLnH,YAAayF,EACX,mKAEFkQ,aAAa,mBAEdjB,EAAO5V,SAAWkW,EAAQlW,QACzB,2BAAOb,MAAM,yBACVyW,EAAO5V,SAER,OAIR,yBAAKb,MAAM,YACT,yBACEA,MACE,cACCyW,EAAOJ,SAAWU,EAAQV,QACvB,kBACA,KAGN,2BAAOrW,MAAM,WACVwH,EAAE,qIAEL,8BACExH,MAAM,yCACNkJ,KAAK,UACLxE,SAAUsS,EACVrN,MAAO6M,EAAOH,QACduB,OAAQX,EACR1G,KAAK,MAENkG,EAAOJ,SAAWU,EAAQV,QACzB,2BAAOrW,MAAM,yBACVyW,EAAOJ,SAER,YASlB,2BAAOrW,MAAM,qCACX,2BACEA,MAAM,4CACNnF,KAAK,WACL6J,SAAU,SAAC/H,GAAD,OACRwa,EAAc,YAAaxa,EAAE+M,OAAOiC,UAEtCA,QAAS6K,EAAOF,UAChBsB,OAAQX,IAEV,yBAAKjX,MAAM,4DACT,uBAAGA,MAAM,KAAK8L,kBAAgB,YAE/BtE,EACC,qRAIJ,4BACExH,MAAM,6EACNnF,KAAK,UAEJ2M,EAAE,mIAA2B,IAC9B,uBAAGxH,MAAM,iCCp2BvBiY,G,kDACJ,WAAYhgB,GAAQ,IAAD,sBACjB,cAAMA,GAEN,IACE,EAAKigB,oBAAqB,EAC1B,EAAK1F,QAAUL,IAAMrO,IAAI,WACrB,EAAK0O,SAAwC,UAA7B,EAAKA,QAAQC,cAC/B,EAAKyF,oBAAqB,GAE5B,MAAOvb,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAVzC,S,qDAcT,IAAD,EACaL,KAAKrE,MAAdsF,GADJ,EACCiK,EADD,EACIjK,MACP4a,EAAU7L,EAAa/O,GAI3B,OAHIjB,KAAK4b,qBACPC,EAAU,UAGV,4BAAQva,GAAG,YAAYoC,MAAM,8BAC3B,yBAAKA,MAAM,yDACT,yBAAKA,MAAM,aACT,yBAAKA,MAAM,kCACT,6BACE,uBAAGA,MAAM,eAAeqQ,KAAM8H,GAC5B,yBACEzd,IACE4F,qCAEFN,MAAM,YACNxB,MAAO,CAAEkW,UAAW,QACpBjJ,IAAI,uB,GAlCHhL,aA6CNyH,iBAAkB+P,IC/C3BG,G,uKACM,IACA5Q,EAAMlL,KAAKrE,MAAXuP,EACR,OACE,4BAAQxH,MAAM,sBACZ,yBAAKA,MAAM,6BACT,yBAAKA,MAAM,OACT,yBAAKA,MAAM,uDACT,yBAAKA,MAAM,+BACT,yBAAKA,MAAM,6CACT,0BAAMA,MAAM,uCAAZ,uBAKF,yBAAKA,MAAM,6CACT,0BAAMA,MAAM,kDAAZ,KAGA,8BACE,uBACEA,MAAM,sDACNqQ,KAAK,+BAEL,uBAAGrQ,MAAM,0BAA0BqY,cAAY,SAJjD,wBAOA,6BACA,uBACErY,MAAM,gEAKNqQ,KAAK,qBAEL,uBAAGrQ,MAAM,qBAAqBqY,cAAY,SAR5C,mBAcJ,6BACE,yBAAKrY,MAAM,6CACT,0BAAMA,MAAM,kDAAZ,KAGA,0BAAMA,MAAM,iDAAZ,gDAEE,6BAFF,iCAOJ,6BACE,yBAAKA,MAAM,6CACT,0BAAMA,MAAM,kDAAZ,KAGA,8BACE,uBACEA,MAAM,gEAKNqQ,KAAK,gBAEJ7I,EAAE,oFAEL,6BACA,uBACExH,MAAM,gEAKNqQ,KAAK,gBAEJ7I,EAAE,kHAQf,yBAAKxH,MAAM,8BACT,wBAAIA,MAAM,8CACR,wBACEA,MAAM,2BACNsY,cAAY,UACZC,iBAAe,MACfC,MAAM,GACNC,sBAAoB,YAEpB,uBACEpI,KAAK,sCACL3G,OAAO,SACP1J,MAAM,kDAEN,uBAAGA,MAAM,qBAGb,wBACEA,MAAM,2BACNsY,cAAY,UACZC,iBAAe,MACfC,MAAM,GACNC,sBAAoB,aAEpB,uBACEpI,KAAK,uCACL3G,OAAO,SACP1J,MAAM,kDAEN,uBAAGA,MAAM,sBAGb,wBACEA,MAAM,2BACNsY,cAAY,UACZC,iBAAe,MACfC,MAAM,GACNC,sBAAoB,SAEpB,uBACEpI,KAAK,mCACL3G,OAAO,SACP1J,MAAM,kDAEN,yBACEtF,IACE4F,6CAGF9B,MAAO,CAAE1E,OAAQ,YAIvB,wBACEkG,MAAM,2BACNsY,cAAY,UACZC,iBAAe,MACfC,MAAM,GACNC,sBAAoB,YAEpB,uBACEpI,KAAK,0BACL3G,OAAO,SACP1J,MAAM,kDAEN,uBAAGA,MAAM,8B,GAxJRS,aAoKNyH,iBAAkBkQ,I,mDCrK3B7U,GAAMC,IAAMC,OAAO,CACvBC,QAAS,kBAkEIC,GALF,CACX+U,iBA3D8B,SAACpD,GAC/B,OAAO/R,GACJO,IADI,gBACSwR,GAAsB,CAClCvR,QAAS,CACP,eAAgB,sBAGnB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,OAmCpB0U,wBA/BqC,SAACrD,EAAoBsD,GAC1D,OAAOrV,GACJO,IADI,gBACSwR,EADT,YAC+BsD,GAAiB,CACnD7U,QAAS,CACP,eAAgB,sBAGnB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,QC7ChB4U,G,kDACJ,WAAY5gB,GAAQ,IAAD,uBACjB,cAAMA,IAoVR6gB,kBAAoB,SAACnc,GACnB,EAAKyJ,SAAS,CAAE2S,UAAWpc,EAAE+M,OAAOC,SAtVnB,EAyVnBqP,kBAAoB,SAACrc,GACnBA,EAAEwN,iBADuB,IAGjB3C,EAAM,EAAKvP,MAAXuP,EAERyR,KACGnV,IADH,qBACqB,EAAK7B,MAAM8W,UADhC,YAC6C,EAAK9W,MAAMiX,YACrDC,KAAI,SAACpe,EAAOyR,GACX,GAAIzR,EACF3C,QAAQC,IAAI0C,GACZqe,MACE5R,EACE,mjBACEzM,OAED,CACL,IAAIse,GAAY,EAChB,IACE,IAAMC,EAAWzE,SAASrI,EAAOoD,MAC5B2J,MAAMD,IAAa,EAAKrX,MAAMiX,YAAcI,IAC/CD,GAAY,EACZ,EAAKjT,SAAS,CACZoT,qBAAsBF,EACtBG,mBAAmB,EACnBC,mBAAoB,EAAKzX,MAAM8W,UAC/BrQ,MAAO,EAAKiR,SAASL,EAAU,EAAKrX,MAAMqV,iBAG9C,MAAO3a,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAGrD0c,GACH,EAAKjT,SAAS,CACZqT,mBAAmB,EACnBC,mBAAoB,GACpBF,qBAAsB,EAAKvX,MAAMiX,UACjCxQ,MAAO,EAAKiR,SACV,EAAK1X,MAAMiX,UACX,EAAKjX,MAAMqV,qBAhYN,EAwYnBsC,sBAAwB,SAACC,EAAKC,GAC5B,OAAOpT,KAAKqT,MAAMrT,KAAKsT,UAAYF,EAAMD,EAAM,GAAKA,IAzYnC,EA4YnBlD,SAAW,SAACha,EAAG7B,GAAc,IAAD,IAC1B,EAAKsL,SAAS,CACZ6T,cAAc,IAGhB,EAAKzH,QAAQ9J,MAAQ,EAAKzG,MAAMyG,MAChC,EAAK8J,QAAQ0G,UAAY,EAAKjX,MAAMiX,UACpC,EAAK1G,QAAQuG,UAAY,EAAK9W,MAAM8W,UACpC,EAAKvG,QAAQ8E,aAAe,EAAKrV,MAAMqV,aACf,EAAK9E,QAArBC,YATkB,IAmCNyH,EAAKC,EAzBnBC,EAAQ,CACZxc,GAAI,EAAKyc,QACT7H,QAAS,EAAKA,QACd8H,SAAU3d,EACV2Y,mBAAoB,EAAKA,oBAG3B,EAAKlP,SAAS,CACZmU,UAAU,eACL,EAAKtY,MAAMsY,UADP,CAEPC,YAAW,UAAEJ,EAAME,gBAAR,aAAE,EAAgBtE,MAC7ByE,YAAW,UAAEL,EAAME,gBAAR,aAAE,EAAgBrE,UAIjC,IACE,IAAMyE,EAAWC,KAAQ7W,IAAI,YAC7BsW,EAAME,SAASI,SAAWA,EAC1B,MAAO/d,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAG1D,IAOoC,IANrB/E,OAAOC,SAASC,SAMpBsF,QAAQ,eAEZgd,GACAA,EAAME,WAPOJ,EAQJE,EAAME,SAAStE,MARNmE,EAQa,aAP0B,IAArDD,EAAI9c,QAAQ+c,EAAQD,EAAInV,OAASoV,EAAOpV,WAS7CnN,OAAOuZ,KAAK,QAAS,QAAS,CAC5BC,QAAS,EAAKwJ,OACdvJ,eAAgB,OAChB1H,MAAO,EAAK6I,QAAQ9J,MACpBmS,SAAU,QAGZjjB,OAAO2Z,IAAI,cAAe,EAAKuJ,QAAS,WAAY,CAClDnR,MAAO,EAAK6I,QAAQ9J,MACpBmS,SAAU,UAIhB,MAAOle,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAG1Dsc,KACG8B,KADH,wBAEGC,KAAKZ,GACLjB,KAAI,SAACpe,EAAOyR,GACX,IAAI6M,GAAY,EAMhB,GALA,EAAKjT,SAAS,CACZ6T,cAAc,IAEhBnf,KAEKC,EACH,IACE,IACkC,IAAlC,GADwB8Z,SAASrI,EAAOoD,QAChBwK,EAAMxc,GAC5Byb,GAAY,EAEyB,YAA5B,OAALe,QAAK,IAALA,GAAA,UAAAA,EAAOE,gBAAP,eAAiBpE,aACnB,EAAK+E,YAAYthB,QAAQuhB,SACiB,eAA5B,OAALd,QAAK,IAALA,GAAA,UAAAA,EAAOE,gBAAP,eAAiBpE,aAC1B,EAAKiF,eAAexhB,QAAQuhB,SAE5B,EAAKjjB,MAAMmjB,QAAQ1N,KAAK,CACtB4G,SAAS,cAAD,OAAgB8F,EAAMxc,WAKlC7C,EAAQ,8BAEV,MAAO4B,GACP5B,EAAQ4B,GACPvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAIvD0c,GACHD,MAAM,kjBAAD,OACkHre,QA/e5G,EAqfnBsgB,eAAiB,SAAC7d,EAAUnD,EAAO6C,GACjC,IAAK7C,EAAO,OAAOmD,EAInB,GAAiB,OAAbA,GAAqB,EAAK8d,YAAYjhB,EAF1B,CAAC,SAAK,SAAK,SAAK,WAG9B,MAAO,KACF,GAAiB,OAAbmD,GAAqB,EAAK8d,YAAYjhB,EALjC,CAAC,SAAK,SAAK,WAMzB,MAAO,KAET,IAAMkhB,EAAgB,+EACtB,OAAKA,EAAc7E,KAAKrc,IACjB6C,GAAUqe,EAAc7E,KAAKxZ,GAK7BM,EAJI,MAlgBM,EAygBnBge,uBAAyB,SAACnhB,EAAO6C,GAC/B,IAAMue,EAAU,CAAC,SAAK,SAAK,UACrBC,EAAU,CAAC,SAAK,SAAK,SAAK,UAC1BH,EAAgB,+EAEtB,GAAI,EAAKD,YAAYjhB,EAAOqhB,IAC1B,GACE,EAAKJ,YAAYpe,EAAOue,IACvBve,IAAUqe,EAAc7E,KAAKxZ,GAE9B,OAAO,OAEJ,GAAI,EAAKoe,YAAYjhB,EAAOohB,IACjC,GACE,EAAKH,YAAYpe,EAAOwe,IACvBxe,IAAUqe,EAAc7E,KAAKxZ,GAE9B,OAAO,OAEJ,GAAI7C,IAAUkhB,EAAc7E,KAAKrc,IAClC6C,GAASqe,EAAc7E,KAAKxZ,GAC9B,OAAO,EAIX,OAAO,GAliBU,EAqiBnBoe,YAAc,SAACpB,EAAKyB,GAClB,IAAKzB,EACH,OAAO,KAET,IAAK,IAAIzN,EAAI,EAAGA,GAAKkP,EAAW5W,OAAQ0H,IAAK,CAC3C,IAAMmP,EAAYD,EAAWlP,GAC7B,IAA+B,GAA3ByN,EAAI9c,QAAQwe,GACd,OAAOA,EAGX,OAAO,MA/iBU,EAkjBnBnE,sBAAwB,SAAC9N,GACvB,EAAKvD,SAAS,CACZkR,aAAc3N,EACdjB,MAAO,EAAKiR,SAAS,EAAK1X,MAAMuX,qBAAsB7P,MArjBvC,EAyjBnBkS,uBAAyB,SAAC5jB,GACxB,IAAI6jB,EAAc,KACdC,EAAe,KACfC,EAAe,KAqCnB,OApCI/jB,EAAM6jB,cACRA,EAAc7jB,EAAM6jB,YAAY1f,KAAI,SAAC8M,EAAMmC,GACzC,OACE,2BACEnC,KAAK,gBACLqC,IAAG,qBAAgBF,GACnB1B,MAAOT,EACP+S,UAAQ,QAKZhkB,EAAM8jB,eACRA,EAAe9jB,EAAM8jB,aAAa3f,KAAI,SAAC8f,EAAO7Q,GAC5C,OACE,2BACEnC,KAAK,iBACLqC,IAAG,sBAAiBF,GACpB1B,MAAOuS,EACPD,UAAQ,QAKZhkB,EAAM+jB,eACRA,EAAe/jB,EAAM+jB,aAAa5f,KAAI,SAACsM,EAAO2C,GAC5C,OACE,2BACEnC,KAAK,iBACLqC,IAAG,sBAAiBF,GACpB1B,MAAOjB,EACPuT,UAAQ,QAMd,oCACGH,EACAC,EACAC,IAlmBL,EAAKzY,IAAMC,IAAMC,OAAO,CACtBC,QAAS,SAGX,EAAKuX,YAAc3gB,IAAMC,YACzB,EAAK4gB,eAAiB7gB,IAAMC,YAE5B,EAAK4hB,cAAe,EACpB,IAAM/I,EAAcC,KAAYC,MAAMrb,EAAMJ,SAAS0b,QACjDH,GACEA,EAAYsD,OACd,EAAKyF,cAAe,GAIxB,IAAIjgB,EAAI,IAAIkW,KACZ,EAAKiI,QAAU,EAAKT,sBAAsB,IAAM,MAChD,EAAKwC,YACHlgB,EAAEmgB,cAAcC,WAAWC,QAAQ,GACnC,IACA,WAAIrgB,EAAEsgB,WAAa,GAAIxX,OAAO,GAC9B,IACA,WAAI9I,EAAE2X,WAAY7O,OAAO,GACzB,IACA,EAAKqV,QAEP,IAAIoC,EAAM,GACV,IACEA,EAAM7kB,OAAOC,SAAS6kB,SAAW,KAAO9kB,OAAOC,SAAS8kB,KACxD,MAAOhgB,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAE1D,EAAKigB,YAAcH,EAAMnQ,EAAa/O,KAAQ,cAAgB,EAAK8c,QACnE,EAAKwC,UAAYJ,EAAM,yBAEvB,EAAKjK,QAAUL,IAAMrO,IAAI,WAEpB,EAAK0O,UACR,EAAKA,QAAU,CACblR,YAAa,KA1CA,MA8CsC,EAAKkR,QAApDC,EA9CS,EA8CTA,YAAapK,EA9CJ,EA8CIA,SAAUM,EA9Cd,EA8CcA,OAAQD,EA9CtB,EA8CsBA,MAAOhK,EA9C7B,EA8C6BA,KA9C7B,OAgDjB,EAAK8T,QAAQsK,KAAO,GAChBrK,GAA+B,QAAhBA,GACb,EAAKD,QAAQtV,OAAS,EAAKsV,QAAQH,wBACrC,EAAKG,QAAQsK,MAAQ,+LAKpB,EAAKtB,uBAAuB,EAAKhJ,QAAQnY,MAAO,EAAKmY,QAAQtV,SAChE,EAAKsV,QAAQsK,MAAQ,6MAGnBrK,GAA+B,UAAhBA,GACjB,EAAKqJ,YAAL,4GAAwCpd,GACxC,EAAKoc,QAAU,kBACf,EAAKF,OAAS,mBAEd,EAAKkB,YAAL,6GAAyCpd,GACzC,EAAKoc,QAAU,kBACf,EAAKF,OAAS,kBAGhB,EAAKtF,oBAAqB,GAEX,mCAAbjN,GACc,yCAAbA,GAAoC,uBAAXM,GACZ,uBAAbN,IAAkC,uBAAXM,GAA+B,mCAAXA,MAE5C,EAAK2M,oBAAqB,GAG5B,EAAKK,cAAe,EACP,6BAATjX,GAAuC,yCAAb2J,GAAoC,uBAAXM,IACrD,EAAKgN,cAAe,GAGtB,EAAKoH,mBAAoB,EACV,mCAAXpU,GAAgC,4BAATjK,GAAgC,4BAATA,IAChD,EAAKqe,mBAAoB,GAG3B,EAAKvH,wBAAyB,EAC9B,EAAKD,gBAAiB,EAClB7M,EAAQ,OACV,EAAK6M,gBAAiB,GAGxB,EAAKtT,MAAQ,CACX0Q,SAAU,KACVsH,cAAc,EACdf,UAAWxQ,EACX8Q,qBAAsB9Q,EACtBqQ,UAAW,GACXW,mBAAoB,GACpBD,mBAAmB,EACnBnC,aAAc,KACd5O,MAAOA,EACPsU,WAAY,GACZC,gBAAiB,GACjB1C,UAAW,GACX7E,oBAAoB,EACpBE,cAAe,MAGb,EAAKpD,QAAQpW,MACf,EAAKoW,QAAQpW,IAAIoB,SAAW,EAAK6d,eAC/B,EAAK7I,QAAQpW,IAAIoB,SACjB,EAAKgV,QAAQnY,MACb,EAAKmY,QAAQtV,QAIjB9E,QAAQC,IAAI,eACZT,OAAO8U,YAAc,WAAO,IAAD,EAoBrB,EAAK8F,QAlBPnZ,EAFuB,EAEvBA,KACAuT,EAHuB,EAGvBA,WACAC,EAJuB,EAIvBA,YACArO,EALuB,EAKvBA,MALuB,IAMvB6C,MAASyL,EANc,EAMdA,UAAWC,EANG,EAMHA,UANG,IAOvB3Q,IACE4Q,EARqB,EAQrBA,SACAC,EATqB,EASrBA,UACAjT,EAVqB,EAUrBA,eACAE,EAXqB,EAWrBA,gBACAmF,EAZqB,EAYrBA,WACAD,EAbqB,EAarBA,OACA8N,EAdqB,EAcrBA,cACAC,EAfqB,EAerBA,wBACAC,EAhBqB,EAgBrBA,YACA3P,EAjBqB,EAiBrBA,eACAD,EAlBqB,EAkBrBA,SAuBE6P,EAAQX,EAnBJ,CACRrT,OACAuT,aACAC,cACArO,QACAsO,YACAC,YACAC,WACAC,YACAjT,iBACAE,kBACAmF,aACAD,SACA8N,gBACAC,0BACAC,cACA3P,iBACAD,aAIFpF,QAAQC,IAAIgV,IApKG,E,gEAwKE,IAAD,OAClB,IAEoC,IADrBzV,OAAOC,SAASC,SACpBsF,QAAQ,eACfxF,OAAOuZ,KAAK,QAAS,OAAQ,CAC3BC,QAAS9U,KAAKse,OACdvJ,eAAgB,SAGlBzZ,OAAO2Z,IAAI,cAAejV,KAAKwe,QAAS,cAE1C,MAAOne,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAGtDL,KAAK2F,MAAMyT,oBACbpZ,KAAK4gB,8BACH5gB,KAAK8f,YACL9f,KAAK2F,MAAMyG,MACXpM,KAAKwf,aAIT,IACEqB,GACGzE,iBAAiBpc,KAAKgZ,oBACtBtU,MAAK,SAACgD,GACL,EAAKoC,SAAS,CACZwP,cAAe5R,OAGlBxC,OAAM,SAAC7E,GACN,EAAKyJ,SAAS,CACZwP,cAAe,QAEhBxd,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,MAE5D,MAAOA,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,M,yCAIzC6J,EAAW6F,GAG1BA,EAAU3D,QAAUpM,KAAK2F,MAAMyG,OAI3BpM,KAAK2F,MAAMyT,oBACbpZ,KAAK4gB,8BACH5gB,KAAK8f,YACL9f,KAAK2F,MAAMyG,MACXpM,KAAKwf,e,+BAMJtC,EAAsBlC,GAC7B,GAA4B,MAAxBkC,EACJ,OAAoB,MAAhBlC,EAA6BkC,EAC1BA,EAAuBlC,I,oDAGF8E,EAAagB,EAAKtB,GAAc,IAAD,OAC3Dxf,KAAK8J,SAAS,CAAEiX,WAAW,EAAM9C,UAAW,KAC5Cje,KAAKghB,2BAA2BlB,EAAagB,EAAKtB,GAC/C9a,MAAK,SAACuc,GACLnlB,QAAQC,IAAI,qCAAsCklB,GAClD,EAAKnX,SAAS,CACZiX,WAAW,EACX9C,UAAU,aACRiD,UAAW,EAAKZ,YAChBa,WAAY,EAAKZ,WACdU,GAEL7H,oBAAoB,OAGvBlU,OAAM,SAAC7E,GACN,EAAKyJ,SAAS,CAAEiX,WAAW,EAAO3H,oBAAoB,KACrDtd,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,Q,iDAInCyf,EAAagB,EAAKtB,GAC3C,IAAMvX,EAAU,CACdmZ,eAAgBtB,EAChBuB,OAAQP,EACRtB,YAAaA,GAGf,OAAOxf,KAAKiH,IACTwX,KAAK,kBAAmB1W,KAAKC,UAAUC,GAAU,CAChDR,QAAS,CACP,eAAgB,sBAGnB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,Q,iDAIKoW,EAAS+C,EAAKR,GAAc,IAAD,OACpDtgB,KAAK8J,SAAS,CAAEiX,WAAW,EAAML,WAAY,GAAIC,gBAAiB,KAClE3gB,KAAKshB,wBAAwBvD,EAAS+C,EAAKR,GACxC5b,MAAK,SAACuc,GACLnlB,QAAQC,IAAI,kCAAmCklB,EAAIjiB,MACnD,EAAK8K,SAAS,CACZiX,WAAW,EACXL,WAAYO,EAAIjiB,KAChB2hB,gBAAiBM,EAAIM,eAGxBrc,OAAM,SAAC7E,GACN,EAAKyJ,SAAS,CAAEiX,WAAW,KAC1BjlB,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,Q,8CAItC0d,EAAS+C,EAAKR,GACpC,IAAMrY,EAAU,CACd8V,QAASA,EACT+C,IAAKA,EACLR,YAAaA,GAGf,OAAOtgB,KAAKiH,IACTwX,KAAK,UAAW1W,KAAKC,UAAUC,GAAU,CACxCR,QAAS,CACP,eAAgB,sBAGnB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,Q,+BA0RpB7L,QAAQC,IAAI,kBADL,IAGCmP,EAAMlL,KAAKrE,MAAXuP,EAHD,EAQHlL,KAAKkW,QAFPjQ,EANK,EAMLA,KANK,IAOLjB,YAAe+G,EAPV,EAOUA,SAAU3J,EAPpB,EAOoBA,KAAMiK,EAP1B,EAO0BA,OAAQnK,EAPlC,EAOkCA,MAEzC,OACE,yBAAKwB,MAAM,sBACT,kBAAC,GAAD,MAEA,yBAAKA,MAAM,6BACT,yBAAKA,MAAM,eACT,yBAAKA,MAAM,QACT,wBAAIA,MAAM,MAAMwH,EAAE,gIAGtB,yBAAKxH,MAAM,OACT,yBAAKA,MAAM,+BACT,kBAAC,GAAD,CACE2W,SAAUra,KAAKqa,SACfrB,mBAAoBhZ,KAAKgZ,mBACzBE,uBAAwBlZ,KAAKkZ,uBAC7BD,eAAgBjZ,KAAKiZ,eACrBG,mBAAoBpZ,KAAK2F,MAAMyT,mBAC/B+B,sBAAuBnb,KAAKmb,sBAC5B7B,cAAetZ,KAAK2F,MAAM2T,cAC1BD,aAAcrZ,KAAKqZ,gBAGvB,yBAAK3V,MAAM,+BACT,yBAAKA,MAAM,8CACT,wBAAIA,MAAM,0BACPwH,EAAE,iJAGL,yBACE5J,GAAG,eACHwS,KAAK,UACL0N,uBAAqB,QAErB,yBACElgB,GAAG,0BACHoC,MAAM,mCACNoQ,KAAK,OAEL,wBAAIpQ,MAAM,8CACR,uBACEA,MAAM,qDACNqQ,KAAK,wBACLiI,cAAY,WACZyF,cAAY,gBACZlG,gBAAc,QACdC,gBAAc,wBAEbtQ,EAAE,sHACH,0BAAMxH,MAAM,6BAIlB,yBACEpC,GAAG,uBACHoC,MAAM,WACNoQ,KAAK,WACL4N,kBAAgB,2BAEhB,yBAAKhe,MAAM,WACT,wBAAIA,MAAM,+BACR,wBAAIA,MAAM,oDACR,yBAAKA,MAAM,WACT,wBAAIA,MAAM,oBACPwH,EAAE,wCADL,IACiBjF,GAEjB,wBAAIvC,MAAM,4EACR,4BACGwH,EAAE,oDADL,KACoBa,EAAU,KAE9B,4BACGb,EAAE,wCADL,KACkB9I,GAElB,4BACG8I,EAAE,uEADL,KACwBmB,GAExB,4BACGnB,EAAE,kCADL,KACiBhJ,EAAO,MAG1B,0BAAMwB,MAAM,2CACT1D,KAAK2F,MAAMyG,MADd,IACsBlB,EAAE,6BASpC,yBACE5J,GAAG,kBACHwS,KAAK,UACL0N,uBAAqB,OACrB9d,MAAM,gBAEN,yBACEpC,GAAG,0BACHoC,MAAM,mCACNoQ,KAAK,OAEL,wBAAIpQ,MAAM,8CACR,uBACEA,MAAM,qDACNqQ,KAAK,wBACLiI,cAAY,WACZyF,cAAY,mBACZlG,gBAAc,QACdC,gBAAc,wBAEbtQ,EAAE,oDACH,0BAAMxH,MAAM,6BAKlB,yBACEpC,GAAG,uBACHoC,MAAM,WACNoQ,KAAK,WACL4N,kBAAgB,2BAEhB,yBAAKhe,MAAM,eACT,yBAAKA,MAAM,SACT,yBAAKA,MAAM,cACT,2BACEA,MAAM,yCACN+B,YAAayF,EAAE,oDACfmC,MAAOrN,KAAK2F,MAAM8W,UAClBrU,SAAUpI,KAAKwc,sBAIrB,yBAAK9Y,MAAM,SACT,4BACEA,MAAM,yEACNnF,KAAK,SACLmH,QAAS1F,KAAK0c,mBAEbxR,EAAE,yEAIRlL,KAAK2F,MAAMwX,kBACV,yBAAKzZ,MAAM,yCACT,0BAAMA,MAAM,iBACTwH,EACC,mVAIJ,KAEHlL,KAAK2F,MAAMyX,mBACV,yBAAK1Z,MAAM,yCACT,0BAAMA,MAAM,iBACTwH,EAAE,oDADL,IACmBlL,KAAK2F,MAAMyX,mBAAoB,IAC/ClS,EAAE,8EAGL,OAGR,uBACExH,MAAM,2FACNqQ,KAAK,eACL3G,OAAO,UAEP,uBAAG1J,MAAM,2BAA8B,IACtCwH,EAAE,6GAEL,yBAAKxH,MAAM,0CACT,0BAAMA,MAAM,iBACTwH,EAAE,yHAEL,8BACGlL,KAAK2F,MAAMyX,mBACV,6BACE,0BAAM1Z,MAAM,mCACT1D,KAAK2F,MAAMiX,UAAW,MAGzB,KAEJ,0BAAMlZ,MAAM,mCACT1D,KAAK2F,MAAMuX,qBADd,IACqChS,EAAE,yBAIf,MAA3BlL,KAAK2F,MAAMqV,aACV,6BACE,yBAAKtX,MAAM,0CACT,0BAAMA,MAAM,iBAAiBwH,EAAE,qDAC/B,8BACE,0BAAMxH,MAAM,mCACmB,IAA5B1D,KAAK2F,MAAMqV,aACV,oCAAG9P,EAAE,uEAEL,oCACGlL,KAAK2F,MAAMqV,aADd,IAC6B9P,EAAE,0BAMvC,yBAAKxH,MAAM,2EACT,0BAAMA,MAAM,iBAAiBwH,EAAE,sDAC/B,8BACE,0BAAMxH,MAAM,mCACT1D,KAAK2F,MAAMyG,MADd,IACsBlB,EAAE,0BAK5B,SAKZ,0BACEyW,OAAO,OACPC,OAAO,uCACPC,cAAc,QACdne,MAAM,SACNC,IAAK3D,KAAK2e,aAEV,2BAAOpgB,KAAK,SAASqO,KAAK,OAAOS,MAAOrN,KAAK2F,MAAM+a,aACnD,2BACEniB,KAAK,SACLqO,KAAK,YACLS,MAAOrN,KAAK2F,MAAMgb,kBAEpB,2BACEpiB,KAAK,QACLH,IAAI,gDAGR,0BACEujB,OAAO,OACPC,OAAO,mCACPC,cAAc,QACdne,MAAM,SACNC,IAAK3D,KAAK6e,gBAEV,2BACEjS,KAAK,kBACLS,MAAOrN,KAAK2F,MAAMsY,UAAU6D,gBAC5BnC,UAAQ,IAEV,2BACE/S,KAAK,qBACLS,MAAOrN,KAAK2F,MAAMsY,UAAU8D,mBAC5BpC,UAAQ,IAEV,2BACE/S,KAAK,oBACLS,MAAOrN,KAAK2F,MAAMsY,UAAU+D,kBAC5BrC,UAAQ,IAGV,2BACE/S,KAAK,iBACLS,MAAOrN,KAAK2F,MAAMsY,UAAUmD,eAC5BzB,UAAQ,IAEV,2BACE/S,KAAK,YACLS,MAAOrN,KAAK2F,MAAMsY,UAAUgE,UAC5BtC,UAAQ,IAEV,2BAAO/S,KAAK,SAASS,MAAOrN,KAAK2F,MAAMsY,UAAUoD,OAAQ1B,UAAQ,IACjE,2BACE/S,KAAK,WACLS,MAAOrN,KAAK2F,MAAMsY,UAAUM,SAC5BoB,UAAQ,IAET3f,KAAKuf,uBAAuBvf,KAAK2F,MAAMsY,WACxC,2BACErR,KAAK,YACLS,MAAOrN,KAAK2F,MAAMsY,UAAUiD,UAC5BvB,UAAQ,IAEV,2BACE/S,KAAK,aACLS,MAAOrN,KAAK2F,MAAMsY,UAAUkD,WAC5BxB,UAAQ,IAEV,2BACE/S,KAAK,cACLS,MAAOrN,KAAK2F,MAAMsY,UAAUC,YAC5ByB,UAAQ,IAEV,2BACE/S,KAAK,cACLS,MAAOrN,KAAK2F,MAAMsY,UAAUE,YAC5BwB,UAAQ,KAIX3f,KAAK2F,MAAMgY,aACV,yBAAKja,MAAM,mCACT,yBAAKA,MAAM,mBAEX,KAEJ,kBAAC,GAAD,W,GAr6BWS,aA26BJyH,iBAAkB2Q,ICn7B3B2F,G,kDACJ,WAAYvmB,GAAQ,IAAD,sBACjB,cAAMA,GAEN,IAAK,IAAD,IAEF,EAAK2F,GAAL,UAAU3F,EAAMF,aAAhB,iBAAU,EAAa0mB,cAAvB,aAAU,EAAqBpE,QAC/B,EAAKnC,oBAAqB,EAC1B,EAAK1F,QAAUL,IAAMrO,IAAI,WACrB,EAAK0O,SAAwC,UAA7B,EAAKA,QAAQC,cAC/B,EAAKyF,oBAAqB,GAE5B/F,IAAMuM,OAAO,WACbvM,IAAMuM,OAAO,eACbvM,IAAMuM,OAAO,mBACbvM,IAAMuM,OAAO,oBACbvM,IAAMuM,OAAO,wBACb,MAAO/hB,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GAjBzC,S,sEAsBjB,OAAKL,KAAK4b,mBAKR,yBAAKlY,MAAM,4CAA4CoQ,KAAK,SAC1D,uBAAGpQ,MAAM,WACP,uBAAGA,MAAM,sBADX,yeAIA,yBAAKA,MAAM,eACT,uBACEqQ,KAAK,mCACLrQ,MAAM,8CAEN,yBACEtF,IAAK4F,4BACL9B,MAAO,CAAE1E,OAAQ,QACjBkG,MAAM,WAPV,SAYA,uBACEqQ,KAAK,0BACLrQ,MAAM,8CAEN,yBACEtF,IAAK4F,+BACL9B,MAAO,CAAE1E,OAAQ,QACjBkG,MAAM,WAPV,cAtBG,O,+BAuCD,IAAD,EACa1D,KAAKrE,MAAjBuP,EADD,EACCA,EAAGjK,EADJ,EACIA,KACL4a,EACJ7L,EAAa/O,IAASjB,KAAK4b,mBAAqB,SAAW,IAC7D,OACE,yBAAKlY,MAAM,sBACT,kBAAC,GAAD,MACA,yBAAKA,MAAM,sBACT,yBAAKA,MAAM,wHACT,yBAAKA,MAAM,eACT,0BAAMA,MAAM,oFACV,yBACEvG,MAAM,KACNK,OAAO,KACP6kB,QAAQ,MACR/gB,GAAG,SACHghB,MAAM,6BACNC,WAAW,+BACXC,EAAE,MACFC,EAAE,MACFC,QAAQ,kBACRC,iBAAiB,sBACjBC,MAAM,YAEN,2BACE,0BACEhjB,EAAE,6KAEFL,KAAK,aAMf,yBAAKmE,MAAM,IACT,wBAAIA,MAAM,eAAewH,EAAE,4IAC3B,uBAAGxH,MAAM,eACNwH,EAAE,gGADL,IAC4BlL,KAAKsB,IAEjC,2BACG4J,EACC,4iBAGHlL,KAAK6iB,0BACN,2BACG3X,EACC,2XAIN,yBAAKxH,MAAM,eACT,uBACEqQ,KAAM8H,EACNnY,MAAM,mEAEN,uBAAGA,MAAM,wBAA2B,IACnCwH,EAAE,kIAKX,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,kBAAC,GAAD,W,GApIgB/G,aAyITyH,iBAAkBsW,I,4DCtIZY,I,yDACjB,WAAYnnB,GAAQ,IAAD,uBACf,cAAMA,IA2CVonB,cAAgB,SAACrO,GACb,IAAIrH,EAAQqH,EAAMtH,OAAOC,MACrB2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UACpCnL,EAAgBzG,EAA0BhE,GAE9C,EAAK1R,MAAMunB,kBAAX,eACOF,EADP,CAEI9gB,MAAOmL,EACP4V,SAAS,eACFA,EADC,CAEJ/gB,MAAOmL,GACJyK,OAxDI,EA6DnBqL,aAAe,SAACzO,GACZ,IAAIrH,EAAQqH,EAAMtH,OAAOC,MAErB4C,EAAQ5C,EAAM4C,MAAM,uBACpB9S,EAAiC,GAAzBob,SAAStI,EAAM,GAAI,IAC3BzS,EAAkC,GAAzB+a,SAAStI,EAAM,GAAI,IAE5B+S,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAExC,EAAKtnB,MAAMunB,kBAAX,eACOF,EADP,CAEI5gB,KAAMiL,EACN4V,SAAS,eACFA,EADC,CAEJ3S,WAAYnT,EACZoT,YAAa/S,QA7EN,EAkFnB4lB,aAAe,SAAC1O,GACZ,EAAK2O,sBAAwB,EAAK1nB,MAAMqnB,SAASjF,QAEjD,IACIuF,EADAjW,EAAQqH,EAAMtH,OAAOC,MAIzBiW,EADsB1a,IAAOyE,EAAO,oBACJ3C,MAAMD,SAEtC,IAAIuY,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAExC,EAAKnZ,SAAS,CACVyZ,cAAelW,EACfmW,0BAA0B,IAG9B,EAAK7nB,MAAMunB,kBAAX,eACOF,EADP,CAEIC,SAAS,eACFA,EADC,CAEJlmB,KAAMumB,QAvGC,EA4GnBG,cAAgB,SAAC/O,GACb,IAAMtH,EAASsH,EAAMtH,OACfR,EAAOQ,EAAOR,KAEhBS,EAAQ,KAGRA,EADQ,YAHCD,EAAO7O,KAIR6O,EAAOiC,QAEPjC,EAAOC,MAGnB,IAAI2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAE/B,EAAKrnB,MAAMunB,kBAAX,eACOF,EADP,gBAEKpW,EAAOS,MA5HG,EAgInBqW,sBAAwB,SAAChP,GACrB,IAAMtH,EAASsH,EAAMtH,OACfR,EAAOQ,EAAOR,KAEhBS,EAAQ,KAGRA,EADQ,YAHCD,EAAO7O,KAIR6O,EAAOiC,QAEPjC,EAAOC,MAGnB,IAAI2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAE3B,cAATrW,GAAiC,cAATA,GACxB,EAAK9C,SAAS,CACV0Z,0BAA0B,IAGlC,EAAK7nB,MAAMunB,kBAAX,eACOF,EADP,CAEIC,SAAS,eACFA,EADC,gBAEHrW,EAAOS,QAxJD,EA6JnBsW,4BAA8B,WAC1B,IAAI5S,EAAQX,EAAY,EAAKzU,MAAMqnB,SAASC,UAExC/S,EAAM,eACH,EAAKvU,MAAMqnB,SADR,CAENC,SAAUlS,IAGV6S,EAAe7b,KAAKC,UAAUkI,EAAQ,KAAM,GAGhD,OADApU,QAAQC,IAAI6nB,GACLA,GAxKQ,EA2KnBhJ,aAAe,SAAClG,GACZA,EAAM7G,iBACN,IAAIgW,EAAU,EAAKF,8BACnB,EAAKhoB,MAAMmoB,WAAWD,IA9KP,EAiLnBE,YAAc,SAACrP,GACXA,EAAM7G,iBACN,IAAIgW,EAAU,EAAKF,8BACnB,EAAKhoB,MAAMqoB,kBAAkBH,IApLd,EAuLnBI,sBAAwB,SAACvP,GACrBA,EAAM7G,iBACN,EAAK/D,SAAS,CAAEoa,sBAAuB,EAAKve,MAAMue,wBAzLnC,EA4LnBC,aAAe,SAACzP,GACZA,EAAM7G,iBAENuW,UAAUC,UAAUC,UADP,gBACuB5f,MAChC,WACI5I,QAAQC,IAAI,kDAEhB,SAACwoB,GACGzoB,QAAQ2C,MAAM,+BAAgC8lB,OAjMtD,IAAIC,EAAwB,EAAKC,yBAC7B,EAAK9oB,MAAMqnB,UAGX0B,EAAWzT,GAAa,GAAMnR,KAAI,SAACwN,GAAD,OAAOA,EAAEhM,MAPhC,OASf,EAAKqE,MAAL,aACI6d,0BAA0B,EAC1BU,sBAAsB,EACtBQ,YACGF,GAbQ,E,gEAkBfxkB,KAAK2kB,wB,4CAIL,GAAI3kB,KAAKrE,MAAMqnB,SAAU,CACrB,IAAIviB,EAAUT,KAAKrE,MAAMqnB,SAAS9gB,MAC9BlC,KAAK2F,MAAM+e,SAAS5jB,QAAQL,GAAW,GACvCT,KAAKrE,MAAMipB,YAAX,2FAA0CnkB,O,+CAK7BuiB,GACrB,IAAIO,EAAgB,KAChBP,GAAYA,EAASC,WACjBD,EAASC,SAASlmB,OAElBwmB,EADQ3a,IAAO8B,IAAIsY,EAASC,SAASlmB,MAAMuY,QACzB7K,OAAO,sBAIjC,MAAO,CACH8Y,mB,gDAkKJ,IAAIsB,EAAuB,GAC3B,GACI7kB,KAAKrE,MAAMqnB,UACPhjB,KAAKrE,MAAMqnB,SAASC,UACpBjjB,KAAKrE,MAAMqnB,SAASC,SAASzS,UACnC,CACE,IAAIyS,EAAWjjB,KAAKrE,MAAMqnB,SAASC,SAC/BjmB,EAAW8nB,WAAW7B,EAASzS,WAC/BvT,EAAY6nB,WAAW7B,EAASxS,WACpCoU,EAAuBlN,IAAa3a,EAAUC,GAAWwN,OACrD,cACA,CACImN,gBAAiB,IACjBC,cAAe,IAI3B,OAAOgN,I,6CAIP,OAAK7kB,KAAK2F,MAAMue,qBAEZ,yBAAKxgB,MAAM,sCACP,wBAAIA,MAAM,iBACN,wBAAIA,MAAM,0GACN,yBAAKA,MAAM,gCACP,wBAAIA,MAAM,mCAAV,+HAQJ,4YAIA,yBAAKA,MAAM,8BAwCP,yBAAKA,MAAM,qBACP,4BACIA,MAAM,2DACNgC,QAAS1F,KAAKmkB,cAFlB,2EA3DqB,O,+BAwEvC,IAAD,QACDU,EAAuB7kB,KAAK+kB,0BAE5BC,GAAmB,EACnBjZ,EAAQ,UAAG/L,KAAKrE,aAAR,iBAAG,EAAYqnB,gBAAf,aAAG,EAAsBjX,SACjCM,EAAM,UAAGrM,KAAKrE,aAAR,iBAAG,EAAYqnB,gBAAf,aAAG,EAAsB3W,OAenC,MAdiB,yCAAbN,EACe,uBAAXM,GAA+B,mCAAXA,IACpB2Y,GAAmB,GAEH,uBAAbjZ,EACQ,uBAAXM,GAA+B,mCAAXA,GAAiC,mCAAXA,IAC1C2Y,GAAmB,GAEH,mCAAbjZ,GACQ,yCAAXM,IACA2Y,GAAmB,GAKvB,0BAAM3K,SAAUra,KAAK4a,cACrB,yBAAKlX,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,gBAAX,uEACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,eACHsL,KAAK,UACLS,MAAOrN,KAAKrE,MAAMqnB,SAASjF,QAC3B3V,SAAUpI,KAAKyjB,cACfpI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,oDACA,4BACI3jB,GAAG,gBACHoC,MAAM,eACNkJ,KAAK,WACLS,MAAOrN,KAAKrE,MAAMqnB,SAASjX,SAC3B3D,SAAUpI,KAAKyjB,eACf,4BAAQ1I,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,wCAAd,wCACA,4BAAQA,MAAM,sBAAd,sBACA,4BAAQA,MAAM,kCAAd,oCAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,aAAX,wCACA,4BACI3jB,GAAG,YACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAAS5gB,KAC3BgG,SAAUpI,KAAKmjB,cACf,4BAAQpI,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,2BAAd,2BACA,4BAAQA,MAAM,2BAAd,2BACA,4BAAQA,MAAM,2BAAd,2BACA,4BAAQA,MAAM,2BAAd,6BAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,cAAX,kCACA,4BACI3jB,GAAG,aACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAAS9gB,MAC3BkG,SAAUpI,KAAK+iB,eACf,4BAAQhI,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGCrN,KAAK2F,MAAM+e,SAAS5kB,KAAI,SAACwN,GACtB,OAAO,4BAAQD,MAAOC,GAAIA,SAM1C,yBAAK5J,MAAM,+BACP,yBAAKA,MAAM,uBACP,4BACIpC,GAAG,cACHoC,MAAM,eACNkJ,KAAK,SACLS,MAAOrN,KAAKrE,MAAMqnB,SAAS3W,OAC3BjE,SAAUpI,KAAKyjB,eAEf,4BAAQ1I,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BA1FI,CAAC,qBAAO,iCAAS,iCAAS,wCA6FfvN,KAAI,SAACwN,GAChB,OAAO,4BAAQD,MAAOC,GAAIA,QAItC,yBAAK5J,MAAM,wBACP,yBAAKA,MAAM,cACP,2BACIA,MAAM,mBACNnF,KAAK,WACL+C,GAAG,YACHsL,KAAK,gBACLyC,QAASrP,KAAKrE,MAAMqnB,SAASC,SAASrS,cACtCxI,SAAUpI,KAAK0jB,wBACnB,2BAAOhgB,MAAM,mBAAmBuhB,IAAI,aAApC,oCAKR,yBAAKvhB,MAAM,wBACP,yBAAKA,MAAM,cACP,2BACIA,MAAM,mBACNnF,KAAK,WACL+C,GAAG,2BACHsL,KAAK,0BACLyC,QAASrP,KAAKrE,MAAMqnB,SAASC,SAASpS,wBACtCzI,SAAUpI,KAAK0jB,wBACnB,2BAAOhgB,MAAM,mBAAmBuhB,IAAI,4BAApC,4DAKR,yBAAKvhB,MAAM,wBACP,yBAAKA,MAAM,cACP,2BACIA,MAAM,mBACNnF,KAAK,WACL+C,GAAG,UACHsL,KAAK,cACLyC,QAASrP,KAAKrE,MAAMqnB,SAASC,SAASnS,YACtC1I,SAAUpI,KAAK0jB,wBACnB,2BAAOhgB,MAAM,mBAAmBuhB,IAAI,WAApC,yEAKR,yBAAKvhB,MAAM,wBACP,yBAAKA,MAAM,cACP,2BACIA,MAAM,mBACNnF,KAAK,WACL+C,GAAG,aACHsL,KAAK,iBACLyC,QAASrP,KAAKrE,MAAMqnB,SAASC,SAAS9hB,eACtCiH,SAAUpI,KAAK0jB,wBACnB,2BAAOhgB,MAAM,mBAAmBuhB,IAAI,cAApC,sDAKR,yBAAKvhB,MAAM,uBACP,4BACIpC,GAAG,gBACHoC,MAAM,eACNkJ,KAAK,WACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAAS/hB,SACpCkH,SAAUpI,KAAK0jB,uBACf,4BAAQ3I,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,SAKZ,yBAAK3J,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,aAAX,6IAEA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,YACHsL,KAAK,OACLS,MAAOrN,KAAK2F,MAAM4d,cAClBnb,SAAUpI,KAAKojB,aACf/H,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,aAAX,uCAEA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,YACHsL,KAAK,OACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAASlmB,KACpCooB,UAAQ,EACRpK,UAAQ,KAEhB,yBAAKrX,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,wCACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,gBACHsL,KAAK,YACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAASzS,UACpCpI,SAAUpI,KAAK0jB,sBACfrI,UAAQ,KAGhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,kBAAX,8CACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,iBACHsL,KAAK,YACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAASxS,UACpCrI,SAAUpI,KAAK0jB,sBACfrI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,6BAAX,gNAIA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,4BACHsL,KAAK,uBACLS,MAAOwX,EACPM,UAAQ,EACRpK,UAAQ,MAGpB,yBACIrX,MACJ,wBACC1D,KAAK2F,MAAM6d,yBAA2B,GAAK,UAExC1P,KAAK,SALT,soBASA,yBACIpQ,MACQ,wBACCshB,EAAmB,GAAK,UAEjClR,KAAK,SALT,4QAQA,yBAAKpQ,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,cAAX,0DACA,8BACNvhB,MAAM,eACNpC,GAAG,aACH2S,KAAK,IACLrH,KAAK,QACLS,MAAOrN,KAAKrE,MAAMqnB,SAAS9G,MAC3B9T,SAAUpI,KAAKyjB,iBAGb,yBAAK/f,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,4EACA,8BACNvhB,MAAM,eACNpC,GAAG,gBACH2S,KAAK,IACLrH,KAAK,WACLS,MAAOrN,KAAKrE,MAAMqnB,SAASoC,SAC3Bhd,SAAUpI,KAAKyjB,kBAKhBzjB,KAAKqlB,uBAEN,4BACI3hB,MAAM,qDACNgC,QAAS1F,KAAK+jB,aAFlB,6EAKA,4BACIxlB,KAAK,SACLmF,MAAM,sDAFV,uEAKA,4BACIgC,QAAS1F,KAAKikB,sBACdvgB,MACJ,oCACC1D,KAAK2F,MAAMue,qBACN,wBACA,kBANN,uF,GA3kB0B/f,cCPjBmhB,G,kDACjB,WAAY3pB,GAAQ,IAAD,uBACf,cAAMA,IAqCV0V,0BAA4B,SAAC5Q,GACzB,IACI,IAAI8kB,EAAW,EAAK5f,MAAM6f,eAE1B,OAAQ/kB,GACR,IAAK,SACD8kB,GAAY,gBACZ,MACJ,IAAK,SACDA,GAAY,eACZ,MACJ,IAAK,OACDA,GAAY,aACZ,MACJ,IAAK,SACDA,GAAY,eACZ,MACJ,IAAK,QACDA,GAAY,eACZ,MACJ,IAAK,UACDA,GAAY,gBACZ,MACJ,IAAK,MACDA,GAAY,YACZ,MACJ,IAAK,QACDA,GAAY,cACZ,MACJ,IAAK,UACDA,GAAY,gBACZ,MACJ,IAAK,UACDA,GAAY,gBACZ,MACJ,IAAK,OACDA,GAAY,cACZ,MACJ,IAAK,OAGL,IAAK,QACDA,GAAY,aACZ,MACJ,QACI,KAAM,wGAA0B9kB,EAEpC,MAAO,CACH8kB,YAEN,MAAOllB,IACJvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAzF7C,EA6FnB0iB,cAAgB,SAACrO,GACb,IAAIrH,EAAQqH,EAAMtH,OAAOC,MACrB2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UACpCnL,EAAgB,EAAKzG,0BAA0BhE,GAEnD,EAAK1R,MAAMunB,kBAAX,eACOF,EADP,CAEIviB,QAAS4M,EACT4V,SAAS,eACFA,EADC,CAEJ/gB,MAAOmL,GACJyK,OAzGI,EA8GnB2N,qCAAuC,SAAC1Z,EAAU2Z,GAC9C,IACI,IAAIC,EAAU,GACVjV,EAAW,GACXC,EAAY,GAEhB,GACmB,WAAf+U,GACmB,SAAfA,GACa,mCAAb3Z,EAEJ4Z,EAAU,EACVjV,EAAW,EAAK/U,MAAMqnB,SAASC,SAASvlB,eACxCiT,EAAY,EAAKhV,MAAMqnB,SAASC,SAASrlB,oBACtC,CACH,IAAIgoB,EAAa,GACb,EAAKjgB,MAAMkgB,gBAAgD,MAA9B,EAAKlgB,MAAMkgB,iBACxCD,EAAarN,SAAS,EAAK5S,MAAMkgB,iBAGrCF,EAAUC,EAAa,GACvBlV,GACI6H,SAAS,EAAK5S,MAAMmgB,iBAChB,EAAIF,GACV5F,WACFrP,GACI4H,SAAS,EAAK5S,MAAMogB,kBAChB,EAAIH,GACV5F,WAEN,MAAO,CACH2F,UACAjV,WACAC,aAEN,MAAOtQ,IACJvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,KAlJ7C,EAsJnB2lB,iBAAmB,SAACtR,GAChB,IAAIrH,EAAQqH,EAAMtH,OAAOC,MACrB2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAExC,EAAKnZ,SAAS,CAAEmc,YAAY,IAE5B,IAAIC,EAAc,EAAKT,qCACnBpY,EACA,EAAK1R,MAAMqnB,SAAS0C,YAGxB,EAAK/pB,MAAMunB,kBAAX,eACOF,EADP,CAEIjX,SAAUsB,EACV4V,SAAS,eACFA,EADC,GAEDiD,OAvKI,EA4KnB/C,aAAe,SAACzO,GACZ,IAAIrH,EAAQqH,EAAMtH,OAAOC,MAErB4C,EAAQ5C,EAAM4C,MAAM,uBACpB9S,EAAiC,GAAzBob,SAAStI,EAAM,GAAI,IAC3BzS,EAAkC,GAAzB+a,SAAStI,EAAM,GAAI,IAEhC,EAAKnG,SAAS,CAAEmc,YAAY,IAE5B,IAAIjD,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAExC,EAAKtnB,MAAMunB,kBAAX,eACOF,EADP,CAEI5gB,KAAMiL,EACN4V,SAAS,eACFA,EADC,CAEJ3S,WAAYnT,EACZoT,YAAa/S,QA9LN,EAmMnB2oB,mBAAqB,SAACzR,GAClB,IAAIrH,EAAQqH,EAAMtH,OAAOC,MAEzB,EAAKvD,SAAS,CAAEmc,YAAY,IAE5B,IAAIjD,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAEpCiD,EAAc,EAAKT,qCACnB,EAAK9pB,MAAMqnB,SAASjX,SACpBsB,GAGJ,EAAK1R,MAAMunB,kBAAX,eACOF,EADP,CAEI0C,WAAYrY,EACZ4V,SAAS,eACFA,EADC,GAEDiD,OArNI,EA0NnBzC,cAAgB,SAAC/O,GACb,IAAMtH,EAASsH,EAAMtH,OACfR,EAAOQ,EAAOR,KAEhBS,EAAQ,KAGRA,EADQ,YAHCD,EAAO7O,KAIR6O,EAAOiC,QAEPjC,EAAOC,MAGnB,IAAI2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC/B,EAAKrnB,MAAMunB,kBAAX,eACOF,EADP,gBAEKpW,EAAOS,MAzOG,EA6OnB+Y,gCAAkC,SAAC1R,GAC/B,IAAIrH,EAAQqH,EAAMtH,OAAOC,MAEzB,EAAKvD,SAAS,CACVuc,mBAAoBhZ,KAjPT,EAqPnBqW,sBAAwB,SAAChP,GACrB,IAAMtH,EAASsH,EAAMtH,OACfR,EAAOQ,EAAOR,KAEhBS,EAAQ,KAGRA,EADQ,YAHCD,EAAO7O,KAIR6O,EAAOiC,QAEPjC,EAAOC,MAGnB,IAAI2V,EAAQ,eAAQ,EAAKrnB,MAAMqnB,UAC3BC,EAAQ,eAAQ,EAAKtnB,MAAMqnB,SAASC,UAEpCO,GAA2B,EAC3ByC,GAAa,EACJ,cAATrZ,GAAiC,cAATA,GACxB4W,GAA2B,EAC3ByC,GAAa,GACG,SAATrZ,IACPqZ,GAAa,GAGjB,EAAKnc,SAAS,CACV0Z,2BACAyC,eAGJ,EAAKtqB,MAAMunB,kBAAX,eACOF,EADP,CAEIC,SAAS,eACFA,EADC,gBAEHrW,EAAOS,QAtRD,EA2RnB+C,YAAc,SAACC,GACX,IAAIU,EAAQ,IAOZ,OANAA,GAASuV,OAAOC,KAAKlW,GAChBvQ,KAAI,SAASmP,GACV,MAAM,GAAN,OAAUA,EAAV,YAAiBoB,EAAIpB,OAExBtG,KAAK,MAjSK,EAsSnBgb,4BAA8B,WAC1B,IAAI5S,EAAQ,EAAKX,YAAY,EAAKzU,MAAMqnB,SAASC,UAE7C/S,EAAM,eACH,EAAKvU,MAAMqnB,SADR,CAENC,SAAUlS,IAGV6S,EAAe7b,KAAKC,UAAUkI,EAAQ,KAAM,GAGhD,OADApU,QAAQC,IAAI6nB,GACLA,GAjTQ,EAoTnBhJ,aAAe,SAAClG,GACZA,EAAM7G,iBACN,IAAIhR,EAAI,eACR,EAAK2pB,cAAa,WACd,IAAI3C,EAAUhnB,EAAK8mB,8BACnB9mB,EAAKlB,MAAMmoB,WAAWD,OAzTX,EA6TnBE,YAAc,SAACrP,GACXA,EAAM7G,iBACN,EAAK2Y,cAAa,WACd,IAAI3C,EAAU,EAAKF,8BACnB,EAAKhoB,MAAMqoB,kBAAkBH,OAjUlB,EAqUnB4C,gBAAkB,aAnUd,IAAIjC,EAAwB,EAAKC,yBAC7B,EAAK9oB,MAAMqnB,UAGX0D,EAAc3e,KAAKC,UAAUrM,EAAMqnB,SAASqD,oBANjC,OAOf,EAAK1gB,MAAL,aACI0gB,mBAAoBK,EACpBlD,0BAA0B,EAC1ByC,YAAY,EACZU,8BAA8B,GAC3BnC,GAZQ,E,qEAgBMxB,GACrB,IAAIwC,EAAiB,KACjBM,EAAkB,KAClBC,EAAmB,KACnBF,EAAiB,KACrB,GAAI7C,GAAYA,EAASC,SAAU,CAC/B,GAAID,EAASC,SAASsC,SAAU,CAC5B,IAAIqB,EAAY5D,EAASC,SAASsC,SAASsB,YAAY,KACvDrB,EAAiBxC,EAASC,SAASsC,SAASjG,UAAU,EAAGsH,EAAY,GAEzEd,EAAkB9C,EAASC,SAASvS,SACpCqV,EAAmB/C,EAASC,SAAStS,UACrCkV,EAAiB7C,EAASC,SAAS0C,QAEvC,MAAO,CACHH,iBACAM,kBACAC,mBACAF,oB,mCAuSKrnB,GACT,IACI,IAAI6R,EAAMtI,KAAKiP,MAAMhX,KAAK2F,MAAM0gB,oBAC5BrD,EAAQ,eAAQhjB,KAAKrE,MAAMqnB,UAC/BhjB,KAAKrE,MAAMunB,kBAAX,eAEWF,EAFX,CAGQqD,mBAAoBhW,IAExB7R,GAEN,MAAO6B,GACLL,KAAKrE,MAAMipB,YAAX,oO,+BAME,IAAD,QAGDI,GAAmB,EACnBjZ,EAAQ,UAAG/L,KAAKrE,aAAR,iBAAG,EAAYqnB,gBAAf,aAAG,EAAsBjX,SACjCM,EAAM,UAAGrM,KAAKrE,aAAR,iBAAG,EAAYqnB,gBAAf,aAAG,EAAsB3W,OAcnC,MAbiB,yCAAbN,EACe,uBAAXM,GAA+B,mCAAXA,IACpB2Y,GAAmB,GAEH,uBAAbjZ,EACQ,uBAAXM,GAA+B,mCAAXA,GAAiC,mCAAXA,IAC1C2Y,GAAmB,GAEH,mCAAbjZ,GACQ,yCAAXM,IACA2Y,GAAmB,GAIvB,0BAAM3K,SAAUra,KAAK4a,cACrB,yBAAKlX,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,gBAAX,uEACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,eACHsL,KAAK,UACLS,MAAOrN,KAAKrE,MAAMqnB,SAASjF,QAC3B3V,SAAUpI,KAAKyjB,cACfpI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,oDACA,4BACI3jB,GAAG,gBACHoC,MAAM,eACNkJ,KAAK,WACLS,MAAOrN,KAAKrE,MAAMqnB,SAASjX,SAC3B3D,SAAUpI,KAAKgmB,kBACf,4BAAQjL,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,wCAAd,wCACA,4BAAQA,MAAM,sBAAd,sBACA,4BAAQA,MAAM,kCAAd,oCAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,aAAX,wCACA,4BACI3jB,GAAG,YACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAAS5gB,KAC3BgG,SAAUpI,KAAKmjB,cACf,4BAAQpI,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,2BAAd,2BACA,4BAAQA,MAAM,2BAAd,2BACA,4BAAQA,MAAM,4BAAd,4BACA,4BAAQA,MAAM,6BAAd,+BAKR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,eAAX,0DACA,4BACI3jB,GAAG,cACHoC,MAAM,eACNkJ,KAAK,SACLS,MAAOrN,KAAKrE,MAAMqnB,SAAS3W,OAC3BjE,SAAUpI,KAAKyjB,eAEf,4BAAQ1I,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BA1EI,CAAC,qBAAO,iCAAS,iCAAS,wCA6EfvN,KAAI,SAACwN,GAChB,OAAO,4BAAQD,MAAOC,GAAIA,SAM1C,yBAAK5J,MAAM,+BACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,cAAX,kCACA,4BACI3jB,GAAG,aACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAASviB,QAC3B2H,SAAUpI,KAAK+iB,eACf,4BAAQhI,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,QAAd,QACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,SAAd,SACA,4BAAQA,MAAM,WAAd,WACA,4BAAQA,MAAM,OAAd,OACA,4BAAQA,MAAM,SAAd,SACA,4BAAQA,MAAM,WAAd,WACA,4BAAQA,MAAM,WAAd,WACA,4BAAQA,MAAM,QAAd,QACA,4BAAQA,MAAM,QAAd,UAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,mBAAX,8CACA,4BACI3jB,GAAG,kBACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAAS0C,WAC3Btd,SAAUpI,KAAKmmB,oBACf,4BAAQpL,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,YAAd,YACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,QAAd,UAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,qBAAX,kCACA,4BACI3jB,GAAG,oBACHoC,MAAM,eACN2J,MAAOrN,KAAKrE,MAAMqnB,SAAS8D,aAC3Bla,KAAK,eACLxE,SAAUpI,KAAKyjB,eACf,4BAAQ1I,UAAQ,EAACmK,UAAQ,EAAC7X,OAAK,GAA/B,0BAGA,4BAAQA,MAAM,QAAd,QACA,4BAAQA,MAAM,QAAd,QACA,4BAAQA,MAAM,OAAd,OACA,4BAAQA,MAAM,SAAd,WAGR,yBAAK3J,MAAM,uBACP,2BAAOuhB,IAAI,2BAAX,+FACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,0BACHsL,KAAK,qBACLS,MAAOrN,KAAK2F,MAAM0gB,mBAClBje,SAAUpI,KAAKomB,oCAI3B,yBAAK1iB,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,wCACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,gBACHsL,KAAK,YACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAASzS,UACpCpI,SAAUpI,KAAK0jB,sBACfrI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,kBAAX,8CACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,iBACHsL,KAAK,YACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAASxS,UACpCrI,SAAUpI,KAAK0jB,sBACfrI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,aAAX,8CACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,YACHsL,KAAK,OACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAAS8D,KACpC3e,SAAUpI,KAAK0jB,sBACfrI,UAAQ,KAEhB,yBAAK3X,MAAM,uBACP,2BAAOuhB,IAAI,cAAX,8CACA,2BACI1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,aACHsL,KAAK,QACLS,MAAOrN,KAAKrE,MAAMqnB,SAASC,SAAS+D,MACpC5e,SAAUpI,KAAK0jB,sBACfrI,UAAQ,MAGpB,yBACI3X,MACJ,wBACC1D,KAAK2F,MAAM6d,yBAA2B,GAAK,UAExC1P,KAAK,SALT,sYASA,yBACIpQ,MACJ,uBACC1D,KAAK2F,MAAMsgB,YAC6B,SAArCjmB,KAAKrE,MAAMqnB,SAAS8D,aAClB,GACA,UAEFhT,KAAK,SART,0XAYA,yBACIpQ,MACQ,wBACCshB,EAAmB,GAAK,UAEjClR,KAAK,SALT,4QAQA,yBAAKpQ,MAAM,YACP,yBAAKA,MAAM,uBACP,2BAAOuhB,IAAI,cAAX,0DACA,8BACNvhB,MAAM,eACNpC,GAAG,aACH2S,KAAK,IACLrH,KAAK,QACLS,MAAOrN,KAAKrE,MAAMqnB,SAAS9G,MAC3B9T,SAAUpI,KAAKyjB,iBAGb,yBAAK/f,MAAM,uBACP,2BAAOuhB,IAAI,iBAAX,4EACA,8BACNvhB,MAAM,eACNpC,GAAG,gBACH2S,KAAK,IACLrH,KAAK,WACLS,MAAOrN,KAAKrE,MAAMqnB,SAASoC,SAC3Bhd,SAAUpI,KAAKyjB,kBAIjB,4BACI/f,MAAM,qDACNgC,QAAS1F,KAAK+jB,aAFlB,6EAKA,4BACIxlB,KAAK,SACLmF,MAAM,iDAFV,4E,GAjmB2BS,aCKlB8iB,G,kDACnB,WAAYtrB,GAAQ,IAAD,8BACjB,cAAMA,IAyBRurB,iBAAmB,SAAC7Z,GAClB,GAAa,MAATA,EAAe,OAAO,KAC1B,IAAI8Z,EAAe9Z,EAAM6J,cACzB,MAAwB,SAAjBiQ,GAEc,UAAjBA,GAEA9Z,GAjCa,EAoCnB+Z,gBAAkB,SAACC,EAAUC,GAC3B,IAAIC,EAAiB,EAAKC,sBAAsBF,EAAYrE,UAC5D,EAAKnZ,SAAS,CACZud,aAEF,EAAKI,kBAAkBJ,EAAUC,EAAjC,eACKA,EADL,CAEErE,SAAS,eAAMsE,OA3CA,EA+CnBG,oBAAsB,SAAChT,GACrB,IAAIpW,EAAOoW,EAAMtH,OAAOua,MAAM,GAC9B,EAAKC,YAAYtpB,IAjDA,EAoDnBupB,gBAAkB,SAACF,GACjB,IAAIrpB,EAAOqpB,EAAM,GACjB,EAAKC,YAAYtpB,IAtDA,EAyDnBwpB,kBAAoB,SAACznB,GACnB+jB,UAAUC,UACP0D,WACArjB,MAAK,SAAC4O,GACLxX,QAAQC,IAAI,mBAAoBuX,GAChC,EAAK0U,eAAe1U,MAErBpO,OAAM,SAACqf,GACNzoB,QAAQ2C,MAAM,sCAAuC8lB,GACrD,EAAK0D,qBAAqB1D,MAE9BlkB,EAAEwN,kBApEe,EAuEnB+Z,YAAc,SAACtpB,GACb,GAAIA,EAAM,CACR,IAAI4pB,EAAS,IAAIC,WAEjBD,EAAOE,WAAW9pB,GAElB,IAAIzB,EAAI,eACRqrB,EAAOG,OAAS,WACd,IACE,IAAIxE,EAAUqE,EAAOhY,OACrBpU,QAAQC,IAAI8nB,GACZ,IAAIyE,EAAeC,KAAMC,UAAU3E,GAC/ByD,EAAcvf,KAAKiP,MAAMsR,GAC7BxsB,QAAQC,IAAIurB,GACZzqB,EAAKuqB,gBAAgB9oB,EAAKsO,KAAM0a,GAChC,MAAOjnB,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACxDxD,EAAKorB,qBAAqB5nB,KAI9B6nB,EAAOO,QAAU,WACf3sB,QAAQC,IAAImsB,EAAOzpB,OACnB5B,EAAKorB,qBAAqBC,EAAOzpB,UA9FpB,EAmGnBupB,eAAiB,SAACnE,GAChB,GAAIA,EACF,IACE/nB,QAAQC,IAAI8nB,GACZ,IAAIyE,EAAeC,KAAMC,UAAU3E,GAC/ByD,EAAcvf,KAAKiP,MAAMsR,GAC7BxsB,QAAQC,IAAIurB,GACZ,IAAI1nB,EAAI,IAAIkW,KAERuR,EACFznB,EAAEmgB,cAAcC,WAAWC,QAAQ,GACnC,KACC,KAAOrgB,EAAEsgB,WAAa,IAAIxX,OAAO,GAClC,KACC,IAAM9I,EAAE2X,WAAW7O,OAAO,GAC3B,IACA4e,EAAYvJ,QACZ,OAEF,EAAKqJ,gBAAgBC,EAAUC,GAC/B,MAAOjnB,IACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,EAAEE,OAASF,GACxD,EAAK4nB,qBAAqB5nB,KAzHb,EA8HnBonB,kBAAoB,SAACJ,EAAU/oB,EAAM0kB,GACnC,EAAKrnB,MAAM+sB,aAAarB,EAAU/oB,EAAM0kB,IA/HvB,EAkInBiF,qBAAuB,SAACtgB,GACtB,EAAKhM,MAAMgtB,gBAAgBhhB,IAjI3B,EAAKhC,MAAQ,CACX0hB,SAAU,MAHK,E,kEAOGtQ,GAUpB,IATA,IAAItb,EACFmtB,EAAK,MACL3R,EAAS,qBACT4R,EAAS,SAAUvb,GACjB,OAAOwb,mBAAmBxb,EAAElN,QAAQwoB,EAAI,OAE1C7X,EAAQgG,EAAYuI,UAAU,GAE5ByJ,EAAY,GACRttB,EAAQwb,EAAO+R,KAAKjY,IAAS,CACnC,IAAI1D,EAAQwb,EAAOptB,EAAM,IACzB4R,EAAQrN,KAAKknB,iBAAiB7Z,GAC9B0b,EAAUF,EAAOptB,EAAM,KAAO4R,EAGhC,OAAO0b,I,+BA+GC,IAAD,OACP,OACE,kBAAC,KAAD,CACEE,OAAQjpB,KAAK6nB,gBACbqB,UAAU,EACVC,OAAO,OACPC,SAAS,IAER,gBACCC,EADD,EACCA,aACAC,EAFD,EAECA,cACAC,EAHD,EAGCA,aAEAvX,GALD,EAICwX,aAJD,EAKCxX,MALD,OAOC,6BACEtO,MACE,0BACC6lB,EAAe,+BAAiC,KAGnD,wBAASF,IACP,yBACE3lB,MAAM,YACN4e,MAAM,6BACNnlB,MAAM,KACNK,OAAO,KACPklB,QAAQ,aAER,0BAAM9iB,EAAE,gWAEV,2CAAW0pB,IAAX,CAA4BhoB,GAAG,UAC/B,kJACA,qDACA,2BAAI,EAAKqE,MAAM0hB,UACf,4BACE3jB,MAAM,gDACNgC,QAASsM,GAFX,uEAMA,4BACEtO,MAAM,qDACNgC,QAAS,EAAKoiB,mBAFhB,2K,GAhL+B3jB,aCGxBslB,G,kDACnB,WAAY9tB,GAAQ,IAAD,8BACjB,cAAMA,IAeR+sB,aAAe,SAACrB,EAAU/oB,EAAM0kB,GAC9B,EAAKlZ,SAAS,CACZud,WACA/oB,OACA0kB,WACA0G,SAAS,IAAI5T,MAAOe,UAAUmJ,cArBf,EAyBnB2I,gBAAkB,SAAChhB,GACjB,EAAKgiB,UAAUhiB,IA1BE,EA6BnBmc,WAAa,SAAC9kB,GACZ,IAAIqoB,EAAW,EAAK1hB,MAAM0hB,SACtBuC,EAAO,IAAIC,KAAK,CAAC7qB,GAAO,CAAET,KAAM,eACpC,GAAIjD,OAAO8oB,UAAU0F,iBACnBxuB,OAAO8oB,UAAU2F,WAAWH,EAAMvC,OAC7B,CACL,IAAI2C,EAAO1uB,OAAO2uB,SAASC,cAAc,KACzCF,EAAKjW,KAAOzY,OAAO6uB,IAAIC,gBAAgBR,GACvCI,EAAKK,SAAWhD,EAChB4C,SAASK,KAAKC,YAAYP,GAC1BA,EAAKQ,QACLP,SAASK,KAAKG,YAAYT,KAxCX,EA4CnBhG,kBAAoB,SAAChlB,GACnB,EAAK8K,SAAS,CACZiX,WAAW,IAIb,IAAIziB,EAAO,IAAIosB,KAAK,CAAC1rB,GAAO,EAAK2G,MAAM0hB,SAAU,CAAE9oB,KAAM,eAErDosB,EAAW,IAAIC,SACnBD,EAASxrB,OAAO,OAAQb,GAGxB,IAAIzB,EAAI,eACR8f,KACG8B,KADH,8BAEGC,KAAKiM,GACL9N,KAAI,SAACpe,EAAOyR,GAOX,GANArT,EAAKiN,SAAS,CACZiX,WAAW,IAEbjlB,QAAQC,IAAI0C,GACZ3C,QAAQC,IAAImU,IAEPzR,GAASyR,GAA0B,OAAhBA,EAAOoD,KAC7BzW,EAAKguB,YAAY,kIACZ,CACL,IAAIC,EAAe,GACfrsB,GACEA,EAAMkJ,UACRmjB,GAAgBrsB,EAAMkJ,SAEpBlJ,EAAMmJ,UAAYnJ,EAAMmJ,SAAS0L,OACnCwX,GAAgB,KAAOrsB,EAAMmJ,SAAS0L,OAGxCwX,GAAgB,2LAElBjuB,EAAK8sB,UAAUmB,QAjFJ,EAsFnBC,aAAe,WACb,IAAIC,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,OA3FK,EAgGnBtB,UAAY,SAACtpB,GACX,IAAI2qB,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,EACRC,UAAW,SACXvjB,QAAStH,EAAE2f,gBAvGE,EA4GnB6K,YAAc,SAACxqB,GACb,IAAI2qB,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,EACRC,UAAW,UACXvjB,QAAStH,EAAE2f,gBAnHE,EAwHnBkD,kBAAoB,SAACF,EAAUxkB,GAC7B,EAAKsL,SAAS,CAAEkZ,SAAS,eAAMA,IAAcxkB,IAvH7C,EAAKmH,MAAQ,CACXrH,KAAM,KACN+oB,SAAU,KACVqC,QAAS,KACT1G,SAAU,KACVgI,MAAO,CACLC,QAAQ,EACRC,UAAW,KACXvjB,QAAS,MAEXoZ,WAAW,GAZI,E,qDA4HT,IAAD,IACP,OACE,yBAAKrd,MAAM,cACT,kBAACynB,GAAA,EAAD,CACEppB,KAAM/B,KAAK2F,MAAMqlB,MAAMC,OACvBG,QAASprB,KAAK+qB,aACdM,MAAO,IACPC,UAAQ,EACRppB,MAAO,CACLqpB,SAAU,QACVC,IAAK,GACLC,MAAO,GACPC,OAAQ,QAGV,kBAACP,GAAA,EAAMxP,OAAP,KACE,4BAAQzM,UAAU,WAAlB,2DAGF,kBAACic,GAAA,EAAMQ,KAAP,KACE,yBACEjoB,MACE,UACC1D,KAAK2F,MAAMqlB,MAAME,UACd,SAAWlrB,KAAK2F,MAAMqlB,MAAME,UAC5B,IAENpX,KAAK,SAEJ9T,KAAK2F,MAAMqlB,MAAMrjB,WAIxB,yBAAKjE,MAAM,aACT,yBAAKA,MAAM,aACT,yJACA,yBAAKA,MAAO,WAAa1D,KAAK2F,MAAMob,UAAY,UAAY,KAC1D,kBAAC6K,GAAA,EAAD,CAASC,UAAU,YAErB,yBAAKnoB,MAAM,YACT,yBAAKA,MAAM,wBACT,kBAAC,GAAD,CACEglB,aAAc1oB,KAAK0oB,aACnBC,gBAAiB3oB,KAAK2oB,oBAIU,SAArC,UAAA3oB,KAAK2F,MAAMqd,gBAAX,eAAqB7M,aACpB,kBAAC,GAAD,CACElH,IAAKjP,KAAK2F,MAAM+jB,QAChB1G,SAAUhjB,KAAK2F,MAAMqd,SACrBE,kBAAmBljB,KAAKkjB,kBACxBY,WAAY9jB,KAAK8jB,WACjBE,kBAAmBhkB,KAAKgkB,kBACxBY,YAAa5kB,KAAK2pB,YAEmB,UAArC,UAAA3pB,KAAK2F,MAAMqd,gBAAX,eAAqB7M,aACvB,kBAAC,GAAD,CACElH,IAAKjP,KAAK2F,MAAM+jB,QAChB1G,SAAUhjB,KAAK2F,MAAMqd,SACrBE,kBAAmBljB,KAAKkjB,kBACxBY,WAAY9jB,KAAK8jB,WACjBE,kBAAmBhkB,KAAKgkB,kBACxBY,YAAa5kB,KAAK2pB,YAElB,Y,GA9LmBxlB,a,8BCyKpB2nB,GAjLc,WAC3B,IAAIC,EAEAC,GAAa,EAEX/kB,EAAMC,IAAMC,OAAO,CACvBC,QAAS,SAN4B,EA0BnC6kB,8BAAmB,CACrBC,eAAgB,WAChBC,YAnBkB,SAAChM,EAAKhkB,GAExB,OADAA,EAAOgkB,IAAMA,EACNlZ,EAAIgB,QAAQ9L,IAkBnBiwB,cAAe,SAACC,GAAD,OACbplB,EACGwX,KAAK,gBAAiB1W,KAAKC,UAAUqkB,EAAMC,cAAe,CACzD7kB,QAAS,CACP,eAAgB,sBAGnB/C,MAAK,SAACgD,GACL,OAAOA,EAAE1I,QAEVkG,OAAM,SAACzG,GACNutB,GAAa,EACb,IAAIrkB,EAAU,GACd,GAAIlJ,EAAMmJ,SAAU,CAClB,GAA8B,MAA1BnJ,EAAMmJ,SAASC,OACjB,MAAM,IAAIK,MAAM,6BAElBP,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,eACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAE7B,MAAM,IAAIO,MAAMP,SA1De,oBAuBrC4kB,GAvBqC,WAwBrCC,EAxBqC,KAyBrCC,EAzBqC,KA2EjCC,EAAU,SAACvM,EAAKhkB,GAIpB,OAHAA,EAASA,GAAU,IACZwlB,OAAS,MAET4K,EAAUpM,EAAKhkB,IAGlBwwB,EAAW,SAACxM,EAAKnhB,EAAM7C,GAK3B,OAJAA,EAASA,GAAU,IACZwlB,OAAS,OAChBxlB,EAAO6C,KAAOA,EAEPutB,EAAUpM,EAAKhkB,IAGlBywB,EAAU,SAACzM,EAAKnhB,EAAM7C,GAK1B,OAJAA,EAASA,GAAU,IACZwlB,OAAS,MAChBxlB,EAAO6C,KAAOA,EAEPutB,EAAUpM,EAAKhkB,IAGlB0wB,EAAa,SAAC1M,EAAKhkB,GAIvB,OAHAA,EAASA,GAAU,IACZwlB,OAAS,SAET4K,EAAUpM,EAAKhkB,IAGlB2wB,EAAQ,SAACC,GACb,OAAO9lB,EACJwX,KAAK,eAAgBsO,GACrBroB,MAAK,SAACgD,GAGL,OAFA8kB,EAAc9kB,EAAE1I,MAChBgtB,GAAa,EACNtkB,EAAE1I,QAEVkG,OAAM,SAACzG,GACN,IAAIkJ,EAAU,GAcd,MAbIlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAUlJ,EAAMkJ,QAChB7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAEvB,IAAIO,MAAMP,OAqBhBqlB,EAAS,WACbP,IACAT,GAAa,GAGTiB,EAAgB,WACpB,OAAOjB,GAeT,MAAO,CACLkB,YAAa,WACX,OAAOnB,IAAaA,EAbf,CACLe,QACAJ,UACAC,WACAC,UACAC,aACAG,SACAhB,WAAYiB,MAtKW,GCERE,G,kDAInB,WAAYxxB,GAAQ,IAAD,8BACjB,cAAMA,IAJRyxB,SACE,2EAEiB,EAUnBC,UAAY,SAACpM,GAAS,IAAD,EACnBnlB,QAAQC,IAAI,WAAY,EAAKJ,MAAMmjB,SACnChjB,QAAQC,IAAI,0BAA2BklB,GAEvC,EAAKnX,SAAS,CACZoU,YAAW,OAAE+C,QAAF,IAAEA,GAAF,UAAEA,EAAKqM,kBAAP,aAAE,EAAiB5T,MAC9B6T,mBAAmB,IAMrBzB,GAAoBoB,cACjBJ,MAAM7L,GACNvc,MAAK,SAACgD,GACL5L,QAAQC,IAAI,0BACZ,IAAIsa,EAAW,KACX,EAAK1a,MAAMJ,SAASoK,OAAS,EAAKhK,MAAMJ,SAASoK,MAAM6nB,OACzDnX,EAAW,EAAK1a,MAAMJ,SAASoK,MAAM6nB,MAGvC,IAAI9T,EAAQhS,EAAEgS,MACd,EAAK5P,SAAS,CACZuM,SAAUA,EACVoX,YAAa/T,OAKhBxU,OAAM,SAACzG,GACN,EAAKqL,SAAS,CACZ2jB,YAAa,GACbF,mBAAmB,IAErBzxB,QAAQC,IAAI0C,GACZqe,MAAM,4CAAoCre,OA7C7B,EAiDnBivB,UAAY,SAACzM,GACX,EAAKnX,SAAS,CACZoU,YAAa,GACbuP,YAAa,KAEf3xB,QAAQC,IAAI,qBAAsBklB,GAClCnE,MAAM,4CAvDW,EA0DnB6Q,yBAA2B,WACzB,OACE,yBAAKjqB,MAAM,uBACT,uBAAGA,MAAM,aAAT,mEACiB,EAAKiC,MAAMuY,YAC1B,6BACA,kBAAC,IAAD,CAAMnG,GAAG,WAAT,qCAhEW,EAsEnB6V,wBAA0B,WACxB,OACE,yBAAKlqB,MAAM,sBACT,uBAAGA,MAAM,aAAT,gKACmC,EAAKiC,MAAMuY,YAD9C,IAEE,6BAFF,4QAIE,6BACA,kBAAC,IAAD,CAAMnG,GAAG,WAAT,qCA9EW,EAoFnB8V,kBAAoB,WAClB,IAAI7B,GAAa,EACjB,IACEA,EAAaF,GAAoBoB,cAAclB,aAC/C,MAAO3rB,GACPvE,QAAQC,IAAIsE,GAGd,IAAMytB,EAAY9B,EACZ+B,EACJ,EAAKpoB,MAAMuY,cAAgB8N,GAAc,EAAKrmB,MAAM4nB,kBACtD,OAAOO,EACH,EAAKH,2BACLI,EACA,EAAKH,0BACL,MAjGJ,EAAKjoB,MAAQ,CACX0Q,SAAU,KACV6H,YAAa,GACbuP,YAAa,GACbF,mBAAmB,GANJ,E,qDAuGjB,OAAIvtB,KAAK2F,MAAM0Q,UACbva,QAAQC,IAAI,mBAAqBiE,KAAK2F,MAAM0Q,UAE1C,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,aAQ3B,yBACE3S,MAAM,mDACNxB,MAAO,CAAE1E,OAAQ,UAEjB,yBAAKkG,MAAM,QACT,yBAAKA,MAAM,yBACR1D,KAAK6tB,oBACN,kBAAC,eAAD,CACET,SAAUptB,KAAKotB,SACfY,WAAW,QACXX,UAAWrtB,KAAKqtB,UAChBK,UAAW1tB,KAAK0tB,UAChBO,aAAc,qBACd/rB,MAAO,CAAEgsB,UAAW,SACpBC,YAAY,W,GAvIShqB,aCAdiqB,G,kDAInB,WAAYzyB,GAAQ,IAAD,8BACjB,cAAMA,IAJRyxB,SACE,2EAEiB,EAOnBC,UAAY,SAACpM,GACXnlB,QAAQC,IAAI,2BAA4BklB,GAIxC6K,GAAoBoB,cAAcF,SAElClxB,QAAQC,IAAI,2BAGZ,EAAK+N,SAAS,CAAEuM,SAFD,YAfE,EAoBnBqX,UAAY,SAACzM,GACXnlB,QAAQC,IAAI,sBAAuBklB,GACnCnE,MAAM,6CAtBW,EAyBnB+Q,kBAAoB,WAClB,IAAI7B,GAAa,EACjB,IACEA,EAAaF,GAAoBoB,cAAclB,aAC/C,MAAO3rB,GACPvE,QAAQC,IAAIsE,GAGd,OAAO2rB,EAAa,uBAAGtoB,MAAM,aAAT,6EAAyC,MA/B7D,EAAKiC,MAAQ,CACX0Q,SAAU,MAHK,E,qDAqCjB,OAAIrW,KAAK2F,MAAM0Q,UACbva,QAAQC,IAAI,mBAAqBiE,KAAK2F,MAAM0Q,UAE1C,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,aAQ3B,yBACE3S,MAAM,mDACNxB,MAAO,CAAE1E,OAAQ,UAEjB,yBAAKkG,MAAM,QACT,yBAAKA,MAAM,yBACR1D,KAAK6tB,oBACN,kBAAC,gBAAD,CACET,SAAUptB,KAAKotB,SACfY,WAAW,SACXK,gBAAiBruB,KAAKqtB,UACtBK,UAAW1tB,KAAK0tB,mB,GAlEMvpB,aCF9B8C,GAAM6kB,GAAoBoB,cAoBjB7lB,GARF,CACXinB,YAPyB,SAACC,GAAD,OAAatnB,GAAI0lB,SAAJ,SAAuB4B,IAQ7DC,aAP0B,kBAAMvnB,GAAIylB,QAAJ,WAQhC+B,YAPyB,SAACF,GAAD,OAAatnB,GAAI2lB,QAAJ,SAAsB2B,IAQ5DG,kBAP+B,SAACC,GAAD,OAAU1nB,GAAI4lB,WAAJ,iBAAyB8B,KAQlEC,eAP4B,SAACD,GAAD,OAAU1nB,GAAIylB,QAAJ,iBAAsBiC,MCV/C,SAASE,GAASlzB,GAI/B,OACE,kBAACwvB,GAAA,EAAD,CACEppB,KAAMpG,EAAMsvB,OACZG,QAASzvB,EAAMyvB,QACfC,MAAO,IACPC,UAAQ,EACRppB,MAAO,CACLqpB,SAAU,QACVC,IAAK,GACLC,MAAO,GACPC,OAAQ,QAGV,kBAACP,GAAA,EAAMxP,OAAP,KACE,4BAAQzM,UAAU,WAAlB,2DAGF,kBAACic,GAAA,EAAMQ,KAAP,KACE,yBACEjoB,MAAO,UAAY/H,EAAMuvB,UAAY,SAAWvvB,EAAMuvB,UAAY,IAClEpX,KAAK,SAEJnY,EAAMgM,W,ICqNFmnB,G,kDA3Ob,WAAYnzB,GAAQ,IAAD,8BACjB,cAAMA,IAaRozB,kBAAoB,WAClB,EAAKP,gBAfY,EAkBnBA,aAAe,WACb,EAAK1kB,SAAS,CAAEiX,WAAW,IAE3B9Z,GACGunB,eACA9pB,MAAK,SAACgD,GACL,EAAKoC,SAAS,CACZklB,OAAQtnB,EAAE1I,KACV+hB,WAAW,OAGd7b,OAAM,SAACzG,GACN,EAAKqL,SAAS,CAAEiX,WAAW,IAC3B,IAAIpZ,EAAU,GACVlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAO,0BAAsBlJ,EAAMkJ,SACnC7L,QAAQC,IAAI,QAAS0C,EAAMkJ,SACL,8BAAlBlJ,EAAMkJ,SACR,EAAKmC,SAAS,CACZuM,SAAU,YAIhB,EAAK4Y,YAAYtnB,EAAS,cAlDb,EAsDnBunB,WAAa,SAAC7uB,GACZA,EAAEwN,iBAEF,EAAK/D,SAAS,CACZuM,SAAS,gBA1DM,EA8DnB8Y,YAAc,SAAC9uB,GACbA,EAAEwN,iBACF,IAAM8gB,EAAOtuB,EAAE+uB,cAAc/hB,MAE7B,EAAKvD,SAAS,CACZuM,SAAS,eAAD,OAAiBsY,MAnEV,EAuEnBU,cAAgB,SAAChvB,GACfA,EAAEwN,iBACF,IAAM8gB,EAAOtuB,EAAE+uB,cAAc/hB,MACzB/R,OAAOg0B,QAAP,sIAA0CX,MAC5C,EAAK7kB,SAAS,CAAEiX,WAAW,IAE3B9Z,GACGynB,kBAAkBC,GAClBjqB,MAAK,WACJ,EAAK8pB,kBAENtpB,OAAM,SAACzG,GACN,EAAKqL,SAAS,CAAEiX,WAAW,IAC3B,IAAIpZ,EAAU,GACVlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAO,0BAAsBlJ,EAAMkJ,SACnC7L,QAAQC,IAAI,QAAS0C,EAAMkJ,SACL,8BAAlBlJ,EAAMkJ,SACR,EAAKmC,SAAS,CACZuM,SAAU,YAIhB,EAAK4Y,YAAYtnB,EAAS,eAvGf,EA4GnBojB,aAAe,WACb,IAAIC,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,OAjHK,EAsHnBgE,YAAc,SAAC5uB,GAAyB,IAAtB9B,EAAqB,uDAAd,UACnBysB,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,EACRC,UAAW3sB,EACXoJ,QAAStH,EAAE2f,gBA7HE,EAkInBuP,cAAgB,WACd,EAAKzlB,SAAS,CACZuM,SAAS,aAlIX,EAAK1Q,MAAQ,CACXqlB,MAAO,CACLC,QAAQ,EACRC,UAAW,KACXvjB,QAAS,MAEXqnB,OAAQ,GACRjO,WAAW,EACX1K,SAAU,MAVK,E,qDAwIT,IAAD,OACP,GAAIrW,KAAK2F,MAAM0Q,SACb,OACE,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,SACrB1Q,MAAO,CAAE6nB,KAAM,aAMvB,IAAIgC,GAAY,EACXxvB,KAAK2F,MAAMqpB,OAAOvmB,SACrB+mB,GAAY,GAQd,OACE,yBAAK9rB,MAAM,aACT,kBAAC,GAAD,CACEunB,OAAQjrB,KAAK2F,MAAMqlB,MAAMC,OACzBG,QAASprB,KAAK+qB,aACdpjB,QAAS3H,KAAK2F,MAAMqlB,MAAMrjB,QAC1BujB,UAAWlrB,KAAK2F,MAAMqlB,MAAME,YAE9B,sFACA,4BACExnB,MAAM,2CACNgC,QAAS1F,KAAKkvB,YAFhB,8CAMA,4BACExrB,MAAM,sDACNgC,QAAS1F,KAAKuvB,eAFhB,kCAMCC,GACC,yBAAK9rB,MAAM,yBACT,2BAAOA,MAAM,uBACX,+BACE,4BACE,kDACA,oEACA,6FACA,gFACA,+BAIJ,+BACG1D,KAAK2F,MAAMqpB,OAAOlvB,KAAI,SAACwN,EAAGyB,GACzB,OACE,wBAAIE,IAAK,SAAWF,GAClB,4BAAKzB,EAAEqhB,MACP,4BAAKrhB,EAAEmiB,UACP,6BA7CE1yB,EA6CcuQ,EAAEoiB,eA5C1B9mB,IAAO8B,IAAI3N,GAAMuY,QAChB7K,OAAO,sBA4CA,4BAAK6C,EAAEtI,aAEP,4BACE,4BACEzG,KAAK,SACLmF,MAAM,kBACN2J,MAAOC,EAAEqhB,KACTjpB,QAAS,EAAKypB,aAEd,uBACEzrB,MAAM,wBACNqY,cAAY,UAGhB,4BACExd,KAAK,SACLmF,MAAM,kBACN2J,MAAOC,EAAEqhB,KACTjpB,QAAS,EAAK2pB,eAEd,uBAAG3rB,MAAM,gBAAgBqY,cAAY,YAlExC,IAAChf,a,GA3JAoH,aCGHwrB,G,kDACnB,WAAYh0B,GAAQ,IAAD,2BACjB,cAAMA,IAmCRozB,kBAAoB,WACd,EAAKa,kBACP,EAAK9lB,SAAS,CAAEiX,WAAW,IAE3B9Z,GACG2nB,eAAe,EAAKjpB,MAAMkqB,MAAMlB,MAChCjqB,MAAK,SAACuc,GACL,IAAIsC,EAAgB,KAChBtC,EAAIjiB,MAAQiiB,EAAIjiB,KAAK0wB,iBAEvBnM,EADQ3a,IAAO8B,IAAIuW,EAAIjiB,KAAK0wB,gBAAgBpa,QAC1B7K,OAAO,qBAE3B,EAAKX,SAAS,CACZyZ,gBACAsM,MAAM,eAAM5O,EAAIjiB,MAChB+hB,WAAW,EACX+O,UAAU,OAGb5qB,OAAM,SAACzG,GACN,EAAKqL,SAAS,CAAEiX,WAAW,EAAO+O,UAAU,IAC5C,IAAInoB,EAAU,GACVlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YAA+BpJ,EAAMmJ,SAASE,WAA9C,cAA8DrJ,EAAMmJ,SAAS5I,MAEpFlD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAU,iBACV7L,QAAQC,IAAI,QAAS0C,EAAMkJ,UAE7B,EAAKsnB,YAAYtnB,EAAS,eArEf,EA0EnB8b,cAAgB,SAAC/O,GACf,IAAMtH,EAASsH,EAAMtH,OACfR,EAAOQ,EAAOR,KAEhBS,EAAQ,KAGVA,EADU,YAHCD,EAAO7O,KAIV6O,EAAOiC,QAEPjC,EAAOC,MAGjB,IAAIwiB,EAAK,eAAQ,EAAKlqB,MAAMkqB,OAC5B,EAAK/lB,SAAS,CACZ+lB,MAAM,eACDA,EADA,gBAEFjjB,EAAOS,OA1FK,EA+FnB+V,aAAe,SAAC1O,GACd,IACI4O,EADAjW,EAAQqH,EAAMtH,OAAOC,MAIzBiW,EADsB1a,IAAOyE,EAAO,oBACJ3C,MAAMD,SAEtC,IAAIolB,EAAK,eAAQ,EAAKlqB,MAAMkqB,OAC5B,EAAK/lB,SAAS,CACZyZ,cAAelW,EACfwiB,MAAM,eACDA,EADA,CAEHH,eAAgBpM,OA3GH,EAgHnB1I,aAAe,SAAClG,GACdA,EAAM7G,iBAEN,EAAK/D,SAAS,CACZiX,WAAW,IAGT,EAAK6O,gBACP3oB,GACGwnB,YAAY,EAAK9oB,MAAMkqB,OACvBnrB,MAAK,SAACuc,GACL,EAAKnX,SAAS,CACZiX,WAAW,EACX1K,SAAU,cAGbnR,OAAM,SAACzG,GACN,EAAKqL,SAAS,CAAEiX,WAAW,IAC3B,IAAIpZ,EAAU,GACVlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAO,0BAAsBlJ,EAAMkJ,SACnC7L,QAAQC,IAAI,QAAS0C,EAAMkJ,SACL,8BAAlBlJ,EAAMkJ,SACR,EAAKmC,SAAS,CACZuM,SAAU,YAIhB,EAAK4Y,YAAYtnB,EAAS,aAG9BV,GACGqnB,YAAY,EAAK3oB,MAAMkqB,OACvBnrB,MAAK,SAACuc,GACL,EAAKnX,SAAS,CACZiX,WAAW,EACX1K,SAAU,cAGbnR,OAAM,SAACzG,GACN,EAAKqL,SAAS,CAAEiX,WAAW,IAC3B,IAAIpZ,EAAU,GACVlJ,EAAMmJ,UACRD,EAAO,UAAMlJ,EAAMmJ,SAASC,OAArB,YACLpJ,EAAMmJ,SAASE,WADV,aAEFC,KAAKC,UAAUvJ,EAAMmJ,SAAS5I,OAEnClD,QAAQC,IAAI0C,EAAMmJ,WACTnJ,EAAMwJ,SACfN,EAAU,cACV7L,QAAQC,IAAI0C,EAAMwJ,WAElBN,EAAO,0BAAsBlJ,EAAMkJ,SACnC7L,QAAQC,IAAI,QAAS0C,EAAMkJ,SACL,8BAAlBlJ,EAAMkJ,SACR,EAAKmC,SAAS,CACZuM,SAAU,YAIhB,EAAK4Y,YAAYtnB,EAAS,cArLf,EA0LnBooB,cAAgB,SAAC1vB,GACfA,EAAEwN,iBACF,EAAK/D,SAAS,CACZuM,SAAU,YA7LK,EAiMnB0U,aAAe,WACb,IAAIC,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,OAtMK,EA2MnBgE,YAAc,SAAC5uB,GAAyB,IAAtB9B,EAAqB,uDAAd,UACnBysB,EAAQ,EAAKrlB,MAAMqlB,MACvB,EAAKlhB,SAAS,CACZkhB,MAAM,eACDA,EADA,CAEHC,QAAQ,EACRC,UAAW3sB,EACXoJ,QAAStH,EAAE2f,gBA/Mf,IAAI2O,EAAI,UAAGhzB,EAAMF,aAAT,iBAAG,EAAa0mB,cAAhB,aAAG,EAAqBwM,KAG9B,EAAKiB,kBADHjB,EAMJ,IACIe,EADQ9mB,MAAS0M,QAAQ0a,QAAQ,OACV3xB,IAAI,GAAI,QAE/B4xB,EAA0BP,EAAejlB,OAAO,oBAChDylB,EAAoBR,EAAehlB,MAAMD,SAf5B,OAiBjB,EAAK9E,MAAQ,CACXob,WAAW,EACX+O,UAAU,EACV9E,MAAO,CACLC,QAAQ,EACRC,UAAW,KACXvjB,QAAS,MAEX0O,SAAU,KACVkN,cAAe0M,EACfJ,MAAO,CACLlB,KAAMA,EACNc,SAAU,MACVC,eAAgBQ,EAChBlrB,YAAa,KA/BA,E,qDAwNjB,OAAIhF,KAAK2F,MAAM0Q,SAEX,kBAAC,IAAD,CACEjF,MAAI,EACJ2G,GAAI,CACFC,SAAUhY,KAAK2F,MAAM0Q,SACrB1Q,MAAO,CAAE6nB,KAAM,aAMrB,yBAAK9pB,MAAM,aACT,kBAAC,GAAD,CACEunB,OAAQjrB,KAAK2F,MAAMqlB,MAAMC,OACzBG,QAASprB,KAAK+qB,aACdpjB,QAAS3H,KAAK2F,MAAMqlB,MAAMrjB,QAC1BujB,UAAWlrB,KAAK2F,MAAMqlB,MAAME,YAE9B,yBAAKxnB,MAAM,8BACT,yBAAKA,MAAM,YAAYxB,MAAO,CAAEkS,SAAU,MACxC,yBAAK1Q,MAAM,aACT,2KACA,yBAAKA,MAAO,WAAa1D,KAAK2F,MAAMob,UAAY,UAAY,KAC1D,kBAAC6K,GAAA,EAAD,CAASC,UAAU,YAErB,0BAAMxR,SAAUra,KAAK4a,cACnB,yBAAKlX,MAAM,cACT,2BAAOuhB,IAAI,aAAX,sBACA,2BACE1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,YACHsL,KAAK,OACLS,MAAOrN,KAAK2F,MAAMkqB,MAAMlB,KACxBvmB,SAAiBpI,KAAKyjB,cACtBpI,UAAQ,EACRN,SAAU/a,KAAK4vB,mBAGnB,yBAAKlsB,MAAM,cACT,2BAAOuhB,IAAI,iBAAX,uHAGA,2BACE1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,gBACHsL,KAAK,WACLS,MAAOrN,KAAK2F,MAAMkqB,MAAMJ,SACxBrnB,SAAiBpI,KAAKyjB,cACtBpI,UAAQ,KAGZ,yBAAK3X,MAAM,cACT,2BAAOuhB,IAAI,uBAAX,kLAGA,2BACE1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,sBACH+L,MAAOrN,KAAK2F,MAAM4d,cAClBnb,SAAiBpI,KAAKojB,aACtB/H,UAAQ,KAGZ,yBAAK3X,MAAM,cACT,2BAAOuhB,IAAI,oBAAX,oDACA,2BACE1mB,KAAK,OACLmF,MAAM,eACNpC,GAAG,mBACHsL,KAAK,cACLS,MAAOrN,KAAK2F,MAAMkqB,MAAM7qB,YACxBoD,SAAiBpI,KAAKyjB,iBAG1B,4BACE/d,QAAS1F,KAAK+vB,cACdrsB,MAAM,mDAFR,oDAMA,4BACEnF,KAAK,SACLmF,MAAM,gDACNqX,SAAU/a,KAAK2F,MAAMmqB,UAHvB,mE,GA7SsB3rB,a,UCJjBgsB,I,yDACjB,WAAYx0B,GAAQ,IAAD,8BACf,cAAMA,IAIVy0B,YAAc,SAAC/vB,GACX+jB,UAAUC,UACLC,UAAU,EAAK3e,MAAMM,KAAKoqB,IAC1B3rB,MAAK,WACF5I,QAAQC,IAAI,0BAEfmJ,OAAM,SAACqf,GACJzoB,QAAQ2C,MAAM,+BAAgC8lB,GAC9CzH,MAAMyH,MAEdlkB,EAAEwN,kBAfa,EAkBnByiB,iBAAmB,SAACjwB,GAChB,IAAIgN,EAAQhN,EAAIA,EAAE,GAAK,KACvB,EAAKyJ,SAAS,CAAE7D,KAAMoH,KAlBtB,EAAK1H,MAAQ,CAAEob,WAAW,EAAOwP,QAAS,GAAItqB,KAAM,MAFrC,E,qDAuBT,IAAD,WAOL,OACI,yBAAKvC,MAAM,aACP,yBACIA,MAAM,8DACNxB,MAAO,CAAE1E,OAAQ,UACjB,yBAAKkG,MAAM,4BACP,iKACA,kBAAC,KAAD,CACIpC,GAAG,eACHyf,UAAW/gB,KAAK2F,MAAMob,UACtByP,aAAa,EACbpuB,KAAM,QACNquB,qBAAqB,EACrBhrB,YAAY,wKACZirB,SAAU,SAACC,GAAD,uBAAeA,QAAf,IAAeA,OAAf,EAAeA,EAAQN,KACjCO,SAAU,SAAC7f,GACP,EAAKjH,SAAS,CAAEiX,WAAW,IAC3B8P,MAAM,0BAAD,OAA2B9f,IAC3BrM,MAAK,SAACosB,GAAD,OAAUA,EAAKpyB,UACpBgG,MAAK,SAAChG,GAAD,OACF,EAAKoL,SAAS,CACViX,WAAW,EACXwP,QAAS7xB,QAIzB6xB,QAASvwB,KAAK2F,MAAM4qB,QACpBnoB,SAAUpI,KAAKswB,mBACnB,uBAAG5sB,MAAM,sBAAqB,UAAC1D,KAAK2F,MAAMM,YAAZ,aAAC,EAAiB8qB,IAAM,kBAAU/wB,KAAK2F,MAAMM,YAArB,aAAU,EAAiB8qB,IAAM,QAEvF,4BACIrtB,MAAM,kDACNgC,QAAS1F,KAAKowB,YACdrV,UAAW/a,KAAK2F,MAAMM,MAH1B,gF,GA7DqB9B,c,ICDVA,Y,4BCKnClD,IAGG+vB,IAAIC,MAGJD,IAAIE,MAEJF,IAAIG,MAGJC,KAAK,CACJC,UAAW,CACTvT,MAAO,CAAC,QACRwT,oBAAqB,EACrBC,gBAAgB,GAElBC,QAAS,CAEPC,SAAU,iCAUZC,YAAa,KACbC,OAAO,EACPC,UAAW,CAAC,KAAM,KAAM,MACxBC,KAAM,eACNC,cAAe,CACbC,aAAa,GAEfC,aAAa,EACbC,cAAc,IAGHhxB,EAAf,ECRA,SAAS2qB,KACP,OACE,yBAAK1c,UAAU,gBACb,yBAAKA,UAAU,kBACb,yBAAKA,UAAU,YACf,uBAAGA,UAAU,UAAU5N,GAAG,kBAA1B,iFAQR,IAAIJ,GAAW,GAEf,IACE,IACMgxB,GADO52B,OAAOC,SAASyc,SACN/H,MAAM,KAEzBiiB,IAAaA,GAAUzpB,OAAS,GAA4B,GAAvBypB,GAAU,GAAGzpB,SACpDvH,GAAWgxB,GAAU,GAAK,KAE5B,MAAO7xB,KACNvE,QAAQ2C,OAAS3C,QAAQC,KAAKuE,KAAKxE,QAASuE,GAAEE,OAASF,IAE1D,IAAM8xB,GAAW,IAAMjxB,GAAW,MAE9B8qB,GAAa,WACf,IACE,IAAIA,EAAaF,GAAoBoB,cAAclB,aAEnD,OADAlwB,QAAQC,IAAI,oBAAqBiwB,GAC1BA,EACP,SACA,OAAO,IAIXoG,IAASC,OAEP,kBAAC,WAAD,CAAUC,SAAU,kBAAC,GAAD,OAClB,kBAAC,IAAD,CAAeC,SAAUJ,IACvB,kBAAC,KAAD,KACE,yBAAKjjB,UAAU,cACb,kBAAC,IAAD,KAYE,kBAAC,IAAD,CAAOsjB,KAAK,sBAAsBC,UAAWvQ,KAC7C,kBAAC,IAAD,CAAOwQ,OAAK,EAACF,KAAK,QAAQC,UAAWlW,KACrC,kBAAC,IAAD,CAAOmW,OAAK,EAACF,KAAK,UAAUC,UAAWE,KACvC,kBAAC,IAAD,CAAOD,OAAK,EAACF,KAAK,SAASC,UAAWG,KACtC,kBAAC,IAAD,CAAOF,OAAK,EAACF,KAAK,SAASC,UAAWhJ,KACtC,kBAAC,IAAD,CAAOiJ,OAAK,EAACF,KAAK,cAAcC,UAAWtC,KAC3C,kBAAC,IAAD,CAAOuC,OAAK,EAACF,KAAK,MAAMC,UAAWtC,KACnC,kBAAC,IAAD,CACEuC,OAAK,EACLF,KAAK,SACLH,OAAQ,WACN,OAAQrG,KAQN,kBAAC,GAAD,MAPA,kBAAC,IAAD,CACEjU,GAAI,CACFC,SAAU,SACVrS,MAAO,CAAE6nB,KAAM,gBAQzB,kBAAC,IAAD,CACEkF,OAAK,EACLF,KAAK,aACLH,OAAQ,WACN,OAAQrG,KAQN,kBAAC,GAAD,MAPA,kBAAC,IAAD,CACEjU,GAAI,CACFC,SAAU,SACVrS,MAAO,CAAE6nB,KAAM,oBAQzB,kBAAC,IAAD,CACEkF,OAAK,EACLF,KAAK,oBACLH,OAAQ,SAAC12B,GACP,OAAQqwB,KAQN,kBAAC,GAAarwB,GAPd,kBAAC,IAAD,CACEoc,GAAI,CACFC,SAAU,SACVrS,MAAO,CAAE6nB,KAAM,gBA6BzB,kBAAC,IAAD,CAAOkF,OAAK,EAACF,KAAK,SAASC,UAAWtF,KACtC,kBAAC,IAAD,CAAOuF,OAAK,EAACF,KAAK,UAAUC,UAAWrE,UAOjDnE,SAAS4I,eAAe,SlCjDpB,kBAAmBzO,WACrBA,UAAU0O,cAAcC,MACrBruB,MAAK,SAAAsuB,GACJA,EAAaC,gBAEd/tB,OAAM,SAAAzG,GACL3C,QAAQ2C,MAAMA,EAAMkJ,c","file":"static/js/main.aad4cd53.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\r\n// register() is not called by default.\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 subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\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.0/8 are 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 function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\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 // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\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, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.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, config);\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\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React, { Component, PureComponent } from \"react\";\r\nimport * as cel from \"d3-celestial\";\r\nimport DOMPurify from \"dompurify\";\r\nimport \"d3-celestial/celestial.css\";\r\nimport \"./editor-map.css\";\r\nimport i18n from \"i18next\";\r\n\r\nexport default class Map extends Component {\r\n static whyDidYouRender = true;\r\n isSmallScreen = true;\r\n\r\n constructor(props) {\r\n super(props);\r\n this._text1 = this.getFixedText1(props.text1);\r\n this._poster = React.createRef();\r\n this._map = React.createRef();\r\n this.isRendering = false;\r\n }\r\n\r\n addMw() {\r\n //var img = document.getElementById(\"template\");\r\n var img = new Image();\r\n //https://yoksel.github.io/url-encoder/\r\n img.src =\r\n \"data:image/svg+xml,%3Csvg height='3' width='3' viewBox='0 0 3 3' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23bbb' /%3E%3C/svg%3E\";\r\n\r\n cel.Celestial().add({\r\n file: \"/sky/data/mw2.json\",\r\n type: \"line\",\r\n\r\n callback: function (error, json) {\r\n if (error) return console.warn(error);\r\n // Load the geoJSON file and transform to correct coordinate system, if necessary\r\n var mw = json;\r\n\r\n var Celestial = cel.Celestial();\r\n\r\n //Celestial.getData(jsonLine, config.transform);\r\n\r\n // Add to celestial objects container in d3\r\n Celestial.container\r\n .selectAll(\".mway\")\r\n .data(mw.features)\r\n .enter()\r\n .append(\"path\")\r\n .attr(\"class\", \"mw2\");\r\n\r\n // Trigger redraw to display changes\r\n Celestial.redraw();\r\n },\r\n\r\n redraw: function () {\r\n var Celestial = cel.Celestial();\r\n\r\n var mwPattern = Celestial.context.createPattern(img, \"repeat\");\r\n\r\n var mwStyle = {\r\n fill: mwPattern,\r\n // fill: \"#bbbbbb\",\r\n opacity: \"0.7\",\r\n };\r\n\r\n Celestial.container.selectAll(\".mw2\").each(function (d) {\r\n Celestial.setStyle(mwStyle);\r\n Celestial.map(d);\r\n\r\n //Celestial.context.fillStyle = mwPattern;\r\n Celestial.context.fill();\r\n });\r\n },\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"resize\", this.updateWindowDimensions);\r\n this.updateWindowDimensions();\r\n\r\n var config = this.getInitialCelestialConfig(this.props, this.isSmallScreen);\r\n\r\n //this.addMw();\r\n\r\n cel.Celestial().display(config);\r\n this.updateMapPosition(this.props);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"resize\", this.updateWindowDimensions);\r\n }\r\n\r\n updateWindowDimensions = () => {\r\n console.log(\"Calculating window size\");\r\n let width = window.innerWidth;\r\n let isSmallScreen = width < 768 ? true : false;\r\n this.isSmallScreen = isSmallScreen;\r\n };\r\n\r\n getFixedText1(text1) {\r\n if (text1) {\r\n try {\r\n return DOMPurify.sanitize(text1).replace(\r\n /❤️/g,\r\n ''\r\n );\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n return \"\";\r\n }\r\n // componentDidUpdate(prevProps, prevState) {\r\n // if (\r\n // prevProps.latitude !== this.props.latitude ||\r\n // prevProps.longitude !== this.props.longitude ||\r\n // prevProps.date !== this.props.date\r\n // ) {\r\n // this.updateMap();\r\n // }\r\n // if (prevProps.map != this.props.map) {\r\n // this.updateConfig();\r\n // }\r\n // }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._text1 = this.getFixedText1(nextProps.text1);\r\n if (\r\n nextProps.latitude !== this.props.latitude ||\r\n nextProps.longitude !== this.props.longitude ||\r\n nextProps.date !== this.props.date\r\n ) {\r\n this.updateMapPosition(nextProps);\r\n }\r\n if (nextProps.map != this.props.map) {\r\n let needChangeCanvasSize = false;\r\n if (nextProps.styleId !== this.props.styleId) {\r\n var prevDivider = this.getAdditionalDividerByStyleId(\r\n this.props.styleId\r\n );\r\n var nextDivider = this.getAdditionalDividerByStyleId(nextProps.styleId);\r\n if (prevDivider !== nextDivider) {\r\n needChangeCanvasSize = true;\r\n }\r\n }\r\n this.updateConfig(nextProps, this.isSmallScreen, needChangeCanvasSize);\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps, nextState) {\r\n if (\r\n nextProps.text1 !== this.props.text1 ||\r\n nextProps.text2 !== this.props.text2 ||\r\n nextProps.ratio !== this.props.ratio ||\r\n nextProps.styleId !== this.props.styleId\r\n ) {\r\n console.log(\"map should update!\");\r\n return true;\r\n } else {\r\n console.log(\"map shouldn't update\");\r\n return false;\r\n }\r\n }\r\n\r\n getAdditionalDividerByStyleId(styleId) {\r\n if (styleId && styleId.indexOf(\"_clip_heart\") > 0) {\r\n return 1.5;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n getInitialCelestialConfig(props, isSmallScreen) {\r\n let sizeDivider = 1;\r\n if (isSmallScreen) {\r\n sizeDivider = 2;\r\n }\r\n\r\n if (props) {\r\n sizeDivider =\r\n sizeDivider / this.getAdditionalDividerByStyleId(props.styleId);\r\n }\r\n\r\n var lang = i18n.language;\r\n\r\n var isNamesEnabled = props.map.features.find(\r\n (f) => f.id == \"isNamesEnabled\"\r\n );\r\n var config = {\r\n width: 500 / sizeDivider,\r\n projection: \"stereographic\",\r\n adaptable: false, // Sizes are increased with higher zoom-levels\r\n interactive: false, // Enable zooming and rotation with mousewheel and dragging\r\n form: false,\r\n controls: false, // Display zoom controls\r\n lang: \"\", // Global language override for names, any name setting that has the chosen language available\r\n // Default: desig or empty string for designations, other languages as used anywhere else\r\n culture: \"\", // Source of constellations and star names, default \"iau\", other: \"cn\" Traditional Chinese\r\n container: \"celestial-map\", // ID of parent element, e.g. div, null = html-body\r\n datapath: \"/sky/data/\", // Path/URL to data files, empty = subfolder 'data'\r\n stars: {\r\n show: true, // Show stars\r\n limit: 6, // Show only stars brighter than limit magnitude\r\n colors: false, // Show stars in spectral colors, if not use default color\r\n style: { fill: \"#ffffff\", opacity: 1 }, // Default style for stars\r\n designation: false, // Show star names (Bayer, Flamsteed, Variable star, Gliese or designation,\r\n size: 5 / sizeDivider, // Maximum size (radius) of star circle in pixels,\r\n },\r\n dsos: {\r\n show: false,\r\n },\r\n planets: {\r\n show: false,\r\n },\r\n constellations: {\r\n names: isNamesEnabled ? isNamesEnabled.isEnabled : false, // Show constellation names\r\n namesType: lang, // What kind of name to show (default 3 letter designations) all options: name, desig,\r\n // lat, en, ar, cn, cz, ee, fi, fr, de, gr, il, it, jp, kr, in, ir, ru, es, tr\r\n nameStyle: {\r\n fill: \"#ffffff\",\r\n align: \"center\",\r\n baseline: \"middle\",\r\n width: [0.5 / sizeDivider, 0.5 / sizeDivider, 0.5 / sizeDivider],\r\n stroke: [\r\n props.map.background,\r\n props.map.background,\r\n props.map.background,\r\n ],\r\n opacity: 1,\r\n font: [\r\n \"400 \" +\r\n (2.26 * 5) / sizeDivider +\r\n \"px 'Caveat', Arial, sans-serif\", // Style for constellations\r\n \"400 \" +\r\n (2.03 * 5) / sizeDivider +\r\n \"px 'Caveat', Arial, sans-serif\", // Different fonts for diff.\r\n \"400 \" +\r\n (1.69 * 5) / sizeDivider +\r\n \"px 'Caveat', Arial, sans-serif\",\r\n ], // ranked constellations\r\n },\r\n lines: props.map.features.find((f) => f.id == \"isConstellationsEnabled\")\r\n .isEnabled,\r\n lineStyle: {\r\n stroke: \"#dddddd\",\r\n width: 1.5 / sizeDivider,\r\n opacity: 0.7,\r\n },\r\n },\r\n mw: {\r\n show: props.map.features.find((f) => f.id == \"isMWEnabled\").isEnabled, // Show Milky Way as filled multi-polygon outlines\r\n // style: { fill: \"#ffffff\", opacity: 0.15 } // Style for MW layers\r\n },\r\n lines: {\r\n // Display & styles for graticule & some planes\r\n graticule: {\r\n show: props.map.features.find((f) => f.id == \"isGridEnabled\")\r\n .isEnabled,\r\n stroke: \"#cccccc\",\r\n width: 0.5 / sizeDivider,\r\n opacity: 0.8,\r\n },\r\n equatorial: {\r\n show: false,\r\n },\r\n ecliptic: {\r\n show: false,\r\n },\r\n galactic: {\r\n show: false,\r\n },\r\n supergalactic: {\r\n show: false,\r\n },\r\n },\r\n background: {\r\n fill: props.map.background,\r\n opacity: 1,\r\n stroke: props.map.stroke,\r\n width: 5 / sizeDivider,\r\n },\r\n horizon: {\r\n //Show horizon marker, if location is set and map projection is all-sky\r\n show: false,\r\n },\r\n daylight: {\r\n //Show day sky as a gradient, if location is set and map projection is hemispheric\r\n show: false,\r\n },\r\n };\r\n\r\n return config;\r\n }\r\n\r\n getUpdatedCelestialConfig(props, isSmallScreen) {\r\n let sizeDivider = 1;\r\n if (isSmallScreen) {\r\n sizeDivider = 2;\r\n }\r\n\r\n var isNamesEnabled = props.map.features.find(\r\n (f) => f.id == \"isNamesEnabled\"\r\n );\r\n var config = {\r\n constellations: {\r\n names: isNamesEnabled ? isNamesEnabled.isEnabled : false, // Show constellation names\r\n\r\n lines: props.map.features.find((f) => f.id == \"isConstellationsEnabled\")\r\n .isEnabled, // Show constellation lines, style below\r\n },\r\n mw: {\r\n show: props.map.features.find((f) => f.id == \"isMWEnabled\").isEnabled,\r\n },\r\n lines: {\r\n graticule: {\r\n show: props.map.features.find((f) => f.id == \"isGridEnabled\")\r\n .isEnabled,\r\n stroke: \"#cccccc\",\r\n width: 0.5 / sizeDivider,\r\n opacity: 0.8,\r\n },\r\n },\r\n background: {\r\n fill: props.map.background, // Area fill\r\n stroke: props.map.stroke, // Outline\r\n },\r\n };\r\n\r\n return config;\r\n }\r\n\r\n updateConfig = (props, isSmallScreen, needChangeCanvasSize) => {\r\n console.log(\"Updating celestial config\");\r\n\r\n if (needChangeCanvasSize) {\r\n var config = this.getInitialCelestialConfig(props, isSmallScreen);\r\n //Если менять размер канваса до того, как закончится анимация вращения, то размер применяется неправильно\r\n this.redrawCelestialWhenRenderIsComplete(config);\r\n } else {\r\n var config = this.getUpdatedCelestialConfig(props, isSmallScreen);\r\n cel.Celestial().apply(config);\r\n }\r\n };\r\n\r\n redrawCelestialWhenRenderIsComplete = (config) => {\r\n if (this.isRendering) {\r\n console.log(\"Waiting till render is complete\");\r\n window.setTimeout(this.redrawCelestialWhenRenderIsComplete, 1000, config);\r\n } else {\r\n console.log(\"Render is complete\");\r\n cel.Celestial().display(config);\r\n }\r\n };\r\n\r\n updateMapPosition = (props) => {\r\n console.log(\"Updating celestial position\");\r\n\r\n this.isRendering = true;\r\n let that = this;\r\n setTimeout(() => {\r\n that.isRendering = false;\r\n }, 10000);\r\n cel.Celestial().skyview({\r\n date: props.date,\r\n location: [props.latitude, props.longitude],\r\n });\r\n };\r\n\r\n getMapSize = () => {\r\n //const { width, height } = cel.Celestial().metrics();\r\n\r\n return {\r\n width: this._map.current.firstChild.offsetWidth,\r\n height: this._map.current.firstChild.offsetHeight,\r\n containerWidth: this._poster.current.offsetWidth,\r\n containerHeight: this._poster.current.offsetHeight,\r\n };\r\n };\r\n\r\n render() {\r\n let renderOverlay = (styleId) => {\r\n if (styleId && styleId === \"simple_white_overlay_couple\") {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n console.log(\"Rendering editor-map\");\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {/* загрузка шрифта */}\r\n \r\n \r\n font завантаження...\r\n \r\n
\r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n 0\r\n ? \"celestial-map-square\"\r\n : \"\")\r\n }\r\n ref={this._map}\r\n >
\r\n\r\n 0\r\n ? \"clip clip-\" + this.props.styleId\r\n : \"d-none \")\r\n }\r\n >
\r\n\r\n {renderOverlay(this.props.styleId)}\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n
\r\n

{this.props.text2}

\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\nimport GooglePlacesAutocomplete from \"react-google-places-autocomplete\";\r\nimport \"react-google-places-autocomplete/dist/assets/index.css\";\r\nimport { geocodeByPlaceId, getLatLng } from \"react-google-places-autocomplete\";\r\nimport \"./editor-autocomplete.css\";\r\n\r\nimport i18n from \"i18next\";\r\n\r\nexport default class Autocomplete extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._autocomplete = React.createRef();\r\n this.state = {};\r\n this._textInput = React.createRef();\r\n this.ukraineBounds = {\r\n west: 22.13722,\r\n east: 40.22806,\r\n north: 52.37917,\r\n south: 44.38722,\r\n };\r\n }\r\n\r\n getAddress(place) {\r\n let idx = 0;\r\n let city;\r\n let country;\r\n\r\n for (let address of place.address_components) {\r\n idx++;\r\n if (idx === 1) {\r\n city = address.long_name;\r\n }\r\n\r\n if (address.types.indexOf(\"country\") > -1) {\r\n country = address.long_name;\r\n }\r\n }\r\n return {\r\n city,\r\n country,\r\n };\r\n }\r\n\r\n getAddressAndCoordinates(place) {\r\n return getLatLng(place).then((latLng) => {\r\n console.log(\"Got coordinates: \", latLng);\r\n var address = this.getAddress(place);\r\n console.log(\"Got address: \", address);\r\n if (!address.country) {\r\n if (\r\n latLng.lat <= this.ukraineBounds.north &&\r\n latLng.lat >= this.ukraineBounds.south &&\r\n latLng.lng <= this.ukraineBounds.east &&\r\n latLng.lng >= this.ukraineBounds.west\r\n ) {\r\n address.country = \"Україна\";\r\n try {\r\n var lang = i18n.language;\r\n if (lang === \"ru\") {\r\n address.country = \"Украина\";\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n }\r\n return {\r\n city: address.city,\r\n country: address.country,\r\n latitude: latLng.lat,\r\n longitude: latLng.lng,\r\n };\r\n });\r\n }\r\n handleAutocompleteSelect = (address) => {\r\n console.log(address);\r\n geocodeByPlaceId(address.place_id)\r\n .then((results) => {\r\n console.log(\"Got places:\", results);\r\n console.log(\"lat:\", results[0].geometry.location.lat());\r\n return this.getAddressAndCoordinates(results[0]);\r\n })\r\n .then((place) => {\r\n console.log(\"place:\", place);\r\n place.description = address.description;\r\n this.props.onPlaceChanged(place);\r\n })\r\n .catch((error) => console.error(\"Error\", error));\r\n };\r\n\r\n onClear = (e) => {\r\n try {\r\n this._autocomplete.current.changeValue(\"\");\r\n this._textInput.current.focus();\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n renderInput = (props) => {\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 render() {\r\n var autocompletionRequest = {\r\n types: [\"(cities)\"],\r\n };\r\n return (\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\nimport Geolocation from \"react-geolocation\";\r\n\r\nexport default class GeolocationComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n onSuccess = (position) => {\r\n console.log(\"Success\", position);\r\n var latitude = position.coords.latitude;\r\n var longitude = position.coords.longitude;\r\n this.props.onCoordinatesChanged(latitude, longitude);\r\n };\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n","import axios from \"axios\";\r\nconst key = \"3PNMU6D0P7CK\";\r\nconst api = axios.create({\r\n baseURL: \"https://api.timezonedb.com/v2.1\",\r\n});\r\n\r\nexport const getTimeZoneOffset = (lat, lng, time) => {\r\n console.log(\"timestamp:\", time);\r\n return api\r\n .get(\r\n `/get-time-zone?format=json&by=position&key=${key}&lat=${lat}&lng=${lng}&time=${time}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n }\r\n )\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n};\r\n\r\nconst apis = {\r\n getTimeZoneOffset,\r\n};\r\n\r\nexport default apis;\r\n","import React, { PureComponent } from \"react\";\r\nimport Datetime from \"react-datetime\";\r\nimport \"react-datetime/css/react-datetime.css\";\r\nimport \"./editor-datePicker.css\";\r\nimport moment from \"moment\";\r\nimport \"moment/locale/uk.js\";\r\nimport \"moment/locale/ru.js\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport timezoneDbApi from \"../../api/timezonedb-api\";\r\n\r\nclass EditorDatePicker extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n //moment.locale('uk');\r\n this.state = {\r\n isTimePickerAllowed: false,\r\n };\r\n\r\n this.timeZoneResponse = null;\r\n this.hasTime = this.state.isTimePickerAllowed;\r\n try {\r\n this.currentLocalDateTime = moment(this.props.date);\r\n this.currentUtcOffset = this.currentLocalDateTime.utcOffset();\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.recalculateUtcOnDateUpdate();\r\n }\r\n componentDidUpdate(prevProps) {\r\n console.log(\"latitude:\", this.props.latitude);\r\n\r\n console.log(\"longitude:\", this.props.longitude);\r\n\r\n if (\r\n prevProps.latitude !== this.props.latitude ||\r\n prevProps.longitude !== this.props.longitude\r\n ) {\r\n this.recalculateUtcOnCoordinatesUpdate();\r\n }\r\n }\r\n\r\n raiseDateUpdate(timeZoneResponse) {\r\n this.timeZoneResponse = timeZoneResponse;\r\n\r\n if (timeZoneResponse.status === \"FAILED\") {\r\n // Location at sea inferred from longitude\r\n this.currentUtcOffset = Math.round(this.props.longitude / 15) * 60;\r\n } else {\r\n this.currentUtcOffset = timeZoneResponse.gmtOffset / 60;\r\n }\r\n var utcDateTime = this.getUtcTimeFromLocal();\r\n this.props.onDateChanged(this.currentLocalDateTime, utcDateTime, this.hasTime);\r\n }\r\n\r\n getUtcTimeFromLocal() {\r\n console.log(\"timezone offset:\", this.currentUtcOffset);\r\n let utcDateTimeString = this.currentLocalDateTime.clone().add(- this.currentUtcOffset, 'minutes').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n let utcDateTime = moment.utc(utcDateTimeString);\r\n console.log(\"utc time:\", utcDateTime);\r\n return utcDateTime;\r\n }\r\n \r\n recalculateUtcOnCoordinatesUpdate() {\r\n console.log(\"recalculateUtcOnCoordinatesUpdate\");\r\n var timeStamp = this.currentLocalDateTime.unix();\r\n\r\n timezoneDbApi\r\n .getTimeZoneOffset(this.props.latitude, this.props.longitude, timeStamp)\r\n .then((r) => {\r\n if (\r\n this.timeZoneResponse &&\r\n r &&\r\n this.timeZoneResponse.zoneName === r.zoneName\r\n ) {\r\n console.log(\r\n \"no need to raiseDateUpdate because timezone wasnt changed\"\r\n );\r\n } else {\r\n this.raiseDateUpdate(r);\r\n }\r\n })\r\n .catch((e) => {\r\n (console.error || console.log).call(console, e.stack || e);\r\n var utcDateTime = this.getUtcTimeFromLocal();\r\n this.props.onDateChanged(this.currentLocalDateTime, utcDateTime, this.hasTime);\r\n });\r\n }\r\n\r\n recalculateUtcOnDateUpdate() {\r\n console.log(\"recalculateUtcTime\");\r\n var timeStamp = this.currentLocalDateTime.unix();\r\n if (this.timeZoneResponse) {\r\n if (\r\n timeStamp >= this.timeZoneResponse.zoneStart &&\r\n timeStamp <= this.timeZoneResponse.zoneEnd\r\n ) {\r\n console.log(\"no need to get new timezone info\");\r\n this.raiseDateUpdate(this.timeZoneResponse);\r\n return;\r\n }\r\n }\r\n\r\n timezoneDbApi\r\n .getTimeZoneOffset(this.props.latitude, this.props.longitude, timeStamp)\r\n .then((r) => {\r\n this.raiseDateUpdate(r);\r\n })\r\n .catch((e) => {\r\n (console.error || console.log).call(console, e.stack || e);\r\n var utcDateTime = this.getUtcTimeFromLocal();\r\n this.props.onDateChanged(this.currentLocalDateTime, utcDateTime, this.hasTime);\r\n });\r\n }\r\n\r\n onChange = (dateTime) => {\r\n console.log(\"selected dateTime:\", dateTime);\r\n let hasTime = false;\r\n\r\n //date.utcOffset(0);\r\n try {\r\n if (dateTime && typeof dateTime === \"string\") {\r\n var dateTimeSplit = dateTime.match(\r\n /^\\s*(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})(?:\\s+(\\d{1,2})\\:(\\d{1,2}))?\\s*$/\r\n );\r\n\r\n if (dateTimeSplit) {\r\n dateTimeSplit = dateTimeSplit.map((item) => {\r\n if (item && item.length == 1) {\r\n item = \"0\" + item;\r\n }\r\n return item;\r\n });\r\n\r\n dateTime = dateTimeSplit.slice(1, 4).join(\".\");\r\n\r\n if (\r\n dateTimeSplit.length >= 6 &&\r\n dateTimeSplit[4] &&\r\n dateTimeSplit[5]\r\n ) {\r\n hasTime = true;\r\n dateTime += \" \" + dateTimeSplit.slice(4, 6).join(\":\");\r\n }\r\n console.log(\"fixedDate:\", dateTime);\r\n }\r\n\r\n dateTime = moment(dateTime, \"DD.MM.YYYY HH:mm\");\r\n if (!dateTime.isValid()) {\r\n throw \"invalid date: \" + dateTime;\r\n }\r\n } else {\r\n hasTime = this.state.isTimePickerAllowed;\r\n }\r\n\r\n // if (!this.state.isTimePickerAllowed) {\r\n // dateTime.set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\r\n // }\r\n\r\n this.currentLocalDateTime = dateTime;\r\n this.hasTime = hasTime;\r\n\r\n this.recalculateUtcOnDateUpdate();\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n renderDateInput = (props, openCalendar, closeCalendar) => {\r\n return (\r\n
\r\n rest)(props)}\r\n class=\"form-control form-control-md u-datepicker-v1 rounded-0\"\r\n type=\"text\"\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 onAllowTimePickerClick = () => {\r\n try {\r\n if (this.state.isTimePickerAllowed) {\r\n if (this.currentLocalDateTime) {\r\n this.currentLocalDateTime.set({\r\n hour: 0,\r\n minute: 0,\r\n second: 0,\r\n millisecond: 0,\r\n });\r\n }\r\n }\r\n var utcDateTime = this.getUtcTimeFromLocal();\r\n this.props.onDateChanged(\r\n this.currentLocalDateTime, utcDateTime,\r\n !this.state.isTimePickerAllowed\r\n );\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n this.setState({ isTimePickerAllowed: !this.state.isTimePickerAllowed });\r\n };\r\n\r\n render() {\r\n console.log(\"Rendering editor-datepicker\");\r\n const { t, i18n } = this.props;\r\n return (\r\n
\r\n
\r\n \r\n \r\n {t(\"Я знаю точний час\")}\r\n \r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(EditorDatePicker);\r\n","import React, { PureComponent } from \"react\";\r\n\r\nimport Carousel from \"react-bootstrap/Carousel\";\r\nimport \"./editor-materials.css\";\r\nimport HyperModal from \"react-hyper-modal\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nclass EditorMaterials extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n const { t } = props;\r\n\r\n this.materials = [\r\n {\r\n id: \"Бумага\",\r\n name: t(\"Папір\"),\r\n info: {\r\n name: t(\"Друк на папері\"),\r\n description: t(\r\n \"Ми використовуємо високоякісний кольоровий друк на матовому папері високої щільності. Такий друк забезпечує фотореалістичність і високу деталізацію плакатів. Плакати 30*40 пересилаємо в захисній папці, 40*50см і 50*70см - у трикутному тубусі.\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/paper1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/paper2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/paper3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"21х30 см\",\r\n name: \"21х30 см\",\r\n width: 210,\r\n height: 300,\r\n ratio: \"7-10\",\r\n price: 320,\r\n oldPrice: 390,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 230,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 300,\r\n height: 400,\r\n ratio: \"3-4\",\r\n price: 390,\r\n oldPrice: 440,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 260,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 490,\r\n oldPrice: 640,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 360,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 590,\r\n oldPrice: 720,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 560,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"ПВХ\",\r\n name: t(\"Пластик\"),\r\n info: {\r\n name: t(\"Друк на ПВХ\"),\r\n description: t(\r\n \"ПВХ - легковісний лист пластику зі вспіненою структурою. Його можна підвішувати без рами, оскільки він достатньо щільний і не скручується. Безкоштовно можемо наклеїти двосторонній скотч, щоб кріпити до стіни. Товщина - 3мм, або 1мм (якщо в комплекті з рамкою).\\nБезпечний для людини та навколишнього середовища\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/plastic1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/plastic2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 300,\r\n height: 400,\r\n ratio: \"3-4\",\r\n price: 550,\r\n oldPrice: 690,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Лента\",\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 200,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n /*{\r\n id: \"Крючки\",\r\n name: \"Гачки\",\r\n price: 30,\r\n info: {\r\n name: \"Гачки\",\r\n description:\r\n \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n images: [\"assets/img/plastic_hooks.jpg\"],\r\n },\r\n },*/\r\n ],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 700,\r\n oldPrice: 880,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Лента\",\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 300,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n // {\r\n // id: \"Крючки\",\r\n // name: \"Гачки\",\r\n // price: 30,\r\n // info: {\r\n // name: \"Гачки\",\r\n // description:\r\n // \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n // images: [\"assets/img/plastic_hooks.jpg\"],\r\n // },\r\n // },\r\n ],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 950,\r\n oldPrice: 1200,\r\n hangers: [\r\n { id: \"Нет\", name: \"Немає\", price: 0 },\r\n {\r\n id: t(\"Лента\"),\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 400,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі склом (натуральним або акриловим) та зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру. Задня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n // {\r\n // id: \"Крючки\",\r\n // name: \"Гачки\",\r\n // price: 30,\r\n // info: {\r\n // name: \"Гачки\",\r\n // description:\r\n // \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n // images: [\"assets/img/plastic_hooks.jpg\"],\r\n // },\r\n // },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"Холст\",\r\n name: t(\"Холст\"),\r\n info: {\r\n name: t(\"Друк на холсті\"),\r\n description: t(\r\n \"Ми друкуємо на натуральному холсті і використовуємо галерейну натяжку на дерев’яний підрамник. При такій натяжці зображення заходить на бокові сторони холсту і загинається під підрамник. Таким чином холст чудово виглядає на стіні і не потребує додаткової рами.\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/canvas1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/canvas2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/canvas3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 300,\r\n height: 400,\r\n ratio: \"3-4\",\r\n price: 890,\r\n oldPrice: 1130,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 1090,\r\n oldPrice: 1400,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 1290,\r\n oldPrice: 1700,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n this.state = {\r\n selectedMaterialId: props.initialSelectedMaterialId,\r\n selectedSizeId: props.initialSelectedSizeId,\r\n selectedHangerId: props.initialSelectedHangerId,\r\n isModalOpen: false,\r\n modalName: \"\",\r\n modalDescription: \"\",\r\n modalImages: [],\r\n };\r\n }\r\n\r\n riseUpdate = () => {\r\n console.log(\"recalculate price\");\r\n\r\n try {\r\n var material = this.materials.find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n });\r\n\r\n var size = material.sizes.find((size) => {\r\n return size.id === this.state.selectedSizeId;\r\n });\r\n\r\n let { price, ratio, width, height } = size;\r\n\r\n var hanger = size.hangers.find((h) => {\r\n return h.id === this.state.selectedHangerId;\r\n });\r\n\r\n price += hanger.price;\r\n\r\n var proposalHangerId = \"Рамка\";\r\n var proposalHangerName = \"\";\r\n var proposalHangerPrice = 0;\r\n if (\r\n this.state.selectedMaterialId === \"Бумага\" &&\r\n this.state.selectedHangerId == \"Нет\"\r\n ) {\r\n var frameHanger = size.hangers.find((h) => {\r\n return h.id === proposalHangerId;\r\n });\r\n if (frameHanger) {\r\n proposalHangerName = frameHanger.name;\r\n proposalHangerPrice = frameHanger.price;\r\n }\r\n }\r\n\r\n this.props.onChanged({\r\n selectedMaterialId: this.state.selectedMaterialId,\r\n selectedSizeId: this.state.selectedSizeId,\r\n selectedHangerId: this.state.selectedHangerId,\r\n selectedMaterialName: material.name,\r\n selectedHangerName: hanger.name,\r\n price,\r\n ratio,\r\n width,\r\n height,\r\n proposalHangerId,\r\n proposalHangerName,\r\n proposalHangerPrice,\r\n });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (\r\n this.state.selectedMaterialId !== prevState.selectedMaterialId ||\r\n this.state.selectedSizeId !== prevState.selectedSizeId ||\r\n this.state.selectedHangerId !== prevState.selectedHangerId\r\n ) {\r\n this.riseUpdate();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.riseUpdate();\r\n }\r\n\r\n // useEffect(() => {\r\n // riseUpdate();\r\n // }, [selectedMaterialId, selectedSizeId, selectedHangerId]);\r\n\r\n onMaterialChanged = (changeEvent) => {\r\n var materialId = changeEvent.target.value;\r\n var material = this.materials.find((s) => s.id === materialId);\r\n if (material) {\r\n var size = material.sizes.find((s) => s.id === this.state.selectedSizeId);\r\n if (!size) {\r\n size = material.sizes[1];\r\n }\r\n var sizeId = size.id;\r\n\r\n var hangerId = \"\",\r\n hanger = null;\r\n if (\r\n this.state.selectedHangerId !== \"Нет\" &&\r\n this.state.selectedMaterialId !== \"ПВХ\"\r\n ) {\r\n hanger = size.hangers.find((s) => s.id === this.state.selectedHangerId);\r\n }\r\n if (!hanger) {\r\n hanger = size.hangers.find((s) => s.isDefault);\r\n if (!hanger && size.hangers.length > 0) {\r\n hanger = size.hangers[0];\r\n }\r\n }\r\n\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedMaterialId: materialId,\r\n selectedSizeId: sizeId,\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n };\r\n\r\n onSizeChanged = (changeEvent) => {\r\n var material = this.materials.find(\r\n (s) => s.id === this.state.selectedMaterialId\r\n );\r\n if (material) {\r\n var sizeId = changeEvent.target.value;\r\n var size = material.sizes.find((s) => s.id === sizeId);\r\n\r\n if (size) {\r\n var hangerId = \"\",\r\n hanger = null;\r\n if (\r\n this.state.selectedHangerId !== \"Нет\" &&\r\n this.state.selectedMaterialId !== \"ПВХ\"\r\n ) {\r\n hanger = size.hangers.find(\r\n (s) => s.id === this.state.selectedHangerId\r\n );\r\n }\r\n\r\n if (!hanger) {\r\n var hanger = size.hangers.find((s) => s.isDefault);\r\n if (!hanger && size.hangers.length > 0) {\r\n hanger = size.hangers[0];\r\n }\r\n }\r\n\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedSizeId: sizeId,\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n }\r\n };\r\n\r\n onHangerChanged = (changeEvent) => {\r\n var material = this.materials.find(\r\n (s) => s.id === this.state.selectedMaterialId\r\n );\r\n if (material) {\r\n var size = material.sizes.find((s) => s.id === this.state.selectedSizeId);\r\n if (size) {\r\n var hangerId = changeEvent.target.value;\r\n var hanger = size.hangers.find((s) => s.id === hangerId);\r\n if (!hanger) {\r\n hanger = size.hangers.find((s) => s.isDefault);\r\n }\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n }\r\n };\r\n\r\n onMaterialInfoClick = (e, material) => {\r\n e.preventDefault();\r\n\r\n if (material) {\r\n this.setState({\r\n modalName: material.info.name,\r\n modalDescription: material.info.description,\r\n modalImages: material.info.images,\r\n isModalOpen: true,\r\n });\r\n }\r\n };\r\n\r\n onHangerInfoClick = (e, hanger) => {\r\n e.preventDefault();\r\n\r\n if (hanger) {\r\n this.setState({\r\n modalName: hanger.info.name,\r\n modalDescription: hanger.info.description,\r\n modalImages: hanger.info.images,\r\n isModalOpen: true,\r\n });\r\n }\r\n };\r\n\r\n onModalClose = (e) => {\r\n this.setState({\r\n isModalOpen: false,\r\n });\r\n };\r\n\r\n renderModalWindow = (props) => {\r\n return (\r\n \r\n
\r\n
{props.name}
\r\n
\r\n
\r\n

{props.description}

\r\n \r\n {props.images &&\r\n props.images.map((src, index) => {\r\n return (\r\n \r\n {props.name}\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n renderSizesOld = (props) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n {this.materials\r\n .find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n })\r\n .sizes.map((size, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n };\r\n\r\n renderSizes = (props) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n {this.materials\r\n .find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n })\r\n .sizes.map((size, index) => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n })}\r\n
\r\n );\r\n };\r\n\r\n renderHangers = (props) => {\r\n const { t } = this.props;\r\n const hangers = props.hangers;\r\n if (!hangers || hangers.length <= 1) {\r\n return null;\r\n }\r\n return (\r\n \r\n

\r\n {t(\"Кріплення\")}\r\n

\r\n
\r\n {hangers.map((hanger, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n console.log(\"rendering: editor-materials\");\r\n const { t } = this.props;\r\n let size = this.materials\r\n .find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n })\r\n .sizes.find((size) => {\r\n return size.id === this.state.selectedSizeId;\r\n });\r\n let hangers = null;\r\n if (size) {\r\n hangers = size.hangers;\r\n }\r\n\r\n return (\r\n \r\n

Матеріал

\r\n
\r\n {this.materials.map((material, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n

\r\n {t(\"Розмір\")}\r\n

\r\n
\r\n
\r\n \r\n {t(\"Акційна ціна!\")}\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\nexport default withTranslation()(EditorMaterials);\r\n","export const getPublicUrl = (i18n) => {\r\n try {\r\n var split = process.env.PUBLIC_URL.split(\"/\");\r\n let result = split[0];\r\n\r\n if (i18n.language !== \"uk\") {\r\n result += \"/\" + i18n.language;\r\n }\r\n\r\n for (let i = 1; i < split.length; i++) {\r\n result += \"/\" + split[i];\r\n }\r\n\r\n return result;\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n return process.env.PUBLIC_URL;\r\n }\r\n};\r\n\r\nexport const getUrlQuery = (obj) => {\r\n try {\r\n const {\r\n date,\r\n printWidth,\r\n printHeight,\r\n style,\r\n centerLat,\r\n centerLon,\r\n mapWidth,\r\n mapHeight,\r\n containerWidth,\r\n containerHeight,\r\n background,\r\n stroke,\r\n isGridEnabled,\r\n isConstellationsEnabled,\r\n isMWEnabled,\r\n isNamesEnabled,\r\n language,\r\n } = obj;\r\n\r\n let query = \"?\";\r\n query += `centerLat=${centerLat}¢erLon=${centerLon}&date=${date}&mapWidth=${mapWidth}&mapHeight=${mapHeight}&containerWidth=${containerWidth}&containerHeight=${containerHeight}&background=${encodeURIComponent(\r\n background\r\n )}&stroke=${encodeURIComponent(\r\n stroke\r\n )}&isGridEnabled=${isGridEnabled}&isConstellationsEnabled=${isConstellationsEnabled}&isMWEnabled=${isMWEnabled}&isNamesEnabled=${isNamesEnabled}&language=${language}&printWidth=${printWidth}&printHeight=${printHeight}&style=${style}`;\r\n return query;\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n return null;\r\n }\r\n};\r\n\r\nexport const getAllStyles = (isTest) => {\r\n let styles = [\r\n {\r\n id: \"simple_white\",\r\n name: \"white\",\r\n },\r\n {\r\n id: \"simple_black\",\r\n name: \"black\",\r\n },\r\n {\r\n id: \"peak\",\r\n name: \"peak\",\r\n },\r\n {\r\n id: \"simple_white_overlay_couple\",\r\n name: \"couple\",\r\n },\r\n ];\r\n\r\n if (isTest) {\r\n styles.push({\r\n id: \"simple_white_clip_heart\",\r\n name: \"white heart\",\r\n });\r\n styles.push({\r\n id: \"simple_black_clip_heart\",\r\n name: \"black heart\",\r\n });\r\n }\r\n return styles;\r\n};\r\nexport const getStyleSettingsByStyleId = (styleId) => {\r\n try {\r\n let background = \"\";\r\n let stroke = \"\";\r\n\r\n switch (styleId) {\r\n case \"simple_black\":\r\n background = \"#000000\";\r\n stroke = \"#ffffff\";\r\n\r\n break;\r\n case \"simple_white\":\r\n background = \"#000000\";\r\n stroke = \"#000000\";\r\n\r\n break;\r\n\r\n case \"peak\":\r\n background = \"#09242E\";\r\n stroke = \"#ffffff\";\r\n break;\r\n case \"simple_white_overlay_couple\":\r\n background = \"#000000\";\r\n stroke = \"#000000\";\r\n\r\n break;\r\n case \"simple_white_clip_heart\":\r\n background = \"#000000\";\r\n stroke = \"#000000\";\r\n\r\n break;\r\n case \"simple_black_clip_heart\":\r\n background = \"#000000\";\r\n stroke = \"#ffffff\";\r\n\r\n break;\r\n default:\r\n throw \"Не могу найти стиль: \" + styleId;\r\n }\r\n return {\r\n background,\r\n stroke,\r\n };\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n};\r\n","import React, { PureComponent } from \"react\";\r\n\r\nimport Autocomplete from \"./editor-autocomplete\";\r\nimport GeolocationComponent from \"../geolocationComponent\";\r\nimport EditorDatePicker from \"./editor-datePicker\";\r\n\r\nimport \"./editor-sidebar.css\";\r\nimport classNames from \"classnames\";\r\n\r\nimport Materials from \"./editor-materials\";\r\n\r\nimport ErrorBoundary from \"react-error-boundary\";\r\nimport HyperModal from \"react-hyper-modal\";\r\nimport Carousel from \"react-bootstrap/Carousel\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { getPublicUrl, getAllStyles } from \"../../utils/utils\";\r\n\r\nclass EditorSidebar extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { t } = props;\r\n\r\n this._bottom = React.createRef();\r\n this.materialInfo = null;\r\n this.styles = getAllStyles(true);\r\n\r\n this.state = {\r\n sidebarMenuLinks: [true, false, false, false, false],\r\n isModalOpen: false,\r\n isProposedTextModalOpen: false,\r\n proposalHangerPrice: 0,\r\n };\r\n\r\n this._proposedTexts = [\r\n t(\"Зорі, під якими\\nпочалася наша історія\\n❤️\"),\r\n t(\"День, коли\\nпочалася наша пригода\\n❤️\"),\r\n t(\"Казкова мить\\n❤️\"),\r\n t(\"Мої щасливі зорі\"),\r\n t(\"Найкращий день мого життя\\n❤️\"),\r\n t(\"Точка відліку\"),\r\n t(\"Початок великої подорожі\"),\r\n t(\"Ти з’явився в моєму житті\\n❤️\"),\r\n t(\"Ми зустрілись під цими зорями\\n❤️\"),\r\n t(\"Ти народилася, щоб запалити цей світ\"),\r\n ];\r\n this._selectedProposedTextIndex = 0;\r\n this._isSmallScreen = true;\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"resize\", this.updateWindowDimensions);\r\n this.updateWindowDimensions();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"resize\", this.updateWindowDimensions);\r\n }\r\n\r\n updateWindowDimensions = () => {\r\n console.log(\"Calculating window size\");\r\n let width = window.innerWidth;\r\n this._isSmallScreen = width < 768 ? true : false;\r\n };\r\n\r\n scrollToBottom = () => {\r\n console.log(\"scrolling\");\r\n try {\r\n this._bottom.current.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"end\",\r\n inline: \"nearest\",\r\n });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onChatClick = (e) => {\r\n e.preventDefault();\r\n try {\r\n window.jivo_api.open();\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onSideBarMenuClick = (e, index) => {\r\n e.preventDefault();\r\n\r\n var sidebarMenuLinks = [...this.state.sidebarMenuLinks];\r\n\r\n for (var i = 0; i < sidebarMenuLinks.length; i++) {\r\n if (i === index) {\r\n sidebarMenuLinks[i] = true;\r\n } else {\r\n sidebarMenuLinks[i] = false;\r\n }\r\n }\r\n if (this._isSmallScreen) {\r\n this.setState(\r\n { sidebarMenuLinks: sidebarMenuLinks },\r\n this.scrollToBottom\r\n );\r\n } else {\r\n this.setState({ sidebarMenuLinks: sidebarMenuLinks });\r\n }\r\n };\r\n\r\n onMaterialChanged = (info) => {\r\n this.materialInfo = info;\r\n this.props.onMaterialChanged(info);\r\n };\r\n\r\n onMakeOrderClick = (e) => {\r\n e.preventDefault();\r\n if (this.materialInfo && this.materialInfo.proposalHangerPrice > 0) {\r\n this.setState({\r\n isModalOpen: true,\r\n proposalHangerPrice: this.materialInfo.proposalHangerPrice,\r\n });\r\n } else {\r\n this.props.onMakeOrderClick();\r\n }\r\n };\r\n\r\n onAddFrameClick = (e) => {\r\n e.preventDefault();\r\n var materialAlterInfo = {\r\n selectedHangerId: this.materialInfo.proposalHangerId,\r\n selectedHangerName: this.materialInfo.proposalHangerName,\r\n price: this.materialInfo.price + this.materialInfo.proposalHangerPrice,\r\n };\r\n this.props.onMakeOrderClick(materialAlterInfo);\r\n };\r\n\r\n onContinueWithoutFrameClick = (e) => {\r\n e.preventDefault();\r\n this.props.onMakeOrderClick();\r\n };\r\n\r\n renderSidebarMenu({ t }) {\r\n var createItem = (name, icon) => {\r\n return { name: name, icon: icon };\r\n };\r\n\r\n var items = [\r\n createItem(t(\"Подія\"), \"fa-map-marker\"),\r\n createItem(t(\"Стиль\"), \"fa-paint-brush\"),\r\n createItem(t(\"Матеріал\"), \"fa-map\"),\r\n createItem(t(\"Написи\"), \"fa-pencil\"),\r\n ];\r\n\r\n return items.map((item, index, array) => {\r\n var itemClass = classNames(\r\n \"h-100 g-color-white-opacity-0_6 g-color-primary--hover g-text-underline--none--hover g-font-weight-400\",\r\n {\r\n active: this.state.sidebarMenuLinks[index],\r\n }\r\n );\r\n return (\r\n
  • \r\n this.onSideBarMenuClick(e, index)}\r\n >\r\n \r\n
    \r\n {item.name}\r\n \r\n
  • \r\n );\r\n });\r\n }\r\n\r\n renderStyles = () => {\r\n const { t } = this.props;\r\n\r\n return (\r\n
    \r\n {this.styles.map((style, index) => {\r\n return (\r\n
    \r\n

    \r\n {style.name}\r\n

    \r\n \r\n );\r\n })}\r\n \r\n );\r\n };\r\n\r\n // renderStyles = () => {\r\n // const { t } = this.props;\r\n\r\n // return (
    \r\n //
    \r\n // {this.styles.map((style, index) => {\r\n // return (\r\n //
    \r\n //
    \r\n //

    \r\n // {style.name}\r\n //

    \r\n // \r\n // );\r\n // })}\r\n // \r\n // \r\n // )\r\n // };\r\n\r\n renderFeatures = () => {\r\n const { t } = this.props;\r\n\r\n return (\r\n
    \r\n {this.props.features.map((feature, index) => {\r\n return (\r\n
    \r\n

    \r\n {t(feature.name)}\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 onModalClose = (e) => {\r\n this.setState({\r\n isModalOpen: false,\r\n });\r\n };\r\n\r\n proposedTextModalOpen = (e) => {\r\n e.preventDefault();\r\n this.setState({\r\n isProposedTextModalOpen: true,\r\n });\r\n };\r\n\r\n onProposedTextModalClose = (e) => {\r\n this.setState({\r\n isProposedTextModalOpen: false,\r\n });\r\n };\r\n\r\n onProposedTextSwitched = (selectedIndex, e) => {\r\n this._selectedProposedTextIndex = selectedIndex;\r\n };\r\n\r\n onProposedTextSelected = (e) => {\r\n if (this._selectedProposedTextIndex >= this._proposedTexts.length) {\r\n this._selectedProposedTextIndex = this._proposedTexts.length - 1;\r\n }\r\n var text = this._proposedTexts[this._selectedProposedTextIndex];\r\n\r\n this.onProposedTextModalClose();\r\n this.props.onText1Selected(text);\r\n };\r\n\r\n render() {\r\n console.log(\"rendering editor-sidebar\");\r\n const { t, i18n } = this.props;\r\n\r\n return (\r\n \r\n
    \r\n
      \r\n \r\n {this.renderSidebarMenu(this.props)}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n

    {t(\"Подія\")}

    \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.onSideBarMenuClick(e, 1)}\r\n >\r\n {t(\"Крок 2: Стиль\")} \r\n \r\n
    \r\n \r\n

    Стиль

    \r\n {this.renderStyles()}\r\n {/* \r\n
    \r\n
    \r\n {this.styles.map((style, index) => {\r\n return (\r\n \r\n
    \r\n \r\n this.props.onStyleChanged(e, style.id)\r\n }\r\n />\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n

    {style.id}

    \r\n \r\n );\r\n })}\r\n
    \r\n */}\r\n

    {t(\"Елементи\")}

    \r\n {this.renderFeatures()}\r\n this.onSideBarMenuClick(e, 2)}\r\n >\r\n {t(\"Крок 3: Матеріал\")} \r\n \r\n \r\n \r\n \r\n\r\n this.onSideBarMenuClick(e, 3)}\r\n >\r\n {t(\"Крок 4: Написи\")} \r\n \r\n \r\n \r\n

    {t(\"Написи\")}

    \r\n\r\n
    \r\n
    \r\n \r\n \r\n {t(\"Інші варіанти\")}\r\n \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n {t(\"Крок 5: Купити\")} \r\n \r\n \r\n \r\n\r\n
    \r\n
    \r\n
      \r\n
    • \r\n \r\n \r\n
      \r\n {t(\"Відкрити чат\")}\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n
      \r\n {t(\"Купити\")}{\" \"}\r\n \r\n {\" \"}\r\n {this.props.price} {t(\"грн\")}\r\n \r\n \r\n
    • \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {t(\"Відкрити чат\")}\r\n \r\n \r\n\r\n \r\n \r\n {this.props.price}{\" \"}\r\n {t(\"грн\")}\r\n \r\n \r\n {t(\"Купити\")} \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    {t(\"Чудовий вибір!\")}
    \r\n
    \r\n
    \r\n
    \r\n {t(\"Плакати у рамках виглядають ще краще. Бажаєте додати рамку?\")}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    {t(\"Рамка\")}
    \r\n

    \r\n {t(\r\n \"Тонка пластикова рамка чорного кольору зі склом (натуральним або акриловим) і зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\"\r\n )}\r\n

    \r\n
    \r\n
    \r\n \r\n {t(\"Додати\")}\r\n \r\n
    \r\n \r\n +{this.state.proposalHangerPrice} {t(\"грн\")}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {t(\"Продовжити без рамки\")}\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    {t(\"Оберіть напис\")}
    \r\n
    \r\n
    \r\n \r\n {this._proposedTexts.map((text, index) => {\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    \r\n {text}\r\n

    \r\n
    \r\n
    \r\n
    \r\n );\r\n })}\r\n \r\n
    \r\n
    \r\n \r\n {t(\"Обрати цей варіант\")}\r\n \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\nexport default withTranslation()(EditorSidebar);\r\n","import React, { Component, Suspense } from \"react\";\r\nimport Map from \"./editor-components/editor-map\";\r\nimport classNames from \"classnames\";\r\nimport moment from \"moment\";\r\nimport formatcoords from \"formatcoords\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport store from \"store\";\r\nimport EditorSidebar from \"./editor-components/editor-sidebar\";\r\nimport queryString from \"query-string\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport i18n from \"i18next\";\r\nimport { getStyleSettingsByStyleId } from \"../utils/utils\";\r\n\r\nclass EditorComponent extends Component {\r\n static whyDidYouRender = true;\r\n\r\n constructor(props) {\r\n super(props);\r\n this._map = React.createRef();\r\n\r\n const { t } = props;\r\n var initialPlace = {\r\n city: t(\"Київ\"),\r\n description: t(\"Київ\"),\r\n country: t(\"Україна\"),\r\n latitude: 50.45466,\r\n longitude: 30.5238,\r\n };\r\n\r\n var initialDate = new Date();\r\n initialDate.setHours(0);\r\n initialDate.setMinutes(0);\r\n initialDate.setSeconds(0);\r\n initialDate.setMilliseconds(0);\r\n\r\n //todo: respect DST\r\n var initialUtcDate = new Date(initialDate.getTime() + (-120) * 60000);\r\n\r\n let style = \"simple_white\";\r\n let size = {\r\n selectedSizeId: \"30х40 см\",\r\n ratio: \"3-4\",\r\n printWidth: 300,\r\n printHeight: 400,\r\n };\r\n let isTest = false;\r\n\r\n const queryParams = queryString.parse(props.location.search);\r\n if (queryParams) {\r\n if (queryParams.style) {\r\n style = queryParams.style;\r\n }\r\n if (queryParams.size) {\r\n console.log(\"size:\", queryParams.size);\r\n switch (queryParams.size) {\r\n case \"30\":\r\n size = {\r\n selectedSizeId: \"30х40 см\",\r\n ratio: \"3-4\",\r\n printWidth: 300,\r\n printHeight: 400,\r\n };\r\n break;\r\n case \"40\":\r\n size = {\r\n selectedSizeId: \"40х50 см\",\r\n ratio: \"4-5\",\r\n printWidth: 400,\r\n printHeight: 500,\r\n };\r\n break;\r\n case \"50\":\r\n size = {\r\n selectedSizeId: \"50х70 см\",\r\n ratio: \"5-7\",\r\n printWidth: 500,\r\n printHeight: 700,\r\n };\r\n break;\r\n case \"70\":\r\n size = {\r\n selectedSizeId: \"70х100 см\",\r\n ratio: \"7-10\",\r\n printWidth: 700,\r\n printHeight: 1000,\r\n };\r\n break;\r\n }\r\n }\r\n if (queryParams.isTest) {\r\n if (queryParams.isTest.toLowerCase() === \"true\") {\r\n isTest = true;\r\n }\r\n }\r\n }\r\n var text2 = this.getText2(initialPlace, initialDate, false);\r\n var state = {\r\n redirect: null,\r\n isSmallScreen: true,\r\n isTest: isTest,\r\n\r\n map: {\r\n background: \"#000000\",\r\n stroke: \"#ffffff\",\r\n features: [\r\n {\r\n id: \"isConstellationsEnabled\",\r\n name: t(\"Сузір'я\"),\r\n isEnabled: true,\r\n },\r\n {\r\n id: \"isGridEnabled\",\r\n name: t(\"Сітка\"),\r\n isEnabled: false,\r\n },\r\n\r\n {\r\n id: \"isMWEnabled\",\r\n name: t(\"Чумацький шлях\"),\r\n isEnabled: false,\r\n },\r\n\r\n {\r\n id: \"isNamesEnabled\",\r\n name: t(\"Назви сузір'їв\"),\r\n isEnabled: false,\r\n },\r\n ],\r\n },\r\n place: initialPlace,\r\n localDate: initialDate,\r\n utcDate: initialUtcDate,\r\n isTimePicked: false,\r\n //text1: \"Наш особливий день\\n♡\",\r\n text1: t(\"Зорі, під якими\\nпочалася наша історія\\n❤️\"),\r\n //text1: \"Зоряне небо в цей день\\n♡\",\r\n text2: text2,\r\n text2BeforeManualEdit: text2,\r\n price: 0,\r\n selectedMaterialId: \"Бумага\",\r\n selectedHangerId: \"Нет\",\r\n selectedMaterialName: \"Папір\",\r\n selectedHangerName: \"Немає\",\r\n selectedStyleId: style,\r\n ...size,\r\n };\r\n\r\n try {\r\n var editorStateDateString = store.get(\"editorStateDate\");\r\n if (editorStateDateString) {\r\n var editorStateDate = new Date(editorStateDateString);\r\n //addDays(1)\r\n editorStateDate.setDate(editorStateDate.getDate() + 1);\r\n if (new Date() < editorStateDate) {\r\n console.log(\"restoring state...\");\r\n var restoredState = store.get(\"editorState\");\r\n if (restoredState) {\r\n restoredState.date = new Date(restoredState.date);\r\n\r\n state = { ...state, ...restoredState };\r\n console.log(\"state restored\");\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n state.initialSelectedMaterialId = state.selectedMaterialId;\r\n state.initialSelectedSizeId = state.selectedSizeId;\r\n state.initialSelectedHangerId = state.selectedHangerId;\r\n this.state = state;\r\n //console.log(this.state);\r\n }\r\n\r\n\r\n\r\n\r\n componentDidMount() {\r\n try {\r\n var host = window.location.hostname;\r\n if (!host.startsWith(\"localhost\")) {\r\n window.fbq(\"trackSingle\", \"532340200777420\", \"Lead\", {\r\n content_name: \"Editor\",\r\n });\r\n\r\n window.gtag(\"event\", \"lead\", {\r\n send_to: \"UA-119404542-2\",\r\n event_category: \"main\",\r\n });\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n onText1Changed = (event) => {\r\n try {\r\n this.setState({ text1: event.target.value });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onText1Selected = (text) => {\r\n try {\r\n this.setState({ text1: text });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onText2Changed = (event) => {\r\n try {\r\n this.setState({ text2: event.target.value });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onPlaceChanged = (place) => {\r\n try {\r\n this.updatePlaceAndText2(place);\r\n\r\n if (place && place.city) {\r\n var host = window.location.hostname;\r\n if (!host.startsWith(\"localhost\")) {\r\n window.gtag(\"event\", \"search\", {\r\n send_to: \"UA-119404542-2\",\r\n event_category: \"main\",\r\n event_label: place.city,\r\n });\r\n window.fbq(\"trackSingle\", \"532340200777420\", \"Search\", {\r\n search_string: place.city,\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onDateChanged = (localDate, utcDate, isTimePicked) => {\r\n try {\r\n var local = localDate.toDate();\r\n console.log(\"local date:\", local);\r\n var utc = utcDate.toDate();\r\n console.log(\"utc date:\", utc);\r\n this.updateDateAndText2(local, utc, isTimePicked);\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n getText2(place, date, isTimePicked) {\r\n try {\r\n const { city, country, latitude, longitude } = place;\r\n var momentDate = new moment(date);\r\n return (\r\n city +\r\n \", \" +\r\n country +\r\n \"\\n\" +\r\n (isTimePicked\r\n ? momentDate.format(\"DD.MM.YYYY HH:mm\")\r\n : momentDate.format(\"DD.MM.YYYY\")) +\r\n \"\\n\" +\r\n //\"DDMMssX\"\r\n formatcoords(latitude, longitude).format(\"D°M's\\\"X\", {\r\n latLonSeparator: \" \",\r\n decimalPlaces: 2,\r\n })\r\n );\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n updateDateAndText2(localDate, utcDate, isTimePicked) {\r\n var text2 = this.getText2(this.state.place, localDate, isTimePicked);\r\n this.setState({ utcDate: utcDate, localDate: localDate, text2, isTimePicked, text2BeforeManualEdit: text2 });\r\n }\r\n\r\n updatePlaceAndText2(place) {\r\n var text2 = this.getText2(place, this.state.localDate, this.state.isTimePicked);\r\n this.setState({ place, text2, text2BeforeManualEdit: text2 });\r\n }\r\n\r\n onFeatureChanged = (event, featureId) => {\r\n const target = event.target;\r\n const value = target.checked;\r\n\r\n this.setState((prevState) => ({\r\n map: {\r\n ...prevState.map,\r\n features: prevState.map.features.map((el) =>\r\n el.id === featureId ? { ...el, isEnabled: value } : el\r\n ),\r\n },\r\n }));\r\n };\r\n\r\n onStyleChanged = (e, styleId) => {\r\n const target = e.target;\r\n const value = target.checked;\r\n if (value) {\r\n this.applyStyle(styleId);\r\n }\r\n };\r\n\r\n applyStyle(styleId) {\r\n let styleSettings = getStyleSettingsByStyleId(styleId);\r\n\r\n this.setState((prevState) => ({\r\n map: {\r\n ...prevState.map,\r\n ...styleSettings,\r\n },\r\n selectedStyleId: styleId,\r\n }));\r\n }\r\n\r\n onMaterialChanged = (info) => {\r\n const {\r\n price,\r\n ratio,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n width: printWidth,\r\n height: printHeight,\r\n } = info;\r\n this.setState({\r\n price,\r\n ratio,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n printWidth,\r\n printHeight,\r\n });\r\n };\r\n\r\n onMakeOrderClick = (materialUpdateInfo) => {\r\n var state = null;\r\n if (materialUpdateInfo) {\r\n state = { ...this.state, ...materialUpdateInfo };\r\n } else {\r\n state = { ...this.state };\r\n }\r\n store.set(\"editorStateDate\", new Date());\r\n store.set(\"editorState\", state);\r\n\r\n const {\r\n utcDate,\r\n text1,\r\n text2,\r\n text2BeforeManualEdit,\r\n price,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n selectedStyleId,\r\n place,\r\n map,\r\n printWidth,\r\n printHeight,\r\n } = state;\r\n\r\n const {\r\n width: mapWidth,\r\n height: mapHeight,\r\n containerWidth,\r\n containerHeight,\r\n } = this._map.current.getMapSize();\r\n\r\n const isNamesEnabled = map.features.find((f) => f.id === \"isNamesEnabled\");\r\n const convertedMap = {\r\n mapWidth,\r\n mapHeight,\r\n containerWidth,\r\n containerHeight,\r\n background: map.background,\r\n stroke: map.stroke,\r\n isGridEnabled: map.features.find((f) => f.id === \"isGridEnabled\")\r\n .isEnabled,\r\n isConstellationsEnabled: map.features.find(\r\n (f) => f.id === \"isConstellationsEnabled\"\r\n ).isEnabled,\r\n isMWEnabled: map.features.find((f) => f.id === \"isMWEnabled\").isEnabled,\r\n isNamesEnabled: isNamesEnabled ? isNamesEnabled.isEnabled : false,\r\n language: i18n.language,\r\n };\r\n\r\n const convertedDescription = {\r\n material: selectedMaterialName,\r\n size: selectedSizeId,\r\n hanger: selectedHangerName,\r\n style: selectedStyleId,\r\n };\r\n\r\n const product = {\r\n productType: \"sky\",\r\n date: utcDate,\r\n text1,\r\n text2,\r\n text2BeforeManualEdit,\r\n price,\r\n material: selectedMaterialId,\r\n size: selectedSizeId,\r\n hanger: selectedHangerId,\r\n style: selectedStyleId,\r\n printWidth,\r\n printHeight,\r\n place: (({ latitude, longitude, ...rest }) => ({\r\n centerLat: latitude,\r\n centerLon: longitude,\r\n ...rest,\r\n }))(place),\r\n map: convertedMap,\r\n description: convertedDescription,\r\n };\r\n store.set(\"product\", product);\r\n\r\n this.setState({ redirect: \"cart\" });\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return (\r\n \r\n );\r\n }\r\n console.log(\"rendering: editor\");\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\nexport default withTranslation()(EditorComponent);\r\n","import React, { Component, PureComponent } from \"react\";\r\nimport \"./editor-map.css\";\r\nimport i18n from \"i18next\";\r\n\r\nimport DOMPurify from \"dompurify\";\r\n\r\nexport default class Map extends Component {\r\n static whyDidYouRender = true;\r\n isSmallScreen = true;\r\n\r\n constructor(props) {\r\n super(props);\r\n this._poster = React.createRef();\r\n this._posterWrapper = React.createRef();\r\n this._content = React.createRef();\r\n this._map = React.createRef();\r\n\r\n this.state = {\r\n posterWidth: \"-1\",\r\n posterHeight: \"-1\",\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"resize\", this.updateWindowDimensions);\r\n this.updateWindowDimensions();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"resize\", this.updateWindowDimensions);\r\n }\r\n\r\n updateWindowDimensions = () => {\r\n console.log(\"Calculating window size\");\r\n let windowWidth = window.innerWidth;\r\n let isSmallScreen = windowWidth < 768 ? true : false;\r\n this.isSmallScreen = isSmallScreen;\r\n\r\n this.updatePosterSize(this.props.ratio);\r\n //var styleWidth = width === -1 ? \"auto\" : `${width}px`;\r\n //var styleHeight = height === -1 ? \"auto\" : `${height}px`;\r\n\r\n //this._posterWrapper.current.style.width = styleWidth;\r\n //this._posterWrapper.current.style.height = styleHeight;\r\n };\r\n\r\n updatePosterSize = (ratio) => {\r\n var margin = 2 * 20;\r\n if (!this.isSmallScreen) {\r\n margin = 2 * 100;\r\n }\r\n var maxWidth = this._content.current.offsetWidth - margin;\r\n var maxHeight = this._content.current.offsetHeight - margin;\r\n var ratioSplit = ratio.split(\"-\");\r\n var ratioX = parseInt(ratioSplit[0]);\r\n var ratioY = parseInt(ratioSplit[1]);\r\n var width = -1;\r\n var height = -1;\r\n var tempHeight = (maxWidth * ratioX) / ratioY;\r\n if (tempHeight > maxHeight) {\r\n width = (maxHeight * ratioY) / ratioX;\r\n } else {\r\n height = tempHeight;\r\n }\r\n\r\n this.setState({\r\n posterWidth: width,\r\n posterHeight: height,\r\n });\r\n };\r\n\r\n getFixedText1(text1) {\r\n if (text1) {\r\n try {\r\n return DOMPurify.sanitize(text1).replace(\r\n /❤️/g,\r\n ''\r\n );\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({\r\n text1: this.getFixedText1(nextProps.text1),\r\n });\r\n\r\n if (nextProps.ratio !== this.props.ratio) {\r\n this.updatePosterSize(nextProps.ratio);\r\n }\r\n }\r\n\r\n // shouldComponentUpdate(nextProps, nextState) {\r\n // if (\r\n // nextProps.text1 !== this.props.text1 ||\r\n // nextProps.text2 !== this.props.text2 ||\r\n // nextProps.ratio !== this.props.ratio ||\r\n // nextProps.styleId !== this.props.styleId\r\n // ) {\r\n // console.log(\"map should update!\");\r\n // return true;\r\n // } else {\r\n // console.log(\"map shouldn't update\");\r\n // return false;\r\n // }\r\n // }\r\n\r\n render() {\r\n console.log(\"Rendering editor-map\");\r\n return (\r\n \r\n {/* загрузка шрифта */}\r\n \r\n \r\n font завантаження...\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 {/*
    */}\r\n \r\n \r\n
    \r\n\r\n {/*
    */}\r\n\r\n
    \r\n

    {this.props.text2}

    \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, { PureComponent } from \"react\";\r\n\r\nimport Carousel from \"react-bootstrap/Carousel\";\r\nimport HyperModal from \"react-hyper-modal\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nclass EditorMaterials extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n const { t } = props;\r\n\r\n this.materials = [\r\n {\r\n id: \"Бумага\",\r\n name: t(\"Папір\"),\r\n info: {\r\n name: t(\"Друк на папері\"),\r\n description: t(\r\n \"Ми використовуємо високоякісний кольоровий друк на матовому папері високої щільності. Такий друк забезпечує фотореалістичність і високу деталізацію плакатів. Плакати 30*40 пересилаємо в захисній папці, 40*50см і 50*70см - у трикутному тубусі.\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/paper1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/paper2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/paper3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 400,\r\n height: 300,\r\n ratio: \"3-4\",\r\n price: 390,\r\n oldPrice: 440,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 260,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 490,\r\n oldPrice: 640,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 360,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 590,\r\n oldPrice: 720,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 560,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"ПВХ\",\r\n name: t(\"Пластик\"),\r\n info: {\r\n name: t(\"Друк на ПВХ\"),\r\n description: t(\r\n \"ПВХ - легковісний лист пластику зі вспіненою структурою. Його можна підвішувати без рами, оскільки він достатньо щільний і не скручується. Безкоштовно можемо наклеїти двосторонній скотч, щоб кріпити до стіни. Товщина - 3мм, або 1мм (якщо в комплекті з рамкою).\\nБезпечний для людини та навколишнього середовища\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/plastic1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/plastic2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 300,\r\n height: 400,\r\n ratio: \"3-4\",\r\n price: 550,\r\n oldPrice: 690,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Лента\",\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 200,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n /*{\r\n id: \"Крючки\",\r\n name: \"Гачки\",\r\n price: 30,\r\n info: {\r\n name: \"Гачки\",\r\n description:\r\n \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n images: [\"assets/img/plastic_hooks.jpg\"],\r\n },\r\n },*/\r\n ],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 700,\r\n oldPrice: 880,\r\n hangers: [\r\n { id: \"Нет\", name: t(\"Немає\"), price: 0 },\r\n {\r\n id: \"Лента\",\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 300,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n // {\r\n // id: \"Крючки\",\r\n // name: \"Гачки\",\r\n // price: 30,\r\n // info: {\r\n // name: \"Гачки\",\r\n // description:\r\n // \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n // images: [\"assets/img/plastic_hooks.jpg\"],\r\n // },\r\n // },\r\n ],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 950,\r\n oldPrice: 1200,\r\n hangers: [\r\n { id: \"Нет\", name: \"Немає\", price: 0 },\r\n {\r\n id: t(\"Лента\"),\r\n name: t(\"Клейка стрічка\"),\r\n price: 0,\r\n isDefault: true,\r\n info: {\r\n name: t(\"Клейка стрічка\"),\r\n description: t(\r\n \"Чіпкий скотч по периметру зворотної сторони. Добре тримає вагу, якщо поверхня не має надто виразної фактури.\"\r\n ),\r\n images: [process.env.PUBLIC_URL + \"/assets/img/plastic3.jpg\"],\r\n },\r\n },\r\n {\r\n id: \"Рамка\",\r\n name: t(\"Рамка\"),\r\n price: 400,\r\n info: {\r\n name: t(\"Рамка для плакату\"),\r\n description: t(\r\n \"Ми використовуємо якісні тонкі пластикові рамки чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\\nЗадня стінка - ДВП з гачками\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/frame1.png\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame3.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame4.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/frame5.jpg\",\r\n ],\r\n },\r\n },\r\n // {\r\n // id: \"Крючки\",\r\n // name: \"Гачки\",\r\n // price: 30,\r\n // info: {\r\n // name: \"Гачки\",\r\n // description:\r\n // \"Гачки на зворотній стороні. На випадок, якщо маєте дуже фактурну поверхню і двостороннього скотча недостатньо.\",\r\n // images: [\"assets/img/plastic_hooks.jpg\"],\r\n // },\r\n // },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"Холст\",\r\n name: t(\"Холст\"),\r\n info: {\r\n name: t(\"Друк на холсті\"),\r\n description: t(\r\n \"Ми друкуємо на натуральному холсті і використовуємо галерейну натяжку на дерев’яний підрамник. При такій натяжці зображення заходить на бокові сторони холсту і загинається під підрамник. Таким чином холст чудово виглядає на стіні і не потребує додаткової рами.\"\r\n ),\r\n images: [\r\n process.env.PUBLIC_URL + \"/assets/img/canvas1.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/canvas2.jpg\",\r\n process.env.PUBLIC_URL + \"/assets/img/canvas3.jpg\",\r\n ],\r\n },\r\n sizes: [\r\n {\r\n id: \"30х40 см\",\r\n name: \"30х40 см\",\r\n width: 300,\r\n height: 400,\r\n ratio: \"3-4\",\r\n price: 890,\r\n oldPrice: 1130,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n {\r\n id: \"40х50 см\",\r\n name: \"40х50 см\",\r\n width: 400,\r\n height: 500,\r\n ratio: \"4-5\",\r\n price: 1090,\r\n oldPrice: 1400,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n {\r\n id: \"50х70 см\",\r\n name: \"50х70 см\",\r\n width: 500,\r\n height: 700,\r\n ratio: \"5-7\",\r\n price: 1290,\r\n oldPrice: 1700,\r\n hangers: [{ id: \"Крючки\", name: t(\"Гачки\"), price: 0 }],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n this.state = {\r\n selectedMaterialId: props.initialSelectedMaterialId,\r\n selectedSizeId: props.initialSelectedSizeId,\r\n selectedHangerId: props.initialSelectedHangerId,\r\n isModalOpen: false,\r\n modalName: \"\",\r\n modalDescription: \"\",\r\n modalImages: [],\r\n };\r\n }\r\n\r\n riseUpdate = () => {\r\n console.log(\"recalculate price\");\r\n\r\n try {\r\n var material = this.materials.find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n });\r\n\r\n var size = material.sizes.find((size) => {\r\n return size.id === this.state.selectedSizeId;\r\n });\r\n\r\n let { price, ratio, width, height } = size;\r\n\r\n var hanger = size.hangers.find((h) => {\r\n return h.id === this.state.selectedHangerId;\r\n });\r\n\r\n price += hanger.price;\r\n\r\n var proposalHangerId = \"Рамка\";\r\n var proposalHangerName = \"\";\r\n var proposalHangerPrice = 0;\r\n if (\r\n this.state.selectedMaterialId === \"Бумага\" &&\r\n this.state.selectedHangerId == \"Нет\"\r\n ) {\r\n var frameHanger = size.hangers.find((h) => {\r\n return h.id === proposalHangerId;\r\n });\r\n if (frameHanger) {\r\n proposalHangerName = frameHanger.name;\r\n proposalHangerPrice = frameHanger.price;\r\n }\r\n }\r\n\r\n this.props.onChanged({\r\n selectedMaterialId: this.state.selectedMaterialId,\r\n selectedSizeId: this.state.selectedSizeId,\r\n selectedHangerId: this.state.selectedHangerId,\r\n selectedMaterialName: material.name,\r\n selectedHangerName: hanger.name,\r\n price,\r\n ratio,\r\n width,\r\n height,\r\n proposalHangerId,\r\n proposalHangerName,\r\n proposalHangerPrice,\r\n });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (\r\n this.state.selectedMaterialId !== prevState.selectedMaterialId ||\r\n this.state.selectedSizeId !== prevState.selectedSizeId ||\r\n this.state.selectedHangerId !== prevState.selectedHangerId\r\n ) {\r\n this.riseUpdate();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.riseUpdate();\r\n }\r\n\r\n // useEffect(() => {\r\n // riseUpdate();\r\n // }, [selectedMaterialId, selectedSizeId, selectedHangerId]);\r\n\r\n onMaterialChanged = (changeEvent) => {\r\n var materialId = changeEvent.target.value;\r\n var material = this.materials.find((s) => s.id === materialId);\r\n if (material) {\r\n var size = material.sizes.find((s) => s.id === this.state.selectedSizeId);\r\n if (!size) {\r\n size = material.sizes[1];\r\n }\r\n var sizeId = size.id;\r\n\r\n var hangerId = \"\",\r\n hanger = null;\r\n if (\r\n this.state.selectedHangerId !== \"Нет\" &&\r\n this.state.selectedMaterialId !== \"ПВХ\"\r\n ) {\r\n hanger = size.hangers.find((s) => s.id === this.state.selectedHangerId);\r\n }\r\n if (!hanger) {\r\n hanger = size.hangers.find((s) => s.isDefault);\r\n if (!hanger && size.hangers.length > 0) {\r\n hanger = size.hangers[0];\r\n }\r\n }\r\n\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedMaterialId: materialId,\r\n selectedSizeId: sizeId,\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n };\r\n\r\n onSizeChanged = (changeEvent) => {\r\n var material = this.materials.find(\r\n (s) => s.id === this.state.selectedMaterialId\r\n );\r\n if (material) {\r\n var sizeId = changeEvent.target.value;\r\n var size = material.sizes.find((s) => s.id === sizeId);\r\n\r\n if (size) {\r\n var hangerId = \"\",\r\n hanger = null;\r\n if (\r\n this.state.selectedHangerId !== \"Нет\" &&\r\n this.state.selectedMaterialId !== \"ПВХ\"\r\n ) {\r\n hanger = size.hangers.find(\r\n (s) => s.id === this.state.selectedHangerId\r\n );\r\n }\r\n\r\n if (!hanger) {\r\n var hanger = size.hangers.find((s) => s.isDefault);\r\n if (!hanger && size.hangers.length > 0) {\r\n hanger = size.hangers[0];\r\n }\r\n }\r\n\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedSizeId: sizeId,\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n }\r\n };\r\n\r\n onHangerChanged = (changeEvent) => {\r\n var material = this.materials.find(\r\n (s) => s.id === this.state.selectedMaterialId\r\n );\r\n if (material) {\r\n var size = material.sizes.find((s) => s.id === this.state.selectedSizeId);\r\n if (size) {\r\n var hangerId = changeEvent.target.value;\r\n var hanger = size.hangers.find((s) => s.id === hangerId);\r\n if (!hanger) {\r\n hanger = size.hangers.find((s) => s.isDefault);\r\n }\r\n hangerId = hanger.id;\r\n\r\n this.setState({\r\n selectedHangerId: hangerId,\r\n });\r\n }\r\n }\r\n };\r\n\r\n onMaterialInfoClick = (e, material) => {\r\n e.preventDefault();\r\n\r\n if (material) {\r\n this.setState({\r\n modalName: material.info.name,\r\n modalDescription: material.info.description,\r\n modalImages: material.info.images,\r\n isModalOpen: true,\r\n });\r\n }\r\n };\r\n\r\n onHangerInfoClick = (e, hanger) => {\r\n e.preventDefault();\r\n\r\n if (hanger) {\r\n this.setState({\r\n modalName: hanger.info.name,\r\n modalDescription: hanger.info.description,\r\n modalImages: hanger.info.images,\r\n isModalOpen: true,\r\n });\r\n }\r\n };\r\n\r\n onModalClose = (e) => {\r\n this.setState({\r\n isModalOpen: false,\r\n });\r\n };\r\n\r\n renderModalWindow = (props) => {\r\n return (\r\n \r\n
    \r\n
    {props.name}
    \r\n
    \r\n
    \r\n

    {props.description}

    \r\n \r\n {props.images &&\r\n props.images.map((src, index) => {\r\n return (\r\n \r\n {props.name}\r\n \r\n );\r\n })}\r\n \r\n
    \r\n \r\n );\r\n };\r\n\r\n renderHangers = (props) => {\r\n const { t } = this.props;\r\n const hangers = props.hangers;\r\n if (!hangers || hangers.length <= 1) {\r\n return null;\r\n }\r\n return (\r\n \r\n

    \r\n {t(\"Кріплення\")}\r\n

    \r\n
    \r\n {hangers.map((hanger, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n render() {\r\n console.log(\"rendering: editor-materials\");\r\n const { t } = this.props;\r\n let size = this.materials\r\n .find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n })\r\n .sizes.find((size) => {\r\n return size.id === this.state.selectedSizeId;\r\n });\r\n let hangers = null;\r\n if (size) {\r\n hangers = size.hangers;\r\n }\r\n\r\n return (\r\n \r\n

    Матеріал

    \r\n
    \r\n {this.materials.map((material, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n

    \r\n {t(\"Розмір\")}\r\n

    \r\n
    \r\n
    \r\n \r\n {t(\"Акційна ціна!\")}\r\n \r\n
    \r\n
    \r\n
    \r\n {this.materials\r\n .find((material) => {\r\n return material.id === this.state.selectedMaterialId;\r\n })\r\n .sizes.map((size, index) => {\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\nexport default withTranslation()(EditorMaterials);\r\n","import React, { PureComponent } from \"react\";\r\n\r\nimport classNames from \"classnames\";\r\n\r\nimport Materials from \"./editor-materials\";\r\n\r\nimport HyperModal from \"react-hyper-modal\";\r\nimport Carousel from \"react-bootstrap/Carousel\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { getPublicUrl } from \"../../utils/utils\";\r\n\r\nclass EditorSidebar extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { t } = props;\r\n\r\n this._bottom = React.createRef();\r\n this.materialInfo = null;\r\n this.styles = [\r\n {\r\n id: \"simple_white\",\r\n name: \"white\",\r\n },\r\n {\r\n id: \"simple_black\",\r\n name: \"black\",\r\n },\r\n ];\r\n\r\n this.state = {\r\n sidebarMenuLinks: [true, false, false, false],\r\n isModalOpen: false,\r\n isProposedTextModalOpen: false,\r\n proposalHangerPrice: 0,\r\n };\r\n\r\n this._proposedTexts = [\r\n t(\"Зорі, під якими\\nпочалася наша історія\\n❤️\"),\r\n t(\"День, коли\\nпочалася наша пригода\\n❤️\"),\r\n t(\"Казкова мить\\n❤️\"),\r\n t(\"Мої щасливі зорі\"),\r\n t(\"Найкращий день мого життя\\n❤️\"),\r\n t(\"Точка відліку\"),\r\n t(\"Початок великої подорожі\"),\r\n t(\"Ти з’явився в моєму житті\\n❤️\"),\r\n t(\"Ми зустрілись під цими зорями\\n❤️\"),\r\n t(\"Ти народилася, щоб запалити цей світ\"),\r\n ];\r\n this._selectedProposedTextIndex = 0;\r\n this._isSmallScreen = true;\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"resize\", this.updateWindowDimensions);\r\n this.updateWindowDimensions();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"resize\", this.updateWindowDimensions);\r\n }\r\n\r\n updateWindowDimensions = () => {\r\n console.log(\"Calculating window size\");\r\n let width = window.innerWidth;\r\n this._isSmallScreen = width < 768 ? true : false;\r\n };\r\n\r\n scrollToBottom = () => {\r\n console.log(\"scrolling\");\r\n try {\r\n this._bottom.current.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"end\",\r\n inline: \"nearest\",\r\n });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onChatClick = (e) => {\r\n e.preventDefault();\r\n try {\r\n window.jivo_api.open();\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onSideBarMenuClick = (e, index) => {\r\n e.preventDefault();\r\n\r\n var sidebarMenuLinks = [...this.state.sidebarMenuLinks];\r\n\r\n for (var i = 0; i < sidebarMenuLinks.length; i++) {\r\n if (i === index) {\r\n sidebarMenuLinks[i] = true;\r\n } else {\r\n sidebarMenuLinks[i] = false;\r\n }\r\n }\r\n if (this._isSmallScreen) {\r\n this.setState(\r\n { sidebarMenuLinks: sidebarMenuLinks },\r\n this.scrollToBottom\r\n );\r\n } else {\r\n this.setState({ sidebarMenuLinks: sidebarMenuLinks });\r\n }\r\n };\r\n\r\n onMaterialChanged = (info) => {\r\n this.materialInfo = info;\r\n this.props.onMaterialChanged(info);\r\n };\r\n\r\n onMakeOrderClick = (e) => {\r\n e.preventDefault();\r\n if (this.materialInfo && this.materialInfo.proposalHangerPrice > 0) {\r\n this.setState({\r\n isModalOpen: true,\r\n proposalHangerPrice: this.materialInfo.proposalHangerPrice,\r\n });\r\n } else {\r\n this.props.onMakeOrderClick();\r\n }\r\n };\r\n\r\n onAddFrameClick = (e) => {\r\n e.preventDefault();\r\n var materialAlterInfo = {\r\n selectedHangerId: this.materialInfo.proposalHangerId,\r\n selectedHangerName: this.materialInfo.proposalHangerName,\r\n price: this.materialInfo.price + this.materialInfo.proposalHangerPrice,\r\n };\r\n this.props.onMakeOrderClick(materialAlterInfo);\r\n };\r\n\r\n onContinueWithoutFrameClick = (e) => {\r\n e.preventDefault();\r\n this.props.onMakeOrderClick();\r\n };\r\n\r\n renderSidebarMenu({ t }) {\r\n var createItem = (name, icon) => {\r\n return { name: name, icon: icon };\r\n };\r\n\r\n var items = [\r\n createItem(t(\"Стиль\"), \"fa-paint-brush\"),\r\n createItem(t(\"Матеріал\"), \"fa-map\"),\r\n createItem(t(\"Написи\"), \"fa-pencil\"),\r\n createItem(t(\"Аудіо\"), \"fa-microphone\"),\r\n ];\r\n\r\n return items.map((item, index, array) => {\r\n var itemClass = classNames(\r\n \"h-100 g-color-white-opacity-0_6 g-color-primary--hover g-text-underline--none--hover g-font-weight-400\",\r\n {\r\n active: this.state.sidebarMenuLinks[index],\r\n }\r\n );\r\n return (\r\n
  • \r\n this.onSideBarMenuClick(e, index)}\r\n >\r\n \r\n
    \r\n {item.name}\r\n \r\n
  • \r\n );\r\n });\r\n }\r\n\r\n renderStyles = () => {\r\n const { t } = this.props;\r\n\r\n return (\r\n
    \r\n {this.styles.map((style, index) => {\r\n return (\r\n
    \r\n

    \r\n {style.name}\r\n

    \r\n \r\n );\r\n })}\r\n \r\n );\r\n };\r\n\r\n // renderStyles = () => {\r\n // const { t } = this.props;\r\n\r\n // return (
    \r\n //
    \r\n // {this.styles.map((style, index) => {\r\n // return (\r\n //
    \r\n //
    \r\n //

    \r\n // {style.name}\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 onModalClose = (e) => {\r\n this.setState({\r\n isModalOpen: false,\r\n });\r\n };\r\n\r\n proposedTextModalOpen = (e) => {\r\n e.preventDefault();\r\n this.setState({\r\n isProposedTextModalOpen: true,\r\n });\r\n };\r\n\r\n onProposedTextModalClose = (e) => {\r\n this.setState({\r\n isProposedTextModalOpen: false,\r\n });\r\n };\r\n\r\n onProposedTextSwitched = (selectedIndex, e) => {\r\n this._selectedProposedTextIndex = selectedIndex;\r\n };\r\n\r\n onProposedTextSelected = (e) => {\r\n if (this._selectedProposedTextIndex >= this._proposedTexts.length) {\r\n this._selectedProposedTextIndex = this._proposedTexts.length - 1;\r\n }\r\n var text = this._proposedTexts[this._selectedProposedTextIndex];\r\n\r\n this.onProposedTextModalClose();\r\n this.props.onText1Selected(text);\r\n };\r\n\r\n render() {\r\n console.log(\"rendering editor-sidebar\");\r\n const { t, i18n } = this.props;\r\n\r\n return (\r\n \r\n
    \r\n
      \r\n \r\n {this.renderSidebarMenu(this.props)}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n

    Стиль

    \r\n {this.renderStyles()}\r\n {/* \r\n
    \r\n
    \r\n {this.styles.map((style, index) => {\r\n return (\r\n \r\n
    \r\n \r\n this.props.onStyleChanged(e, style.id)\r\n }\r\n />\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n

    {style.id}

    \r\n \r\n );\r\n })}\r\n
    \r\n
    */}\r\n\r\n this.onSideBarMenuClick(e, 1)}\r\n >\r\n {t(\"Крок 2: Матеріал\")} \r\n \r\n \r\n \r\n \r\n\r\n this.onSideBarMenuClick(e, 2)}\r\n >\r\n {t(\"Крок 3: Написи\")} \r\n \r\n \r\n \r\n

    {t(\"Написи\")}

    \r\n\r\n
    \r\n
    \r\n \r\n {/* \r\n {t(\"Інші варіанти\")}\r\n */}\r\n
    \r\n\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n this.onSideBarMenuClick(e, 3)}\r\n >\r\n {t(\"Крок 4: Аудіо\")} \r\n \r\n \r\n \r\n {/*

    Аудіо

    */}\r\n \r\n

    \r\n \r\n  Запис аудіо\r\n

    \r\n

    \r\n Ви зможете відправити запис вашого голосу пізніше.\r\n Наприклад, у вигляді голосового повідомлення у Viber чи\r\n Telegram. Посилання з'явиться після оформлення замовлення.\r\n

    \r\n \r\n \r\n {t(\"Крок 5: Купити\")} \r\n \r\n \r\n \r\n\r\n
    \r\n
    \r\n
      \r\n
    • \r\n \r\n \r\n
      \r\n {t(\"Відкрити чат\")}\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n
      \r\n {t(\"Купити\")}{\" \"}\r\n \r\n {\" \"}\r\n {this.props.price} {t(\"грн\")}\r\n \r\n \r\n
    • \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {t(\"Відкрити чат\")}\r\n \r\n \r\n\r\n \r\n \r\n {this.props.price}{\" \"}\r\n {t(\"грн\")}\r\n \r\n \r\n {t(\"Купити\")} \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    {t(\"Чудовий вибір!\")}
    \r\n
    \r\n
    \r\n
    \r\n {t(\"Плакати у рамках виглядають ще краще. Бажаєте додати рамку?\")}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    {t(\"Рамка\")}
    \r\n

    \r\n {t(\r\n \"Тонка пластикова рамка чорного кольору зі зручним підвісом. Такі рамки добре підходять до будь-якого стилю інтер’єру.\"\r\n )}\r\n

    \r\n
    \r\n
    \r\n \r\n {t(\"Додати\")}\r\n \r\n
    \r\n \r\n +{this.state.proposalHangerPrice} {t(\"грн\")}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {t(\"Продовжити без рамки\")}\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    {t(\"Оберіть напис\")}
    \r\n
    \r\n
    \r\n \r\n {this._proposedTexts.map((text, index) => {\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    \r\n {text}\r\n

    \r\n
    \r\n
    \r\n
    \r\n );\r\n })}\r\n \r\n
    \r\n
    \r\n \r\n {t(\"Обрати цей варіант\")}\r\n \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\nexport default withTranslation()(EditorSidebar);\r\n","import React, { Component, Suspense } from \"react\";\r\nimport Map from \"./editor-map\";\r\nimport classNames from \"classnames\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport store from \"store\";\r\nimport EditorSidebar from \"./editor-sidebar\";\r\nimport queryString from \"query-string\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport i18n from \"i18next\";\r\n\r\nclass EditorComponent extends Component {\r\n static whyDidYouRender = true;\r\n\r\n constructor(props) {\r\n super(props);\r\n this._map = React.createRef();\r\n\r\n const { t } = props;\r\n\r\n let style = \"simple_black\";\r\n let size = {\r\n selectedSizeId: \"50х70 см\",\r\n ratio: \"5-7\",\r\n printWidth: 500,\r\n printHeight: 700,\r\n };\r\n\r\n const queryParams = queryString.parse(props.location.search);\r\n if (queryParams) {\r\n if (queryParams.style) {\r\n style = queryParams.style;\r\n }\r\n if (queryParams.size) {\r\n console.log(\"size:\", queryParams.size);\r\n switch (queryParams.size) {\r\n case \"30\":\r\n size = {\r\n selectedSizeId: \"30х40 см\",\r\n ratio: \"3-4\",\r\n printWidth: 300,\r\n printHeight: 400,\r\n };\r\n break;\r\n case \"40\":\r\n size = {\r\n selectedSizeId: \"40х50 см\",\r\n ratio: \"4-5\",\r\n printWidth: 400,\r\n printHeight: 500,\r\n };\r\n break;\r\n case \"50\":\r\n size = {\r\n selectedSizeId: \"50х70 см\",\r\n ratio: \"5-7\",\r\n printWidth: 500,\r\n printHeight: 700,\r\n };\r\n break;\r\n case \"70\":\r\n size = {\r\n selectedSizeId: \"70х100 см\",\r\n ratio: \"7-10\",\r\n printWidth: 700,\r\n printHeight: 1000,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n var state = {\r\n redirect: null,\r\n isSmallScreen: true,\r\n\r\n text1: t(\"\"),\r\n text2: t(\"\"),\r\n price: 0,\r\n selectedMaterialId: \"Бумага\",\r\n selectedHangerId: \"Нет\",\r\n selectedMaterialName: \"Папір\",\r\n selectedHangerName: \"Немає\",\r\n selectedStyleId: style,\r\n ...size,\r\n };\r\n\r\n try {\r\n var editorStateDateString = store.get(\"audioEditorStateDate\");\r\n if (editorStateDateString) {\r\n var editorStateDate = new Date(editorStateDateString);\r\n //addDays(1)\r\n editorStateDate.setDate(editorStateDate.getDate() + 1);\r\n if (new Date() < editorStateDate) {\r\n console.log(\"restoring state...\");\r\n var restoredState = store.get(\"audioEditorState\");\r\n if (restoredState) {\r\n restoredState.date = new Date(restoredState.date);\r\n\r\n state = { ...state, ...restoredState };\r\n console.log(\"state restored\");\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n state.initialSelectedMaterialId = state.selectedMaterialId;\r\n state.initialSelectedSizeId = state.selectedSizeId;\r\n state.initialSelectedHangerId = state.selectedHangerId;\r\n this.state = state;\r\n //console.log(this.state);\r\n }\r\n\r\n componentDidMount() {\r\n try {\r\n var host = window.location.hostname;\r\n if (!host.startsWith(\"localhost\")) {\r\n window.fbq(\"trackSingle\", \"832974670888918\", \"Lead\", {\r\n content_name: \"Editor\",\r\n });\r\n\r\n window.gtag(\"event\", \"lead\", {\r\n send_to: \"UA-119404542-5\",\r\n event_category: \"main\",\r\n });\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n onText1Changed = (event) => {\r\n try {\r\n this.setState({ text1: event.target.value });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onText1Selected = (text) => {\r\n try {\r\n this.setState({ text1: text });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onText2Changed = (event) => {\r\n try {\r\n this.setState({ text2: event.target.value });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onStyleChanged = (e, styleId) => {\r\n const target = e.target;\r\n const value = target.checked;\r\n if (value) {\r\n this.setState({\r\n ...this.state,\r\n selectedStyleId: styleId,\r\n });\r\n }\r\n };\r\n\r\n onMaterialChanged = (info) => {\r\n const {\r\n price,\r\n ratio,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n width: printWidth,\r\n height: printHeight,\r\n } = info;\r\n this.setState({\r\n price,\r\n ratio,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n printWidth,\r\n printHeight,\r\n });\r\n };\r\n\r\n onMakeOrderClick = (materialUpdateInfo) => {\r\n var state = null;\r\n if (materialUpdateInfo) {\r\n state = { ...this.state, ...materialUpdateInfo };\r\n } else {\r\n state = { ...this.state };\r\n }\r\n store.set(\"audioEditorStateDate\", new Date());\r\n store.set(\"audioEditorState\", state);\r\n\r\n const {\r\n text1,\r\n text2,\r\n price,\r\n selectedMaterialId,\r\n selectedSizeId,\r\n selectedHangerId,\r\n selectedMaterialName,\r\n selectedHangerName,\r\n selectedStyleId,\r\n printWidth,\r\n printHeight,\r\n } = state;\r\n\r\n const convertedDescription = {\r\n material: selectedMaterialName,\r\n size: selectedSizeId,\r\n hanger: selectedHangerName,\r\n style: selectedStyleId,\r\n };\r\n\r\n const product = {\r\n productType: \"audio\",\r\n text1,\r\n text2,\r\n price,\r\n material: selectedMaterialId,\r\n size: selectedSizeId,\r\n hanger: selectedHangerId,\r\n style: selectedStyleId,\r\n printWidth,\r\n printHeight,\r\n description: convertedDescription,\r\n };\r\n store.set(\"product\", product);\r\n\r\n this.setState({ redirect: \"cart\" });\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return (\r\n \r\n );\r\n }\r\n console.log(\"rendering: editor\");\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\nexport default withTranslation()(EditorComponent);\r\n","import React from \"react\";\r\nimport { withFormik } from \"formik\";\r\nimport Collapse from \"react-bootstrap/Collapse\";\r\nimport \"./cart-form.css\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Formik } from \"formik\";\r\n\r\nconst CartForm = React.memo((props) => {\r\n const { t } = useTranslation();\r\n\r\n const paymentTypePrivat24 = \"privat24\";\r\n const paymentTypeCash = \"cash\";\r\n const paymentTypeLiqpay = \"liqpay\";\r\n const paymentTypeWayForPay = \"wayforpay\";\r\n\r\n const shippingTypeNovaPoshta = \"nova poshta\";\r\n const shippingTypeCourier = \"courier\";\r\n const canShipFromFactory = props.canShipFromFactory;\r\n const needPrepayment = props.needPrepayment;\r\n const isFreeShippingTurnedOn = props.isFreeShippingTurnedOn;\r\n const isLiqpayEnabled = props.isLiqpayEnabled;\r\n const isWayForPayEnabled = props.isWayForPayEnabled;\r\n const canPayByCash = props.canPayByCash;\r\n // const initialPaymentType = isWayForPayEnabled\r\n // ? paymentTypeWayForPay\r\n // : paymentTypePrivat24;\r\n\r\n const initialPaymentType = paymentTypePrivat24;\r\n const shippingDates = props.shippingDates;\r\n return (\r\n {\r\n const errors = {};\r\n\r\n //console.log(\"validating!\");\r\n if (!values.name) {\r\n errors.name = t(\"Введіть Ім'я\");\r\n }\r\n\r\n if (!values.lastName) {\r\n errors.lastName = t(\"Введіть Прізвище\");\r\n }\r\n\r\n if (!values.email) {\r\n errors.email = t(\"Введіть Email\");\r\n } else if (\r\n !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)\r\n ) {\r\n errors.email = t(\"Некоректний Email\");\r\n }\r\n\r\n if (!values.phone) {\r\n errors.phone = t(\"Введіть Телефон\");\r\n }\r\n\r\n if (!values.city) {\r\n errors.city = t(\"Введіть Місто\");\r\n }\r\n\r\n if (values.shippingType === \"nova poshta\") {\r\n if (!values.warehouse) {\r\n errors.warehouse = t(\"Введіть Номер відділеня\");\r\n }\r\n } else if (values.shippingType === \"courier\") {\r\n if (!values.address) {\r\n errors.address = t(\"Введіть Повну адресу\");\r\n }\r\n }\r\n\r\n return errors;\r\n }}\r\n onSubmit={(values, actions) => {\r\n function submitCallback() {\r\n actions.setSubmitting(false);\r\n }\r\n\r\n props.onSubmit(values, submitCallback);\r\n }}\r\n >\r\n {(formikProps) => {\r\n const {\r\n values,\r\n touched,\r\n errors,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n setFieldValue,\r\n } = formikProps;\r\n\r\n let liqpayLabel = null;\r\n if (isLiqpayEnabled) {\r\n liqpayLabel = (\r\n \r\n setFieldValue(\"paymentType\", e.target.value)}\r\n disabled={isLiqpayEnabled ? false : true}\r\n />\r\n
    \r\n \r\n
    \r\n \r\n {t(\"Оплата через\")}\r\n \r\n \r\n );\r\n }\r\n\r\n let wayForPayLabel = null;\r\n if (isWayForPayEnabled) {\r\n wayForPayLabel = (\r\n \r\n setFieldValue(\"paymentType\", e.target.value)}\r\n disabled={isWayForPayEnabled ? false : true}\r\n />\r\n
    \r\n \r\n
    \r\n \r\n {t(\"Оплата через\")}\r\n \r\n \r\n );\r\n }\r\n\r\n var shippingCost = null;\r\n if (values.paymentType !== \"cash\") {\r\n if (values.shippingType === \"courier\") {\r\n if (canShipFromFactory) {\r\n if (values.city) {\r\n var city = values.city.toLowerCase().trim();\r\n if (\r\n city === \"киев\" ||\r\n city === \"kyiv\" ||\r\n city === \"київ\" ||\r\n city === \"kiev\"\r\n ) {\r\n shippingCost = 150;\r\n } else {\r\n //shippingCost = 90;\r\n }\r\n } else {\r\n //shippingCost = 70;\r\n }\r\n }\r\n } else if (\r\n values.shippingType === \"nova poshta\" &&\r\n canShipFromFactory &&\r\n isFreeShippingTurnedOn\r\n ) {\r\n shippingCost = 0;\r\n }\r\n }\r\n\r\n var shippingDate = null;\r\n if (shippingDates) {\r\n shippingDate = shippingDates.find(\r\n (d) => d.paymentType === values.paymentType\r\n )?.date;\r\n }\r\n\r\n props.onShippingCostChanged(shippingCost);\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\" \"}\r\n {t(\r\n \"Щоб купити декілька товарів, ви можете зробити декілька замовлень. Ми об’єднаємо їх в одне.\"\r\n )}\r\n
    \r\n
    \r\n {t(\r\n \"Якщо вас цікавить нестандартний розмір або бажаєте внести зміни - зв'яжіться з нами, наприклад, через Viber \"\r\n )}\r\n \r\n +380665444363\r\n \r\n
    \r\n\r\n

    {t(\"Покупець\")}

    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.name && touched.name ? (\r\n \r\n {errors.name}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.lastName && touched.lastName ? (\r\n \r\n {errors.lastName}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.email && touched.email ? (\r\n \r\n {errors.email}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.phone && touched.phone ? (\r\n \r\n {errors.phone}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n

    {t(\"Спосіб оплати\")}

    \r\n \r\n\r\n {wayForPayLabel}\r\n \r\n {\r\n setFieldValue(\"paymentType\", e.target.value);\r\n setFieldValue(\"shippingType\", shippingTypeNovaPoshta);\r\n }}\r\n />\r\n
    \r\n \r\n
    \r\n \r\n {t(\"Оплата при отриманні на \")}\r\n \r\n {canPayByCash ? null : (\r\n {t(\"(Недоступно для обраного розміру)\")}\r\n )}\r\n
    \r\n \r\n {needPrepayment ? (\r\n <>\r\n ·{\" \"}\r\n \r\n {t(\r\n \"Для замовлень дорожче 1500 грн необхідна 50% передоплата\"\r\n )}\r\n \r\n
    \r\n \r\n ) : null}\r\n {isFreeShippingTurnedOn && canShipFromFactory ? (\r\n \r\n · {t(\"Сплата покупцем доставки\")}\r\n
    \r\n
    \r\n ) : null}\r\n · {t(\"Сплата покупцем комісії за наклад. платіж\")}\r\n
    \r\n
    \r\n \r\n\r\n

    {t(\"Спосіб доставки\")}

    \r\n\r\n \r\n\r\n \r\n \r\n setFieldValue(\"shippingType\", e.target.value)\r\n }\r\n disabled={\r\n values.paymentType === paymentTypeCash ? true : false\r\n }\r\n aria-expanded={\r\n values.shippingType === shippingTypeCourier\r\n }\r\n aria-controls=\"collapse_shippingTypeCourier\"\r\n />\r\n
    \r\n \r\n
    \r\n \r\n {\" \"}\r\n {t(\"Доставка кур`єром (Київ і вся Україна)\")}\r\n
    \r\n {shippingDate ? (\r\n \r\n · {t(\"Буде передано до служби доставки\")}{\" \"}\r\n {shippingDate}\r\n \r\n ) : null}\r\n
    \r\n \r\n ·{\" \"}\r\n {canShipFromFactory\r\n ? t(\r\n \"Вартість доставки кур`єром: Київ - 150‎ грн, Україна - згідно з тарифами Нової Пошти\"\r\n )\r\n : t(\r\n \"Вартість доставки згідно з тарифами Нової Пошти\"\r\n )}\r\n \r\n
    \r\n \r\n · {t(\"Пакування для транспортування за наш рахунок\")}\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {t(\r\n \"Якщо необхідно виконати замовлення ще швидше або щось змінити, зв'яжіться з нами, наприклад, через Viber \"\r\n )}\r\n \r\n +380665444363\r\n \r\n
    \r\n {canShipFromFactory &&\r\n (values.paymentType === paymentTypePrivat24 ||\r\n values.paymentType === paymentTypeWayForPay) ? (\r\n <>\r\n
    \r\n {t(\r\n \"Відправлення зберігається у відділенні Нової Пошти не більше 5 днів. Потім відправляється назад.\"\r\n )}\r\n
    \r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.city && touched.city ? (\r\n \r\n {errors.city}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.warehouse && touched.warehouse ? (\r\n \r\n {errors.warehouse}\r\n \r\n ) : null}\r\n
    \r\n \r\n {t(\"Пошук найближчого відділення\")}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.comment && touched.comment ? (\r\n \r\n {errors.comment}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {t(\r\n \"Якщо необхідно виконати замовлення ще швидше або щось змінити, зв'яжіться з нами, наприклад, через Viber \"\r\n )}\r\n \r\n +380665444363\r\n \r\n
    \r\n {canShipFromFactory &&\r\n (values.paymentType === paymentTypePrivat24 ||\r\n values.paymentType === paymentTypeWayForPay) ? (\r\n <>\r\n
    \r\n {t(\r\n \"Відправлення зберігається у відділенні Нової Пошти не більше 5 днів. Потім відправляється назад.\"\r\n )}\r\n
    \r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.city && touched.city ? (\r\n \r\n {errors.city}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n {errors.address && touched.address ? (\r\n \r\n {errors.address}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n \r\n {errors.comment && touched.comment ? (\r\n \r\n {errors.comment}\r\n \r\n ) : null}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {t(\"Підтвердити замовлення\")}{\" \"}\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\nexport default CartForm;\r\n","import React, { Component } from \"react\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { getPublicUrl } from \"../utils/utils\";\r\nimport store from \"store\";\r\n\r\nclass Header extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n try {\r\n this.isProductTypeAudio = false;\r\n this.product = store.get(\"product\");\r\n if (this.product && this.product.productType === \"audio\") {\r\n this.isProductTypeAudio = true;\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n render() {\r\n const { t, i18n } = this.props;\r\n let homeUrl = getPublicUrl(i18n);\r\n if (this.isProductTypeAudio) {\r\n homeUrl = \"/audio\";\r\n }\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\nexport default withTranslation()(Header);\r\n","import React, { Component } from \"react\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nclass Footer extends Component {\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n 2019 © mimiMaps\r\n \r\n
    \r\n\r\n
    \r\n \r\n |\r\n \r\n \r\n \r\n \r\n info@mimimaps.com.ua\r\n \r\n
    \r\n \r\n \r\n +380665444363\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n |\r\n \r\n \r\n Пн-Пт: 11:00 – 19:00\r\n
    \r\n Cб: 11:00 – 17:00\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n |\r\n \r\n \r\n \r\n {t(\"Договір оферти\")}\r\n \r\n
    \r\n \r\n {t(\"Обмін та повернення\")}\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 \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\nexport default withTranslation()(Footer);\r\n","import axios from \"axios\";\r\n\r\nconst api = axios.create({\r\n baseURL: \"/api/shipping\",\r\n});\r\n\r\nexport const getShippingDates = (canShipFromFactory) => {\r\n return api\r\n .get(`/date/${canShipFromFactory}`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n};\r\n\r\nexport const getShippingDatesForVlad = (canShipFromFactory, canShipByVlad) => {\r\n return api\r\n .get(`/date/${canShipFromFactory}/${canShipByVlad}`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n};\r\n\r\nconst apis = {\r\n getShippingDates,\r\n getShippingDatesForVlad,\r\n};\r\n\r\nexport default apis;\r\n","import React, { Component } from \"react\";\r\nimport CartFormWithValidation from \"./cart-components/cart-form\";\r\nimport Header from \"./header\";\r\nimport Footer from \"./footer\";\r\nimport store from \"store\";\r\nimport superagent from \"superagent\";\r\nimport \"./cart.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport Cookies from \"js-cookie\";\r\nimport { getUrlQuery, getPublicUrl } from \"../utils/utils\";\r\nimport i18n from \"i18next\";\r\nimport axios from \"axios\";\r\nimport queryString from \"query-string\";\r\nimport shippingApi from \"../api/shipping-api\";\r\n\r\nclass Cart extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.api = axios.create({\r\n baseURL: \"/api\",\r\n });\r\n\r\n this._liqpayForm = React.createRef();\r\n this._wayForPayForm = React.createRef();\r\n\r\n this.isTestActive = false;\r\n const queryParams = queryString.parse(props.location.search);\r\n if (queryParams) {\r\n if (queryParams.test) {\r\n this.isTestActive = true;\r\n }\r\n }\r\n\r\n var d = new Date();\r\n this.orderId = this.randomIntFromInterval(1000, 9999);\r\n this.wayForPayId =\r\n d.getFullYear().toString().substr(-2) +\r\n \"_\" +\r\n `0${d.getMonth() + 1}`.slice(-2) +\r\n \"_\" +\r\n `0${d.getDate()}`.slice(-2) +\r\n \"_\" +\r\n this.orderId;\r\n\r\n var url = \"\";\r\n try {\r\n url = window.location.protocol + \"//\" + window.location.host;\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n this.redirectUrl = url + getPublicUrl(i18n) + \"/completed/\" + this.orderId;\r\n this.serverUrl = url + \"/api/wayforpay/confirm\";\r\n\r\n this.product = store.get(\"product\");\r\n\r\n if (!this.product) {\r\n this.product = {\r\n description: {},\r\n };\r\n }\r\n\r\n const { productType, material, hanger, price, size } = this.product;\r\n\r\n this.product.note = \"\";\r\n if (productType && productType === \"sky\") {\r\n if (this.product.text2 != this.product.text2BeforeManualEdit) {\r\n this.product.note += \"Текст2 был изменён клиентом вручную. \";\r\n //Если изменилась дата в тексте, то надо будет вручную изменить и дату в звёдном небе.\r\n }\r\n }\r\n\r\n if (!this.areTextsInSameLanguage(this.product.text1, this.product.text2)) {\r\n this.product.note += \"Текст1 и Текст2 используют разные языки. \";\r\n }\r\n\r\n if (productType && productType === \"audio\") {\r\n this.productName = `Плакат Аудіохвиля ${size}`;\r\n this.pixelId = \"832974670888918\";\r\n this.gTagId = \"UA-119404542-5\";\r\n } else {\r\n this.productName = `Плакат Зоряне небо ${size}`;\r\n this.pixelId = \"532340200777420\";\r\n this.gTagId = \"UA-119404542-2\";\r\n }\r\n\r\n this.canShipFromFactory = false;\r\n if (\r\n material === \"Холст\" ||\r\n (material === \"Бумага\" && hanger === \"Нет\") ||\r\n (material === \"ПВХ\" && (hanger === \"Нет\" || hanger === \"Лента\"))\r\n ) {\r\n this.canShipFromFactory = true;\r\n }\r\n\r\n this.canPayByCash = true;\r\n if (size === \"70х100 см\" && !(material === \"Бумага\" && hanger === \"Нет\")) {\r\n this.canPayByCash = false;\r\n }\r\n\r\n this.canShipFromByVlad = true;\r\n if (hanger === \"Рамка\" && (size === \"40х50 см\" || size === \"50х70 см\")) {\r\n this.canShipFromByVlad = false;\r\n }\r\n\r\n this.isFreeShippingTurnedOn = false;\r\n this.needPrepayment = false;\r\n if (price > 1500) {\r\n this.needPrepayment = true;\r\n }\r\n\r\n this.state = {\r\n redirect: null,\r\n isSubmitting: false,\r\n basePrice: price,\r\n priceWithoutShipping: price,\r\n promocode: \"\",\r\n succeededPromocode: \"\",\r\n isPromocodeFailed: false,\r\n shippingCost: null,\r\n price: price,\r\n buttonData: \"\",\r\n buttonSignature: \"\",\r\n wayForPay: {},\r\n isWayForPayEnabled: false,\r\n shippingDates: null,\r\n };\r\n\r\n if (this.product.map) {\r\n this.product.map.language = this.fixMapLanguage(\r\n this.product.map.language,\r\n this.product.text1,\r\n this.product.text2\r\n );\r\n }\r\n\r\n console.log(\"getUrlQuery\");\r\n window.getUrlQuery = () => {\r\n const {\r\n date,\r\n printWidth,\r\n printHeight,\r\n style,\r\n place: { centerLat, centerLon },\r\n map: {\r\n mapWidth,\r\n mapHeight,\r\n containerWidth,\r\n containerHeight,\r\n background,\r\n stroke,\r\n isGridEnabled,\r\n isConstellationsEnabled,\r\n isMWEnabled,\r\n isNamesEnabled,\r\n language,\r\n },\r\n } = this.product;\r\n\r\n var obj = {\r\n date,\r\n printWidth,\r\n printHeight,\r\n style,\r\n centerLat,\r\n centerLon,\r\n mapWidth,\r\n mapHeight,\r\n containerWidth,\r\n containerHeight,\r\n background,\r\n stroke,\r\n isGridEnabled,\r\n isConstellationsEnabled,\r\n isMWEnabled,\r\n isNamesEnabled,\r\n language,\r\n };\r\n const query = getUrlQuery(obj);\r\n\r\n console.log(query);\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n try {\r\n const host = window.location.hostname;\r\n if (host.indexOf(\"localhost\") !== 0) {\r\n window.gtag(\"event\", \"cart\", {\r\n send_to: this.gTagId,\r\n event_category: \"main\",\r\n });\r\n\r\n window.fbq(\"trackSingle\", this.pixelId, \"AddToCart\");\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n if (this.state.isWayForPayEnabled) {\r\n this.updateWayForPayFormParameters(\r\n this.wayForPayId,\r\n this.state.price,\r\n this.productName\r\n );\r\n }\r\n\r\n try {\r\n shippingApi\r\n .getShippingDates(this.canShipFromFactory)\r\n .then((r) => {\r\n this.setState({\r\n shippingDates: r,\r\n });\r\n })\r\n .catch((e) => {\r\n this.setState({\r\n shippingDates: null,\r\n });\r\n (console.error || console.log).call(console, e.stack || e);\r\n });\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n //if (prevState.price !== this.state.price && this.isTestActive) {\r\n if (\r\n prevState.price !== this.state.price\r\n //&& (!isNaN(prevState.price) || !isNaN(this.state.price))\r\n ) {\r\n //this.setState({ price: 50 });\r\n if (this.state.isWayForPayEnabled) {\r\n this.updateWayForPayFormParameters(\r\n this.wayForPayId,\r\n this.state.price,\r\n this.productName\r\n );\r\n }\r\n }\r\n }\r\n\r\n getPrice(priceWithoutShipping, shippingCost) {\r\n if (priceWithoutShipping == null) return undefined;\r\n if (shippingCost == null) return priceWithoutShipping;\r\n return priceWithoutShipping + shippingCost;\r\n }\r\n\r\n updateWayForPayFormParameters(wayForPayId, sum, productName) {\r\n this.setState({ isLoading: true, wayForPay: {} });\r\n this.getWayForPayFormParameters(wayForPayId, sum, productName)\r\n .then((res) => {\r\n console.log(\"received wayForPay form parameters\", res);\r\n this.setState({\r\n isLoading: false,\r\n wayForPay: {\r\n returnUrl: this.redirectUrl,\r\n serviceUrl: this.serverUrl,\r\n ...res,\r\n },\r\n isWayForPayEnabled: true,\r\n });\r\n })\r\n .catch((e) => {\r\n this.setState({ isLoading: false, isWayForPayEnabled: false });\r\n (console.error || console.log).call(console, e.stack || e);\r\n });\r\n }\r\n\r\n getWayForPayFormParameters(wayForPayId, sum, productName) {\r\n const request = {\r\n orderReference: wayForPayId,\r\n amount: sum,\r\n productName: productName,\r\n };\r\n\r\n return this.api\r\n .post(\"/wayforpay/sign\", JSON.stringify(request), {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n }\r\n\r\n updateLiqpayFormParameters(orderId, sum, redirectUrl) {\r\n this.setState({ isLoading: true, buttonData: \"\", buttonSignature: \"\" });\r\n this.getLiqpayFormParameters(orderId, sum, redirectUrl)\r\n .then((res) => {\r\n console.log(\"received liqpay form parameters\", res.data);\r\n this.setState({\r\n isLoading: false,\r\n buttonData: res.data,\r\n buttonSignature: res.signature,\r\n });\r\n })\r\n .catch((e) => {\r\n this.setState({ isLoading: false });\r\n (console.error || console.log).call(console, e.stack || e);\r\n });\r\n }\r\n\r\n getLiqpayFormParameters(orderId, sum, redirectUrl) {\r\n const request = {\r\n orderId: orderId,\r\n sum: sum,\r\n redirectUrl: redirectUrl,\r\n };\r\n\r\n return this.api\r\n .post(\"/liqpay\", JSON.stringify(request), {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n }\r\n\r\n onPomocodeChanged = (e) => {\r\n this.setState({ promocode: e.target.value });\r\n };\r\n\r\n onPomocodeApplied = (e) => {\r\n e.preventDefault();\r\n\r\n const { t } = this.props;\r\n\r\n superagent\r\n .get(`/api/Price/${this.state.promocode}/${this.state.basePrice}`)\r\n .end((error, result) => {\r\n if (error) {\r\n console.log(error);\r\n alert(\r\n t(\r\n \"Возникла ошибка при оформлении заказа.\\r\\nПожалуйста, свяжитесь с нами по телефону и мы оформим заказ вручную.\\r\\n\"\r\n ) + error\r\n );\r\n } else {\r\n let isCorrect = false;\r\n try {\r\n const newPrice = parseInt(result.text);\r\n if (!isNaN(newPrice) && this.state.basePrice !== newPrice) {\r\n isCorrect = true;\r\n this.setState({\r\n priceWithoutShipping: newPrice,\r\n isPromocodeFailed: false,\r\n succeededPromocode: this.state.promocode,\r\n price: this.getPrice(newPrice, this.state.shippingCost),\r\n });\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n if (!isCorrect) {\r\n this.setState({\r\n isPromocodeFailed: true,\r\n succeededPromocode: \"\",\r\n priceWithoutShipping: this.state.basePrice,\r\n price: this.getPrice(\r\n this.state.basePrice,\r\n this.state.shippingCost\r\n ),\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n randomIntFromInterval = (min, max) => {\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n };\r\n\r\n onSubmit = (e, callback) => {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n\r\n this.product.price = this.state.price;\r\n this.product.basePrice = this.state.basePrice;\r\n this.product.promocode = this.state.promocode;\r\n this.product.shippingCost = this.state.shippingCost;\r\n const { productType } = this.product;\r\n const order = {\r\n id: this.orderId,\r\n product: this.product,\r\n shipping: e,\r\n canShipFromFactory: this.canShipFromFactory,\r\n };\r\n\r\n this.setState({\r\n wayForPay: {\r\n ...this.state.wayForPay,\r\n clientEmail: order.shipping?.email,\r\n clientPhone: order.shipping?.phone,\r\n },\r\n });\r\n\r\n try {\r\n const referral = Cookies.get(\"referral\");\r\n order.shipping.referral = referral;\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n try {\r\n const host = window.location.hostname;\r\n\r\n function endsWith(str, suffix) {\r\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\r\n }\r\n\r\n if (host.indexOf(\"localhost\") !== 0) {\r\n if (\r\n !order ||\r\n !order.shipping ||\r\n !endsWith(order.shipping.email, \"@test.com\")\r\n ) {\r\n window.gtag(\"event\", \"order\", {\r\n send_to: this.gTagId,\r\n event_category: \"main\",\r\n value: this.product.price,\r\n currency: \"UAH\",\r\n });\r\n\r\n window.fbq(\"trackSingle\", this.pixelId, \"Purchase\", {\r\n value: this.product.price,\r\n currency: \"UAH\",\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n\r\n superagent\r\n .post(`/api/SkyOrder/create`)\r\n .send(order)\r\n .end((error, result) => {\r\n let isCorrect = false;\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n callback();\r\n\r\n if (!error) {\r\n try {\r\n const receivedOrderId = parseInt(result.text);\r\n if (receivedOrderId === order.id) {\r\n isCorrect = true;\r\n\r\n if (order?.shipping?.paymentType === \"liqpay\") {\r\n this._liqpayForm.current.submit();\r\n } else if (order?.shipping?.paymentType === \"wayforpay\") {\r\n this._wayForPayForm.current.submit();\r\n } else {\r\n this.props.history.push({\r\n pathname: `/completed/${order.id}`,\r\n //state: { orderId: order.id },\r\n });\r\n }\r\n } else {\r\n error = \"Received incorrect order id\";\r\n }\r\n } catch (e) {\r\n error = e;\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n if (!isCorrect) {\r\n alert(\r\n `Возникла ошибка при оформлении заказа.\\r\\nПожалуйста, свяжитесь с нами по телефону и мы оформим заказ вручную.\\r\\n${error}`\r\n );\r\n }\r\n });\r\n };\r\n\r\n fixMapLanguage = (language, text1, text2) => {\r\n if (!text1) return language;\r\n const ukChars = [\"є\", \"і\", \"ї\"];\r\n const ruChars = [\"ё\", \"ъ\", \"ы\", \"э\"];\r\n\r\n if (language === \"uk\" && this.containsAny(text1, ruChars)) {\r\n return \"ru\";\r\n } else if (language === \"ru\" && this.containsAny(text1, ukChars)) {\r\n return \"uk\";\r\n }\r\n const cyrrilicRegex = /[а-яА-ЯЁёІіЇїЄє]/;\r\n if (!cyrrilicRegex.test(text1)) {\r\n if (!text2 || !cyrrilicRegex.test(text2)) {\r\n return \"en\";\r\n }\r\n }\r\n\r\n return language;\r\n };\r\n\r\n areTextsInSameLanguage = (text1, text2) => {\r\n const ukChars = [\"є\", \"і\", \"ї\"];\r\n const ruChars = [\"ё\", \"ъ\", \"ы\", \"э\"];\r\n const cyrrilicRegex = /[а-яА-ЯЁёІіЇїЄє]/;\r\n\r\n if (this.containsAny(text1, ruChars)) {\r\n if (\r\n this.containsAny(text2, ukChars) ||\r\n (text2 && !cyrrilicRegex.test(text2))\r\n ) {\r\n return false;\r\n }\r\n } else if (this.containsAny(text1, ukChars)) {\r\n if (\r\n this.containsAny(text2, ruChars) ||\r\n (text2 && !cyrrilicRegex.test(text2))\r\n ) {\r\n return false;\r\n }\r\n } else if (text1 && !cyrrilicRegex.test(text1)) {\r\n if (text2 && cyrrilicRegex.test(text2)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n containsAny = (str, substrings) => {\r\n if (!str) {\r\n return null;\r\n }\r\n for (let i = 0; i != substrings.length; i++) {\r\n const substring = substrings[i];\r\n if (str.indexOf(substring) != -1) {\r\n return substring;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n onShippingCostChanged = (value) => {\r\n this.setState({\r\n shippingCost: value,\r\n price: this.getPrice(this.state.priceWithoutShipping, value),\r\n });\r\n };\r\n\r\n renderWayForPayProduct = (props) => {\r\n var productName = null;\r\n var productCount = null;\r\n var productPrice = null;\r\n if (props.productName) {\r\n productName = props.productName.map((name, index) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n if (props.productCount) {\r\n productCount = props.productCount.map((count, index) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n if (props.productPrice) {\r\n productPrice = props.productPrice.map((price, index) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n return (\r\n <>\r\n {productName}\r\n {productCount}\r\n {productPrice}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n console.log(\"Rendering Cart\");\r\n\r\n const { t } = this.props;\r\n\r\n const {\r\n city,\r\n description: { material, size, hanger, style },\r\n } = this.product;\r\n return (\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    {t(\"Оформлення замовлення\")}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    \r\n {t(\"Інформація про замовлення\")}\r\n

    \r\n\r\n \r\n \r\n
    \r\n \r\n {t(\"1 товар(ів) в замовленні\")}\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
      \r\n
    • \r\n
      \r\n

      \r\n {t(\"Плакат\")} {city}\r\n

      \r\n
        \r\n
      • \r\n {t(\"Матеріал\")}: {material}{\" \"}\r\n
      • \r\n
      • \r\n {t(\"Розмір\")}: {size}\r\n
      • \r\n
      • \r\n {t(\"Рамка/Тримач\")}: {hanger}\r\n
      • \r\n
      • \r\n {t(\"Стиль\")}: {style}{\" \"}\r\n
      • \r\n
      \r\n \r\n {this.state.price} {t(\"грн\")}\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 {t(\"Промокод\")}\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 {t(\"Застосувати\")}\r\n \r\n
    \r\n
    \r\n {this.state.isPromocodeFailed ? (\r\n
    \r\n \r\n {t(\r\n \"Цей промокод недійсний, або не застосовується для даного товару\"\r\n )}\r\n \r\n
    \r\n ) : null}\r\n\r\n {this.state.succeededPromocode ? (\r\n
    \r\n \r\n {t(\"Промокод\")} {this.state.succeededPromocode}{\" \"}\r\n {t(\"застосований\")}\r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n \r\n {\" \"}\r\n {t(\"Обмін та повернення\")}\r\n \r\n
    \r\n \r\n {t(\"Вартість без доставки\")}\r\n \r\n \r\n {this.state.succeededPromocode ? (\r\n \r\n \r\n {this.state.basePrice}{\" \"}\r\n \r\n \r\n ) : null}\r\n\r\n \r\n {this.state.priceWithoutShipping} {t(\"грн\")}\r\n \r\n \r\n
    \r\n {this.state.shippingCost != null ? (\r\n
    \r\n
    \r\n {t(\"Доставка\")}\r\n \r\n \r\n {this.state.shippingCost === 0 ? (\r\n <>{t(\"безкоштовно\")}\r\n ) : (\r\n <>\r\n {this.state.shippingCost} {t(\"грн\")}\r\n \r\n )}\r\n \r\n \r\n
    \r\n
    \r\n {t(\"До сплати\")}\r\n \r\n \r\n {this.state.price} {t(\"грн\")}\r\n \r\n \r\n
    \r\n
    \r\n ) : null}\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.renderWayForPayProduct(this.state.wayForPay)}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {this.state.isSubmitting ? (\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(Cart);\r\n","import React, { Component } from \"react\";\r\nimport Header from \"./header\";\r\nimport Footer from \"./footer\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { getPublicUrl } from \"../utils/utils\";\r\nimport store from \"store\";\r\n\r\nclass Completed extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n try {\r\n //this.id = props.location.state.orderId;\r\n this.id = props.match?.params?.orderId;\r\n this.isProductTypeAudio = false;\r\n this.product = store.get(\"product\");\r\n if (this.product && this.product.productType === \"audio\") {\r\n this.isProductTypeAudio = true;\r\n }\r\n store.remove(\"product\");\r\n store.remove(\"editorState\");\r\n store.remove(\"editorStateDate\");\r\n store.remove(\"audioEditorState\");\r\n store.remove(\"audioEditorStateDate\");\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n }\r\n\r\n renderSendAudioButttons() {\r\n if (!this.isProductTypeAudio) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n

    \r\n Тим часом ви можете відправити запис\r\n вашого голосу у вигляді голосового повідомлення у Viber чи Telegram\r\n

    \r\n
    \r\n \r\n \r\n {/* */}\r\n Viber\r\n \r\n \r\n \r\n {/* */}\r\n Telegram\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n render() {\r\n const { t, i18n } = this.props;\r\n const homeUrl =\r\n getPublicUrl(i18n) + (this.isProductTypeAudio ? \"/audio\" : \"\");\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

    {t(\"Ваше замовлення прийняте!\")}

    \r\n

    \r\n {t(\"Номер замовлення:\")} {this.id}\r\n

    \r\n

    \r\n {t(\r\n \"Ми зв'яжемося з Вами найближчим часом, за вказаним номером телефону, для підтвердження деталей замовлення.\"\r\n )}\r\n

    \r\n {this.renderSendAudioButttons()}\r\n

    \r\n {t(\r\n \"Якщо у вас є питання, зверніться до менеджера за телефоном +380665444363, або за email: info@mimimaps.com.ua\"\r\n )}\r\n

    \r\n
    \r\n
    \r\n \r\n {\" \"}\r\n {t(\"Повернутися на головну\")}\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\nexport default withTranslation()(Completed);\r\n","import React, { Component } from \"react\";\r\nimport {\r\n getUrlQuery,\r\n getStyleSettingsByStyleId,\r\n getAllStyles,\r\n} from \"../../utils/utils\";\r\nimport moment from \"moment\";\r\nimport \"./admin.css\";\r\nimport formatcoords from \"formatcoords\";\r\n\r\nexport default class AdminSky extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n var additionalStateValues = this.getAdditionalStateValues(\r\n this.props.settings\r\n );\r\n\r\n let stylesId = getAllStyles(true).map((s) => s.id);\r\n\r\n this.state = {\r\n isSubtitleRequiresChange: false,\r\n isAdditionalInfoOpen: false,\r\n stylesId,\r\n ...additionalStateValues\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.checkStyleIsCorrect();\r\n }\r\n\r\n checkStyleIsCorrect() {\r\n if (this.props.settings) {\r\n let styleId = this.props.settings.style;\r\n if (this.state.stylesId.indexOf(styleId) < 0) {\r\n this.props.onShowError(`Не найден стиль ${styleId}`);\r\n }\r\n }\r\n }\r\n\r\n getAdditionalStateValues(settings) {\r\n let formattedDate = null;\r\n if (settings && settings.urlQuery) {\r\n if (settings.urlQuery.date) {\r\n var m = moment.utc(settings.urlQuery.date).local();\r\n formattedDate = m.format(\"DD.MM.YYYY HH:mm\");\r\n }\r\n }\r\n\r\n return {\r\n formattedDate,\r\n };\r\n }\r\n\r\n onStyleChange = (event) => {\r\n var value = event.target.value;\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n var styleSettings = getStyleSettingsByStyleId(value);\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n style: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n style: value,\r\n ...styleSettings,\r\n },\r\n });\r\n };\r\n\r\n onSizeChange = (event) => {\r\n var value = event.target.value;\r\n\r\n let split = value.split(/[\\sxXхХ]+/);\r\n let width = parseInt(split[0], 10) * 10;\r\n let height = parseInt(split[1], 10) * 10;\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n size: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n printWidth: width,\r\n printHeight: height,\r\n },\r\n });\r\n };\r\n\r\n onDateChange = (event) => {\r\n this.dateUpdatedForOrderId = this.props.settings.orderId;\r\n\r\n var value = event.target.value;\r\n var parsedUtcDate = null;\r\n\r\n var parsedLocalDate = moment(value, \"DD.MM.YYYY HH:mm\");\r\n parsedUtcDate = parsedLocalDate.utc().format();\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n this.setState({\r\n formattedDate: value,\r\n isSubtitleRequiresChange: true,\r\n });\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n urlQuery: {\r\n ...urlQuery,\r\n date: parsedUtcDate,\r\n },\r\n });\r\n };\r\n\r\n onInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n const type = target.type;\r\n let value = null;\r\n\r\n if (type == \"checkbox\") {\r\n value = target.checked;\r\n } else {\r\n value = target.value;\r\n }\r\n\r\n var settings = { ...this.props.settings };\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n [name]: value,\r\n });\r\n };\r\n\r\n onUrlQueryInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n const type = target.type;\r\n let value = null;\r\n\r\n if (type == \"checkbox\") {\r\n value = target.checked;\r\n } else {\r\n value = target.value;\r\n }\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n if (name === \"centerLon\" || name === \"centerLat\") {\r\n this.setState({\r\n isSubtitleRequiresChange: true,\r\n });\r\n }\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n urlQuery: {\r\n ...urlQuery,\r\n [name]: value,\r\n },\r\n });\r\n };\r\n\r\n generateConfigFileFromState = () => {\r\n let query = getUrlQuery(this.props.settings.urlQuery);\r\n\r\n var result = {\r\n ...this.props.settings,\r\n urlQuery: query,\r\n };\r\n\r\n var stringResult = JSON.stringify(result, null, 2);\r\n\r\n console.log(stringResult);\r\n return stringResult;\r\n };\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n var content = this.generateConfigFileFromState();\r\n this.props.onSaveFile(content);\r\n };\r\n\r\n sendToOrder = (event) => {\r\n event.preventDefault();\r\n var content = this.generateConfigFileFromState();\r\n this.props.onSendFileToOrder(content);\r\n };\r\n\r\n onAdditionalInfoClick = (event) => {\r\n event.preventDefault();\r\n this.setState({ isAdditionalInfoOpen: !this.state.isAdditionalInfoOpen });\r\n };\r\n\r\n copyRedHeart = (event) => {\r\n event.preventDefault();\r\n const text = \"❤️\";\r\n navigator.clipboard.writeText(text).then(\r\n () => {\r\n console.log(\"Async: Copying to clipboard was successful!\");\r\n },\r\n (err) => {\r\n console.error(\"Async: Could not copy text: \", err);\r\n }\r\n );\r\n };\r\n\r\n getFormattedCoordinates() {\r\n let formattedCoordinates = \"\";\r\n if (\r\n this.props.settings &&\r\n this.props.settings.urlQuery &&\r\n this.props.settings.urlQuery.centerLat\r\n ) {\r\n let urlQuery = this.props.settings.urlQuery;\r\n let latitude = parseFloat(urlQuery.centerLat);\r\n let longitude = parseFloat(urlQuery.centerLon);\r\n formattedCoordinates = formatcoords(latitude, longitude).format(\r\n \"D°M's\\\"X\",\r\n {\r\n latLonSeparator: \" \",\r\n decimalPlaces: 2,\r\n }\r\n );\r\n }\r\n return formattedCoordinates;\r\n }\r\n\r\n renderAdditionalInfo() {\r\n if (!this.state.isAdditionalInfoOpen) return null;\r\n return (\r\n
    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n Сердце для копирования\r\n
      \r\n { /* \r\n Htmlstream\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 \r\n
      • \r\n
      • \r\n \r\n 9+\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 render() {\r\n let formattedCoordinates = this.getFormattedCoordinates();\r\n let hangerOptions = ['Нет', 'Рамка', 'Лента', 'Крючки'];\r\n let isHangerNotValid = false;\r\n let material = this.props?.settings?.material;\r\n let hanger = this.props?.settings?.hanger;\r\n if (material === 'Бумага') {\r\n if (hanger !== 'Нет' && hanger !== 'Рамка') {\r\n isHangerNotValid = true;\r\n }\r\n } else if (material === 'ПВХ') {\r\n if (hanger !== 'Нет' && hanger !== 'Рамка' && hanger !== 'Лента') {\r\n isHangerNotValid = true;\r\n }\r\n } else if (material === 'Холст') {\r\n if (hanger !== 'Крючки') {\r\n isHangerNotValid = true;\r\n }\r\n }\r\n\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 \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n {this.state.stylesId.map((s) => {\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 {hangerOptions.map((s) => {\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
    \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
    \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 \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
    \r\n
    \r\n\r\n {this.renderAdditionalInfo()}\r\n\r\n \r\n Отправить на order\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\nimport \"./admin.css\";\r\n\r\nexport default class AdminCity extends Component {\r\n constructor(props) {\r\n super(props);\r\n var additionalStateValues = this.getAdditionalStateValues(\r\n this.props.settings\r\n );\r\n\r\n let coordinates = JSON.stringify(props.settings.markersCoordinates);\r\n this.state = {\r\n markersCoordinates: coordinates,\r\n isSubtitleRequiresChange: false,\r\n isMapDirty: false,\r\n isChangingLocationNotAllowed: false,\r\n ...additionalStateValues,\r\n };\r\n }\r\n\r\n getAdditionalStateValues(settings) {\r\n let styleSrcFolder = null;\r\n let initialMapWidth = null;\r\n let initialMapHeight = null;\r\n let initialPadding = null;\r\n if (settings && settings.urlQuery) {\r\n if (settings.urlQuery.styleSrc) {\r\n let lastIndex = settings.urlQuery.styleSrc.lastIndexOf(\"/\");\r\n styleSrcFolder = settings.urlQuery.styleSrc.substring(0, lastIndex + 1);\r\n }\r\n initialMapWidth = settings.urlQuery.mapWidth;\r\n initialMapHeight = settings.urlQuery.mapHeight;\r\n initialPadding = settings.urlQuery.padding;\r\n }\r\n return {\r\n styleSrcFolder,\r\n initialMapWidth,\r\n initialMapHeight,\r\n initialPadding,\r\n };\r\n }\r\n\r\n getStyleSettingsByStyleId = (styleId) => {\r\n try {\r\n let styleSrc = this.state.styleSrcFolder;\r\n\r\n switch (styleId) {\r\n case \"modern\":\r\n styleSrc += \"oModern2.json\";\r\n break;\r\n case \"simple\":\r\n styleSrc += \"oSimple.json\";\r\n break;\r\n case \"blue\":\r\n styleSrc += \"oBlue.json\";\r\n break;\r\n case \"tender\":\r\n styleSrc += \"oTender.json\";\r\n break;\r\n case \"black\":\r\n styleSrc += \"oBlack2.json\";\r\n break;\r\n case \"vintage\":\r\n styleSrc += \"oVintage.json\";\r\n break;\r\n case \"red\":\r\n styleSrc += \"oRed.json\";\r\n break;\r\n case \"paste\":\r\n styleSrc += \"oPaste.json\";\r\n break;\r\n case \"harvest\":\r\n styleSrc += \"oHarvest.json\";\r\n break;\r\n case \"bayside\":\r\n styleSrc += \"oBayside.json\";\r\n break;\r\n case \"plum\":\r\n styleSrc += \"oPlum2.json\";\r\n break;\r\n case \"leaf\":\r\n styleSrc += \"oLeaf.json\";\r\n break;\r\n case \"leaf2\":\r\n styleSrc += \"oLeaf.json\";\r\n break;\r\n default:\r\n throw \"Не могу найти стиль: \" + styleId;\r\n }\r\n return {\r\n styleSrc,\r\n };\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onStyleChange = (event) => {\r\n var value = event.target.value;\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n var styleSettings = this.getStyleSettingsByStyleId(value);\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n styleId: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n style: value,\r\n ...styleSettings,\r\n },\r\n });\r\n };\r\n\r\n getMapSettingsByMaterialAndLabeStyle = (material, labelStyle) => {\r\n try {\r\n let padding = \"\";\r\n let mapWidth = \"\";\r\n let mapHeight = \"\";\r\n\r\n if (\r\n labelStyle === \"center\" ||\r\n labelStyle === \"none\" ||\r\n material === \"Холст\"\r\n ) {\r\n padding = 0;\r\n mapWidth = this.props.settings.urlQuery.containerWidth;\r\n mapHeight = this.props.settings.urlQuery.containerHeight;\r\n } else {\r\n var paddingInt = 24;\r\n if (this.state.initialPadding && this.state.initialPadding !== \"0\") {\r\n paddingInt = parseInt(this.state.initialPadding);\r\n }\r\n\r\n padding = paddingInt + \"\";\r\n mapWidth = (\r\n parseInt(this.state.initialMapWidth) -\r\n 2 * paddingInt\r\n ).toString();\r\n mapHeight = (\r\n parseInt(this.state.initialMapHeight) -\r\n 2 * paddingInt\r\n ).toString();\r\n }\r\n return {\r\n padding,\r\n mapWidth,\r\n mapHeight,\r\n };\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n }\r\n };\r\n\r\n onMaterialChange = (event) => {\r\n var value = event.target.value;\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n this.setState({ isMapDirty: true });\r\n\r\n var mapSettings = this.getMapSettingsByMaterialAndLabeStyle(\r\n value,\r\n this.props.settings.labelStyle\r\n );\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n material: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n ...mapSettings,\r\n },\r\n });\r\n };\r\n\r\n onSizeChange = (event) => {\r\n var value = event.target.value;\r\n\r\n let split = value.split(/[\\sxXхХ]+/);\r\n let width = parseInt(split[0], 10) * 10;\r\n let height = parseInt(split[1], 10) * 10;\r\n\r\n this.setState({ isMapDirty: true });\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n size: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n printWidth: width,\r\n printHeight: height,\r\n },\r\n });\r\n };\r\n\r\n onLabelStyleChange = (event) => {\r\n var value = event.target.value;\r\n\r\n this.setState({ isMapDirty: true });\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n var mapSettings = this.getMapSettingsByMaterialAndLabeStyle(\r\n this.props.settings.material,\r\n value\r\n );\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n labelStyle: value,\r\n urlQuery: {\r\n ...urlQuery,\r\n ...mapSettings,\r\n },\r\n });\r\n };\r\n\r\n onInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n const type = target.type;\r\n let value = null;\r\n\r\n if (type == \"checkbox\") {\r\n value = target.checked;\r\n } else {\r\n value = target.value;\r\n }\r\n\r\n var settings = { ...this.props.settings };\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n [name]: value,\r\n });\r\n };\r\n\r\n onMarkersCoordinatesInputChange = (event) => {\r\n var value = event.target.value;\r\n\r\n this.setState({\r\n markersCoordinates: value,\r\n });\r\n };\r\n\r\n onUrlQueryInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n const type = target.type;\r\n let value = null;\r\n\r\n if (type == \"checkbox\") {\r\n value = target.checked;\r\n } else {\r\n value = target.value;\r\n }\r\n\r\n var settings = { ...this.props.settings };\r\n var urlQuery = { ...this.props.settings.urlQuery };\r\n\r\n var isSubtitleRequiresChange = false;\r\n var isMapDirty = false;\r\n if (name === \"centerLon\" || name === \"centerLat\") {\r\n isSubtitleRequiresChange = true;\r\n isMapDirty = true;\r\n } else if (name === \"zoom\") {\r\n isMapDirty = true;\r\n }\r\n\r\n this.setState({\r\n isSubtitleRequiresChange,\r\n isMapDirty,\r\n });\r\n\r\n this.props.onSettingsChanged({\r\n ...settings,\r\n urlQuery: {\r\n ...urlQuery,\r\n [name]: value,\r\n },\r\n });\r\n };\r\n\r\n getUrlQuery = (obj) => {\r\n let query = \"?\";\r\n query += Object.keys(obj)\r\n .map(function(key) {\r\n return `${key}=${obj[key]}`;\r\n })\r\n .join(\"&\");\r\n\r\n return query;\r\n };\r\n\r\n generateConfigFileFromState = () => {\r\n let query = this.getUrlQuery(this.props.settings.urlQuery);\r\n\r\n var result = {\r\n ...this.props.settings,\r\n urlQuery: query,\r\n };\r\n\r\n var stringResult = JSON.stringify(result, null, 2);\r\n\r\n console.log(stringResult);\r\n return stringResult;\r\n };\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n let that = this;\r\n this.validateForm(() => {\r\n var content = that.generateConfigFileFromState();\r\n that.props.onSaveFile(content);\r\n });\r\n };\r\n\r\n sendToOrder = (event) => {\r\n event.preventDefault();\r\n this.validateForm(() => {\r\n var content = this.generateConfigFileFromState();\r\n this.props.onSendFileToOrder(content);\r\n });\r\n };\r\n\r\n validateMarkers = () => {\r\n //if (this.props.settings.)\r\n };\r\n\r\n validateForm(callback) {\r\n try {\r\n var obj = JSON.parse(this.state.markersCoordinates);\r\n var settings = { ...this.props.settings };\r\n this.props.onSettingsChanged(\r\n {\r\n ...settings,\r\n markersCoordinates: obj,\r\n },\r\n callback\r\n );\r\n } catch (e) {\r\n this.props.onShowError(\r\n `Неверный формат координат. Необходим [[lat,lng],[lat,lng]...]`\r\n );\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let hangerOptions = ['Нет', 'Рамка', 'Лента', 'Крючки'];\r\n let isHangerNotValid = false;\r\n let material = this.props?.settings?.material;\r\n let hanger = this.props?.settings?.hanger;\r\n if (material === 'Бумага') {\r\n if (hanger !== 'Нет' && hanger !== 'Рамка') {\r\n isHangerNotValid = true;\r\n }\r\n } else if (material === 'ПВХ') {\r\n if (hanger !== 'Нет' && hanger !== 'Рамка' && hanger !== 'Лента') {\r\n isHangerNotValid = true;\r\n }\r\n } else if (material === 'Холст') {\r\n if (hanger !== 'Крючки') {\r\n isHangerNotValid = true;\r\n }\r\n }\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 \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 {hangerOptions.map((s) => {\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 \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 \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
    \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 \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n Отправить на order\r\n \r\n \r\n Скачать файл\r\n \r\n \r\n );\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport rjson from \"relaxed-json\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport Toast from \"react-bootstrap/Toast\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport superagent from \"superagent\";\r\nimport \"./admin.css\";\r\n\r\nexport default class AdminFileLoader extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fileName: null,\r\n };\r\n }\r\n\r\n getUrlQueryParameters(queryString) {\r\n var match,\r\n pl = /\\+/g, // Regex for replacing addition symbol with a space\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) {\r\n return decodeURIComponent(s.replace(pl, \" \"));\r\n },\r\n query = queryString.substring(1);\r\n\r\n var urlParams = {};\r\n while ((match = search.exec(query))) {\r\n let value = decode(match[2]);\r\n value = this.fixStringBoolean(value);\r\n urlParams[decode(match[1])] = value;\r\n }\r\n\r\n return urlParams;\r\n }\r\n\r\n fixStringBoolean = (value) => {\r\n if (value == null) return null;\r\n var loweredValue = value.toLowerCase();\r\n return loweredValue === \"true\"\r\n ? true\r\n : loweredValue === \"false\"\r\n ? false\r\n : value;\r\n };\r\n\r\n extractSettings = (fileName, jsonContent) => {\r\n let urlQueryParams = this.getUrlQueryParameters(jsonContent.urlQuery);\r\n this.setState({\r\n fileName,\r\n });\r\n this.raiseOnFileLoaded(fileName, jsonContent, {\r\n ...jsonContent,\r\n urlQuery: { ...urlQueryParams },\r\n });\r\n };\r\n\r\n onFileChangeHandler = (event) => {\r\n var file = event.target.files[0];\r\n this.processFile(file);\r\n };\r\n\r\n onFilesSelected = (files) => {\r\n var file = files[0];\r\n this.processFile(file);\r\n };\r\n\r\n readFromClipboard = (e) => {\r\n navigator.clipboard\r\n .readText()\r\n .then((text) => {\r\n console.log(\"Pasted content: \", text);\r\n this.processContent(text);\r\n })\r\n .catch((err) => {\r\n console.error(\"Failed to read clipboard contents: \", err);\r\n this.raiseOnFileException(err);\r\n });\r\n e.preventDefault();\r\n };\r\n\r\n processFile = (file) => {\r\n if (file) {\r\n let reader = new FileReader();\r\n\r\n reader.readAsText(file);\r\n\r\n var that = this;\r\n reader.onload = function () {\r\n try {\r\n var content = reader.result;\r\n console.log(content);\r\n var fixedContent = rjson.transform(content);\r\n var jsonContent = JSON.parse(fixedContent);\r\n console.log(jsonContent);\r\n that.extractSettings(file.name, jsonContent);\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n that.raiseOnFileException(e);\r\n }\r\n };\r\n\r\n reader.onerror = function () {\r\n console.log(reader.error);\r\n that.raiseOnFileException(reader.error);\r\n };\r\n }\r\n };\r\n\r\n processContent = (content) => {\r\n if (content) {\r\n try {\r\n console.log(content);\r\n var fixedContent = rjson.transform(content);\r\n var jsonContent = JSON.parse(fixedContent);\r\n console.log(jsonContent);\r\n var d = new Date();\r\n\r\n var fileName =\r\n d.getFullYear().toString().substr(-2) +\r\n \"_\" +\r\n (\"0\" + (d.getMonth() + 1)).slice(-2) +\r\n \"_\" +\r\n (\"0\" + d.getDate()).slice(-2) +\r\n \"_\" +\r\n jsonContent.orderId +\r\n \".txt\";\r\n\r\n this.extractSettings(fileName, jsonContent);\r\n } catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n this.raiseOnFileException(e);\r\n }\r\n }\r\n };\r\n\r\n raiseOnFileLoaded = (fileName, file, settings) => {\r\n this.props.onFileLoaded(fileName, file, settings);\r\n };\r\n\r\n raiseOnFileException = (message) => {\r\n this.props.onFileException(message);\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {({\r\n getRootProps,\r\n getInputProps,\r\n isDragActive,\r\n isDragAccept,\r\n open,\r\n }) => (\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n Перетащите файл сюда\r\n или\r\n

    {this.state.fileName}

    \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, { Component } from \"react\";\r\nimport rjson from \"relaxed-json\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport Toast from \"react-bootstrap/Toast\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport superagent from \"superagent\";\r\nimport \"./admin.css\";\r\nimport AdminSky from \"./admin-sky\";\r\nimport AdminCity from \"./admin-city\";\r\nimport AdminFileLoader from \"./admin-fileLoader\";\r\n\r\nexport default class Admin extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n file: null,\r\n fileName: null,\r\n fileKey: null,\r\n settings: null,\r\n toast: {\r\n isShow: false,\r\n alertType: null,\r\n message: null,\r\n },\r\n isLoading: false,\r\n };\r\n }\r\n\r\n onFileLoaded = (fileName, file, settings) => {\r\n this.setState({\r\n fileName,\r\n file,\r\n settings,\r\n fileKey: new Date().getTime().toString(),\r\n });\r\n };\r\n\r\n onFileException = (message) => {\r\n this.showError(message);\r\n };\r\n\r\n onSaveFile = (data) => {\r\n var fileName = this.state.fileName;\r\n var blob = new Blob([data], { type: \"text/plain\" });\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveBlob(blob, fileName);\r\n } else {\r\n var elem = window.document.createElement(\"a\");\r\n elem.href = window.URL.createObjectURL(blob);\r\n elem.download = fileName;\r\n document.body.appendChild(elem);\r\n elem.click();\r\n document.body.removeChild(elem);\r\n }\r\n };\r\n\r\n onSendFileToOrder = (data) => {\r\n this.setState({\r\n isLoading: true,\r\n });\r\n\r\n //var blob = new Blob([data], { type: \"text/plain\" });\r\n var file = new File([data], this.state.fileName, { type: \"text/plain\" });\r\n\r\n var formData = new FormData();\r\n formData.append(\"file\", file);\r\n // formData.append(\"file\", file);\r\n\r\n let that = this;\r\n superagent\r\n .post(`/api/Email/SendFileToOrder`)\r\n .send(formData)\r\n .end((error, result) => {\r\n that.setState({\r\n isLoading: false,\r\n });\r\n console.log(error);\r\n console.log(result);\r\n\r\n if (!error && result && result.text === \"Ok\") {\r\n that.showSuccess(\"Файл успешно отправлен\");\r\n } else {\r\n var errorMessage = \"\";\r\n if (error) {\r\n if (error.message) {\r\n errorMessage += error.message;\r\n }\r\n if (error.response && error.response.text) {\r\n errorMessage += \": \" + error.response.text;\r\n }\r\n } else {\r\n errorMessage += \"Получен непверный ответ от сервера\";\r\n }\r\n that.showError(errorMessage);\r\n }\r\n });\r\n };\r\n\r\n onCloseToast = () => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: false,\r\n },\r\n });\r\n };\r\n\r\n showError = (e) => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: true,\r\n alertType: \"danger\",\r\n message: e.toString(),\r\n },\r\n });\r\n };\r\n\r\n showSuccess = (e) => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: true,\r\n alertType: \"success\",\r\n message: e.toString(),\r\n },\r\n });\r\n };\r\n\r\n onSettingsChanged = (settings, callback) => {\r\n this.setState({ settings: { ...settings } }, callback);\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n \r\n Сообщение\r\n {/* 11 mins ago */}\r\n \r\n \r\n \r\n {this.state.toast.message}\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.state.settings?.productType === \"sky\" ? (\r\n \r\n ) : this.state.settings?.productType === \"city\" ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n","import { createAuthProvider } from \"react-token-auth\";\r\nimport axios from \"axios\";\r\n\r\nconst BackendLoginService = (function () {\r\n var instance;\r\n\r\n var isLoggedIn = false;\r\n\r\n const api = axios.create({\r\n baseURL: \"/api\",\r\n });\r\n\r\n const customFetch = (url, config) => {\r\n config.url = url;\r\n return api.request(config);\r\n };\r\n\r\n // function handleFetchErrors(response) {\r\n // if (!response.ok) {\r\n // throw Error(response.statusText);\r\n // }\r\n // return response;\r\n // }\r\n\r\n const [\r\n useAuth,\r\n authFetch,\r\n loginInternal,\r\n logoutInternal,\r\n ] = createAuthProvider({\r\n accessTokenKey: \"jwtToken\",\r\n customFetch: customFetch,\r\n onUpdateToken: (token) =>\r\n api\r\n .post(\"/Auth/refresh\", JSON.stringify(token.refreshToken), {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((r) => {\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n isLoggedIn = false;\r\n let message = \"\";\r\n if (error.response) {\r\n if (error.response.status === 403) {\r\n throw new Error(\"Refresh token is outdated\");\r\n }\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n }),\r\n // onUpdateToken: (token) =>\r\n // fetch(\"/api/Auth/refresh\", {\r\n // method: \"POST\",\r\n // body: JSON.stringify(token.refreshToken),\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // },\r\n // })\r\n // .then(handleFetchErrors)\r\n // .then((r) => r.json())\r\n // .catch((error) => {\r\n // console.log(error);\r\n // }),\r\n });\r\n\r\n const authGet = (url, config) => {\r\n config = config || {};\r\n config.method = \"get\";\r\n\r\n return authFetch(url, config);\r\n };\r\n\r\n const authPost = (url, data, config) => {\r\n config = config || {};\r\n config.method = \"post\";\r\n config.data = data;\r\n\r\n return authFetch(url, config);\r\n };\r\n\r\n const authPut = (url, data, config) => {\r\n config = config || {};\r\n config.method = \"put\";\r\n config.data = data;\r\n\r\n return authFetch(url, config);\r\n };\r\n\r\n const authDelete = (url, config) => {\r\n config = config || {};\r\n config.method = \"delete\";\r\n\r\n return authFetch(url, config);\r\n };\r\n\r\n const login = (googleResponse) => {\r\n return api\r\n .post(\"/Auth/google\", googleResponse)\r\n .then((r) => {\r\n loginInternal(r.data);\r\n isLoggedIn = true;\r\n return r.data;\r\n })\r\n .catch((error) => {\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = error.message;\r\n console.log(\"Error\", error.message);\r\n }\r\n throw new Error(message);\r\n });\r\n };\r\n\r\n // const login = (googleResponse) => {\r\n // return fetch(\"/api/Auth/google\", {\r\n // method: \"POST\",\r\n // body: JSON.stringify(googleResponse),\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // },\r\n // })\r\n // .then(handleFetchErrors)\r\n // .then((r) => r.json())\r\n // .then((r) => {\r\n // loginInternal(r);\r\n // isLoggedIn = true;\r\n // return r;\r\n // });\r\n // };\r\n\r\n const logout = () => {\r\n logoutInternal();\r\n isLoggedIn = false;\r\n };\r\n\r\n const isLoggedInFun = () => {\r\n return isLoggedIn;\r\n };\r\n\r\n const createInstance = function () {\r\n return {\r\n login,\r\n authGet,\r\n authPost,\r\n authPut,\r\n authDelete,\r\n logout,\r\n isLoggedIn: isLoggedInFun,\r\n };\r\n };\r\n\r\n return {\r\n getInstance: function () {\r\n return instance || (instance = createInstance());\r\n },\r\n };\r\n})();\r\n\r\nexport default BackendLoginService;\r\n","import React, { Component } from \"react\";\r\nimport { GoogleLogin } from \"react-google-login\";\r\nimport BackendLoginService from \"./backendLoginService\";\r\nimport { Redirect, Link } from \"react-router-dom\";\r\n\r\nexport default class Login extends Component {\r\n clientId =\r\n \"119044322202-46ojakubusukc4f80ovkehdali45q380.apps.googleusercontent.com\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n redirect: null,\r\n clientEmail: \"\",\r\n serverEmail: \"\",\r\n serverLoginFailed: false,\r\n };\r\n }\r\n\r\n onSuccess = (res) => {\r\n console.log(\"history:\", this.props.history);\r\n console.log(\"Client login succesful:\", res);\r\n\r\n this.setState({\r\n clientEmail: res?.profileObj?.email,\r\n serverLoginFailed: false,\r\n });\r\n //alert(\"Should go back to: \" + this.props.location.state.from);\r\n // this.setState({ email: res.profileObj.email, tokenId: res.tokenId });\r\n // let email = res?.profileObj?.email;\r\n\r\n BackendLoginService.getInstance()\r\n .login(res)\r\n .then((r) => {\r\n console.log(\"Server login succesful\");\r\n let redirect = null;\r\n if (this.props.location.state && this.props.location.state.from) {\r\n redirect = this.props.location.state.from;\r\n }\r\n\r\n let email = r.email;\r\n this.setState({\r\n redirect: redirect,\r\n serverEmail: email,\r\n });\r\n\r\n //alert(BackendLoginService.getInstance().isLoggedIn());\r\n })\r\n .catch((error) => {\r\n this.setState({\r\n serverEmail: \"\",\r\n serverLoginFailed: true,\r\n });\r\n console.log(error);\r\n alert(`Failed to do server login. 😢\\n` + error);\r\n });\r\n };\r\n\r\n onFailure = (res) => {\r\n this.setState({\r\n clientEmail: \"\",\r\n serverEmail: \"\",\r\n });\r\n console.log(\"Login failed: res:\", res);\r\n alert(`Failed to do client login. 😢`);\r\n };\r\n\r\n renderSuccessAccountInfo = () => {\r\n return (\r\n
    \r\n

    \r\n Вы вошли как: {this.state.clientEmail}\r\n
    \r\n Выйти\r\n

    \r\n
    \r\n );\r\n };\r\n\r\n renderFailedAccountInfo = () => {\r\n return (\r\n
    \r\n

    \r\n Не удалось войти на сервер как: {this.state.clientEmail}.\r\n
    \r\n Попробуйте выйти и зайти под другим пользователем.\r\n
    \r\n Выйти\r\n

    \r\n
    \r\n );\r\n };\r\n\r\n renderAccountInfo = () => {\r\n let isLoggedIn = false;\r\n try {\r\n isLoggedIn = BackendLoginService.getInstance().isLoggedIn();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n const isSuccess = isLoggedIn;\r\n const isServerLoginFailed =\r\n this.state.clientEmail && !isLoggedIn && this.state.serverLoginFailed;\r\n return isSuccess\r\n ? this.renderSuccessAccountInfo()\r\n : isServerLoginFailed\r\n ? this.renderFailedAccountInfo()\r\n : null;\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n console.log(\"Redirecting to: \" + this.state.redirect);\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n {this.renderAccountInfo()}\r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { GoogleLogout } from \"react-google-login\";\r\nimport BackendLoginService from \"./backendLoginService\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nexport default class Logout extends Component {\r\n clientId =\r\n \"119044322202-46ojakubusukc4f80ovkehdali45q380.apps.googleusercontent.com\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n redirect: null,\r\n };\r\n }\r\n\r\n onSuccess = (res) => {\r\n console.log(\"Client logout succesful:\", res);\r\n //alert(\"Should go back to: \" + this.props.location.state.from);\r\n // this.setState({ email: res.profileObj.email, tokenId: res.tokenId });\r\n\r\n BackendLoginService.getInstance().logout();\r\n\r\n console.log(\"Server logout succesful\");\r\n let redirect = \"/login\";\r\n\r\n this.setState({ redirect: redirect });\r\n };\r\n\r\n onFailure = (res) => {\r\n console.log(\"Logout failed: res:\", res);\r\n alert(`Failed to do client logout. 😢`);\r\n };\r\n\r\n renderAccountInfo = () => {\r\n let isLoggedIn = false;\r\n try {\r\n isLoggedIn = BackendLoginService.getInstance().isLoggedIn();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return isLoggedIn ?

    Вы залогинены

    : null;\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n console.log(\"Redirecting to: \" + this.state.redirect);\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n {this.renderAccountInfo()}\r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n","//import axios from \"axios\";\r\nimport BackendLoginService from \"../components/login-components/backendLoginService\";\r\n\r\nconst api = BackendLoginService.getInstance();\r\n\r\n// const api = axios.create({\r\n// baseURL: \"/api/promo\",\r\n// });\r\n\r\nexport const insertPromo = (payload) => api.authPost(`/promo`, payload);\r\nexport const getAllPromos = () => api.authGet(`/promo`);\r\nexport const updatePromo = (payload) => api.authPut(`/promo`, payload);\r\nexport const deletePromoByCode = (code) => api.authDelete(`/promo/${code}`);\r\nexport const getPromoByCode = (code) => api.authGet(`/promo/${code}`);\r\n\r\nconst apis = {\r\n insertPromo,\r\n getAllPromos,\r\n updatePromo,\r\n deletePromoByCode,\r\n getPromoByCode,\r\n};\r\n\r\nexport default apis;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Toast from \"react-bootstrap/Toast\";\r\n\r\nexport default function ToastFun(props) {\r\n //const [isShow, setIsShow] = useState(false);\r\n //const [message, setMessage] = useState(props.message);\r\n\r\n return (\r\n \r\n \r\n Сообщение\r\n {/* 11 mins ago */}\r\n \r\n \r\n \r\n {props.message}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport api from \"../../api/promo-api\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport Toast from \"../../utils/toast\";\r\nimport moment from \"moment\";\r\n\r\nclass PromoList extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toast: {\r\n isShow: false,\r\n alertType: null,\r\n message: null,\r\n },\r\n promos: [],\r\n isLoading: false,\r\n redirect: null,\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n this.getAllPromos();\r\n };\r\n\r\n getAllPromos = () => {\r\n this.setState({ isLoading: true });\r\n\r\n api\r\n .getAllPromos()\r\n .then((r) => {\r\n this.setState({\r\n promos: r.data,\r\n isLoading: false,\r\n });\r\n })\r\n .catch((error) => {\r\n this.setState({ isLoading: false });\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = `request failed: ${error.message}`;\r\n console.log(\"Error\", error.message);\r\n if (error.message === \"Refresh token is outdated\") {\r\n this.setState({\r\n redirect: \"/login\",\r\n });\r\n }\r\n }\r\n this.showMessage(message, \"danger\");\r\n });\r\n };\r\n\r\n onAddClick = (e) => {\r\n e.preventDefault();\r\n\r\n this.setState({\r\n redirect: `/promo/add`,\r\n });\r\n };\r\n\r\n onEditClick = (e) => {\r\n e.preventDefault();\r\n const code = e.currentTarget.value;\r\n\r\n this.setState({\r\n redirect: `/promo/edit/${code}`,\r\n });\r\n };\r\n\r\n onDeleteClick = (e) => {\r\n e.preventDefault();\r\n const code = e.currentTarget.value;\r\n if (window.confirm(`Точно удалить промокод? ${code}`)) {\r\n this.setState({ isLoading: true });\r\n\r\n api\r\n .deletePromoByCode(code)\r\n .then(() => {\r\n this.getAllPromos();\r\n })\r\n .catch((error) => {\r\n this.setState({ isLoading: false });\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = `request failed: ${error.message}`;\r\n console.log(\"Error\", error.message);\r\n if (error.message === \"Refresh token is outdated\") {\r\n this.setState({\r\n redirect: \"/login\",\r\n });\r\n }\r\n }\r\n this.showMessage(message, \"danger\");\r\n });\r\n }\r\n };\r\n\r\n onCloseToast = () => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: false,\r\n },\r\n });\r\n };\r\n\r\n showMessage = (e, type = \"success\") => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: true,\r\n alertType: type,\r\n message: e.toString(),\r\n },\r\n });\r\n };\r\n\r\n onLogoutClick = () => {\r\n this.setState({\r\n redirect: `/logout`,\r\n });\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n let showTable = true;\r\n if (!this.state.promos.length) {\r\n showTable = false;\r\n }\r\n\r\n const formatDate = (date) => {\r\n var m = moment.utc(date).local();\r\n return m.format(\"DD.MM.YYYY HH:mm\");\r\n };\r\n\r\n return (\r\n
    \r\n \r\n

    Промокоды

    \r\n \r\n Создать\r\n \r\n \r\n Выйти\r\n \r\n {showTable && (\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.state.promos.map((s, index) => {\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
    КодСкидкаАктивный доОписание
    {s.code}{s.discount}{formatDate(s.expirationDate)}{s.description}\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\nexport default PromoList;\r\n","import React, { Component } from \"react\";\r\nimport api from \"../../api/promo-api\";\r\nimport moment from \"moment\";\r\n\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nimport Toast from \"../../utils/toast\";\r\n\r\nexport default class PromoAdd extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n var code = props.match?.params?.code;\r\n\r\n if (code) {\r\n this._isUpdatingMode = true;\r\n } else {\r\n this._isUpdatingMode = false;\r\n }\r\n\r\n var today = moment().local().startOf(\"day\");\r\n var expirationDate = today.add(14, \"days\");\r\n\r\n var expirationDateFormatted = expirationDate.format(\"DD.MM.YYYY HH:mm\");\r\n var expirationDateUtc = expirationDate.utc().format();\r\n\r\n this.state = {\r\n isLoading: false,\r\n isFailed: false,\r\n toast: {\r\n isShow: false,\r\n alertType: null,\r\n message: null,\r\n },\r\n redirect: null,\r\n formattedDate: expirationDateFormatted,\r\n promo: {\r\n code: code,\r\n discount: \"10%\",\r\n expirationDate: expirationDateUtc,\r\n description: \"\",\r\n },\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this._isUpdatingMode) {\r\n this.setState({ isLoading: true });\r\n\r\n api\r\n .getPromoByCode(this.state.promo.code)\r\n .then((res) => {\r\n let formattedDate = null;\r\n if (res.data && res.data.expirationDate) {\r\n var m = moment.utc(res.data.expirationDate).local();\r\n formattedDate = m.format(\"DD.MM.YYYY HH:mm\");\r\n }\r\n this.setState({\r\n formattedDate,\r\n promo: { ...res.data },\r\n isLoading: false,\r\n isFailed: false,\r\n });\r\n })\r\n .catch((error) => {\r\n this.setState({ isLoading: false, isFailed: true });\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${error.response.statusText}:\\n${error.response.data}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = \"request failed\";\r\n console.log(\"Error\", error.message);\r\n }\r\n this.showMessage(message, \"danger\");\r\n });\r\n }\r\n };\r\n\r\n onInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n const type = target.type;\r\n let value = null;\r\n\r\n if (type == \"checkbox\") {\r\n value = target.checked;\r\n } else {\r\n value = target.value;\r\n }\r\n\r\n var promo = { ...this.state.promo };\r\n this.setState({\r\n promo: {\r\n ...promo,\r\n [name]: value,\r\n },\r\n });\r\n };\r\n\r\n onDateChange = (event) => {\r\n var value = event.target.value;\r\n var parsedUtcDate = null;\r\n\r\n var parsedLocalDate = moment(value, \"DD.MM.YYYY HH:mm\");\r\n parsedUtcDate = parsedLocalDate.utc().format();\r\n\r\n var promo = { ...this.state.promo };\r\n this.setState({\r\n formattedDate: value,\r\n promo: {\r\n ...promo,\r\n expirationDate: parsedUtcDate,\r\n },\r\n });\r\n };\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n\r\n this.setState({\r\n isLoading: true,\r\n });\r\n\r\n if (this._isUpdatingMode) {\r\n api\r\n .updatePromo(this.state.promo)\r\n .then((res) => {\r\n this.setState({\r\n isLoading: false,\r\n redirect: \"/promo\",\r\n });\r\n })\r\n .catch((error) => {\r\n this.setState({ isLoading: false });\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = `request failed: ${error.message}`;\r\n console.log(\"Error\", error.message);\r\n if (error.message === \"Refresh token is outdated\") {\r\n this.setState({\r\n redirect: \"/login\",\r\n });\r\n }\r\n }\r\n this.showMessage(message, \"danger\");\r\n });\r\n } else {\r\n api\r\n .insertPromo(this.state.promo)\r\n .then((res) => {\r\n this.setState({\r\n isLoading: false,\r\n redirect: \"/promo\",\r\n });\r\n })\r\n .catch((error) => {\r\n this.setState({ isLoading: false });\r\n let message = \"\";\r\n if (error.response) {\r\n message = `${error.response.status} ${\r\n error.response.statusText\r\n }\\n${JSON.stringify(error.response.data)}`;\r\n // Request made and server responded\r\n console.log(error.response);\r\n } else if (error.request) {\r\n message = \"no response\";\r\n console.log(error.request);\r\n } else {\r\n message = `request failed: ${error.message}`;\r\n console.log(\"Error\", error.message);\r\n if (error.message === \"Refresh token is outdated\") {\r\n this.setState({\r\n redirect: \"/login\",\r\n });\r\n }\r\n }\r\n this.showMessage(message, \"danger\");\r\n });\r\n }\r\n };\r\n\r\n onCancelClick = (e) => {\r\n e.preventDefault();\r\n this.setState({\r\n redirect: \"/promo\",\r\n });\r\n };\r\n\r\n onCloseToast = () => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: false,\r\n },\r\n });\r\n };\r\n\r\n showMessage = (e, type = \"success\") => {\r\n let toast = this.state.toast;\r\n this.setState({\r\n toast: {\r\n ...toast,\r\n isShow: true,\r\n alertType: type,\r\n message: e.toString(),\r\n },\r\n });\r\n };\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return (\r\n \r\n );\r\n }\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 \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}\r\n","import React, { Component } from \"react\";\r\nimport { Typeahead, AsyncTypeahead } from \"react-bootstrap-typeahead\"; // ES2015\r\nimport \"react-bootstrap-typeahead/css/Typeahead.css\";\r\nimport \"./admin.css\";\r\n\r\nexport default class AdminNovaPoshta extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { isLoading: false, options: [], city: null };\r\n }\r\n\r\n onCopyClick = (e) => {\r\n navigator.clipboard\r\n .writeText(this.state.city.uk)\r\n .then(() => {\r\n console.log(\"Writed to clipboard\");\r\n })\r\n .catch((err) => {\r\n console.error(\"Failed to write to clipboard\", err);\r\n alert(err);\r\n });\r\n e.preventDefault();\r\n };\r\n\r\n onTypeheadChange = (e) => {\r\n var value = e ? e[0] : null;\r\n this.setState({ city: value });\r\n };\r\n\r\n render() {\r\n function range(start, end) {\r\n return Array.from({ length: end - start + 1 }, (_, i) => i);\r\n }\r\n\r\n //const options = range(0, 1000).map((o) => `Option ${o.toString()}`);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    Поиск по названию города
    \r\n `${option?.uk}`}\r\n onSearch={(query) => {\r\n this.setState({ isLoading: true });\r\n fetch(`/api/novaposhta/cities/${query}`)\r\n .then((resp) => resp.json())\r\n .then((json) =>\r\n this.setState({\r\n isLoading: false,\r\n options: json,\r\n })\r\n );\r\n }}\r\n options={this.state.options}\r\n onChange={this.onTypeheadChange}/>\r\n

    {(this.state.city?.ru) ? \"ru: \" + (this.state.city?.ru) : \"\\u00A0\"\r\n }

    \r\n \r\n Скопировать ua\r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport BackendLoginService from \"../login-components/backendLoginService\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nexport default class Promo extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n makeCall = (e) => {\r\n e.preventDefault();\r\n\r\n BackendLoginService.getInstance()\r\n .authGet(\"/api/Email/555\")\r\n .then((r) => {\r\n console.log(r);\r\n alert(r.data);\r\n //return r.json();\r\n })\r\n .catch((error) => {\r\n alert(error, \"danger\");\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n hello\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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    \r\n
    \r\n );\r\n }\r\n}\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nimport Backend from \"i18next-http-backend\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\n// not like to use this?\r\n// have a look at the Quick start guide\r\n// for passing in lng and translations on init\r\n\r\ni18n\r\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\r\n // learn more: https://github.com/i18next/i18next-http-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n detection: {\r\n order: [\"path\"],\r\n lookupFromPathIndex: 0,\r\n checkWhitelist: true,\r\n },\r\n backend: {\r\n // for all available options read the backend's repository readme file\r\n loadPath: \"/sky/assets/i18n/{{lng}}.json\",\r\n },\r\n // resources: {\r\n // en: {\r\n // translation: {\r\n // \"Welcome to React\": \"Welcome to React and react-i18next\",\r\n // },\r\n // },\r\n // },\r\n\r\n fallbackLng: \"uk\",\r\n debug: true,\r\n whitelist: [\"ru\", \"uk\", \"en\"],\r\n load: \"languageOnly\",\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n },\r\n nsSeparator: false,\r\n keySeparator: false,\r\n });\r\n\r\nexport default i18n;\r\n","import \"react-app-polyfill/stable\";\r\nimport React, { Suspense } from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\n\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\r\n\r\nimport Editor from \"./components/editor\";\r\nimport AudioEditor from \"./components/audio-components/editor\";\r\nimport Cart from \"./components/cart\";\r\nimport Completed from \"./components/completed\";\r\nimport ScrollToTop from \"react-router-scroll-top\";\r\nimport Admin from \"./components/admin-components/admin\";\r\nimport Login from \"./components/login-components/login\";\r\nimport Logout from \"./components/login-components/logout\";\r\nimport PromoList from \"./components/promo-components/promo-list\";\r\nimport PromoAdd from \"./components/promo-components/promo-add\";\r\nimport AdminNovaPoshta from \"./components/admin-components/admin-novaPoshta\";\r\n\r\nimport Promo from \"./components/promo-components/promo\";\r\nimport BackendLoginService from \"./components/login-components/backendLoginService\";\r\n\r\nimport \"./i18n\";\r\n\r\n// import $ from \"jquery\";\r\n// import Popper from \"popper.js\";\r\n// import \"bootstrap/dist/css/bootstrap.min.css\";\r\n// import \"bootstrap/dist/js/bootstrap.bundle.min\";\r\n\r\nif (process.env.NODE_ENV === \"development\") {\r\n console.log(\"why-did-you render!\");\r\n const whyDidYouRender = require(\"@welldone-software/why-did-you-render\");\r\n whyDidYouRender(React, {\r\n trackAllPureComponents: true,\r\n titleColor: \"green\",\r\n diffNameColor: \"aqua\",\r\n });\r\n}\r\n\r\nfunction Spinner() {\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\nlet language = \"\";\r\n\r\ntry {\r\n const path = window.location.pathname;\r\n const pathSplit = path.split(\"/\");\r\n\r\n if (pathSplit && pathSplit.length > 1 && pathSplit[1].length == 2) {\r\n language = pathSplit[1] + \"/\";\r\n }\r\n} catch (e) {\r\n (console.error || console.log).call(console, e.stack || e);\r\n}\r\nconst baseName = \"/\" + language + \"sky\";\r\n\r\nlet isLoggedIn = () => {\r\n try {\r\n var isLoggedIn = BackendLoginService.getInstance().isLoggedIn();\r\n console.log(\"Index isLoggedIn:\", isLoggedIn);\r\n return isLoggedIn;\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nReactDOM.render(\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 \r\n \r\n \r\n {\r\n return !isLoggedIn() ? (\r\n \r\n ) : (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n return !isLoggedIn() ? (\r\n \r\n ) : (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n return !isLoggedIn() ? (\r\n \r\n ) : (\r\n \r\n );\r\n }}\r\n />\r\n {/* */}\r\n {/* \r\n \r\n \r\n {\r\n console.log(\"Renderring promo route\");\r\n return !isLoggedIn() ? (\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 document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}