{"version":3,"sources":["_metronic/layout/core/PageData.tsx","_metronic/assets/ts/_utils/DomHelpers.ts","app/pages/Models/customerModel.ts","setup/helpers/apiUrl.js","app/pages/CreateCampaign/redux/Slice/CustomerListSlice.ts","app/pages/CreateCampaign/redux/Slice/CampaignListSlice.ts","app/pages/CreateCampaign/redux/Slice/CampaignMarginSlice.ts","app/pages/CreateCampaign/redux/Slice/CampaignDetailSlice.ts","app/pages/CreateCampaign/redux/Slice/LockInCandidateSlice.ts","app/pages/CreateCampaign/redux/Slice/CampaignResultSlice.ts","app/pages/CreateCampaign/redux/Slice/CustomerDetailSlice.ts","app/pages/CampaignMonitor/redux/Slice/ScoreCardSlice.ts","app/pages/CampaignMonitor/redux/Slice/ScoreCardCustomerSlice.ts","_metronic/assets/ts/_utils/index.ts","_metronic/layout/core/MetronicSplashScreen.tsx","_metronic/assets/ts/_utils/EventHandlerUtil.ts","_metronic/helpers/AssetHelpers.ts","_metronic/helpers/RouterHelpers.ts","_metronic/helpers/components/KTSVG.tsx","_metronic/helpers/dataExamples.ts","app/modules/auth/redux/AuthSlice.ts","app/modules/auth/redux/AuthCRUD.ts","app/modules/auth/components/Login.tsx","app/modules/auth/AuthPage.tsx","app/modules/auth/redux/AuthRedux.ts","app/modules/auth/Logout.tsx","app/modules/auth/redux/AuthInit.tsx","setup/redux/RootReducer.ts","setup/redux/Store.ts","_metronic/i18n/Metronici18n.tsx","_metronic/i18n/i18nProvider.tsx","_metronic/layout/components/Footer.tsx","_metronic/assets/ts/components/_CookieComponent.ts","_metronic/assets/ts/components/_DrawerComponent.ts","_metronic/assets/ts/components/_FeedbackComponent.ts","_metronic/assets/ts/components/_ImageInputComponent.ts","_metronic/assets/ts/components/_ScrollComponent.ts","_metronic/assets/ts/components/_ScrollTopComponent.ts","_metronic/assets/ts/components/_StepperComponent.ts","_metronic/assets/ts/components/_StickyComponent.ts","_metronic/assets/ts/components/_ToggleComponent.ts","_metronic/assets/ts/components/_PasswordMeterComponent.ts","_metronic/assets/ts/components/_PlaceComponent.ts","_metronic/assets/ts/components/MenuComponent.ts","_metronic/assets/ts/components/SearchComponent.ts","_metronic/layout/components/header/MenuItem.tsx","_metronic/layout/components/header/MenuInner.tsx","_metronic/layout/components/header/Header.tsx","_metronic/layout/components/header/page-title/DefaultTitle.tsx","_metronic/partials/layout/header-menus/HeaderUserMenu.tsx","_metronic/partials/chat/ChatInner.tsx","_metronic/partials/content/fallback-view/FallbackView.tsx","_metronic/partials/modals/create-app/Main.tsx","_metronic/layout/components/header/Topbar.tsx","_metronic/layout/components/header/HeaderWrapper.tsx","_metronic/layout/components/toolbar/Toolbar.tsx","_metronic/layout/components/ScrollTop.tsx","_metronic/layout/components/Content.tsx","_metronic/layout/MasterInit.tsx","_metronic/layout/MasterLayout.tsx","app/routing/PrivateRoutes.tsx","app/routing/Routes.tsx","app/App.tsx","index.tsx","_metronic/assets/ts/_utils/_DataUtil.ts","_metronic/layout/core/index.ts","_metronic/layout/core/LayoutSetup.ts","_metronic/assets/ts/_utils/_ElementStyleUtil.ts","app/pages/Models/campaignModels.ts","_metronic/assets/ts/_utils/_TypesHelpers.ts","_metronic/assets/ts/_utils/ElementAnimateUtil.ts","app/modules/auth/redux/AuthService.ts","_metronic/assets/ts/_utils/_DOMEventHandlerUtil.ts","_metronic/layout/core/DefaultLayoutConfig.ts","_metronic/layout/core/LayoutProvider.tsx"],"names":["PageDataContext","createContext","setPageTitle","_title","setPageBreadcrumbs","_breadcrumbs","setPageDescription","_description","PageDataProvider","children","useState","pageTitle","pageDescription","value","pageBreadcrumbs","Provider","usePageData","useContext","PageTitle","description","breadcrumbs","useEffect","toString","getCSS","el","styleProp","defaultView","ownerDocument","document","replace","toLowerCase","getComputedStyle","getPropertyValue","getElementActualCss","prop","cache","css","getAttribute","style","cssText","offsetWidth","offsetHeight","undefined","setAttribute","parseFloat","attributeValue","getElementIndex","element","parentNode","c","i","length","getElementMatches","selector","p","Element","prototype","f","matches","webkitMatchesSelector","tagName","call","getElementOffset","getClientRects","top","left","rect","getBoundingClientRect","win","pageYOffset","pageXOffset","getElementParents","s","this","querySelectorAll","item","parents","body","parentElement","push","getHighestZindex","bufferNode","buffer","position","parseInt","isNaN","getScrollTop","scrollingElement","documentElement","scrollTop","getViewPort","width","window","innerWidth","height","innerHeight","insertAfterElement","referenceNode","insertBefore","nextSibling","isVisibleElement","throttle","timer","func","delay","setTimeout","getElementChild","childNodes","result","child","nodeType","getElementChildren","slide","dir","speed","callback","calcHeight","getElementActualHeight","calcPaddingTop","calcPaddingBottom","ElementStyleUtil","get","DataUtil","set","has","ElementAnimateUtil","animate","paddingTop","paddingBottom","display","overflow","slideUp","slideDown","getBreakpoint","breakpoint","variableName","hex","trim","getCSSVariableValue","getAttributeValueByBreakpoint","incomingAttr","toJSON","resultKey","resultBreakpoint","key","getObjectPropertyValueByKey","Customer","customerID","customerName","customerReference","level2","level3","level4","sales","salesDevelop","margin","marginDevelop","API_URL","Configs","customerListSlice","createSlice","name","initialState","customers","reducers","setCustomerList","state","action","payload","actions","campaignListSlice","campaigns","setCampaignList","campaignDetail","CampaignDetails","campaignMarginSlice","setCampaignMargin","campaignDetailSlice","setCampaignDetail","lockInCandidateListSlice","setLockInCandidateList","campaignResult","CampaignResult","campaignResultSlice","setCampaignResult","console","log","totalTarget","targetList","detail","calc","enableCalc","customer","type","selectedType","ciro","add","disposable","dairy","deepFrozen","cannedGoods","minimumTarget","calcMinTarget","paybackBonus","estimatedMargin","dispossableSales","Math","abs","cannedGoodsSales","deepFrozenSales","dairySales","marginList","kar","source","val","isEnable","target","factor","customerDetailSlice","setCustomerDetail","scoreCardSlice","scoreCards","setScoreCards","scoreCardCustomerList","ScoreCardCustomerList","scoreCardCustomerListSlice","setScoreCardCustomerList","MetronicSplashScreenContext","LayoutSplashScreen","visible","setCount","prev","EventHandlerUtil","metas","store","handlerId","meta","getEventMetasByName","Map","setEventMetasByName","handerId","fired","getEventsMetaByHandlerId","setEventMetaByNameAndHandlerId","one","getUniqueIdWithPrefix","delete","e","handler","setFiredByNameAndHandlerId","callBack","addEvent","removeEvent","on","toAbsoluteUrl","pathname","process","checkIsActive","url","current","split","getCurrentUrl","indexOf","KTSVG","className","path","svgClassName","src","defaultMessages","user","text","time","template","defaultUserInfos","avatar","email","online","initials","label","messageFromClient","defaultAlerts","title","icon","defaultLogs","code","message","usermodel","userSlice","setUser","AuthService","SetCurrentUser","JSON","stringify","location","reload","deleteUser","LOGIN_URL","login","password","a","loginModel","userName","axios","post","headers","then","response","resp","catch","err","loginSchema","Yup","shape","min","max","required","initialValues","Login","loading","setLoading","dispatch","useDispatch","formik","useFormik","validationSchema","onSubmit","values","setStatus","setSubmitting","data","Status","Detail","Info","accessToken","access_token","error","handleSubmit","noValidate","id","status","placeholder","getFieldProps","clsx","touched","errors","autoComplete","role","marginTop","href","disabled","isSubmitting","isValid","AuthPage","classList","remove","alt","component","from","exact","to","saga","actionTypes","initialAuthState","reducer","persistReducer","storage","whitelist","logout","requestUser","fulfillUser","takeLatest","loginSaga","put","registerSaga","Logout","localStorage","clear","connector","connect","auth","props","didRequest","useRef","setShowSplashScreen","useSelector","shallowEqual","rootSaga","rootReducer","combineReducers","userReducer","UserSliceReducer","customerListReducer","CustomerListSliceReducer","campaignListReducer","CampaignListSliceReducer","campaignDetailSliceReducer","CampaignDetailSliceReducer","campaignMarginListSliceReducer","CampaignMarginListSliceReducer","lockInCandidateListReducer","LockInCandidateListSliceReducer","campaignResultReducer","CampaignResultSliceReducer","customerDetailReducer","CustomerDetailSliceReducer","scoreCardSliceReducer","ScoreCardSliceSliceReducer","scoreCardCustomerSliceReducer","ScoreCardCustomerSliceSliceReducer","all","sagaMiddleware","createSagaMiddleware","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","thunk","configureStore","devTools","enhancers","reduxBatch","persistor","persistStore","run","I18N_CONFIG_KEY","REACT_APP_I18N_CONFIG_KEY","selectedLang","I18nContext","MetronicI18nProvider","lang","ls","getItem","parse","er","getConfig","allMessages","de","en","es","fr","ja","zh","I18nProvider","locale","messages","Footer","classes","useLayout","footerContainer","Date","getFullYear","CookieComponent","cookie","match","RegExp","decodeURIComponent","cookieOptions","options","expires","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","defaultDrawerOptions","overlay","baseClass","overlayClass","direction","DrawerComponent","_element","overlayElement","toggleElement","instanceUid","shown","lastWidth","closeElement","_handlers","togglers","_getOption","closers","DOMEventHandlerUtil","preventDefault","getElementById","_toggle","_hide","_update","String","hasBaseClass","contains","bodyCanvasAttr","attr","optionName","stringSnakeToCamel","option","trigger","_show","_deleteOverlay","removeAttribute","_createOverlay","createElement","elementZIndex","overlayZindex","append","overlayClassOption","addEventListener","removeChild","_getDirection","_getWidth","toggle","show","hide","isShown","update","goElement","off","event","Object","assign","forEach","drawer","getInstance","instance","hasInstace","hideAll","getAllInstancesByKey","dr","updateAll","handleDismiss","closest","bootstrap","createInstances","initGlobalHandlers","reinitialization","defaultImageInputOptions","defaultImageInputQueires","componentName","instanseQuery","inputQuery","wrapperQuery","cancelQuery","removeQuery","hiddenQuery","ImageInputComponent","_options","_queries","inputElement","wrapperElement","cancelElement","removeElement","hiddenElement","queries","uid","_change","files","reader","FileReader","onload","setProperty","readAsDataURL","_cancel","_remove","querySelector","handlers","ImageInput","elements","createInsance","defaultScrollOptions","saveState","ScrollComponent","getOption","hasAttribute","getHeightType","getAutoHeight","dependencies","wrappers","offset","len","borderTop","borderBottom","setupHeight","getHeight","heightType","setupState","pos","setupScrollHandler","scrollHandler","removeEventListener","cookieId","destroyScrollHandler","resetHeight","heghtType","Function","getElement","scroll","resize","createInstance","defaultScrollTopOptions","ScrollTopComponent","_scroll","_go","go","goTop","defaultStepperOptions","startIndex","animation","animationSpeed","animationNextClass","animationPreviousClass","StepperComponent","steps","btnNext","btnPrev","btnSubmit","totatStepsNumber","passedStepIndex","currentStepIndex","_goTo","index","refreshUI","initHandlers","stepDirection","_getStepDirection","getStepContent","content","getLastStepIndex","getTotalStepsNumber","isLastStep","isFirstStep","animateClass","isBetweenStep","goto","goNext","getNextStepIndex","goPrev","getPrevStepIndex","goFirst","goLast","getCurrentStepIndex","getPassedStepIndex","destroy","stepper","defaultStickyOptions","reverse","animationClass","StickyComponent","instanceName","attributeName","eventTriggerState","lastScrollTop","offsetNum","st","enable","disable","dataStickyAttr","attrValueInStr","attrValue","zindex","widthTarget","targetElement","offsetLeft","sticky","defaultToggleOptions","ToggleComponent","attribute","_isEnabled","_disable","_enable","isEnabled","elementTargetAttr","elementToggleAttr","defaultPasswordMeterOptions","minLength","checkUppercase","checkLowercase","checkDigit","checkChar","scoreHighlightClass","defaultPasswordMeterQueires","visibilityQuery","highlightQuery","PasswordMeterComponent","visibilityElement","highlightElement","score","checkSteps","reset","highlight","check","visitbility","visibleIcon","hiddenIcon","focus","test","count","items","slice","total","checkScore","getCheckScore","getScore","map","checkLength","checkLowerCase","passwordMeter","defaultPlaceOptions","mode","defaultPlaceQueires","attrQuery","PlaceComponent","parentSelector","prepend","place","defaultMenuOptions","dropdown","hoverTimeout","accordion","slideSpeed","expand","MenuComponent","triggerElement","_setTriggerElement","_isTriggerElement","_getItemOption","_getItemElement","itemElement","sub","subItem","_getItemParentElement","parentItem","_getItemParentElements","parent","unshift","_getDropdownPopperConfig","placementOption","placement","flipValue","flip","offsetValue","strategy","modifiers","rootBoundary","altBoundary","fallbackPlacements","_getItemChildElement","_getItemChildElements","_getItemSubElement","_getCss","_getItemSubType","_isItemSubShown","_isItemDropdownPermanent","_isItemParentShown","_isItemSubElement","_hasItemSub","_getItemLinkElement","_getItemToggleElement","_showDropdown","hideDropdowns","parentZindex","initDropdownPopper","appendChild","reference","attach","popper","createPopper","_hideDropdown","destroyDropdownPopper","_showAccordion","_hideAccordions","subElement","_hideAccordion","itemsToHide","itemToHide","_reset","removeClass","_destroy","_mouseout","timeout","_mouseover","clearTimeout","_dismiss","itemSubType","_link","_click","click","link","dismiss","mouseover","mouseout","getItemTriggerType","getItemSubType","getItemLinkElement","getItemToggleElement","getItemSubElement","getItemParentElements","isItemSubShown","isItemParentShown","getTriggerElement","isItemDropdownPermanent","hideAccordions","elementMenu","menu","menuData","subMenu","skip","updateDropdowns","forceUpdate","menuInstance","menuItems","menuObj","stopPropagation","defaultSearchOptions","keypress","enter","layout","showOnFocus","defaultSearchQueires","SearchComponent","contentElement","formElement","spinnerElement","clearElement","submitElement","toolbarElement","resultsElement","suggestionElement","emptyElement","processing","menuObject","_getElement","getResponsiveFormMode","responsive","blur","charCode","keyCode","search","input","responsiveFormMode","complete","isProcessing","getQuery","getMenu","getFormElement","Search","MenuItem","fontIcon","hasArrow","hasBullet","useLocation","active","MenuInner","Header","data-kt-drawer","data-kt-drawer-name","data-kt-drawer-activate","data-kt-drawer-overlay","data-kt-drawer-width","data-kt-drawer-direction","data-kt-drawer-toggle","data-kt-swapper","data-kt-swapper-mode","data-kt-swapper-parent","data-kt-menu","DefaultTitle","config","attributes","join","breadCrumbs","Array","isSeparator","isActive","HeaderUserMenu","GetCurrentUser","FallbackView","appName","category","framework","dbName","dbType","nameOnCard","cardNumber","cardExpiryMonth","cardExpiryYear","cardCvv","Topbar","data-kt-menu-trigger","data-kt-menu-attach","data-kt-menu-placement","data-kt-menu-flip","header","HeaderWrapper","aside","headerMenu","headerContainer","Toolbar","toolbarContainer","ScrollTop","isFirstRun","reInitialization","stickyHeader","updateHeaderSticky","data-kt-scrolltop","Content","contentContainer","MasterInit","MasterLayout","PrivateRoutes","CampaignMonitor","lazy","CreateCampaign","fallback","Routes","isAuthorized","App","basename","Chart","register","registerables","ReactDOM","render","instanceData","newMap","v","k","LAYOUT_CONFIG_KEY","REACT_APP_BASE_LAYOUT_CONFIG_KEY","getEmptyCssClasses","headerMobile","asideMenu","asideToggle","toolbar","sidebar","getEmptyHTMLAttributes","getEmptyCSSVariables","LayoutSetup","cssVariables","main","backgroundImage","class","fixed","desktop","tabletAndMobile","tabletAndMobileMode","typeOptions","layouts","bodyStyles","heightAndTabletMobileMode","responsiveBreakpoint","responsiveTarget","theme","minimized","hoverable","darkSkinEnabled","initLayout","initHeader","initPageTitle","initToolbar","initContent","initAside","initFooter","footer","initAsideMenu","fieldsToUpdate","updatedConfig","initCSSClasses","initCSSVariables","initHTMLAttributes","isLoaded","initConfig","setItem","setLayout","DefaultLayoutConfig","getLayout","updatePartialConfig","property","important","attibuteName","removeProperty","period","paybackBonusRate","obj","entries","hasOwnProperty","prefix","floor","random","getTime","str","m","toUpperCase","jsonStr","matched","substring","duration","easings","t","b","d","change","start","performance","now","requestAnimationFrame","loop","timestamp","animationName","animateClasses","cssClass","targetPos","scrollPos","scrollTo","eventName","eventId","targets","funcFromStore","calee","currentTarget","primaryColor","loader","scrolltop","menuIcon","megaMenu","minimize","toolbar1","toolbar2","toolbar3","toolbar4","toolbar5","LayoutContext","disableSplashScreen","splashScreen","LayoutProvider","setConfig","setClasses","setAttributes","setCSSVariables","_themeConfig","enableSplashScreen","cl"],"mappings":"0OAmBMA,EAAkBC,wBAAoC,CAC1DC,aAAc,SAACC,KACfC,mBAAoB,SAACC,KACrBC,mBAAoB,SAACC,OAGjBC,EAA6B,SAAC,GAAgB,IAAfC,EAAc,EAAdA,SAAc,EACfC,mBAAiB,IADF,mBAC1CC,EAD0C,KAC/BT,EAD+B,OAEHQ,mBAAiB,IAFd,mBAE1CE,EAF0C,KAEzBN,EAFyB,OAGHI,mBAA0B,IAHvB,mBAI3CG,EAA8B,CAClCF,YACAT,eACAU,kBACAN,qBACAQ,gBAT+C,KAU/CV,mBAV+C,MAYjD,OAAO,cAACJ,EAAgBe,SAAjB,CAA0BF,MAAOA,EAAjC,SAAyCJ,KAGlD,SAASO,IACP,OAAOC,qBAAWjB,GAQpB,IAAMkB,EAAuB,SAAC,GAA0C,IAAzCT,EAAwC,EAAxCA,SAAUU,EAA8B,EAA9BA,YAAaC,EAAiB,EAAjBA,YAAiB,EACNJ,IAAxDd,EAD8D,EAC9DA,aAAcI,EADgD,EAChDA,mBAAoBF,EAD4B,EAC5BA,mBA4BzC,OA3BAiB,qBAAU,WAIR,OAHIZ,GACFP,EAAaO,EAASa,YAEjB,WACLpB,EAAa,OAEd,CAACO,IAEJY,qBAAU,WAIR,OAHIF,GACFb,EAAmBa,GAEd,WACLb,EAAmB,OAEpB,CAACa,IAEJE,qBAAU,WAIR,OAHID,GACFhB,EAAmBgB,GAEd,WACLhB,EAAmB,OAEpB,CAACgB,IAEG,+B,iCC5ET,kiBAKA,SAASG,EAAOC,EAAiBC,GAC/B,IAAMC,GAAeF,EAAGG,eAAiBC,UAAUF,YAEnD,OAAKA,GAMLD,EAAYA,EAAUI,QAAQ,WAAY,OAAOC,cAE1CJ,EAAYK,iBAAiBP,EAAI,MAAMQ,iBAAiBP,IAPtD,GAmBX,SAASQ,EAAoBT,EAAiBU,EAAWC,GACvD,IAGMtB,EAHFuB,EAAM,GAEV,IAAKZ,EAAGa,aAAa,aAAeH,KAAmB,IAAVC,EAiB3C,OAZAC,EAAMZ,EAAGc,MAAMC,QACff,EAAGc,MAAMC,QAAU,0DAEN,UAATL,EACFrB,EAAQW,EAAGgB,YACO,WAATN,IACTrB,EAAQW,EAAGiB,cAGbjB,EAAGc,MAAMC,QAAUH,OAGLM,IAAV7B,GACFW,EAAGmB,aAAa,aAAeT,EAAMrB,EAAMS,YACpCsB,WAAW/B,EAAMS,aAEnB,EAGP,IAAMuB,EAAiBrB,EAAGa,aAAa,aAAeH,GACtD,OAAIW,GAAqC,MAAnBA,EACbD,WAAWC,QADpB,EAcJ,SAASC,EAAgBC,GACvB,GAAIA,EAAQC,WAEV,IADA,IAAMC,EAAIF,EAAQC,WAAWvC,SACpByC,EAAI,EAAGA,EAAID,EAAEE,OAAQD,IAC5B,GAAID,EAAEC,KAAOH,EAAS,OAAOG,EAGjC,OAAQ,EAIV,SAASE,EAAkBL,EAAsBM,GAC/C,IAAMC,EAAIC,QAAQC,UACZC,EAAIH,EAAEI,SAAWJ,EAAEK,sBAEzB,SAAIZ,IAAWA,EAAQa,UACdH,EAAEI,KAAKd,EAASM,GAM3B,SAASS,EAAiBtC,GAKxB,IAAKA,EAAGuC,iBAAiBZ,OACvB,MAAO,CAACa,IAAK,EAAGC,KAAM,GAIxB,IAAMC,EAAO1C,EAAG2C,wBACVC,EAAM5C,EAAGG,cAAcD,YAC7B,OAAI0C,EACK,CACLJ,IAAKE,EAAKF,IAAMI,EAAIC,YACpBJ,KAAMC,EAAKD,KAAOG,EAAIE,aAInBJ,EAGT,SAASK,EAAkBxB,EAAkBM,GAEtCE,QAAQC,UAAUE,UACrBH,QAAQC,UAAUE,QAAU,SAAUc,GAGpC,IAFA,IAAMd,GAAW9B,UAAY6C,KAAK9C,eAAe+C,iBAAiBF,GAC9DtB,EAAIQ,EAAQP,SACPD,GAAK,GAAKQ,EAAQiB,KAAKzB,KAAOuB,OACvC,OAAOvB,GAAK,IAUhB,IALA,IAAM0B,EAAU,GAEZpD,EAAqBuB,EAGlBvB,GAAMA,IAAOI,SAASiD,KAAMrD,EAAKA,EAAGsD,cACrCzB,EACE7B,EAAGkC,QAAQL,IACbuB,EAAQG,KAAKvD,GAIjBoD,EAAQG,KAAKvD,GAIf,OAAOoD,EAGT,SAASI,EAAiBxD,GAGxB,IAFA,IAAIyD,EAA0BzD,EAC1B0D,EAAS1D,EACNyD,GAAcA,IAAerD,UAAU,CAI5C,IAAMuD,EAAWD,EAAO5C,MAAMN,iBAAiB,YAC/C,GAAiB,aAAbmD,GAAwC,aAAbA,GAAwC,UAAbA,EAAsB,CAK9E,IAAMtE,EAAQuE,SAASF,EAAO5C,MAAMN,iBAAiB,YACrD,IAAKqD,MAAMxE,IAAoB,IAAVA,EACnB,OAAOA,EAKXqE,EADAD,EAAaA,EAAWjC,WAG1B,OAAO,KAGT,SAASsC,IACP,OAAQ1D,SAAS2D,kBAAoB3D,SAAS4D,iBAAiBC,UAIjE,SAASC,IACP,MAAO,CACLC,MAAOC,OAAOC,WACdC,OAAQF,OAAOG,aAInB,SAASC,EAAmBxE,EAAiByE,GAA6B,IAAD,EACvE,iBAAOA,EAAcjD,kBAArB,aAAO,EAA0BkD,aAAa1E,EAAIyE,EAAcE,aAclE,SAASC,EAAiBrD,GACxB,QAAiC,IAAxBA,EAAQP,aAA8C,IAAzBO,EAAQN,cAIhD,SAAS4D,EAASC,EAA2BC,EAAgBC,GAEvDF,IAKJA,EAAQV,OAAOa,YAAW,WACxBF,IAIAD,OAAQ5D,IACP8D,IAoBL,SAASE,EAAgB3D,EAAsBM,GAC7C,IAAM5C,EAlBR,SAA4BsC,EAAsBM,GAChD,IAAKN,IAAYA,EAAQ4D,WACvB,OAAO,KAIT,IADA,IAAMC,EAA6B,GAC1B1D,EAAI,EAAGA,EAAIH,EAAQ4D,WAAWxD,OAAQD,IAAK,CAClD,IAAM2D,EAAQ9D,EAAQ4D,WAAWzD,GAEV,IAAnB2D,EAAMC,UAAkB1D,EAAkByD,EAAsBxD,IAClEuD,EAAO7B,KAAK8B,GAIhB,OAAOD,EAIUG,CAAmBhE,EAASM,GAC7C,OAAO5C,EAAWA,EAAS,GAAK,KAclC,SAASuG,EAAMxF,EAAiByF,EAAaC,EAAeC,GAC1D,MACG3F,GACQ,OAARyF,IAAyC,IAAzBb,EAAiB5E,IACzB,SAARyF,IAA2C,IAAzBb,EAAiB5E,IAHtC,CAQA0F,EAAQA,GAAgB,IACxB,IAAIE,EAvMN,SAAgC5F,GAC9B,OAAOS,EAAoBT,EAAI,UAAU,GAsMxB6F,CAAuB7F,GACpC8F,EAAyB,EACzBC,EAA4B,EAE5BC,IAAiBC,IAAIjG,EAAI,iBAA4D,IAA1CkG,IAASD,IAAIjG,EAAI,sBAC9DkG,IAASC,IAAInG,EAAI,oBAAqBgG,IAAiBC,IAAIjG,EAAI,gBAI/DgG,IAAiBC,IAAIjG,EAAI,oBACoB,IAA7CkG,IAASE,IAAIpG,EAAI,yBAEjBkG,IAASC,IAAInG,EAAI,uBAAwBgG,IAAiBC,IAAIjG,EAAI,mBAGhEkG,IAASE,IAAIpG,EAAI,uBACnB8F,EAAiBlC,SAASsC,IAASD,IAAIjG,EAAI,uBAGzCkG,IAASE,IAAIpG,EAAI,0BACnB+F,EAAoBnC,SAASsC,IAASD,IAAIjG,EAAI,0BAGpC,OAARyF,GAEFzF,EAAGc,MAAMC,QAAU,oCAEf+E,GACFO,IAAmBC,QAAQ,EAAGR,EAAgBJ,GAAO,SAAUrG,GAC7DW,EAAGc,MAAMyF,WAAaT,EAAiBzG,EAAQ,QAI/C0G,GACFM,IAAmBC,QAAQ,EAAGP,EAAmBL,GAAO,SAAUrG,GAChEW,EAAGc,MAAM0F,cAAgBT,EAAoB1G,EAAQ,QAIzDgH,IAAmBC,QACjB,EACAV,GAAc,EACdF,GACA,SAAUrG,GACRW,EAAGc,MAAMwD,QAAUsB,GAAc,GAAKvG,EAAQ,QAEhD,WACEW,EAAGc,MAAMwD,OAAS,GAClBtE,EAAGc,MAAM2F,QAAU,OAEK,oBAAbd,GACTA,QAIW,SAARF,IAETzF,EAAGc,MAAMC,QAAU,oCAEf+E,GACFO,IAAmBC,QACjB,EACAR,EACAJ,GACA,SAAUrG,GAERW,EAAGc,MAAMyF,WAAalH,EAAQ,QAEhC,WACEW,EAAGc,MAAMyF,WAAa,MAKxBR,GACFM,IAAmBC,QACjB,EACAP,EACAL,GACA,SAAUrG,GACRW,EAAGc,MAAM0F,cAAgBnH,EAAQ,QAEnC,WACEW,EAAGc,MAAM0F,cAAgB,MAK/BH,IAAmBC,QACjB,EACAV,GAAc,EACdF,GACA,SAAUrG,GACRW,EAAGc,MAAMwD,OAASjF,EAAQ,QAE5B,WACEW,EAAGc,MAAMwD,OAAS,GAClBtE,EAAGc,MAAM2F,QAAU,GACnBzG,EAAGc,MAAM4F,SAAW,GAEI,oBAAbf,GACTA,SAOV,SAASgB,EAAQ3G,EAAiB0F,EAAeC,GAC/CH,EAAMxF,EAAI,KAAM0F,EAAOC,GAGzB,SAASiB,EAAU5G,EAAiB0F,EAAeC,GACjDH,EAAMxF,EAAI,OAAQ0F,EAAOC,GAG3B,SAASkB,EAAcC,GACrB,IAAIzH,EAvWN,SAA6B0H,GAC3B,IAAIC,EAAMzG,iBAAiBH,SAAS4D,iBAAiBxD,iBAAiBuG,GAKtE,OAJIC,GAAOA,EAAIrF,OAAS,IACtBqF,EAAMA,EAAIC,QAGLD,EAiWsBE,CAAoB,QAAUJ,GAK3D,OAJIzH,IACFA,EAAQuE,SAASvE,EAAM4H,SAGlB5H,EAGT,SAAS8H,EAA8BC,GACrC,IAAI/H,EAAQgI,YAAOD,GACnB,GAAqB,kBAAV/H,EACT,OAAO+H,EAGT,IACIE,EAEAR,EAHE3C,EAAQD,IAAcC,MAExBoD,GAAoB,EAGxB,IAAK,IAAIC,KAAOnI,GAEZyH,EADU,YAARU,EACW,EAEAX,EAAcW,IAAQX,EAAcW,GAAO5D,SAAS4D,KAGjDrD,GAAS2C,EAAaS,IACtCD,EAAYE,EACZD,EAAmBT,GAIvB,OAAOQ,EAAYG,YAA4BpI,EAAOiI,GAAajI,I,8EC3ZvDqI,EAAd,sCACIC,WAAW,EADf,KAEIC,aAAc,GAFlB,KAGIC,kBAAmB,GAHvB,KAIIC,OAAQ,GAJZ,KAKIC,OAAQ,GALZ,KAMIC,OAAQ,GANZ,KAOIC,MAAO,EAPX,KAQIC,aAAc,EARlB,KASIC,OAAQ,EATZ,KAUIC,cAAe,I,iCCVnB,kCAAO,IAAMC,EAAUjE,OAAOkE,QAAQD,S,iCCDtC,8CAOME,EAAoBC,YAAY,CAClCC,KAAK,YACLC,aANiC,CACjCC,UAAU,IAMVC,SAAS,CACLC,gBADK,SACWC,EAAMC,GAClBD,EAAMH,UAAYI,EAAOC,YAMjCH,EACAN,EAAkBU,QADlBJ,gBAGWN,MAAf,S,iCCrBA,8CAOMW,EAAoBV,YAAY,CAClCC,KAAK,YACLC,aANiC,CACjCS,UAAU,IAMVP,SAAS,CACLQ,gBADK,SACWN,EAAMC,GAClBD,EAAMK,UAAYJ,EAAOC,YAMjCI,EACAF,EAAkBD,QADlBG,gBAGWF,MAAf,S,iCCnBA,8CAIMR,EAAa,CACfW,eAAe,IALnB,MAKuBC,IAIjBC,EAAsBf,YAAY,CACpCC,KAAK,iBACLC,eACAE,SAAS,CACLY,kBADK,SACaV,EAAMC,GACpBD,EAAMO,eAAiBN,EAAOC,YAKtCQ,EACAD,EAAoBN,QADpBO,kBAGWD,MAAf,S,iCCtBA,8CAIMb,EAAa,CACfW,eAAe,IALnB,MAKuBC,IAIjBG,EAAsBjB,YAAY,CACpCC,KAAK,iBACLC,eACAE,SAAS,CACLc,kBADK,SACaZ,EAAMC,GACpBD,EAAMO,eAAiBN,EAAOC,YAKtCU,EACAD,EAAoBR,QADpBS,kBAGWD,MAAf,S,iCCxBA,8CAOME,EAA2BnB,YAAY,CACzCC,KAAK,YACLC,aANiC,CACjCS,UAAU,IAMVP,SAAS,CACLgB,uBADK,SACkBd,EAAMC,GACzBD,EAAMK,UAAYJ,EAAOC,YAMjCY,EACAD,EAAyBV,QADzBW,uBAGWD,MAAf,S,iCCrBA,sDAKMjB,EAAe,CACjBmB,eAAgB,IAAIC,KAGlBC,EAAsBvB,YAAY,CACpCC,KAAM,iBACNC,eACAE,SAAU,CACNoB,kBADM,SACYlB,EAAOC,GACrB,IAAI3D,EAAS,IAAI0E,IACjBG,QAAQC,IAAI,QAEZ,IAGIC,EAHAC,EAAarB,EAAOC,QAAQoB,WAC5BC,EAAStB,EAAOC,QAAQqB,OACxBC,EAAOvB,EAAOC,QAAQuB,WAEtBC,EAAWzB,EAAOC,QAAQwB,SAC1BC,EAAO1B,EAAOC,QAAQ0B,aACtBC,EAAO,EACXA,EAAOC,EAAID,EAAMN,EAAOQ,WAAYP,EAAKO,YACzCF,EAAOC,EAAID,EAAMN,EAAOS,MAAOR,EAAKQ,OACpCH,EAAOC,EAAID,EAAMN,EAAOU,WAAYT,EAAKS,YACzCJ,EAAOC,EAAID,EAAMN,EAAOW,YAAaV,EAAKU,aAC1C5F,EAAO6F,cAAgBC,EAAcT,EAAME,EAAKL,GAEhDH,EAAeC,EAAWY,YAAcZ,EAAWU,MAAQV,EAAWW,WAAaX,EAAWS,WAC9FzF,EAAO+F,aAA6B,GAAdhB,EACtB/E,EAAOgG,gBAAkB,GACzBtC,EAAMe,eAAiBzE,EACvB,IAAIiG,EAAmBC,KAAKC,IAAInB,EAAWS,WAAaR,EAAOQ,YAC3DW,EAAmBF,KAAKC,IAAInB,EAAWY,YAAcX,EAAOW,aAC5DS,EAAkBH,KAAKC,IAAInB,EAAWS,WAAaR,EAAOU,YAC1DW,EAAaJ,KAAKC,IAAInB,EAAWU,MAAQT,EAAOS,OACpD,GAAa,cAATL,EAAsB,CACtB,IAAIkB,EAAa5C,EAAOC,QAAQ2C,WAC5B1D,EAAQuC,EAASvC,OAASqC,EAAKO,WAAWQ,EAAiB,IAAMf,EAAKU,YAAYQ,EAAiB,IAAMlB,EAAKS,WAAWU,EAAgB,IAAMnB,EAAKQ,MAAMY,EAAW,GACrKE,EAAQpB,EAASvC,MAAQuC,EAASrC,OAAU,KAAQmC,EAAKQ,MAAQY,EAAaC,EAAWb,MAAS,IAAK,IAAMR,EAAKU,YAAcQ,EAAoBG,EAAWX,YAAe,IAAK,IAAMV,EAAKS,WAAaU,EAAmBE,EAAWZ,WAAc,IAAK,IAAMT,EAAKO,WAAaQ,EAAoBM,EAAWd,WAAc,IAAK,GAAKzF,EAAO+F,aAC/U/F,EAAOgG,gBAAT,GAALQ,EAA8B,EAAyBhI,SAAS0H,KAAKC,IAAIK,EAAM3D,GAAOnI,iBAOhG8K,EAAM,SAACiB,EAAgBC,EAAaC,GAAgE,OAA7BF,GAAXE,EAAqBD,EAAgB,GACjGZ,EAAgB,SAACT,EAAcE,EAAaL,GAC9C,IAAI0B,EAAS,EACb,OAAQvB,GACJ,IAAK,gBACDuB,EAASrB,GAAQ,KAAQ,KAAe,IAAPA,EACjC,MACJ,IAAK,YACD,IAAIsB,EAAO,EACXA,EAAO3B,EAAKO,WAAWoB,EAAO,EAAEA,EAAO,EACvCA,EAAO3B,EAAKQ,MAAMmB,EAAO,EAAEA,EAAO,EAClCA,EAAO3B,EAAKU,YAAYiB,EAAO,EAAEA,EAAO,EAIxCD,GADAA,EAAgB,EAAPrB,GACM,KAHfsB,EAAO3B,EAAKS,WAAWkB,EAAO,EAAEA,EAAO,GAGT,IAAMA,EAAQD,EAKpD,OAAOA,GAGPhC,EACAD,EAAoBd,QADpBe,kBAGWD,MAAf,S,iCCzEA,8CAGMrB,EAAa,CACf8B,SAAS,IAJb,OAIiB9C,IAGXwE,EAAsB1D,YAAY,CACpCC,KAAK,WACLC,eACAE,SAAS,CACLuD,kBADK,SACarD,EAAMC,GACpBD,EAAM0B,SAAWzB,EAAOC,YAMhCmD,EACAD,EAAoBjD,QADpBkD,kBAGWD,MAAf,S,iCCvBA,8CAOME,EAAiB5D,YAAY,CAC/BC,KAAK,aACLC,aAN6B,CAC7B2D,WAAW,IAMXzD,SAAS,CACL0D,cADK,SACSxD,EAAMC,GAChBD,EAAMuD,WAAatD,EAAOC,YAMlCsD,EACAF,EAAenD,QADfqD,cAGWF,MAAf,S,iCCrBA,8CAGM1D,EAAa,CACf6D,sBAAsB,IAJ1B,MAI8BC,IAGxBC,EAA6BjE,YAAY,CAC3CC,KAAK,aACLC,eACAE,SAAS,CACL8D,yBADK,SACoB5D,EAAMC,GAC3BD,EAAMyD,sBAAwBxD,EAAOC,YAM7C0D,EACAD,EAA2BxD,QAD3ByD,yBAGWD,MAAf,S,mDCrBA,q0K,oFCUME,G,KAA8BlO,6BAClCyC,IAuCI0L,EAA8C,SAAC,GAAsB,IAAD,IAApBC,eAAoB,SAElEC,EAAWrN,qBAAWkN,GAsB5B,OApBA9M,qBAAU,WACR,GAAKgN,EAUL,OANIC,GACFA,GAAS,SAACC,GACR,OAAOA,EAAO,KAIX,WACDD,GACFA,GAAS,SAACC,GACR,OAAOA,EAAO,QAInB,CAACD,EAAUD,IAEP,O,6IChEIG,EAAb,wGAGE,SAAmCvE,EAAcwE,GAC/CD,EAAiBE,MAAM/G,IAAIsC,EAAMwE,KAJrC,iCAOE,SAAmCxE,GACjC,OAAOuE,EAAiBE,MAAMjH,IAAIwC,KARtC,4CAWE,SACEA,EACA0E,EACAC,GAEA,IAAIH,EAAQD,EAAiBK,oBAAoB5E,GAC5CwE,IACHA,EAAQ,IAAIK,KAGdL,EAAM9G,IAAIgH,EAAWC,GACrBJ,EAAiBO,oBAAoB9E,EAAMwE,KAtB/C,sCAyBE,SAAwCxE,EAAc0E,GACpD,IAAMF,EAAQD,EAAiBE,MAAMjH,IAAIwC,GACzC,GAAKwE,EAIL,OAAOA,EAAMhH,IAAIkH,KA/BrB,wCAkCE,SAA0C1E,EAAc+E,EAAkBC,GACxE,IAAML,EAAOJ,EAAiBU,yBAAyBjF,EAAM+E,GACxDJ,IAILA,EAAKK,MAAQA,EACbT,EAAiBW,+BAA+BlF,EAAM+E,EAAUJ,MAzCpE,sBA4CE,SACE7L,EACAkH,EACA9C,GAEC,IADDiI,EACA,wDACMT,EAAYU,YAAsB,SACxC3H,IAASC,IAAI5E,EAASkH,EAAM0E,GAC5B,IAAMC,EAAkB,CACtB3E,KAAMA,EACN9C,SAAUA,EACViI,IAAKA,EACLH,OAAO,GAGTT,EAAiBW,+BAA+BlF,EAAM0E,EAAWC,KA3DrE,yBA8DE,SAA2B7L,EAAsBkH,GAC/C,IAAM0E,EAAYjH,IAASD,IAAI1E,EAASkH,GACxC,GAAK0E,EAAL,CAIA,IAAMF,EAAQD,EAAiBK,oBAAoB5E,GAC9CwE,IAILA,EAAMa,OAAOX,GACbH,EAAiBO,oBAAoB9E,EAAMwE,OA1E/C,qBA6EE,SAAsB1L,EAAsBkH,EAAcsF,GACxD,GAAI7H,IAASE,IAAI7E,EAASkH,GAAO,CAC/B,IAAM0E,EAAYjH,IAASD,IAAI1E,EAASkH,GACxC,IAAK0E,EACH,OAGF,IAAMa,EAAUhB,EAAiBU,yBAAyBjF,EAAM0E,GAChE,GAAIa,GACEA,EAAQvF,OAASA,EAAM,CACzB,IAAoB,IAAhBuF,EAAQJ,IAMV,OAAOI,EAAQrI,SAAStD,KAAKY,KAAM8K,GALnC,IAAsB,IAAlBC,EAAQP,MAEV,OADAT,EAAiBiB,2BAA2BxF,EAAM0E,GAAW,GACtDa,EAAQrI,SAAStD,KAAKY,KAAM8K,IAS7C,OAAO,OAnGX,iBA0GE,SAAkBxM,EAAsBkH,EAAcyF,GACpDlB,EAAiBmB,SAAS5M,EAASkH,EAAMyF,GAAU,KA3GvD,iBA8GE,SAAkB3M,EAAsBkH,GACtCuE,EAAiBoB,YAAY7M,EAASkH,OA/G1C,KAAauE,EACJE,MAA6C,IAAII,IAD7CN,EAsGGqB,GAAK,SAAU9M,EAAsBkH,EAAcyF,GAC/DlB,EAAiBmB,SAAS5M,EAASkH,EAAMyF,GAAU,K,g5qBCjHhD,IAAMI,EAAgB,SAACC,GAAD,MAAsBC,WAAyBD,GCIrE,SAASE,EAAcF,EAAkBG,GAC9C,IAAMC,EALD,SAAuBJ,GAC5B,OAAOA,EAASK,MAAM,QAAQ,GAIdC,CAAcN,GAC9B,SAAKI,IAAYD,KAIbC,IAAYD,GAIZC,EAAQG,QAAQJ,IAAQ,G,yBCLxBK,EAAyB,SAAC,GAAsD,IAAD,IAApDC,iBAAoD,MAAxC,GAAwC,EAApCC,EAAoC,EAApCA,KAAoC,IAA9BC,oBAA8B,MAAf,UAAe,EACnF,OACE,sBAAMF,UAAS,mBAAcA,GAA7B,SACE,cAAC,IAAD,CAAKG,IAAKb,EAAcW,GAAOD,UAAWE,OCJ1CE,EAAuC,CAC3C,CACEC,KAAM,EACN5E,KAAM,KACN6E,KAAM,2EACNC,KAAM,UAER,CACEF,KAAM,EACN5E,KAAM,MACN6E,KAAM,iHACNC,KAAM,UAER,CACEF,KAAM,EACN5E,KAAM,KACN6E,KAAM,kBACNC,KAAM,UAER,CACEF,KAAM,EACN5E,KAAM,MACN6E,KAAM,mEACNC,KAAM,WAER,CACEF,KAAM,EACN5E,KAAM,KACN6E,KAAM,oHACNC,KAAM,WAER,CACEF,KAAM,EACN5E,KAAM,MACN6E,KAAM,oDACNC,KAAM,WAER,CACEF,KAAM,EACN5E,KAAM,KACN6E,KAAM,4FACNC,KAAM,WAER,CACEC,UAAU,EACVH,KAAM,EACN5E,KAAM,MACN6E,KAAM,GACNC,KAAM,YAER,CACEC,UAAU,EACVH,KAAM,EACN5E,KAAM,KACN6E,KAAM,kEACNC,KAAM,aAaJE,EAAyC,CAC7C,CACEhH,KAAM,aACNiH,OAAQ,oBACRC,MAAO,sBACPhM,SAAU,eACViM,QAAQ,GAEV,CACEnH,KAAM,cACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,UAC9B6G,MAAO,oBACPhM,SAAU,qBACViM,QAAQ,GAEV,CACEnH,KAAM,YACNiH,OAAQ,oBACRC,MAAO,aACPhM,SAAU,mBACViM,QAAQ,GAEV,CACEnH,KAAM,YACNiH,OAAQ,oBACRC,MAAO,mBACPhM,SAAU,gBACViM,QAAQ,GAEV,CACEnH,KAAM,YACNiH,OAAQ,qBACRC,MAAO,qBACPhM,SAAU,iBACViM,QAAQ,GAEV,CACEnH,KAAM,kBACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,WAC9B6G,MAAO,qBACPhM,SAAU,oBACViM,QAAQ,GAEV,CACEnH,KAAM,kBACNiH,OAAQ,oBACRC,MAAO,wBACPhM,SAAU,oBACViM,QAAQ,GAGV,CACEnH,KAAM,cACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,UAC9B6G,MAAO,sBACPhM,SAAU,eACViM,QAAQ,GAEV,CACEnH,KAAM,YACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,WAC9B6G,MAAO,sBACPhM,SAAU,kBACViM,QAAQ,GAEV,CACEnH,KAAM,aACNiH,OAAQ,oBACRC,MAAO,qBACPhM,SAAU,eACViM,QAAQ,GAEV,CACEnH,KAAM,YACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,UAC9B6G,MAAO,mBACPhM,SAAU,oBACViM,QAAQ,GAEV,CACEnH,KAAM,YACNiH,OAAQ,oBACRC,MAAO,oBACPhM,SAAU,wBACViM,QAAQ,GAEV,CACEnH,KAAM,aACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,QAC9B6G,MAAO,mBACPhM,SAAU,sBACViM,QAAQ,GAEV,CACEnH,KAAM,cACNiH,OAAQ,qBACRC,MAAO,oBACPhM,SAAU,kBACViM,QAAQ,GAEV,CACEnH,KAAM,aACNoH,SAAU,CAACC,MAAO,IAAKhH,MAAO,WAC9B6G,MAAO,qBACPhM,SAAU,aACViM,QAAQ,GAEV,CACEnH,KAAM,eACNiH,OAAQ,qBACRC,MAAO,oBACPhM,SAAU,aACViM,QAAQ,IAING,EAAkC,CACtCV,KAAM,EACN5E,KAAM,KACN6E,KAAM,sCACNC,KAAM,YAWFS,EAAmC,CACvC,CACEC,MAAO,gBACPtQ,YAAa,sBACb4P,KAAM,OACNW,KAAM,kCACNpH,MAAO,WAET,CACEmH,MAAO,kBACPtQ,YAAa,+BACb4P,KAAM,QACNW,KAAM,mCACNpH,MAAO,UAET,CACEmH,MAAO,aACPtQ,YAAa,4BACb4P,KAAM,QACNW,KAAM,wCACNpH,MAAO,WAET,CACEmH,MAAO,gBACPtQ,YAAa,2BACb4P,KAAM,SACNW,KAAM,oCACNpH,MAAO,WAET,CACEmH,MAAO,mBACPtQ,YAAa,+BACb4P,KAAM,SACNW,KAAM,uCACNpH,MAAO,WAET,CACEmH,MAAO,gBACPtQ,YAAa,8BACb4P,KAAM,SACNW,KAAM,iCACNpH,MAAO,QAET,CACEmH,MAAO,cACPtQ,YAAa,0BACb4P,KAAM,WACNW,KAAM,qCACNpH,MAAO,YAULqH,EAA+B,CACnC,CAACC,KAAM,SAAUtH,MAAO,UAAWuH,QAAS,YAAad,KAAM,YAC/D,CAACa,KAAM,UAAWtH,MAAO,SAAUuH,QAAS,eAAgBd,KAAM,SAClE,CAACa,KAAM,SAAUtH,MAAO,UAAWuH,QAAS,kBAAmBd,KAAM,SACrE,CAACa,KAAM,UAAWtH,MAAO,UAAWuH,QAAS,eAAgBd,KAAM,UACnE,CAACa,KAAM,SAAUtH,MAAO,UAAWuH,QAAS,iBAAkBd,KAAM,UACpE,CAACa,KAAM,SAAUtH,MAAO,UAAWuH,QAAS,mBAAoBd,KAAM,SACtE,CAACa,KAAM,UAAWtH,MAAO,UAAWuH,QAAS,gBAAiBd,KAAM,UACpE,CAACa,KAAM,UAAWtH,MAAO,UAAWuH,QAAS,mBAAoBd,KAAM,SACvE,CAACa,KAAM,UAAWtH,MAAO,UAAWuH,QAAS,eAAgBd,KAAM,UACnE,CAACa,KAAM,UAAWtH,MAAO,SAAUuH,QAAS,iBAAkBd,KAAM,UACpE,CAACa,KAAM,UAAWtH,MAAO,SAAUuH,QAAS,qBAAsBd,KAAM,UACxE,CAACa,KAAM,UAAWtH,MAAO,SAAUuH,QAAS,aAAcd,KAAM,Y,+LChR5D7G,EAA+B,CAChC4H,eAAYpP,GAGXqP,EAAY/H,YAAY,CAC1BC,KAAK,OACLC,eACAE,SAAS,CACL4H,QADK,SACG1H,EAAMC,GACVD,EAAMwH,UAAYvH,EAAOC,QACzBiB,QAAQC,IAAI,sBAAuBpB,EAAMwH,WACpB,MAAlBvH,EAAOC,UACPyH,IAAYC,eAAeC,KAAKC,UAAU7H,EAAOC,UACjD5I,SAASyQ,SAASC,WAGzBC,WATK,SASMjI,EAAOC,GACdD,EAAMwH,eAAYpP,M,EAQ1BqP,EAAUtH,QAFVuH,E,EAAAA,QACAO,E,EAAAA,WAGWR,IAAf,Q,mFC5BaS,EAAS,UAAM3I,IAAN,6BAEf,SAAe4I,EAAtB,oC,4CAAO,WAAqBtB,EAAeuB,GAApC,iBAAAC,EAAA,6DACNlH,QAAQC,IAAI,WAQPkH,EAAa,CACfC,SAAS1B,EACTuB,SAASA,GAGZjH,QAAQC,IAAI,WACZD,QAAQC,IAAI,eAAe8G,GAfrB,kBAmBGM,IAAMC,KAAKP,EAAU,oDAAoDI,EAAW,CAACI,QAAQ,CAAE,eAAgB,sBACpHC,MAAK,SAACC,GACLzH,QAAQC,IAAI,UAAWwH,GACvBC,EAAOD,KAERE,OAAM,SAACC,GACN5H,QAAQC,IAAI,eAAgB2H,MAzB3B,cA2BH5H,QAAQC,IAAI,eAAgByH,GA3BzB,kBA4BIA,GA5BJ,yCA+BH1H,QAAQC,IAAI,iBAAZ,MACAD,QAAQC,IAAI,gBAAiByH,GAhC1B,mF,iCCIDG,EAAcC,MAAaC,MAAM,CACrCrC,MAAOoC,MACJpC,MAAM,sBACNsC,IAAI,EAAG,qBACPC,IAAI,GAAI,sBACRC,SAAS,iBACZjB,SAAUa,MACPE,IAAI,EAAG,qBACPC,IAAI,GAAI,sBACRC,SAAS,wBAGRC,EAAgB,CACpBzC,MAAO,GACPuB,SAAU,IASH,SAAUmB,IAAS,IAAD,EACKnT,oBAAS,GADd,mBAClBoT,EADkB,KACTC,EADS,KAEnBC,EAAWC,cACXC,EAASC,YAAU,CACvBP,gBACAQ,iBAAkBd,EAClBe,SAAU,SAACC,EAAD,GAAyC,IAA/BC,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,cAC7BT,GAAW,GACXtN,WAAU,sBAAC,sBAAAkM,EAAA,sEACLF,EAAM6B,EAAOnD,MAAOmD,EAAO5B,UAC5BO,MAAK,SAACwB,GAGL,GAFAV,GAAW,GACXtI,QAAQC,IAAI,UAAU+I,GACX,MAARA,EACD,GAAwB,WAApBA,EAAKA,KAAKC,OACZX,GAAW,GACXS,GAAc,GACdD,EAAUE,EAAKA,KAAKE,YACjB,CACH,IAAI9D,EAAiB,CACnBM,MAAOmD,EAAOnD,MACduB,SAAW4B,EAAO5B,SAClBG,SAAWyB,EAAOnD,MAClByD,KAAO,GACPC,YAAaJ,EAAKA,KAAKE,OAAOG,cAEhCrJ,QAAQC,IAAI,sBAAsBmF,GAClCmD,EAAShC,EAAQnB,IACjBjP,SAASyQ,SAASC,cAGpByB,GAAW,GACXS,GAAc,GACdD,EAAU,gDAIbnB,OAAM,SAAC2B,GACNhB,GAAW,GACXS,GAAc,GACdD,EAAU,6CACV9I,QAAQC,IAAI,WAAWqJ,MAjClB,2CAmCR,QAIP,OACE,uBACEvE,UAAU,aACV6D,SAAUH,EAAOc,aACjBC,YAAU,EACVC,GAAG,uBAJL,UAOE,qBAAK1E,UAAU,oBAAf,SACE,oBAAIA,UAAU,iBAAd,iCAID0D,EAAOiB,OACN,qBAAK3E,UAAU,8BAAf,SACE,qBAAKA,UAAU,8BAAf,SAA8C0D,EAAOiB,WAGvD,yBAIF,sBAAK3E,UAAU,eAAf,UACE,uBAAOA,UAAU,sCAAjB,mBACA,+CACE4E,YAAY,SACRlB,EAAOmB,cAAc,UAF3B,IAGE7E,UAAW8E,YACT,kDACA,CAAC,aAAcpB,EAAOqB,QAAQpE,OAAS+C,EAAOsB,OAAOrE,OACrD,CACE,WAAY+C,EAAOqB,QAAQpE,QAAU+C,EAAOsB,OAAOrE,QAGvDlF,KAAK,QACLhC,KAAK,QACLwL,aAAa,SAEdvB,EAAOqB,QAAQpE,OAAS+C,EAAOsB,OAAOrE,OACrC,qBAAKX,UAAU,+BAAf,SACE,sBAAMkF,KAAK,QAAX,SAAoBxB,EAAOsB,OAAOrE,aAOxC,sBAAKX,UAAU,cAAf,UACE,qBAAKA,UAAU,uCAAf,SACE,qBAAKA,UAAU,yBAAf,SAEE,uBAAOA,UAAU,2CAAjB,4BAIJ,+CACEvE,KAAK,WACLwJ,aAAa,OACTvB,EAAOmB,cAAc,aAH3B,IAIE7E,UAAW8E,YACT,kDACA,CACE,aAAcpB,EAAOqB,QAAQ7C,UAAYwB,EAAOsB,OAAO9C,UAEzD,CACE,WAAYwB,EAAOqB,QAAQ7C,WAAawB,EAAOsB,OAAO9C,cAI3DwB,EAAOqB,QAAQ7C,UAAYwB,EAAOsB,OAAO9C,UACxC,qBAAKlC,UAAU,+BAAf,SACE,qBAAKA,UAAU,gBAAf,SACE,sBAAMkF,KAAK,QAAX,SAAoBxB,EAAOsB,OAAO9C,kBAQ1C,qBAAKpQ,MAAO,CAACqT,UAAU,GAAvB,SACE,4BACE,mBAAGC,KAAK,kCAAkCpI,OAAQ,SAAlD,sCAGJ,qBAAKgD,UAAU,cAAf,SACE,yBACEvE,KAAK,SACLiJ,GAAG,oBACH1E,UAAU,oCACVqF,SAAU3B,EAAO4B,eAAiB5B,EAAO6B,QAJ3C,WAMIjC,GAAW,sBAAMtD,UAAU,kBAAhB,kCACZsD,GACC,uBAAMtD,UAAU,qBAAqBlO,MAAO,CAAC2F,QAAS,SAAtD,kCAEE,sBAAMuI,UAAU,kE,WC1KvB,SAASwF,IAQd,OAPA3U,qBAAU,WAER,OADAO,SAASiD,KAAKoR,UAAU7J,IAAI,YACrB,WACLxK,SAASiD,KAAKoR,UAAUC,OAAO,eAEhC,IAGD,sBACA1F,UAAU,mIADV,UAOA,sBAAKA,UAAU,iEAAf,UAEE,mBAAGoF,KAAK,IAAIpF,UAAU,QAAtB,SACE,qBAAK2F,IAAI,OAAOxF,IAAKb,YAAc,4BAA6BU,UAAU,aAI5E,qBAAKA,UAAU,6DAAf,SACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOC,KAAK,cAAc2F,UAAWvC,IAGrC,cAAC,IAAD,CAAUwC,KAAK,QAAQC,OAAO,EAAMC,GAAG,gBACvC,cAAC,IAAD,CAAUA,GAAG,wBAOnB,qBAAK/F,UAAU,2CAAf,SACE,qBAAKA,UAAU,yCAAf,SACE,sBAAMA,UAAU,qCAAhB,iC,iCC0BSgG,IA5DJC,EACJ,iBADIA,EAEH,kBAFGA,EAGD,oBAHCA,EAII,wBAJJA,EAKC,uBALDA,EAMF,oBAGLC,EAA+B,CACnC7F,UAAMnO,EACNmS,iBAAanS,GAQFiU,EAAUC,YACrB,CAACC,YAAS7N,IAAK,kBAAmB8N,UAAW,CAAC,OAAQ,iBACtD,WAAkF,IAAjFxM,EAAgF,uDAA5DoM,EAAkBnM,EAA0C,uCAC/E,OAAQA,EAAO0B,MACb,KAAKwK,EAAoB,IAAD,EAChB5B,EAAW,UAAGtK,EAAOC,eAAV,aAAG,EAAgBqK,YAEpC,OADApJ,QAAQC,IAAI,yBAAyBmJ,GAC9B,CAACA,cAAahE,UAAMnO,GAG7B,KAAK+T,EACH,OAAOC,EAGT,KAAKD,EAAyB,IAAD,EACrB5F,EAAI,UAAGtG,EAAOC,eAAV,aAAG,EAAgBqG,KAC7B,OAAO,2BAAIvG,GAAX,IAAkBuG,SAGpB,KAAK4F,EAAsB,IAAD,EAClB5F,EAAI,UAAGtG,EAAOC,eAAV,aAAG,EAAgBqG,KAC7B,OAAO,2BAAIvG,GAAX,IAAkBuG,SAGpB,QACE,OAAOvG,MAKFG,GAAU,CACrBgI,MAAO,SAACoC,GAAD,MAA0B,CAAC5I,KAAMwK,EAAmBjM,QAAS,CAACqK,iBAErEkC,OAAQ,iBAAO,CAAC9K,KAAMwK,IACtBO,YAAa,iBAAO,CAClB/K,KAAMwK,IAERQ,YAAa,SAACpG,GAAD,MAAsB,CAAC5E,KAAMwK,EAAwBjM,QAAS,CAACqG,UAC5EmB,QAAS,SAACnB,GAAD,MAAsB,CAAC5E,KAAMwK,EAAqBjM,QAAS,CAACqG,WAGhE,SAAU2F,KAAV,iEACL,OADK,SACCU,YAAWT,EAAD,UAAoB,SAAUU,IAAV,iEAClC,OADkC,SAC5BC,YAAI3M,GAAQuM,eADgB,oCAAUG,OADzC,OAKL,OALK,SAKCD,YAAWT,EAAD,UAAuB,SAAUY,IAAV,iEACrC,OADqC,SAC/BD,YAAI3M,GAAQuM,eADmB,oCAAUK,OAL5C,uCChEA,SAASC,KACd,IAAMtD,EAAWC,cAOjB,OANA5S,qBAAU,WACR2S,EAASzB,OAAW7P,IACpB6U,aAAaC,QACb5V,SAASyQ,SAASC,WACjB,CAAC0B,IAGF,cAAC,IAAD,UACE,cAAC,IAAD,CAAUuC,GAAG,kBCVnB,IAyCekB,GAxCGC,aADD,SAACpN,GAAD,MAAuB,CAACqN,KAAMrN,EAAMqN,QACjBA,GAwCrBF,EArCsB,SAACG,GACpC,IAAMC,EAAaC,kBAAO,GACpB9D,EAAWC,cAF6B,EAGEvT,oBAAS,GAHX,mBAGrBqX,GAHqB,WAIxClD,EAAcmD,aAAuB,qBAAEL,KAAe9C,cAAaoD,KA8BzE,OA3BA5W,qBAAU,WAiBJwT,EAhBa,uCAAG,sBAAAlC,EAAA,sDAClB,IACOkF,EAAW1H,QAEhB,MAAO4E,GACPtJ,QAAQsJ,MAAMA,GACT8C,EAAW1H,SACd6D,EAAS4D,EAAMb,UANnB,QASEgB,GAAoB,GAVJ,0BAaX,kBAAOF,EAAW1H,SAAU,KAbjB,2CAAH,oDAiBf6G,IAEAhD,EAAS4D,EAAMb,UACfgB,GAAoB,MAGrB,IAGI,mCAAGH,EAAMnX,c,sGCTDyX,IAlBJC,GAAcC,YAAgB,CACzCT,KAAMA,EACNU,YAAYC,EACZC,oBAAoBC,KACpBC,oBAAoBC,KACpBC,2BAA2BC,KAC3BC,+BAA+BC,KAC/BC,2BAA2BC,KAC3BC,sBAAsBC,KACtBC,sBAAsBC,KACtBC,sBAAsBC,KACtBC,8BAA8BC,OAOzB,SAAUtB,KAAV,iEACL,OADK,SACCuB,YAAI,CAAC9B,OADN,wCC7BP,IAAM+B,GAAiBC,cACjBC,GAAU,sBACXC,YAAqB,CACtBC,gBAAgB,EAChBC,mBAAmB,EACnBC,OAAO,KAJK,CAMdN,KAGIhL,GAAQuL,YAAe,CAC3BtD,QAASwB,GACTyB,cACAM,UAAUlK,EACVmK,UAAW,CAACC,gBASDC,GAAYC,YAAa5L,IAEtCgL,GAAea,IAAIrC,IAEJxJ,U,mBC/BT8L,GAAkBxK,2IAAYyK,2BAA6B,aAK3DvQ,GAAsB,CAC1BwQ,aAAc,MAqBhB,IAAMC,GAAc1a,wBAAqBiK,IAMnC0Q,GAA2B,SAAC,GAAgB,IAAfna,EAAc,EAAdA,SAC3Boa,EAzBR,WACE,IAAMC,EAAKvD,aAAawD,QAAQP,IAChC,GAAIM,EACF,IACE,OAAO3I,KAAK6I,MAAMF,GAClB,MAAOG,GACPxP,QAAQsJ,MAAMkG,GAGlB,OAAO/Q,GAgBMgR,GACb,OAAO,cAACP,GAAY5Z,SAAb,CAAsBF,MAAOga,EAA7B,SAAoCpa,K,UCnBvC0a,I,iDAAc,CAClBC,G,OACAC,G,OACAC,G,OACAC,G,OACAC,G,OACAC,G,SAGIC,GAAmB,SAAC,GAAgB,IAAfjb,EAAc,EAAdA,SACnBkb,EDIC1a,qBAAW0Z,IAAaD,aCHzBkB,EAAWT,GAAYQ,GAE7B,OACE,cAAC,KAAD,CAAcA,OAAQA,EAAQC,SAAUA,EAAxC,SACGnb,K,SC7BDob,GAAa,WAAO,IACjBC,EAAWC,uBAAXD,QACP,OACE,qBAAKtL,UAAU,oCAAoC0E,GAAG,YAAtD,SAEE,qBACE1E,UAAS,UAAKsL,EAAQE,gBAAb,8EADX,SAIE,sBAAKxL,UAAU,+BAAf,UACE,uBAAMA,UAAU,0BAAhB,WAA2C,IAAIyL,MAAOC,cAAtD,WACA,mBAAGtG,KAAK,IAAIpF,UAAU,mCAAtB,6B,gBCbG2L,GAAb,0FAOE,SAAkBlS,GAChB,IAAIvG,EAAU9B,SAASwa,OAAOC,MAC5B,IAAIC,OAAO,WAAarS,EAAKpI,QAAQ,+BAAgC,QAAU,aAEjF,OAAO6B,EAAU6Y,mBAAmB7Y,EAAQ,SAAMhB,IAXtD,iBAuBE,SAAkBuH,EAAcpJ,EAAkC2b,GAChE,IAAMC,EAAO,aACXhM,KAAM,KAEH+L,GAGDC,EAAQC,mBAAmBT,OAC7BQ,EAAQC,QAAUD,EAAQC,QAAQC,eAGpC,IAAIC,EAAgBC,mBAAmB5S,GAAQ,IAAM4S,mBAAmBhc,GAExE,IAAK,IAAIic,KAAaL,EAAS,CAC7BG,GAAiB,KAAOE,EACxB,IAAIC,EAAcN,EAAQK,IACN,IAAhBC,IACFH,GAAiB,IAAMG,GAI3Bnb,SAASwa,OAASQ,IA5CtB,oBAoDE,SAAqB3S,GACnBkS,EAAgBxU,IAAIsC,EAAM,GAAI,CAC5B,WAAY,QAtDlB,K,QCkBM+S,GAAsC,CAC1CC,SAAS,EACTC,UAAW,SACXC,aAAc,iBACdC,UAAW,OAGPC,G,WAWJ,WAAYC,EAAuBb,GAAyB,IAAD,iCAV3D1Z,aAU2D,OAT3Dwa,eAAqC,KASsB,KAR3DC,cAAoC,KAQuB,KAP3Df,aAO2D,OAN3DgB,iBAM2D,OAL3DxT,KAAe,GAK4C,KAJ3DyT,OAAiB,EAI0C,KAH3DC,UAAoB,EAGuC,KAF3DC,aAAmC,KAEwB,KAgBnDC,UAAY,WAClB,IAAMC,EAAW,EAAKC,WAAW,UAC3BC,EAAU,EAAKD,WAAW,SAEf,OAAbD,GAAqBA,EAAS3a,OAAS,GACzC8a,uBAAoBpO,GAAGjO,SAASiD,KAAMiZ,EAAU,SAAS,SAACvO,GACxDA,EAAE2O,iBACF,EAAKV,cAAgB5b,SAASuc,eAAeL,GAC7C,EAAKM,aAIO,OAAZJ,GAAoBA,EAAQ7a,OAAS,GACvC8a,uBAAoBpO,GAAGjO,SAASiD,KAAMmZ,EAAS,SAAS,SAACzO,GACvDA,EAAE2O,iBACF,EAAKN,aAAehc,SAASuc,eAAeH,GAE5C,EAAKK,YAjCgD,KAsCnDC,QAAU,WAChB,IAAM3Y,EAAQ4Y,OAAO,EAAKR,WAAW,UAC/BX,EAAYmB,OAAO,EAAKR,WAAW,cAGnCS,EAAe,EAAKzb,QAAQkT,UAAUwI,SAAvB,UAAmC,EAAKhC,QAAQS,UAAhD,QACfwB,EAAiBH,OAAO3c,SAASiD,KAAKxC,aAAd,yBAA6C,EAAK4H,KAAlD,OAG5B,EAAKyT,OADc,IAAjBc,GAA4C,OAAnBE,GAOO,IAAhC,EAAKX,WAAW,aAClB,EAAKhb,QAAQkT,UAAU7J,IAAI,EAAKqQ,QAAQS,WACxC,EAAKna,QAAQkT,UAAU7J,IAAvB,UAA8B,EAAKqQ,QAAQS,UAA3C,YAAwDE,IACxD5V,oBAAiBG,IAAI,EAAK5E,QAAS,QAAS4C,GAAO,GAEnD,EAAKgY,UAAYvY,SAASO,KAE1B6B,oBAAiBG,IAAI,EAAK5E,QAAS,QAAS,IAC5C,EAAKA,QAAQkT,UAAUC,OAAO,EAAKuG,QAAQS,WAC3C,EAAKna,QAAQkT,UAAUC,OAAvB,UAAiC,EAAKuG,QAAQS,UAA9C,YAA2DE,IAC3D,EAAKiB,UA/DkD,KAmEnDN,WAAa,SAAC9T,GACpB,IAAM0U,EAAO,EAAK5b,QAAQV,aAAb,yBAA4C4H,IACzD,GAAI0U,EAAM,CACR,IAAI9d,EAAQ8H,yCAA8BgW,GAC1C,OAAc,OAAV9d,GAAoC,SAAlB0d,OAAO1d,KAGb,OAAVA,GAAoC,UAAlB0d,OAAO1d,KAKxBA,EAEP,IAAM+d,EAAaC,8BAAmB5U,GAChC6U,EAAS7V,uCAA4B,EAAKwT,QAASmC,GACzD,OAAIE,EACKnW,yCAA8BmW,GAE9B,MAtF8C,KA2FnDV,QAAU,YACmD,IAA/D5P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,sBAIvC,EAAK2a,MACP,EAAKW,QAEL,EAAKW,QAGPxQ,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBAtGkB,KAyGnDsb,MAAQ,YACmD,IAA7D7P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBAI3C,EAAK2a,OAAQ,EACb,EAAKuB,iBACLrd,SAASiD,KAAKqa,gBAAd,yBAAgD,EAAKjV,OACrDrI,SAASiD,KAAKqa,gBAAd,kBACA,EAAKnc,QAAQkT,UAAUC,OAAvB,UAAiC,EAAKuG,QAAQS,UAA9C,QAC0B,MAAtB,EAAKM,eACP,EAAKA,cAAcvH,UAAUC,OAAO,UAGtC1H,oBAAiBuQ,QAAQ,EAAKhc,QAAS,4BAvHkB,KA0HnDic,MAAQ,YACmD,IAA7DxQ,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBAI3C,EAAK2a,OAAQ,EACb,EAAKyB,iBACLvd,SAASiD,KAAKlC,aAAd,yBAA6C,EAAKsH,MAAQ,MAC1DrI,SAASiD,KAAKlC,aAAa,iBAAkB,MAC7C,EAAKI,QAAQkT,UAAU7J,IAAvB,UAA8B,EAAKqQ,QAAQS,UAA3C,QAC2B,OAAvB,EAAKM,eACP,EAAKA,cAAcvH,UAAU7J,IAAI,UAGnCoC,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBAxIkB,KA2InDoc,eAAiB,WACvB,IAAmC,IAA/B,EAAKpB,WAAW,WAAqB,CACvC,EAAKR,eAAiB3b,SAASwd,cAAc,OAC7C,IAAMC,EAAgB9d,kBAAO,EAAKwB,QAAS,WAC3C,GAAIsc,EAAe,CACjB,IAAMC,EAAgBla,SAASia,GAAiB,EAChD7X,oBAAiBG,IAAI,EAAK4V,eAAgB,UAAW+B,GAEvD1d,SAASiD,KAAK0a,OAAO,EAAKhC,gBAC1B,IAAMiC,EAAqB,EAAKzB,WAAW,iBACvCyB,GACF,EAAKjC,eAAetH,UAAU7J,IAAIoT,EAAmBle,YAEvD,EAAKic,eAAekC,iBAAiB,SAAS,SAAClQ,GAC7CA,EAAE2O,iBACF,EAAKG,aA1JgD,KA+JnDY,eAAiB,WACK,OAAxB,EAAK1B,gBAA2B,EAAKA,eAAeva,YACtD,EAAKua,eAAeva,WAAW0c,YAAY,EAAKnC,iBAjKO,KAqKnDoC,cAAgB,WACtB,MAAgD,SAAzCpB,OAAO,EAAKR,WAAW,cAA2B,OAAS,SAtKT,KAyKnD6B,UAAY,WAClB,IAAIja,EAAQ,EAAKoY,WAAW,SAK5B,OAJIpY,GAAmB,SAAVA,IACXA,EAAQpE,kBAAO,EAAKwB,QAAS,UAGxB4C,GA/KkD,KAqLpDka,OAAS,WACd,EAAKzB,WAtLoD,KAyLpD0B,KAAO,WACZ,EAAKd,SA1LoD,KA6LpDe,KAAO,WACZ,EAAK1B,SA9LoD,KAiMpD2B,QAAU,WACf,OAAO,EAAKtC,OAlM6C,KAqMpDuC,OAAS,WACd,EAAK3B,WAtMoD,KAyMpD4B,UAAY,WACjB,OAAO,EAAKnd,SA1M6C,KA8MpD8M,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IA/MU,KAkNpDJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IAnNS,KAsNpD2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IAvNe,KA0NpD8U,QAAU,SAAC9U,EAAcmW,GAC9B,OAAO5R,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,EAAMmW,IA1NpD3b,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAOtD,GAAsBP,GACnDhY,KAAKgZ,YAAcpO,iCAAsB,UACzC5K,KAAK8Y,eAAiB,KACtB9Y,KAAKwF,KAAOxF,KAAK1B,QAAQV,aAAa,wBAA0B,GAChEoC,KAAKiZ,OAAQ,EACbjZ,KAAK+Y,cAAgB,KAErB/Y,KAAKoZ,YAELpZ,KAAK6Z,UAEL5W,YAASC,IAAIlD,KAAK1B,QAAS,SAAU0B,M,yDAyOvC,SAA8BpB,GACXzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAACxd,GAChB,IAAM4B,EAAO5B,EACTyd,EAASnD,EAAgBoD,YAAY9b,GACpC6b,IACHA,EAAS,IAAInD,EAAgB1Y,EAAMqY,KAErCwD,EAAOT,Y,gCAoBX,WAEEna,OAAO6Z,iBAAiB,UAAU,WAEhCpZ,oBADIC,WAGF,WAEmB1E,SAASiD,KAAKH,iBAAiB,2BACvC6b,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACPkf,EAAWrD,EAAgBoD,YAAY9b,GACzC+b,GACFA,EAAST,cAIf,Y,KA9SF5C,GA0OUsD,WAAa,SAAC5d,GAC1B,OAAO2E,YAASE,IAAI7E,EAAS,WA3O3Bsa,GA8OUoD,YAAc,SAAC1d,GAC3B,OAAO2E,YAASD,IAAI1E,EAAS,WA/O3Bsa,GAkPUuD,QAAU,WACDlZ,YAASmZ,qBAAqB,UACtCN,SAAQ,SAACO,GACpBA,EAAGf,WArPH1C,GAyPU0D,UAAY,WACHrZ,YAASmZ,qBAAqB,UACtCN,SAAQ,SAACO,GACpBA,EAAGb,aA5PH5C,GA8QU2D,cAAgB,WAE5B/C,uBAAoBpO,GAAGjO,SAASiD,KAAM,kCAAmC,SAAS,WAEhF,IAAM9B,EAlRNsa,GAkRqB4D,QAAQ,2BAC7B,GAAIle,EAAS,CACX,IAAMyd,EAASnD,GAAgBoD,YAAY1d,GACvCyd,GAAUA,EAAOR,WACnBQ,EAAOT,YAtRX1C,GAmTU6D,UAAY,WACxB7D,GAAgB8D,gBAAgB,2BAChC9D,GAAgB+D,qBAChB/D,GAAgB2D,iBAtTd3D,GAyTUgE,iBAAmB,WAC/BhE,GAAgB8D,gBAAgB,2BAChC9D,GAAgBuD,UAChBvD,GAAgB0D,YAChB1D,GAAgB2D,iBCzUpB,ICDMM,GAA2B,GAE3BC,GAA+C,CACnDC,cAAe,cACfC,cAAe,wBACfC,WAAY,qBACZC,aAAc,uBACdC,YAAa,wCACbC,YAAa,wCACbC,YAAa,wBAGTC,G,WAaJ,WAAYzE,EAAuB0E,EAA8BC,GAA+B,IAAD,iCAZ/Flf,aAY+F,OAX/Fmf,kBAW+F,OAV/FC,oBAU+F,OAT/FC,mBAS+F,OAR/FC,mBAQ+F,OAP/FC,mBAO+F,OAN/F3R,IAAc,GAMiF,KAL/F8L,aAK+F,OAJ/F8F,aAI+F,OAH/FC,SAG+F,OAF/F3hB,MAAgB,GAE+E,KAmCvF4hB,QAAU,SAAClT,GAGjB,GAFAA,EAAE2O,iBAEwB,OAAtB,EAAKgE,cAAyB,EAAKA,aAAaQ,OAAS,EAAKR,aAAaQ,MAAM,GAAI,CAEvF,IAA0E,IAAtElU,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBAAwBwM,GACjE,OAGF,IAAMoT,EAAS,IAAIC,WAEnBD,EAAOE,OAAS,SAACtT,GACX,EAAK4S,gBAAkB5S,EAAE/B,QAC3B,EAAK2U,eAAe7f,MAAMwgB,YAAY,mBAAtC,eAAkEvT,EAAE/B,OAAO5G,OAA3E,QAIJ+b,EAAOI,cAAc,EAAKb,aAAaQ,MAAM,IAC7C,EAAK3f,QAAQkT,UAAU7J,IAAI,uBAC3B,EAAKrJ,QAAQkT,UAAUC,OAAO,qBAG9B1H,oBAAiBuQ,QAAQ,EAAKhc,QAAS,wBAAyBwM,KAzD2B,KA6DvFyT,QAAU,SAACzT,GACjBA,EAAE2O,kBAGwE,IAAtE1P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBAAwBwM,KAInE,EAAKxM,QAAQkT,UAAUC,OAAO,uBAC9B,EAAKnT,QAAQkT,UAAUC,OAAO,qBAC9B,EAAKnT,QAAQT,MAAMwgB,YAAY,mBAAoB,EAAKnS,KACpD,EAAKuR,eACP,EAAKA,aAAarhB,MAAQ,IAGD,OAAvB,EAAKyhB,gBACP,EAAKA,cAAczhB,MAAQ,KAI7B2N,oBAAiBuQ,QAAQ,EAAKhc,QAAS,yBAA0BwM,KAjF4B,KAoFvF0T,QAAU,SAAC1T,GACjBA,EAAE2O,kBAGwE,IAAtE1P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBAAwBwM,KAInE,EAAKxM,QAAQkT,UAAUC,OAAO,uBAC9B,EAAKnT,QAAQkT,UAAU7J,IAAI,qBACvB,EAAK+V,gBACP,EAAKA,eAAe7f,MAAMwgB,YAAY,mBAAoB,QAGxD,EAAKZ,eACP,EAAKA,aAAarhB,MAAQ,IAGD,OAAvB,EAAKyhB,gBACP,EAAKA,cAAczhB,MAAQ,KAI7B2N,oBAAiBuQ,QAAQ,EAAKhc,QAAS,wBAAyBwM,KA3G6B,KA0HxFM,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IA3H8C,KA8HxFJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IA/H6C,KAkIxF2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IAnImD,KAsIxF8U,QAAU,SAAC9U,EAAcmW,GAC9B,OAAO5R,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,EAAMmW,IArIpD3b,KAAKgY,QAAU4D,OAAOC,OAAOgB,GAA0BU,GACvDvd,KAAK8d,QAAUN,EACfxd,KAAK+d,IAAMnT,iCAAsB5K,KAAK8d,QAAQf,eAG9C/c,KAAK1B,QAAUua,EACf7Y,KAAKyd,aAAezd,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQb,YAC5Djd,KAAK0d,eAAiB1d,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQZ,cAC9Dld,KAAK2d,cAAgB3d,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQX,aAC7Dnd,KAAK4d,cAAgB5d,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQV,aAC7Dpd,KAAK6d,cAAgB7d,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQT,aACzDrd,KAAK0d,iBACP1d,KAAKkM,IAAMpP,kBAAOkD,KAAK0d,eAAgB,oBAIzC1d,KAAK0e,WAELzb,YAASC,IAAIlD,KAAK1B,QAAS0B,KAAK8d,QAAQf,cAAe/c,M,6CAGzD,WACEA,KAAK1B,QAAQ0c,iBAAiB,SAAUhb,KAAKge,SACzChe,KAAK2d,eACP3d,KAAK2d,cAAc3C,iBAAiB,QAAShb,KAAKue,SAGhDve,KAAK4d,eACP5d,KAAK4d,cAAc5C,iBAAiB,QAAShb,KAAKue,W,6BAmFtD,WACE,OAAOve,KAAKyd,e,wBAGd,WACE,OAAOzd,KAAK1B,Y,KAnIVgf,GAwJUtB,YAAc,SAC1Bjf,GAEI,IADJggB,EACG,uDADqBD,GAAyBC,cAE3C4B,EAAa1b,YAASD,IAAIjG,EAAIggB,GACpC,OAAI4B,GAIG,MAjKLrB,GAoKUZ,gBAAkB,WAI1B,IAHJ9d,EAGG,uDAHgBke,GAAyBE,cAC5ChF,EAEG,uDAF2B6E,GAC9BiB,EACG,uDAD2BhB,GAExB8B,EAAWzhB,SAASiD,KAAKH,iBAAiBrB,GAChDggB,EAAS9C,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACT4hB,EAAarB,GAAoBtB,YAAY9b,GAC5Cye,IACHA,EAAa,IAAIrB,GAAoBpd,EAAM8X,EAAS8F,QA9KtDR,GAmLUuB,cAAgB,WAIS,IAHrCjgB,EAGoC,uDAHjBke,GAAyBE,cAC5ChF,EAEoC,uDAFN6E,GAC9BiB,EACoC,uDADNhB,GAExBxe,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACTqgB,EAAarB,GAAoBtB,YAAY9b,GAIjD,OAHKye,IACHA,EAAa,IAAIrB,GAAoBpd,EAAM8X,EAAS8F,IAE/Ca,IAjMLrB,GAoMUb,UAAY,WAAgE,IAA/D7d,EAA8D,uDAA3Cke,GAAyBE,cACrEM,GAAoBZ,gBAAgB9d,IArMlC0e,GAwMUV,iBAAmB,WAAgE,IAA/Dhe,EAA8D,uDAA3Cke,GAAyBE,cAC5EM,GAAoBZ,gBAAgB9d,IClNxC,IAAMkgB,GAAsC,CAC1CC,WAAW,GAGPC,G,WAKJ,WAAYnG,EAAuBb,GAAyB,IAAD,iCAJ3D1Z,aAI2D,OAH3D0Z,aAG2D,OAF3DvH,QAE2D,OASnDwO,UAAY,SAACzZ,GACnB,IAA4D,IAAxD,EAAKlH,QAAQ4gB,aAAa,kBAAoB1Z,GAAgB,CAChE,IAAM0U,EAAO,EAAK5b,QAAQV,aAAa,kBAAoB4H,IAAS,GAChEpJ,EAAiC8H,yCAA8BgW,GAOnE,OANc,OAAV9d,GAAoC,SAAlB0d,OAAO1d,GAC3BA,GAAQ,EACW,OAAVA,GAAoC,UAAlB0d,OAAO1d,KAClCA,GAAQ,GAGHA,EAEP,IAAM+d,EAAaC,8BAAmB5U,GAChC6U,EAAS7V,uCAA4B,EAAKwT,QAASmC,GACzD,OAAIE,EACKnW,yCAA8BmW,GAE9B,MA1B8C,KA+BnD8E,cAAgB,WACtB,OAAI,EAAKF,UAAU,UACV,SAEL,EAAKA,UAAU,cACV,aAEL,EAAKA,UAAU,cACV,kBADT,GAtCyD,KA2CnDG,cAAgB,WACtB,IAAI/d,EAA0BJ,yBAAcI,OACtCge,EAAe,EAAKJ,UAAU,gBAC9BK,EAAW,EAAKL,UAAU,YAC1BM,EAAS,EAAKN,UAAU,UAG9B,GAAqB,OAAjBI,EAAuB,CACzB,IAAMT,EAAWzhB,SAAS8C,iBAAiBof,GAC3C,GAAIT,GAAYA,EAASlgB,OAAS,EAChC,IAAK,IAAID,EAAI,EAAG+gB,EAAMZ,EAASlgB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CACnD,IAAMH,EAAUsgB,EAASngB,GACzB,IAAkC,IAA9BkD,4BAAiBrD,GAArB,CAIA+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,WAC3C+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,eAC3C+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,kBAE3C,IAAMmhB,EAAY3iB,kBAAOwB,EAAS,cAC9BmhB,IACFpe,GAAkBV,SAAS8e,IAG7B,IAAMC,EAAe5iB,kBAAOwB,EAAS,iBACjCohB,IACFre,GAAkBV,SAAS+e,MAOnC,GAAiB,OAAbJ,EAAmB,CACrB,IAAIV,EAAWzhB,SAAS8C,iBAAiBqf,GACzC,GAAIV,GAAYA,EAASlgB,OAAS,EAChC,IAAK,IAAID,EAAI,EAAG+gB,EAAMZ,EAASlgB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CACnD,IAAMH,EAAUsgB,EAASngB,GAEzB,GAAKkD,4BAAiBrD,GAAtB,CAIA+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,eAC3C+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,kBAC3C+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,gBAC3C+C,GAAkBV,SAAS7D,kBAAOwB,EAAS,mBAE3C,IAAMmhB,EAAY3iB,kBAAOwB,EAAS,cAC9BmhB,IACFpe,GAAkBV,SAAS8e,IAG7B,IAAMC,EAAe5iB,kBAAOwB,EAAS,iBACjCohB,IACFre,GAAkBV,SAAS+e,MAOpB,OAAXH,IACFle,GAAkBV,SAAS4e,IAG7Ble,GAAkBV,SAAS7D,kBAAO,EAAKwB,QAAS,eAChD+C,GAAkBV,SAAS7D,kBAAO,EAAKwB,QAAS,kBAEhD,IAAMmhB,EAAY3iB,kBAAO,EAAKwB,QAAS,cACnCmhB,IACFpe,GAAkBV,SAAS8e,IAG7B,IAAMC,EAAe5iB,kBAAO,EAAKwB,QAAS,iBAO1C,OANIohB,IACFre,GAAkBV,SAAS+e,IAG7Bre,EAASyY,OAAOzY,GAAU,MA3H+B,KAgInDse,YAAc,WACpB,IAAIte,EAAS,EAAKue,YACdC,EAAa,EAAKV,gBAGP,OAAX9d,GAAmBA,EAAO3C,OAAS,EACrCqE,oBAAiBG,IAAI,EAAK5E,QAASuhB,EAAYxe,GAE/C0B,oBAAiBG,IAAI,EAAK5E,QAASuhB,EAAY,KAxIQ,KA4InDC,WAAa,WACnB,IAAqC,IAAjC,EAAKb,UAAU,eAA0B,EAAKxO,GAAI,CACpD,IAAMkH,EAASD,GAAgB1U,IAAI,EAAKyN,GAAK,MAC7C,GAAIkH,EAAQ,CACV,IAAIoI,EAAMpf,SAASgX,GAEfoI,EAAM,IACR,EAAKzhB,QAAQ0C,UAAY+e,MAnJ0B,KAyJnDC,mBAAqB,YACU,IAAjC,EAAKf,UAAU,eAA0B,EAAKxO,GAChD,EAAKnS,QAAQ0c,iBAAiB,SAAU,EAAKiF,eAE7C,EAAK3hB,QAAQ4hB,oBAAoB,SAAU,EAAKD,gBA7JO,KAiKnDA,cAAgB,WACtB,IAAME,EAAW,EAAK1P,GAAK,KAC3BiH,GAAgBxU,IAAIid,EAAU,EAAK7hB,QAAQ0C,UAAW,KAnKG,KAsKnDof,qBAAuB,WAC7B,EAAK9hB,QAAQ4hB,oBAAoB,SAAU,EAAKD,gBAvKS,KA0KnDI,YAAc,WACpB,IAAMC,EAAY,EAAKnB,gBACnBmB,GACFvd,oBAAiBG,IAAI,EAAK5E,QAASgiB,EAAW,KA7KS,KAoLpD9E,OAAS,YAGmB,IAA/B,EAAKyD,UAAU,aACd,EAAK3gB,QAAQ4gB,aAAa,4BAM3B,EAAKmB,cACL,EAAKD,yBALL,EAAKT,cACL,EAAKK,qBACL,EAAKF,eA5LkD,KAmMpDF,UAAY,WACjB,IAAMC,EAAa,EAAKV,gBAClB9d,EAAS,EAAK4d,UAAUY,GAAc,IAC5C,OAAIxe,aAAkBkf,SACblf,EAAOjC,KAAKiC,GACC,OAAXA,GAAqC,kBAAXA,GAAgD,SAAzBA,EAAOhE,cAC1D,EAAK+hB,gBAEL/d,GA3MgD,KA+MpDmf,WAAa,WAClB,OAAO,EAAKliB,SA/MZ0B,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAOiD,GAAsB9G,GACnDhY,KAAKyQ,GAAKzQ,KAAK1B,QAAQV,aAAa,OAAS,GAC7CoC,KAAKwb,SAELvY,YAASC,IAAIlD,KAAK1B,QAAS,SAAU0B,M,oDA8MvC,SAAyB1B,GACvB,OAAO2E,YAASE,IAAI7E,EAAS,Y,yBAG/B,SAA0BA,GACxB,GAAgB,OAAZA,GAAoB0gB,EAAgB9C,WAAW5d,GACjD,OAAO2E,YAASD,IAAI1E,EAAS,Y,6BAKjC,SAA8BM,GACXzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAACxd,GAChB,IAAM4B,EAAO5B,EACTmiB,EAASzB,EAAgBhD,YAAY9b,GACpCugB,IACHA,EAAS,IAAIzB,EAAgB9e,EAAM4e,U,wBAKzC,c,uBAEA,WAAmE,IAA3C5E,EAA0C,uDAA3B,0BACrC8E,EAAgBtC,gBAAgBxC,GAChC8E,EAAgB0B,W,8BAclB,WAA0E,IAA3CxG,EAA0C,uDAA3B,0BAC5C8E,EAAgBtC,gBAAgBxC,K,oBAGlC,WAEE/Y,OAAO6Z,iBAAiB,UAAU,WAEhCpZ,oBADIC,WAGF,WAEmB1E,SAASiD,KAAKH,iBAAiB,2BACvC6b,SAAQ,SAACxd,GAChB,IAAM2d,EAAW+C,EAAgBhD,YAAY1d,GACzC2d,GACFA,EAAST,cAIf,Y,KArRFwD,GAsPU2B,eAAiB,SAC7BriB,GAEiC,IADjC0Z,EACgC,uDADP8G,GAErB2B,EAASzB,GAAgBhD,YAAY1d,GAIzC,OAHKmiB,IACHA,EAAS,IAAIzB,GAAgB1gB,EAAS0Z,IAEjCyI,GCnQX,IAAMG,GAA6C,CACjDrB,OAAQ,IACR9c,MAAO,KAGHoe,GAKJ,WAAYhI,EAAuBb,GAA6B,IAAD,iCAJ/D1Z,aAI+D,OAH/D0Z,aAG+D,OAF/DgB,iBAE+D,OAYvDI,UAAY,WAElBjY,OAAO6Z,iBAAiB,UAAU,WAChCpZ,oBAFEC,WAEc,WACd,EAAKif,gBAIT,EAAKxiB,QAAQ0c,iBAAiB,SAAS,SAAClQ,GACtCA,EAAE2O,iBACF,EAAKsH,UAtBsD,KA0BvDD,QAAU,WAChB,IAAMvB,EAAS5e,SAAS,EAAK2Y,WAAW,WAC5BzY,0BACF0e,EACHpiB,SAASiD,KAAK8e,aAAa,sBAC9B/hB,SAASiD,KAAKlC,aAAa,oBAAqB,MAG9Cf,SAASiD,KAAK8e,aAAa,sBAC7B/hB,SAASiD,KAAKqa,gBAAgB,sBAnC2B,KAwCvDsG,IAAM,WACZ,IAAMte,EAAQ9B,SAAS,EAAK2Y,WAAW,UACvClW,sBAAmBpC,UAAU,EAAGyB,IA1C6B,KA6CvD6W,WAAa,SAAC9T,GACpB,IAAM0U,EAAO,EAAK5b,QAAQV,aAAb,4BAA+C4H,IAC5D,GAAI0U,EAAM,CACR,IAAM9d,EAAQ8H,yCAA8BgW,GAC5C,OAAiB,OAAV9d,GAAoC,SAAlB0d,OAAO1d,GAGlC,IAAM+d,EAAaC,8BAAmB5U,GAChC6U,EAAS7V,uCAA4B,EAAKwT,QAASmC,GACzD,OAAIE,EACKnW,yCAA8BmW,GAGhC,MA1DsD,KAkExD2G,GAAK,WACV,OAAO,EAAKD,OAnEiD,KAsExDP,WAAa,WAClB,OAAO,EAAKliB,SAtEZ0B,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAO+E,GAAyB5I,GACtDhY,KAAKgZ,YAAcpO,iCAAsB,aAGzC5K,KAAKoZ,YAGLnW,YAASC,IAAIlD,KAAK1B,QAAS,YAAa0B,OAdtC6gB,GAgFU7E,YAAc,SAACjf,GAC3B,IAAMiE,EAAYiC,YAASD,IAAIjG,EAAI,aACnC,OAAIiE,GAIG,MAtFL6f,GAyFUnE,gBAAkB,SAAC9d,GACdzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACTiE,EAAY6f,GAAmB7E,YAAY9b,GAC1Cc,IACHA,EAAY,IAAI6f,GAAmB3gB,EAAM0gB,SA/F3CC,GAoGUhC,cAAgB,SAC5BjgB,GAEoC,IADpCoZ,EACmC,uDADN4I,GAEvBtiB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACT0C,EAAY6f,GAAmB7E,YAAY9b,GAI/C,OAHKc,IACHA,EAAY,IAAI6f,GAAmB3gB,EAAM8X,IAEpChX,IAjHL6f,GAoHUpE,UAAY,WACxBoE,GAAmBnE,gBAAgB,+BArHjCmE,GAwHUjE,iBAAmB,WAC/BiE,GAAmBnE,gBAAgB,+BAzHjCmE,GA4HUI,MAAQ,WACpB7d,sBAAmBpC,UAAU,EAAG4f,GAAwBne,QChI5D,IAAMye,GAAyC,CAC7CC,WAAY,EACZC,WAAW,EACXC,eAAgB,OAChBC,mBAAoB,wDACpBC,uBAAwB,wDAGpBC,G,WAYJ,WAAY3I,EAAuBb,GAA2B,IAAD,mCAX7D1Z,aAW6D,OAV7D0Z,aAU6D,OAT7DgB,iBAS6D,OAR7DyI,WAQ6D,OAP7DC,aAO6D,OAN7DC,aAM6D,OAL7DC,eAK6D,OAJ7DC,iBAA2B,EAIkC,KAH7DC,gBAA0B,EAGmC,KAF7DC,iBAA2B,EAEkC,KA4BrDC,MAAQ,SAACC,GACflY,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBAEnC2jB,IAAU,EAAKF,kBAAoBE,EAAQ,EAAKJ,kBAAoBI,EAAQ,IAKhFA,EAAQthB,SAASshB,EAAMplB,YAEvB,EAAKilB,gBAAkB,EAAKC,iBAC5B,EAAKA,iBAAmBE,EAGxB,EAAKC,YAELnY,oBAAiBuQ,QAAQ,EAAKhc,QAAS,wBA5CoB,KA+CrD6jB,aAAe,WAAO,IAAD,IAC3B,YAAKT,eAAL,SAAc1G,iBAAiB,SAAS,SAAClQ,GACvCA,EAAE2O,iBAEF1P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,kBAAmBwM,MAG5D,YAAK6W,eAAL,SAAc3G,iBAAiB,SAAS,SAAClQ,GACvCA,EAAE2O,iBAEF1P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,sBAAuBwM,MAGhE0O,uBAAoBpO,GAAG,EAAK9M,QAAS,kCAAmC,SAAS,SAACwM,GAGhF,GAFAA,EAAE2O,iBAEE,EAAKgI,OAAS,EAAKA,MAAM/iB,OAAS,EACpC,IAAK,IAAID,EAAI,EAAGA,EAAI,EAAKgjB,MAAM/iB,OAAQD,IACrC,GAAK,EAAKgjB,MAAMhjB,KAAuB,EAAKH,QAAS,CACnD,IAAI2jB,EAAQxjB,EAAI,EAEV2jB,EAAgB,EAAKC,kBAAkBJ,GAE7C,YADAlY,oBAAiBuQ,QAAQ,EAAKhc,QAA9B,kBAAkD8jB,GAAiBtX,QArEhB,KA6ErDuX,kBAAoB,SAACJ,GAC3B,OAAOA,EAAQ,EAAKF,iBAAmB,OAAS,YA9EW,KAiFrDO,eAAiB,SAACL,GACxB,IAAMM,EAAU,EAAKjkB,QAAQ2B,iBAAiB,uCAC9C,QAAKsiB,MAIDA,EAAQN,EAAQ,IACXM,EAAQN,EAAQ,KAxFkC,KA8FrDO,iBAAmB,WACzB,OAAO,EAAKX,kBA/F+C,KAkGrDY,oBAAsB,WAC5B,OAAO,EAAKZ,kBAnG+C,KAsGrDK,UAAY,WAClB,IAAIrc,EAAQ,GAGVA,EADE,EAAK6c,aACC,OACC,EAAKC,cACN,QAEA,UAIV,EAAKrkB,QAAQkT,UAAUC,OAAO,QAC9B,EAAKnT,QAAQkT,UAAUC,OAAO,SAC9B,EAAKnT,QAAQkT,UAAUC,OAAO,WAE9B,EAAKnT,QAAQkT,UAAU7J,IAAI9B,GAG3B,IAAM+Y,EAAW,EAAKtgB,QAAQ2B,iBAC5B,0GAGF,GAAK2e,KAAYA,EAASlgB,QAAU,GAIpC,IAAK,IAAID,EAAI,EAAG+gB,EAAMZ,EAASlgB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CACnD,IAAIH,EAAUsgB,EAASngB,GACnBwjB,EAAQ5jB,2BAAgBC,GAAW,EAMvC,GAJAA,EAAQkT,UAAUC,OAAO,WACzBnT,EAAQkT,UAAUC,OAAO,aACzBnT,EAAQkT,UAAUC,OAAO,WAErBwQ,IAAU,EAAKF,kBAGjB,GAFAzjB,EAAQkT,UAAU7J,IAAI,YAGO,IAA3B,EAAKqQ,QAAQoJ,WACuC,YAApD9iB,EAAQV,aAAa,2BACrB,CACAmF,oBAAiBG,IAAI5E,EAAS,oBAAqB,EAAK0Z,QAAQqJ,gBAEhE,IAAMD,EAC6C,aAAjD,EAAKiB,kBAAkB,EAAKP,iBACxB,EAAK9J,QAAQuJ,uBACb,EAAKvJ,QAAQsJ,mBACnBle,sBAAmBwf,aAAatkB,EAAS8iB,SAGvCa,EAAQ,EAAKF,iBACfzjB,EAAQkT,UAAU7J,IAAI,aAEtBrJ,EAAQkT,UAAU7J,IAAI,aA5J+B,KAkKrD+a,WAAa,WACnB,OAAO,EAAKX,mBAAqB,EAAKF,kBAnKqB,KAsKrDc,YAAc,WACpB,OAAiC,IAA1B,EAAKZ,kBAvK+C,KA0KrDc,cAAgB,WACtB,OAA6B,IAAtB,EAAKH,eAAiD,IAAvB,EAAKC,eA3KgB,KAmLtDG,KAAO,SAACb,GACb,OAAO,EAAKD,MAAMC,IApLyC,KAuLtDc,OAAS,WACd,OAAO,EAAKD,KAAK,EAAKE,qBAxLqC,KA2LtDC,OAAS,WACd,OAAO,EAAKH,KAAK,EAAKI,qBA5LqC,KA+LtDC,QAAU,WACf,OAAO,EAAKL,KAAK,IAhM0C,KAmMtDM,OAAS,WACd,OAAO,EAAKN,KAAK,EAAKN,qBApMqC,KAuMtDa,oBAAsB,WAC3B,OAAO,EAAKtB,kBAxM+C,KA2MtDiB,iBAAmB,WACxB,OAAI,EAAKnB,kBAAoB,EAAKE,iBAAmB,EAC5C,EAAKA,iBAAmB,EAExB,EAAKF,kBA/M6C,KAmNtDyB,mBAAqB,WAC1B,OAAO,EAAKxB,iBApN+C,KAuNtDoB,iBAAmB,WACxB,OAAI,EAAKnB,iBAAmB,EAAI,EACvB,EAAKA,iBAAmB,EAExB,GA3NkD,KA+NtDvB,WAAa,SAACyB,GACnB,OAAO,EAAK3jB,SAhO+C,KAoOtD8M,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IArOY,KAwOtDJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IAzOW,KA4OtD2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IA7OiB,KAgPtD+d,QAAU,WACfvc,QAAQC,IAAI,oBAjP+C,KAoPtDqT,QAAU,SAAC9U,EAAcmW,GAC9B,OAAO5R,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,EAAMmW,IApPpD3b,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAOqF,GAAuBlJ,GACpDhY,KAAKgZ,YAAcpO,iCAAsB,WAGzC5K,KAAKyhB,MAAQzhB,KAAK1B,QAAQ2B,iBAAiB,mCAC3CD,KAAK0hB,QAAU1hB,KAAK1B,QAAQmgB,cAAc,mCAC1Cze,KAAK2hB,QAAU3hB,KAAK1B,QAAQmgB,cAAc,uCAC1Cze,KAAK4hB,UAAY5hB,KAAK1B,QAAQmgB,cAAc,qCAG5Cze,KAAK6hB,iBAAwC,GAArB,UAAA7hB,KAAKyhB,aAAL,eAAY/iB,QACpCsB,KAAK8hB,gBAAkB,EACvB9hB,KAAK+hB,iBAAmB,EAGpB/hB,KAAKgY,QAAQmJ,WAAa,GAC5BnhB,KAAKgiB,MAAMhiB,KAAKgY,QAAQmJ,YAI1BnhB,KAAKmiB,eAGLlf,YAASC,IAAIlD,KAAK1B,QAAS,UAAW0B,M,oDAgOxC,SAAyB1B,GACvB,OAAO2E,YAASE,IAAI7E,EAAS,a,yBAG/B,SAA0BA,GACxB,OAAgB,OAAZA,GAAoBkjB,EAAiBtF,WAAW5d,GAC3C2E,YAASD,IAAI1E,EAAS,WAExB,O,6BAIT,SAA8BM,GACXzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAACxd,GAChB,IAAM4B,EAAO5B,EACTklB,EAAUhC,EAAiBxF,YAAY9b,GACtCsjB,IACHA,EAAU,IAAIhC,EAAiBthB,EAAMghB,U,uBAmB3C,WAA6D,IAArChH,EAAoC,uDAArB,oBACrCsH,EAAiB9E,gBAAgBxC,O,KA3S/BsH,GA4RU3C,cAAgB,SAC5BvgB,GAE6B,IAD7B0Z,EAC4B,uDADDkJ,GAE3B,IAAK5iB,EACH,OAAO,KAET,IAAIklB,EAAUhC,GAAiBxF,YAAY1d,GAI3C,OAHKklB,IACHA,EAAU,IAAIhC,GAAiBljB,EAAS0Z,IAEnCwL,GC3SX,IAAMC,GAAsC,CAC1ClE,OAAQ,IACRmE,SAAS,EACTtC,WAAW,EACXC,eAAgB,OAChBsC,eAAgB,2BAGZC,G,WASJ,WAAY/K,EAAuBb,GAAyB,IAAD,iCAR3D1Z,aAQ2D,OAP3D0Z,aAO2D,OAN3DgB,iBAM2D,OAL3D6K,aAA8B,GAK6B,KAJ3DC,mBAI2D,OAH3DC,uBAG2D,OAF3DC,mBAE2D,OAkBnDvD,OAAS,WACf,IAAIlB,EAAS,EAAKN,UAAU,UACxByE,EAAU,EAAKzE,UAAU,WAG7B,IAAe,IAAXM,EAAJ,CAIA,IAAI0E,EAAY,EACM,kBAAX1E,IACT0E,EAAYtjB,SAAS4e,IAGvB,IAAM2E,EAAKrjB,0BAGX,IAAgB,IAAZ6iB,EA8BF,OA5BIQ,EAAKD,GAAa,EAAKD,cAAgBE,IACc,IAAnD/mB,SAASiD,KAAK8e,aAAa,EAAK4E,iBAClC,EAAKK,SACLhnB,SAASiD,KAAKlC,aAAa,EAAK4lB,cAAe,QAGlB,IAA3B,EAAKC,oBACPha,oBAAiBuQ,QAAQ,EAAKhc,QAAS,gBACvCyL,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBAEvC,EAAKylB,mBAAoB,KAIvB5mB,SAASiD,KAAK8e,aAAa,EAAK4E,iBAClC,EAAKM,UACLjnB,SAASiD,KAAKqa,gBAAgB,EAAKqJ,iBAGN,IAA3B,EAAKC,oBACPha,oBAAiBuQ,QAAQ,EAAKhc,QAAS,iBACvCyL,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBAEvC,EAAKylB,mBAAoB,SAI7B,EAAKC,cAAgBE,GAKnBA,EAAKD,IACgD,IAAnD9mB,SAASiD,KAAK8e,aAAa,EAAK4E,iBAClC,EAAKK,SACLhnB,SAASiD,KAAKlC,aAAa,EAAK4lB,cAAe,QAGlB,IAA3B,EAAKC,oBACPha,oBAAiBuQ,QAAQ,EAAKhc,QAAS,gBACvCyL,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBACvC,EAAKylB,mBAAoB,MAI4B,IAAnD5mB,SAASiD,KAAK8e,aAAa,EAAK4E,iBAClC,EAAKM,UACLjnB,SAASiD,KAAKqa,gBAAgB,EAAKqJ,iBAGN,IAA3B,EAAKC,oBACPha,oBAAiBuQ,QAAQ,EAAKhc,QAAS,iBACvCyL,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBACvC,EAAKylB,mBAAoB,MA1F4B,KA+FnD9E,UAAY,SAACzZ,GACnB,IAAM6e,EAAiB,kBAAoB7e,EAC3C,IAAkD,IAA9C,EAAKlH,QAAQ4gB,aAAamF,GAA0B,CACtD,IAAMC,EAAiB,EAAKhmB,QAAQV,aAAaymB,GAC3CE,EAAYrgB,yCAA8BogB,GAAkB,IAClE,OAAkB,OAAdC,GAA4C,SAAtBzK,OAAOyK,KAER,OAAdA,GAA4C,UAAtBzK,OAAOyK,KAIjCA,EAEP,IAAMpK,EAAaC,8BAAmB5U,GAChC6U,EAAS7V,uCAA4B,EAAKwT,QAASmC,GACzD,GAAIE,EACF,OAAOnW,yCAA8BmW,IA/GgB,KAoHnD+J,QAAU,WAChBrhB,oBAAiB0O,OAAO,EAAKnT,QAAS,OACtCyE,oBAAiB0O,OAAO,EAAKnT,QAAS,SACtCyE,oBAAiB0O,OAAO,EAAKnT,QAAS,QACtCyE,oBAAiB0O,OAAO,EAAKnT,QAAS,SACtCyE,oBAAiB0O,OAAO,EAAKnT,QAAS,WACtCyE,oBAAiB0O,OAAO,EAAKnT,QAAS,aA1HmB,KA6HnD6lB,OAAS,WAA8B,IAA7B3I,EAA4B,wDACtCjc,EAAM,EAAK0f,UAAU,OACrBzf,EAAO,EAAKyf,UAAU,QAExB/d,EAAQ,EAAK+d,UAAU,SACrBuF,EAAS,EAAKvF,UAAU,UAgB9B,IAde,IAAXzD,IAAmD,IAAhC,EAAKyD,UAAU,eACpClc,oBAAiBG,IAAI,EAAK5E,QAAS,oBAAqB,EAAK2gB,UAAU,mBACvE7b,sBAAmBwf,aAAa,EAAKtkB,QAAS,aAAe,EAAK2gB,UAAU,oBAG/D,OAAXuF,IACFzhB,oBAAiBG,IAAI,EAAK5E,QAAS,UAAWkmB,GAC9CzhB,oBAAiBG,IAAI,EAAK5E,QAAS,WAAY,UAGrC,OAARiB,GACFwD,oBAAiBG,IAAI,EAAK5E,QAAS,MAAOiB,GAG9B,OAAV2B,QAA4BjD,IAAViD,EAAqB,CACzC,IAAMujB,EAAcjgB,uCAA4BtD,EAAO,UACvD,GAAIujB,EAAa,CACf,IAAMC,EAAgBvnB,SAASshB,cAAcgG,GACzCC,IACFxjB,EAAQpE,kBAAO4nB,EAAe,UAGlC3hB,oBAAiBG,IAAI,EAAK5E,QAAS,QAAS4C,GAG9C,GAAa,OAAT1B,GACiC,SAA/Bsa,OAAOta,GAAMnC,cAA0B,CACzC,IAAIsnB,EAAatlB,4BAAiB,EAAKf,SAASkB,KAE5CmlB,EAAa,GACf5hB,oBAAiBG,IAAI,EAAK5E,QAAS,OAAQwb,OAAO6K,GAAc,QAlKb,KAwKpDnJ,OAAS,YACyC,IAAnDre,SAASiD,KAAK8e,aAAa,EAAK4E,iBAClC,EAAKM,UACLjnB,SAASiD,KAAKqa,gBAAgB,EAAKqJ,eACnC,EAAKK,QAAO,GACZhnB,SAASiD,KAAKlC,aAAa,EAAK4lB,cAAe,QA7KQ,KAkLpD1Y,GAAK,SAAC5F,EAAcyF,GACzB,OAAOlB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMyF,IAnLU,KAsLpDN,IAAM,SAACnF,EAAc9C,GAC1B,OAAOqH,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAM9C,IAvLS,KA0LpDgZ,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IA3Le,KA8LpD8U,QAAU,SAAC9U,GAChB,OAAOuE,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,IA9L9CxF,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAO4H,GAAsBzL,GACnDhY,KAAKgZ,YAAcpO,iCAAsB,UACzC5K,KAAK6jB,aAAe7jB,KAAK1B,QAAQV,aAAa,uBAC9CoC,KAAK8jB,cAAgB,kBAAoB9jB,KAAK6jB,aAC9C7jB,KAAK+jB,mBAAoB,EACzB/jB,KAAKgkB,cAAgB,EAGrB7iB,OAAO6Z,iBAAiB,SAAUhb,KAAKygB,QAGvCzgB,KAAKygB,SAELxd,YAASC,IAAIlD,KAAK1B,QAAS,SAAU0B,M,oDAoLvC,SAAyB1B,GACvB,OAAO2E,YAASE,IAAI7E,EAAS,Y,yBAG/B,SAA0BA,GACxB,GAAgB,OAAZA,GAAoBslB,EAAgB1H,WAAW5d,GACjD,OAAO2E,YAASD,IAAI1E,EAAS,Y,6BAKjC,SAA8BM,GACXzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAACxd,GAChB,IAAM4B,EAAO5B,EACTsmB,EAAShB,EAAgB5H,YAAY9b,GACpC0kB,IACHA,EAAS,IAAIhB,EAAgB1jB,EAAMujB,U,uBAqBzC,WAAmE,IAA3CvJ,EAA0C,uDAA3B,0BACrC0J,EAAgBlH,gBAAgBxC,K,8BAGlC,WAA0E,IAA3CA,EAA0C,uDAA3B,0BAC5C0J,EAAgBlH,gBAAgBxC,O,KAvP9B0J,GAkOU/E,cAAgB,SAC5BjgB,GAEiC,IADjCoZ,EACgC,uDADPyL,GAEnBnlB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACTsmB,EAAShB,GAAgB5H,YAAY9b,GAIzC,OAHK0kB,IACHA,EAAS,IAAIhB,GAAgB1jB,EAAM8X,IAE9B4M,IClQX,IAAMC,GAAsC,CAC1C9F,WAAW,GAGP+F,GAQJ,WAAYjM,EAAuBb,GAAyB,IAAD,iCAP3D1Z,aAO2D,OAN3D0a,iBAM2D,OAL3DhB,aAK2D,OAJ3DnS,MAAgB,GAI2C,KAH3DkD,OAA6B,KAG8B,KAF3Dgc,UAAoB,GAEuC,KAqBnD3L,UAAY,WAClB,EAAK9a,QAAQ0c,iBAAiB,SAAS,SAAClQ,GACtCA,EAAE2O,iBACF,EAAKE,cAxBkD,KA6BnDA,QAAU,WAYhB,OAVA5P,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBAEnC,EAAK0mB,aACP,EAAKC,WAEL,EAAKC,UAIPnb,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBAChC,GAzCkD,KA4CnD4mB,QAAU,WAAO,IAAD,EACtB,IAAI,EAAKF,aAeT,OAXAjb,oBAAiBuQ,QAAQ,EAAKhc,QAAS,oBACvC,YAAKyK,cAAL,SAAa7K,aAAa,EAAK6mB,UAAW,MACtC,EAAKlf,MAAMnH,OAAS,GACtB,EAAKJ,QAAQkT,UAAU7J,IAAI,EAAK9B,OAG9B,EAAKmS,QAAQ+G,WACfrH,GAAgBxU,IAAI,EAAK6hB,UAAW,KAAM,IAG5Chb,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBAChC,GA5DkD,KA+DnD2mB,SAAW,WAAO,IAAD,EACvB,QAAK,EAAKD,eAIVjb,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBACvC,YAAKyK,cAAL,SAAa0R,gBAAgB,EAAKsK,WAE9B,EAAKlf,MAAMnH,OAAS,GACtB,EAAKJ,QAAQkT,UAAUC,OAAO,EAAK5L,OAGjC,EAAKmS,QAAQ+G,WACfrH,GAAgB7M,OAAO,EAAKka,WAG9Bhb,oBAAiBuQ,QAAQ,EAAKhc,QAAS,sBAChC,IAhFkD,KAmFnD0mB,WAAa,WACnB,QAAK,EAAKjc,QAIgE,OAAnE+Q,OAAO,EAAK/Q,OAAOnL,aAAa,EAAKmnB,YAAY1nB,eAxFC,KAiGpD+d,OAAS,WACd,OAAO,EAAKzB,WAlG6C,KAqGpDwK,OAAS,WACd,OAAO,EAAKe,WAtG6C,KAyGpDd,QAAU,WACf,OAAO,EAAKa,YA1G6C,KA6GpDE,UAAY,WACjB,OAAO,EAAKH,cA9G6C,KAiHpDvJ,UAAY,WACjB,OAAO,EAAKnd,SAlH6C,KAsHpD8M,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IAvHU,KA0HpDJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IA3HS,KA8HpD2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IA/He,KAkIpD8U,QAAU,SAAC9U,EAAcmW,GAC9B,OAAO5R,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,EAAMmW,IAlIpD3b,KAAKgY,QAAU4D,OAAOC,OAAOgJ,GAAsB7M,GACnDhY,KAAKgZ,YAAcpO,iCAAsB,UACzC5K,KAAK1B,QAAUua,EAEf,IAAMuM,EAAoBplB,KAAK1B,QAAQV,aAAa,yBAChDwnB,IACFplB,KAAK+I,OAAS5L,SAASshB,cAAc2G,IAEvC,IAAMC,EAAoBrlB,KAAK1B,QAAQV,aAAa,wBACpDoC,KAAK6F,MAAQwf,GAAqB,GAClCrlB,KAAK+kB,UAAY,WAAa/kB,KAAK1B,QAAQV,aAAa,uBAGxDoC,KAAKoZ,YAILnW,YAASC,IAAIlD,KAAK1B,QAAS,SAAU0B,OA1BnC8kB,GA+IU9I,YAAc,SAACjf,GAC3B,IAAMgc,EAAgB9V,YAASD,IAAIjG,EAAI,UACvC,OAAIgc,GAIG,MArJL+L,GAwJUpI,gBAAkB,SAAC9d,GACdzB,SAASiD,KAAKH,iBAAiBrB,GACvCkd,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACTgc,EAAgB+L,GAAgB9I,YAAY9b,GAC3C6Y,IACHA,EAAgB,IAAI+L,GAAgB5kB,EAAM2kB,SA9J5CC,GAmKUjG,cAAgB,SAC5BjgB,GAEiC,IADjCoZ,EACgC,uDADP6M,GAEnBvmB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACT8c,EAAS0J,GAAgB9I,YAAY9b,GAIzC,OAHKkb,IACHA,EAAS,IAAI0J,GAAgB5kB,EAAM8X,IAE9BoD,IAhLL0J,GAmLUlI,iBAAmB,WAC/BkI,GAAgBpI,gBAAgB,qBApL9BoI,GAuLUrI,UAAY,WACxBqI,GAAgBpI,gBAAgB,qBClLpC,IAAM4I,GAA8B,CAClCC,UAAW,EACXC,gBAAgB,EAChBC,gBAAgB,EAChBC,YAAY,EACZC,WAAW,EACXC,oBAAqB,UAGjBC,GAAqD,CACzD9I,cAAe,iBACfC,cAAe,2BACfC,WAAY,cACZ6I,gBAAiB,gDACjBC,eAAgB,gDAGZC,G,WAUJ,WACEnN,EACA0E,EACAC,GACC,IAAD,iCAbFlf,aAaE,OAZFmf,kBAYE,OAXFwI,uBAWE,OAVFC,sBAUE,OATFlO,aASE,OARF8F,aAQE,OAPFqI,WAOE,OANFC,gBAME,OAmIKC,MAAQ,WACb,EAAKF,MAAQ,EACb,EAAKG,aApILtmB,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAOyJ,GAA6B/H,GAC1Dvd,KAAK8d,QAAUN,EACfxd,KAAKmmB,MAAQ,EACbnmB,KAAKomB,WAAa,EAGlBpmB,KAAKyd,aAAezd,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQb,YAC5Djd,KAAKimB,kBAAoBjmB,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQgI,iBACjE9lB,KAAKkmB,iBAAmBlmB,KAAK1B,QAAQmgB,cAAcze,KAAK8d,QAAQiI,gBAGhE/lB,KAAK0e,WAELzb,YAASC,IAAIlD,KAAK1B,QAAS0B,KAAK8d,QAAQf,cAAe/c,M,6CAGzD,WAA0B,IAAD,OACnBA,KAAKyd,cACPzd,KAAKyd,aAAazC,iBAAiB,SAAS,WAC1C,EAAKuL,WAILvmB,KAAKimB,mBACPjmB,KAAKimB,kBAAkBjL,iBAAiB,SAAS,WAC/C,EAAKwL,mB,yBAKX,WACE,GAAIxmB,KAAKimB,mBAAqBjmB,KAAKyd,aAAc,CAC/C,IAAMgJ,EAAczmB,KAAKimB,kBAAkBxH,cACzC,0CAGIiI,EAAa1mB,KAAKimB,kBAAkBxH,cAAc,8BAIvC,cAFAze,KAAKyd,aAAa7f,aAAa,SAAW,IAGzDoC,KAAKyd,aAAavf,aAAa,OAAQ,QAEvC8B,KAAKyd,aAAavf,aAAa,OAAQ,YAG9B,OAAXuoB,QAAW,IAAXA,KAAajV,UAAU7J,IAAI,UACjB,OAAV+e,QAAU,IAAVA,KAAYlV,UAAUC,OAAO,UAE7BzR,KAAKyd,aAAakJ,W,wBAItB,WACE,OAAO,I,yBAGT,WACE,QAAI3mB,KAAKyd,cACAzd,KAAKyd,aAAarhB,MAAMsC,QAAUsB,KAAKgY,QAAQuN,Y,4BAM1D,WACE,IAAM1c,EAAM7I,KAAKyd,aAAezd,KAAKyd,aAAarhB,MAAQ,GAC1D,MAAO,QAAQwqB,KAAK/d,K,4BAGtB,WACE,IAAMA,EAAM7I,KAAKyd,aAAezd,KAAKyd,aAAarhB,MAAQ,GAC1D,MAAO,QAAQwqB,KAAK/d,K,wBAGtB,WACE,IAAMA,EAAM7I,KAAKyd,aAAezd,KAAKyd,aAAarhB,MAAQ,GAC1D,MAAO,QAAQwqB,KAAK/d,K,uBAGtB,WACE,IAAMA,EAAM7I,KAAKyd,aAAezd,KAAKyd,aAAarhB,MAAQ,GAC1D,MAAO,yCAAyCwqB,KAAK/d,K,2BAGvD,WACE,IAAIge,EAAQ,EAkBZ,OAjBI7mB,KAAKgY,QAAQwN,gBACfqB,IAGE7mB,KAAKgY,QAAQyN,gBACfoB,IAGE7mB,KAAKgY,QAAQ0N,YACfmB,IAGE7mB,KAAKgY,QAAQ2N,WACfkB,IAGF7mB,KAAKomB,WAAaS,EACX,IAAM7mB,KAAKomB,a,uBAGpB,WAAqB,IAAD,OACZU,EAAQ9mB,KAAKkmB,iBACf,GAAGa,MAAM3nB,KAAKY,KAAKkmB,iBAAiBjmB,iBAAiB,QACrD,GACE+mB,EAAQF,EAAMpoB,OAChBujB,EAAQ,EACNgF,EAAajnB,KAAKknB,gBAClBf,EAAQnmB,KAAKmnB,WAEnBL,EAAMM,KAAI,SAAClnB,GACT+hB,IACIgF,EAAahF,GAAS,EAAKmE,WAAaY,IAAUb,EACpDjmB,EAAKsR,UAAU7J,IAAI,UAEnBzH,EAAKsR,UAAUC,OAAO,e,sBAa5B,WACE,OAAOzR,KAAKmmB,Q,mBAGd,WACE,IAAIA,EAAQ,EACNc,EAAajnB,KAAKinB,aACpBjnB,KAAKqnB,gBACPlB,GAAgBc,GAGdjnB,KAAKgY,QAAQwN,gBAAkBxlB,KAAKsnB,mBACtCnB,GAAgBc,GAGdjnB,KAAKgY,QAAQyN,gBAAkBzlB,KAAKwlB,mBACtCW,GAAgBc,GAGdjnB,KAAKgY,QAAQ0N,YAAc1lB,KAAK0lB,eAClCS,GAAgBc,GAGdjnB,KAAKgY,QAAQ2N,WAAa3lB,KAAK2lB,cACjCQ,GAAgBc,GAGlBjnB,KAAKmmB,MAAQA,EACbnmB,KAAKsmB,gB,KAlLHN,GAsLUhK,YAAc,SAC1Bjf,GAEI,IADJggB,EACG,uDADqB8I,GAA4B9I,cAE9CwK,EAAgBtkB,YAASD,IAAIjG,EAAIggB,GACvC,OAAIwK,GAIG,MA/LLvB,GAkMUtJ,gBAAkB,WAI1B,IAHJ9d,EAGG,uDAHgBinB,GAA4B7I,cAC/ChF,EAEG,uDAF8BsN,GACjCxH,EACG,uDAD8B+H,GAE3BjH,EAAWzhB,SAASiD,KAAKH,iBAAiBrB,GAChDggB,EAAS9C,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACTwqB,EAAgBvB,GAAuBhK,YAAY9b,GAClDqnB,IACHA,EAAgB,IAAIvB,GAAuB9lB,EAAM8X,EAAS8F,QA5M5DkI,GAiNUnH,cAAgB,WAIY,IAHxCjgB,EAGuC,uDAHpBinB,GAA4B7I,cAC/ChF,EAEuC,uDAFNsN,GACjCxH,EACuC,uDADN+H,GAE3BvnB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACTipB,EAAgBvB,GAAuBhK,YAAY9b,GAIvD,OAHKqnB,IACHA,EAAgB,IAAIvB,GAAuB9lB,EAAM8X,EAAS8F,IAErDyJ,IA/NLvB,GAkOUvJ,UAAY,WAAmE,IAAlE7d,EAAiE,uDAA9CinB,GAA4B7I,cACxEgJ,GAAuBtJ,gBAAgB9d,IAnOrConB,GAsOUpJ,iBAAmB,WAE3B,IADJhe,EACG,uDADgBinB,GAA4B7I,cAE/CgJ,GAAuBtJ,gBAAgB9d,IC5P3C,IAAM4oB,GAAqC,CACzCC,KAAM,UAGFC,GAAqC,CACzC3K,cAAe,QACfC,cAAe,yBACf2K,UAAW,kBAGPC,G,WAKJ,WAAY/O,EAAuB0E,EAAyBC,GAA0B,IAAD,iCAJrFlf,aAIqF,OAHrF0Z,aAGqF,OAFrF8F,aAEqF,OAmC9EtC,OAAS,WAAO,IAAD,EACdqM,EAAc,UAAG,EAAK5I,UAAU,iBAAlB,aAAG,EAA0BpiB,WAC3C4qB,EAAO,EAAKxI,UAAU,QACtB5e,EAAgBwnB,EAAiB1qB,SAASshB,cAAcoJ,GAAkB,KAE5ExnB,GAAiB,EAAK/B,QAAQC,aAAe8B,IAClC,YAATonB,EACFpnB,EAAcynB,QAAQ,EAAKxpB,SACT,WAATmpB,GACTpnB,EAAcya,OAAO,EAAKxc,WA5CqD,KAkD9E8M,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IAnDoC,KAsD9EJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IAvDmC,KA0D9E2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IA3DyC,KA8D9E8U,QAAU,SAAC9U,EAAcmW,GAC9B,OAAO5R,oBAAiBuQ,QAAQ,EAAKhc,QAASkH,EAAMmW,IA9DpD3b,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAO2L,GAAqBjK,GAClDvd,KAAK8d,QAAUN,EAGfxd,KAAKwb,SAELvY,YAASC,IAAIlD,KAAK1B,QAAS0B,KAAK8d,QAAQf,cAAe/c,M,8CAGzD,SAAkBwF,GAChB,IAAM0U,EAAOla,KAAK1B,QAAQV,aAAb,UAA6BoC,KAAK8d,QAAQ6J,WAA1C,OAAsDniB,IACnE,GAAI0U,EAAM,CACR,IAAI9d,EAAQ8H,yCAA8BgW,GAC1C,OAAY,MAARA,GAAkC,SAAlBJ,OAAO1d,KAEN,OAAVA,GAAoC,UAAlB0d,OAAO1d,KAG7BA,EAEP,IAAM+d,EAAaC,8BAAmB5U,GAChC6U,EAAS7V,uCAA4BxE,KAAKgY,QAASmC,GACzD,OAAIE,EACKnW,yCAA8BmW,GAE9B,S,KAhCTuN,GAwEU5L,YAAc,SAC1Bjf,GAE2B,IAD3BggB,EAC0B,uDADF2K,GAAoB3K,cAEtCgL,EAAQ9kB,YAASD,IAAIjG,EAAIggB,GAC/B,OAAIgL,GAIG,MAjFLH,GAoFUlL,gBAAkB,WAI1B,IAHJ9d,EAGG,uDAHgB8oB,GAAoB1K,cACvChF,EAEG,uDAFsBwP,GACzB1J,EACG,uDADsB4J,GAEnB9I,EAAWzhB,SAASiD,KAAKH,iBAAiBrB,GAChDggB,EAAS9C,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACTgrB,EAAQH,GAAe5L,YAAY9b,GAClC6nB,IACHA,EAAQ,IAAIH,GAAe1nB,EAAM8X,EAAS8F,QA9F5C8J,GAmGU/I,cAAgB,WAII,IAHhCjgB,EAG+B,uDAHZ8oB,GAAoB1K,cACvChF,EAE+B,uDAFNwP,GACzB1J,EAC+B,uDADN4J,GAEnBppB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACTypB,EAAQH,GAAe5L,YAAY9b,GAIvC,OAHK6nB,IACHA,EAAQ,IAAIH,GAAe1nB,EAAM8X,EAAS8F,IAErCiK,IAjHLH,GAoHUnL,UAAY,WAA2D,IAA1D7d,EAAyD,uDAAtC8oB,GAAoB1K,cAChE4K,GAAelL,gBAAgB9d,IArH7BgpB,GAwHUhL,iBAAmB,WAA2D,IAA1Dhe,EAAyD,uDAAtC8oB,GAAoB1K,cACvE4K,GAAelL,gBAAgB9d,IAKnCuC,OAAO6Z,iBAAiB,UAAU,WAGhCpZ,oBAFIC,WAIF,WAEmB1E,SAAS8C,iBAAiBynB,GAAoB1K,eACtDlB,SAAQ,SAAC/e,GAChB,IAAMgrB,EAAQH,GAAe5L,YAAYjf,GACrCgrB,GACFA,EAAMvM,cAIZ,Q,cC9IEwM,GAAkC,CACtCC,SAAU,CACRC,aAAc,IACd1D,OAAQ,KAEV2D,UAAW,CACTC,WAAY,IACZC,QAAQ,IAsBNC,GAMJ,WAAYzP,EAAuBb,GAAuB,IAAD,OAQvD,OARuD,0BALzD1Z,aAKyD,OAJzD0Z,aAIyD,OAHzDgB,iBAGyD,OAFzDuP,eAAqC,KAEoB,KAYjDC,mBAAqB,WAC3B,IAAMzf,EAAS5L,SAASshB,cAAT,iCACa,EAAKngB,QAAQV,aAAa,MADvC,MAIf,GAAImL,EACF,EAAKwf,eAAiBxf,OACjB,GAAI,EAAKzK,QAAQke,QAAQ,0BAC9B,EAAK+L,eAAiB,EAAKjqB,QAAQke,QAAQ,+BACtC,GACL,EAAKle,QAAQC,YACb0D,2BAAgB,EAAK3D,QAAQC,WAA2B,0BACxD,CACA,IAAM6D,EAAQH,2BACZ,EAAK3D,QAAQC,WACb,0BAEE6D,IACF,EAAKmmB,eAAiBnmB,GAItB,EAAKmmB,gBACPtlB,YAASC,IAAI,EAAKqlB,eAAgB,OAAQ,IAnCW,KAwCjDE,kBAAoB,SAACvoB,GAC3B,OAAO,EAAKqoB,iBAAmBroB,GAzCwB,KA6CjDwoB,eAAiB,SAACxoB,EAAmBsF,GAC3C,IAAIpJ,EAAQ,KACZ,GAAI8D,GAAQA,EAAKgf,aAAa,gBAAkB1Z,GAAO,CACrD,IAAM0U,EAAOha,EAAKtC,aAAa,gBAAkB4H,IAAS,GAE5C,QADdpJ,EAAQ8H,yCAA8BgW,KACE,SAAlBJ,OAAO1d,GAC3BA,GAAQ,EACW,OAAVA,GAAoC,UAAlB0d,OAAO1d,KAClCA,GAAQ,GAGZ,OAAOA,GAxDgD,KA4DjDusB,gBAAkB,SAAC9P,GAEzB,GAAI,EAAK4P,kBAAkB5P,GACzB,OAAOA,EAIT,GAAIA,EAASqG,aAAa,wBACxB,OAAOrG,EAIT,IAAM+P,EAAc3lB,YAASD,IAAI6V,EAAU,QAC3C,GAAI+P,EACF,OAAOA,EAIT,IAAM1oB,EAAO2Y,EAAS2D,QAAQ,oCAC9B,GAAItc,EACF,OAAOA,EAIT,IAAM2oB,EAAMhQ,EAAS2D,QAAQ,aAC7B,GAAIqM,EAAK,CACP,IAAMC,EAAU7lB,YAASD,IAAI6lB,EAAoB,QACjD,GAAIC,EACF,OAAOA,IAxF4C,KA8FjDC,sBAAwB,SAAC7oB,GAC/B,IAAM2oB,EAAM3oB,EAAKsc,QAAQ,aACzB,IAAKqM,EACH,OAAO,KAGT,IAAMC,EAAU7lB,YAASD,IAAI6lB,EAAoB,QACjD,GAAIC,EACF,OAAOA,EAGT,IAAME,EAAaH,EAAIrM,QAAQ,oCAC/B,OAAIqM,GAAOG,EACFA,EAGF,MA9GgD,KAkHjDC,uBAAyB,SAAC/oB,GAChC,IACIgpB,EADE/oB,EAAU,GAEZ1B,EAAI,EACJgC,EAASP,EAEb,IACEgpB,EAAS,EAAKH,sBAAsBtoB,MAElCN,EAAQG,KAAK4oB,GACbzoB,EAASyoB,GAGXzqB,UACkB,OAAXyqB,GAAmBzqB,EAAI,IAMhC,OAJI,EAAK8pB,gBACPpoB,EAAQgpB,QAAQ,EAAKZ,gBAGhBpoB,GAtIgD,KA0IjDipB,yBAA2B,SAAClpB,GAElC,IAAMmpB,EAAkB,EAAKX,eAAexoB,EAAM,aAC9CopB,EAA6B,QAC7BD,IACFC,EAAYD,GAId,IAAME,EAAY,EAAKb,eAAexoB,EAAM,QACtCspB,EAAOD,EAAYA,EAAU1sB,WAAW8O,MAAM,KAAO,GAGrD8d,EAAc,EAAKf,eAAexoB,EAAM,UACxCqf,EAASkK,EAAcA,EAAY5sB,WAAW8O,MAAM,KAAO,GAMjE,MAAO,CACL2d,UAAWA,EACXI,UAJ0C,IAA1C,EAAKhB,eAAexoB,EAAM,YAAuB,WAAa,QAK9DypB,UAAW,CACT,CACEnkB,KAAM,SACNwS,QAAS,CACPuH,OAAQA,IAGZ,CACE/Z,KAAM,kBACNwS,QAAS,CAGP4R,aAAc,oBAGlB,CACEpkB,KAAM,OACNwS,QAAS,CACP6R,aAAa,EACbC,mBAAoBN,OApL2B,KA4LjDO,qBAAuB,SAAC7pB,GAC9B,IAAItB,EAAWsB,EAET4oB,EAAU7lB,YAASD,IAAI9C,EAAM,OAKnC,GAJI4oB,IACFlqB,EAAWkqB,GAGTlqB,EAAU,CAEZ,IAAMN,EAAUM,EAAS6f,cAAc,oCACvC,GAAIngB,EACF,OAAOA,EAGX,OAAO,MA3MgD,KA+MjD0rB,sBAAwB,SAAC9pB,GAC/B,IACIkC,EADEpG,EAAW,GAEbyC,EAAI,EACJgC,EAASP,EACb,IACEkC,EAAQ,EAAK2nB,qBAAqBtpB,MAEhCzE,EAASsE,KAAK8B,GACd3B,EAAS2B,GAGX3D,UACiB,OAAV2D,GAAkB3D,EAAI,IAE/B,OAAOzC,GA9NgD,KAkOjDiuB,mBAAqB,SAAC/pB,GAC5B,OAAKA,EAID,EAAKuoB,kBAAkBvoB,GAClB,EAAK5B,QAGV4B,EAAKsR,UAAUwI,SAAS,YACnB9Z,EACE+C,YAASE,IAAIjD,EAAM,OACrB+C,YAASD,IAAI9C,EAAM,OAEnB+B,2BAAgB/B,EAAM,aAZtB,MApO8C,KAoPjDgqB,QAAU,SAACntB,EAAiBC,GAClC,IAAMC,GAAeF,EAAGG,eAAiBC,UAAUF,YACnD,OAAKA,GAMLD,EAAYA,EAAUI,QAAQ,WAAY,OAAOC,cAE1CJ,EAAYK,iBAAiBP,EAAI,MAAMQ,iBAAiBP,IAPtD,IAvP8C,KAkQjDmtB,gBAAkB,SAAC7rB,GACzB,IAAMuqB,EAAM,EAAKoB,mBAAmB3rB,GACpC,OAAIuqB,GAAOloB,SAAS,EAAKupB,QAAQrB,EAAK,YAAc,EAC3C,WAEA,aAvQ8C,KA4QjDuB,gBAAkB,SAAClqB,GACzB,IAAI2oB,EAAM,EAAKoB,mBAAmB/pB,GAClC,QAAI2oB,IACiC,aAA/B,EAAKsB,gBAAgBjqB,GAChB2oB,EAAIrX,UAAUwI,SAAS,SAAW6O,EAAI3J,aAAa,yBAEnDhf,EAAKsR,UAAUwI,SAAS,UAlRoB,KA0RjDqQ,yBAA2B,SAACnqB,GAClC,OAAkD,IAA3C,EAAKwoB,eAAexoB,EAAM,cA3RsB,KA+RjDoqB,mBAAqB,SAACpqB,GAC5B,OAAOJ,6BAAkBI,EAAM,mBAAmBxB,OAAS,GAhSJ,KAoSjD6rB,kBAAoB,SAACrqB,GAC3B,OAAOA,EAAKsR,UAAUwI,SAAS,aArSwB,KAySjDwQ,YAAc,SAACtqB,GACrB,OAAOA,EAAKsR,UAAUwI,SAAS,cAAgB9Z,EAAKgf,aAAa,yBA1SV,KA8SjDuL,oBAAsB,SAACvqB,GAC7B,OAAO+B,2BAAgB/B,EAAM,eA/S0B,KAmTjDwqB,sBAAwB,SAACxqB,GAC/B,OAAI,EAAKqoB,eACA,EAAKA,eAGP,EAAKkC,oBAAoBvqB,IAxTuB,KA4TjDyqB,cAAgB,SAACzqB,GACvB,IAAwE,IAApE6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,yBAA3C,CAKAgqB,EAAcsC,cAAc1qB,GAG5B,IAAM2oB,EAAM,EAAKoB,mBAAmB/pB,GAC9BgB,EAAQ,EAAKwnB,eAAexoB,EAAM,SAClCmB,EAAS,EAAKqnB,eAAexoB,EAAM,UAErCskB,EAAS,EAAKxM,QAAQiQ,SAASzD,OAC7BqG,EAAetqB,4BAAiBL,GAEjB,OAAjB2qB,GAAyBA,GAAgBrG,IAC3CA,EAASqG,EAAe,GAGtBrG,GACFzhB,oBAAiBG,IAAI2lB,EAAK,UAAWrE,GAGnCtjB,GACF6B,oBAAiBG,IAAI2lB,EAAK,QAAS3nB,GAGjCG,GACF0B,oBAAiBG,IAAI2lB,EAAK,SAAUxnB,GAGtC,EAAKypB,mBAAmB5qB,EAAM2oB,GAE9B3oB,EAAKsR,UAAU7J,IAAI,QACnBzH,EAAKsR,UAAU7J,IAAI,iBACnBkhB,EAAIrX,UAAU7J,IAAI,SAG4B,IAA1C,EAAK+gB,eAAexoB,EAAM,aAC5B/C,SAASiD,KAAK2qB,YAAYlC,GAC1B5lB,YAASC,IAAIhD,EAAM,MAAO2oB,GAC1B5lB,YAASC,IAAI2lB,EAAK,OAAQ3oB,GAC1B+C,YAASC,IAAI2lB,EAAK,OAAQ,IAE1B5lB,YAASC,IAAI2lB,EAAK,OAAQ3oB,GAG5B6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,4BA5WgB,KAgXjDwsB,mBAAqB,SAAC5qB,EAAmB2oB,GAE/C,IAAImC,EACEC,EAAS,EAAKvC,eAAexoB,EAAM,UAYzC,GARI8qB,EAFAC,EACa,WAAXA,EACU/qB,EAAK3B,WAELpB,SAASshB,cAAcwM,GAGzB/qB,EAGC,CACb,IAAMgrB,EAASC,aACbH,EACAnC,EACA,EAAKO,yBAAyBlpB,IAEhC+C,YAASC,IAAIhD,EAAM,SAAUgrB,KArYwB,KA0YjDE,cAAgB,SAAClrB,GACvB,IAAwE,IAApE6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,yBAA3C,CAIA,IAAMuqB,EAAM,EAAKoB,mBAAmB/pB,GACpC6C,oBAAiBG,IAAI2lB,EAAK,UAAW,IACrC9lB,oBAAiBG,IAAI2lB,EAAK,QAAS,IACnC9lB,oBAAiBG,IAAI2lB,EAAK,SAAU,IACpC3oB,EAAKsR,UAAUC,OAAO,QACtBvR,EAAKsR,UAAUC,OAAO,iBACtBoX,EAAIrX,UAAUC,OAAO,SAGyB,IAA1C,EAAKiX,eAAexoB,EAAM,cACxBA,EAAKsR,UAAUwI,SAAS,aAC1B9Z,EAAK6qB,YAAYlC,GAEjBtnB,8BAAmB,EAAKjD,QAAS4B,GAGnC+C,YAASwO,OAAOvR,EAAM,OACtB+C,YAASwO,OAAOoX,EAAK,QACrB5lB,YAASwO,OAAOoX,EAAK,UAGc,IAAjC5lB,YAASE,IAAIjD,EAAM,YACrB+C,YAASD,IAAI9C,EAAM,UAAUqjB,UAC7BtgB,YAASwO,OAAOvR,EAAM,WAIxB,EAAKmrB,sBAAsBnrB,GAC3B6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,6BA3agB,KA+ajD+sB,sBAAwB,SAACnrB,IACM,IAAjC+C,YAASE,IAAIjD,EAAM,YACrB+C,YAASD,IAAI9C,EAAM,UAAUqjB,UAC7BtgB,YAASwO,OAAOvR,EAAM,WAGxB6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,4BArbgB,KAwbjDgtB,eAAiB,SAACprB,GACxB,IAAyE,IAArE6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,0BAA3C,EAIsC,IAAlC,EAAK0Z,QAAQmQ,UAAUE,QACzB,EAAKkD,gBAAgBrrB,IAGc,IAAjC+C,YAASE,IAAIjD,EAAM,WACrB,EAAKkrB,cAAclrB,GAGrBA,EAAKsR,UAAU7J,IAAI,SACnBzH,EAAKsR,UAAU7J,IAAI,WAEnB,IAAM6jB,EAAa,EAAKvB,mBAAmB/pB,GAC3C,GAAIsrB,EAAY,CACd,IAAM3C,EAAM2C,EACZ7nB,qBAAUklB,EAAK,EAAK7Q,QAAQmQ,UAAUC,YAAY,WAChDloB,EAAKsR,UAAUC,OAAO,WACtBvR,EAAKsR,UAAU7J,IAAI,QACnBkhB,EAAIrX,UAAU7J,IAAI,QAClBoC,oBAAiBuQ,QAAQ,EAAKhc,QAAS,iCA/cY,KAodjDmtB,eAAiB,SAACvrB,GACxB,IAAyE,IAArE6J,oBAAiBuQ,QAAQ,EAAKhc,QAAS,0BAA3C,CAIA,IAAMuqB,EAAM,EAAKoB,mBAAmB/pB,GACpCA,EAAKsR,UAAU7J,IAAI,UAEfkhB,GACFnlB,mBAAQmlB,EAAK,EAAK7Q,QAAQmQ,UAAUC,YAAY,WAC9CloB,EAAKsR,UAAUC,OAAO,UACtBvR,EAAKsR,UAAUC,OAAO,QACtBoX,EAAIrX,UAAUC,OAAO,QACrBvR,EAAKsR,UAAUC,OAAO,SACtB1H,oBAAiBuQ,QAAQ,EAAKhc,QAAS,iCAleY,KAwejDitB,gBAAkB,SAACrrB,GACzB,IAAMwrB,EAAc,EAAKptB,QAAQ2B,iBAAiB,+BAClD,GAAIyrB,GAAeA,EAAYhtB,OAAS,EACtC,IAAK,IAAID,EAAI,EAAG+gB,EAAMkM,EAAYhtB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CACtD,IAAMktB,EAAaD,EAAYjtB,GAGQ,cAArC,EAAK0rB,gBAAgBwB,IACrBA,IAAezrB,IACe,IAA9BA,EAAK8Z,SAAS2R,KACgB,IAA9BA,EAAW3R,SAAS9Z,IAEpB,EAAKurB,eAAeE,KApf6B,KA4fjDC,OAAS,SAAC1rB,GAChB,IAA+B,IAA3B,EAAKsqB,YAAYtqB,GAArB,CAIA,IAAM2oB,EAAM,EAAKoB,mBAAmB/pB,GAGhC+C,YAASE,IAAIjD,EAAM,SAAW+C,YAASD,IAAI9C,EAAM,UAAY,EAAKiqB,gBAAgBjqB,KAEpFA,EAAKsR,UAAUC,OAAO,SACtBvR,EAAKsR,UAAUC,OAAO,QACtBvR,EAAKsR,UAAUC,OAAO,QAClBoX,GAAOA,EAAIgD,aACbhD,EAAIgD,YAAYhD,EAAK,WA1gB8B,KAghBjDiD,SAAW,aAhhBsC,KAmhBjDjS,QAAU,WACF,EAAKvb,QAAQ2B,iBAAiB,oCACtC6b,SAAQ,SAAC/e,GAAD,OAAQ,EAAK6uB,OAAO7uB,OArhBqB,KAyhBjD6c,MAAQ,SAAC1Z,GACVA,IAI8B,IAA/B,EAAKkqB,gBAAgBlqB,KAIU,aAA/B,EAAKiqB,gBAAgBjqB,GACvB,EAAKkrB,cAAclrB,GACqB,cAA/B,EAAKiqB,gBAAgBjqB,IAC9B,EAAKurB,eAAevrB,KAriBiC,KA0iBjDqa,MAAQ,SAACra,GACVA,IAI8B,IAA/B,EAAKkqB,gBAAgBlqB,KAIU,aAA/B,EAAKiqB,gBAAgBjqB,GACvB,EAAKyqB,cAAczqB,GACqB,cAA/B,EAAKiqB,gBAAgBjqB,IAC9B,EAAKorB,eAAeprB,GAKtB+C,YAASC,IAAIhD,EAAM,OAAQ,EAAKiqB,gBAAgBjqB,MA3jBO,KA+jBjDyZ,QAAU,SAACzZ,GACZA,KAI8B,IAA/B,EAAKkqB,gBAAgBlqB,GACvB,EAAK0Z,MAAM1Z,GAEX,EAAKqa,MAAMra,KAvkB0C,KA4kBjD6rB,UAAY,SAACztB,EAAsBwM,GACzC,IAAM5K,EAAO,EAAKyoB,gBAAgBrqB,GAClC,GAAK4B,GAIwC,UAAzC,EAAKwoB,eAAexoB,EAAM,WAA9B,CAIA,IAAM8rB,EAAUhqB,YAAW,WACW,MAAhCiB,YAASD,IAAI9C,EAAM,UACrB,EAAK0Z,MAAM1Z,KAEZ,EAAK8X,QAAQiQ,SAASC,cAEzBjlB,YAASC,IAAIhD,EAAM,QAAS,KAC5B+C,YAASC,IAAIhD,EAAM,UAAW8rB,KA7lByB,KAimBjDC,WAAa,SAAC3tB,EAAsBwM,GAC1C,IAAM5K,EAAO,EAAKyoB,gBAAgBrqB,GAC7B4B,GAIwC,UAAzC,EAAKwoB,eAAexoB,EAAM,aAIM,MAAhC+C,YAASD,IAAI9C,EAAM,WACrBgsB,aAAajpB,YAASD,IAAI9C,EAAM,YAChC+C,YAASwO,OAAOvR,EAAM,SACtB+C,YAASwO,OAAOvR,EAAM,YAGxB,EAAKqa,MAAMra,KAjnB4C,KAqnBjDisB,SAAW,SAAC7tB,EAAsBwM,GACxC,IAAM5K,EAAO,EAAKyoB,gBAAgBrqB,GAC5BwoB,EAAQ,EAAKkD,sBAAsB9pB,GAEnCksB,EAAc,EAAKjC,gBAAgBjqB,GACzC,GAAa,OAATA,GAAiC,aAAhBksB,IACnB,EAAKxS,MAAM1Z,GAGP4mB,EAAMpoB,OAAS,GACjB,IAAK,IAAID,EAAI,EAAG+gB,EAAMsH,EAAMpoB,OAAQD,EAAI+gB,EAAK/gB,IAE1B,OAAbqoB,EAAMroB,IAAiE,aAAlD,EAAK0rB,gBAAgBrD,EAAMroB,KAClD,EAAKmb,MAAMkN,EAAMroB,KAloB8B,KA0oBjD4tB,MAAQ,SAAC/tB,EAAsBwM,IACgC,IAAjEf,oBAAiBuQ,QAAQ,EAAKhc,QAAS,wBAK3CgqB,EAAcsC,mBAAc3sB,GAC5B8L,oBAAiBuQ,QAAQ,EAAKhc,QAAS,0BAjpBgB,KAopBjDguB,OAAS,SAAChuB,EAAsBwM,GACtCA,EAAE2O,iBACF,IAAMvZ,EAAO,EAAKyoB,gBAAgBrqB,GACW,UAAzC,EAAKoqB,eAAexoB,EAAM,cAIc,IAAxC,EAAKwoB,eAAexoB,EAAM,UAC5B,EAAKqa,MAAMra,GAEX,EAAKyZ,QAAQzZ,KA9pBwC,KAqqBlDqsB,MAAQ,SAACjuB,EAAsBwM,GACpC,OAAO,EAAKwhB,OAAOhuB,EAASwM,IAtqB2B,KAyqBlD0hB,KAAO,SAACluB,EAAsBwM,GACnC,OAAO,EAAKuhB,MAAM/tB,EAASwM,IA1qB4B,KA6qBlD2hB,QAAU,SAACnuB,EAAsBwM,GACtC,OAAO,EAAKqhB,SAAS7tB,EAASwM,IA9qByB,KAirBlD4hB,UAAY,SAACpuB,EAAsBwM,GACxC,OAAO,EAAKmhB,WAAW3tB,EAASwM,IAlrBuB,KAqrBlD6hB,SAAW,SAACruB,EAAsBwM,GACvC,OAAO,EAAKihB,UAAUztB,EAASwM,IAtrBwB,KA0rBlD8hB,mBAAqB,SAAC1sB,GAC3B,OAAO,EAAKwoB,eAAexoB,EAAM,YA3rBsB,KA8rBlD2sB,eAAiB,SAACvuB,GACvB,OAAO,EAAK6rB,gBAAgB7rB,IA/rB2B,KAksBlD+c,KAAO,SAACnb,GACb,OAAO,EAAKqa,MAAMra,IAnsBqC,KAssBlDob,KAAO,SAACpb,GACb,OAAO,EAAK0Z,MAAM1Z,IAvsBqC,KA0sBlDmmB,MAAQ,SAACnmB,GACd,OAAO,EAAK0rB,OAAO1rB,IA3sBoC,KA8sBlDsb,OAAS,WACd,OAAO,EAAK3B,WA/sB2C,KAktBlD2G,WAAa,WAClB,OAAO,EAAKliB,SAntB2C,KAstBlDwuB,mBAAqB,SAAC5sB,GAC3B,OAAO,EAAKuqB,oBAAoBvqB,IAvtBuB,KA0tBlD6sB,qBAAuB,SAAC7sB,GAC7B,OAAO,EAAKwqB,sBAAsBxqB,IA3tBqB,KA8tBlD8sB,kBAAoB,SAAC9sB,GAC1B,OAAO,EAAK+pB,mBAAmB/pB,IA/tBwB,KAkuBlD+sB,sBAAwB,SAAC/sB,GAC9B,OAAO,EAAK+oB,uBAAuB/oB,IAnuBoB,KAsuBlDgtB,eAAiB,SAAChtB,GACvB,OAAO,EAAKkqB,gBAAgBlqB,IAvuB2B,KA0uBlDitB,kBAAoB,SAACjtB,GAC1B,OAAO,EAAKoqB,mBAAmBpqB,IA3uBwB,KA8uBlDktB,kBAAoB,WACzB,OAAO,EAAK7E,gBA/uB2C,KAkvBlD8E,wBAA0B,SAACntB,GAChC,OAAO,EAAKmqB,yBAAyBnqB,IAnvBkB,KAuvBlDotB,eAAiB,SAACptB,GACvB,OAAO,EAAKqrB,gBAAgBrrB,IAxvB2B,KA4vBlDkL,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IA7vBQ,KAgwBlDJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IAjwBO,KAowBlD2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IApwB1CxF,KAAK1B,QAAUua,EACf7Y,KAAKgY,QAAU4D,OAAOC,OAAOmM,GAAoBhQ,GACjDhY,KAAKgZ,YAAcpO,iCAAsB,QAEzC5K,KAAKwoB,qBACLxoB,KAAK6Z,UACL5W,YAASC,IAAIlD,KAAK1B,QAAS,OAAQ0B,MAC5BA,MAdLsoB,GAgxBUtM,YAAc,SAAC1d,GAE3B,IAAMivB,EAActqB,YAASD,IAAI1E,EAAS,QAC1C,GAAIivB,EACF,OAAOA,EAIT,IAAMC,EAAOlvB,EAAQke,QAAQ,SAC7B,GAAIgR,EAAM,CACR,IAAMC,EAAWxqB,YAASD,IAAIwqB,EAAqB,QACnD,GAAIC,EACF,OAAOA,EAKX,GAAInvB,EAAQkT,UAAUwI,SAAS,aAAc,CAC3C,IAAM6O,EAAMvqB,EAAQke,QAAQ,aAC5B,GAAIqM,EAAK,CACP,IAAM6E,EAAUzqB,YAASD,IAAI6lB,EAAoB,QACjD,GAAI6E,EACF,OAAOA,GAKb,OAAO,MA3yBLpF,GA+yBUsC,cAAgB,SAAC+C,GAC7B,IAAM7G,EAAQ3pB,SAAS8C,iBAAiB,6CAExC,GAAI6mB,GAASA,EAAMpoB,OAAS,EAC1B,IAAK,IAAID,EAAI,EAAG+gB,EAAMsH,EAAMpoB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CAChD,IAAMyB,EAAO4mB,EAAMroB,GACb+uB,EAAOlF,GAActM,YAAY9b,GAEnCstB,GAAsC,aAA9BA,EAAKX,eAAe3sB,KAC1BytB,GAEgD,IAAhDH,EAAKR,kBAAkB9sB,GAAM8Z,SAAS2T,KACd,IAAxBztB,EAAK8Z,SAAS2T,IACdztB,IAASytB,GAETH,EAAKlS,KAAKpb,GAGZstB,EAAKlS,KAAKpb,MAj0BhBooB,GAw0BUsF,gBAAkB,WAC9B,IAAM9G,EAAQ3pB,SAAS8C,iBAAiB,6CACxC,GAAI6mB,GAASA,EAAMpoB,OAAS,EAC1B,IAAK,IAAID,EAAI,EAAG+gB,EAAMsH,EAAMpoB,OAAQD,EAAI+gB,EAAK/gB,IAAK,CAChD,IAAIyB,EAAO4mB,EAAMroB,GAEbwE,YAASE,IAAIjD,EAAqB,WACpC+C,YAASD,IAAI9C,EAAqB,UAAU2tB,gBA/0BhDvF,GAs1BU5L,gBAAkB,SAAC9d,GAE/BzB,SAAS8C,iBAAiBrB,GAAUkd,SAAQ,SAAC/e,GAC3C,IACI+wB,EAAexF,GAActM,YADhBjf,GAEZ+wB,IACHA,EAAe,IAAIxF,GAAcvrB,EAAmBirB,SA51BtDM,GAi2BU3L,mBAAqB,WAEjCxf,SAAS6d,iBAAiB,SAAS,SAAClQ,GAClC,IAAMijB,EAAY5wB,SAAS8C,iBAAiB,6CAC5C,GAAI8tB,GAAaA,EAAUrvB,OAAS,EAClC,IAAK,IAAID,EAAI,EAAGA,EAAIsvB,EAAUrvB,OAAQD,IAAK,CACzC,IAAMyB,EAAO6tB,EAAUtvB,GACjBuvB,EAAU1F,GAActM,YAAY9b,GAC1C,GAAI8tB,GAA4C,aAAjCA,EAAQnB,eAAe3sB,GAAsB,CAE7C8tB,EAAQxN,aAArB,IACMqI,EAAMmF,EAAQhB,kBAAkB9sB,GACtC,GAAIA,IAAS4K,EAAE/B,QAAU7I,EAAK8Z,SAASlP,EAAE/B,QACvC,SAGF,GAAI8f,IAAQA,IAAQ/d,EAAE/B,QAAU8f,EAAI7O,SAASlP,EAAE/B,SAC7C,SAEFilB,EAAQ1S,KAAKpb,QAOrBsZ,uBAAoBpO,GAClBjO,SAASiD,KACT,2HACA,SACA,SAA6B0K,GAC3B,IAAM0iB,EAAOlF,GAActM,YAAYhc,MACvC,GAAIwtB,EACF,OAAOA,EAAKjB,MAAMvsB,KAAM8K,MAM9B0O,uBAAoBpO,GAClBjO,SAASiD,KACT,sDACA,SACA,SAA6B0K,GAC3BA,EAAEmjB,kBACF,IAAMT,EAAOlF,GAActM,YAAYhc,MACvC,GAAIwtB,GAAQA,EAAKhB,KACf,OAAOgB,EAAKhB,KAAKxsB,KAAM8K,MAM7B0O,uBAAoBpO,GAClBjO,SAASiD,KACT,gCACA,SACA,SAA6B0K,GAC3B,IAAM0iB,EAAOlF,GAActM,YAAYhc,MACvC,GAAIwtB,EACF,OAAOA,EAAKf,QAAQzsB,KAAM8K,MAMhC0O,uBAAoBpO,GAClBjO,SAASiD,KACT,oCACA,aACA,SAA6B0K,GAC3B,IAAM0iB,EAAOlF,GAActM,YAAYhc,MACvC,GAAIwtB,GAAsC,aAA9BA,EAAKX,eAAe7sB,MAC9B,OAAOwtB,EAAKd,UAAU1sB,KAAM8K,MAMlC0O,uBAAoBpO,GAClBjO,SAASiD,KACT,oCACA,YACA,SAA6B0K,GAC3B,IAAM0iB,EAAOlF,GAActM,YAAYhc,MACvC,GAAIwtB,GAAsC,aAA9BA,EAAKX,eAAe7sB,MAC9B,OAAOwtB,EAAKb,SAAS3sB,KAAM8K,MAMjC3J,OAAO6Z,iBAAiB,UAAU,WAEhCpZ,oBADIC,WAGF,WAEmB1E,SAAS8C,iBAAiB,yBAClC6b,SAAQ,SAAC/e,GAChB,IAAMywB,EAAOlF,GAActM,YAAYjf,GACnCywB,GACFA,EAAKhS,cAIX,SA38BF8M,GAg9BU7L,UAAY,WACxB6L,GAAc3L,qBACd2L,GAAc5L,gBAAgB,0BAl9B5B4L,GAq9BU1L,iBAAmB,WAC/B0L,GAAc5L,gBAAgB,0BAt9B5B4L,GAy9BUzJ,cAAgB,SAC5BjgB,GAE+B,IAD/BoZ,EAC8B,uDADPgQ,GAEjB1pB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACTkvB,EAAOlF,GAActM,YAAY9b,GAIrC,OAHKstB,IACHA,EAAO,IAAIlF,GAAcpoB,EAAM8X,IAE1BwV,IClgCX,IAAMU,GAAuC,CAC3C3I,UAAW,EACX4I,UAAU,EACVC,OAAO,EACPC,OAAQ,OACRC,aAAa,GAGTC,GAAuC,CAC3CxR,cAAe,SACfC,cAAe,mBACf2K,UAAW,mBAGP6G,G,WAqBJ,WAAY3V,EAAuB0E,EAA0BC,GAA2B,IAAD,iCApBvFlf,aAoBuF,OAnBvFmwB,oBAmBuF,OAlBvFC,iBAkBuF,OAjBvFjR,kBAiBuF,OAhBvFkR,oBAgBuF,OAfvFC,kBAeuF,OAdvF7V,mBAcuF,OAbvF8V,mBAauF,OAZvFC,oBAYuF,OAXvFC,oBAWuF,OAVvFC,uBAUuF,OATvFC,kBASuF,OARvFZ,YAQuF,OANvFrW,aAMuF,OALvF8F,aAKuF,OAHvFoR,YAAsB,EAGiE,KAFvFC,gBAEuF,OAmC/EC,YAAc,SAAC5pB,GACrB,OAAO,EAAKlH,QAAQmgB,cAAc,4BAA8BjZ,EAAO,OApCc,KAwC/EyZ,UAAY,SAACzZ,GACnB,IAAM0U,EAAO,EAAK5b,QAAQV,aAAb,UAA6B,EAAKkgB,QAAQ6J,WAA1C,OAAsDniB,IACnE,GAAI0U,EAAM,CACR,IAAI9d,EAAQ8H,yCAA8BgW,GAE1C,OAAc,OAAV9d,GAAoC,SAAlB0d,OAAO1d,KAER,OAAVA,GAAoC,UAAlB0d,OAAO1d,KAI7BA,EAEP,IAAM+d,EAAaC,8BAAmB5U,GAEhC6U,EAAS7V,uCAA4B,EAAKwT,QAASmC,GACzD,OAAIE,EACKnW,yCAA8BmW,GAE9B,MA3D0E,KAiE/EgV,sBAAwB,WAC9B,IAAMC,EAAa,EAAKrQ,UAAU,cAC5B/d,EAAQD,yBAAcC,MAE5B,IAAKouB,EACH,OAAO,KAGT,IAAMzrB,EAAaD,yBAAc0rB,GAQjC,OAAIpuB,GANC2C,GAGcA,EAFDlD,SAAS2uB,IAMlB,KAEA,OApF4E,KAyF/E3I,MAAQ,WACd,EAAKroB,QAAQkT,UAAU7J,IAAI,WAGW,IAApC,EAAKsX,UAAU,kBACf,EAAKxB,aAAarhB,MAAMsC,QAAU,EAAKsZ,QAAQuN,YAE/C,EAAKlK,QAhG8E,KAqG/EkU,KAAO,WACb,EAAKjxB,QAAQkT,UAAUC,OAAO,UAtGuD,KA0G/E2c,MAAQ,SAACtjB,GAGH,MAFAA,EAAE0kB,UAAY1kB,EAAE2kB,SAAW,KAGrC3kB,EAAE2O,iBAEF,EAAKiW,WAhH8E,KAqH/EC,MAAQ,WACd,GAAI,EAAK1Q,UAAU,cAAe,CAChC,IAAMsG,EAAY5kB,SAAS,EAAKse,UAAU,eAEtC,EAAKxB,aAAarhB,MAAMsC,QAAU6mB,EACpC,EAAKmK,SACuC,IAAnC,EAAKjS,aAAarhB,MAAMsC,QACjC,EAAKqU,UA5H4E,KA+MhFyI,OAAS,WAEd,GAAoB,SAAhB,EAAK6S,OAAmB,CAC1B,IAAIuB,EAAqB,EAAKP,wBAEH,OAAvBO,IAAkF,IAAnD,EAAKnB,eAAezU,SAAS,EAAK0U,cACnE,EAAKD,eAAe3G,QAAQ,EAAK4G,aACjC,EAAKA,YAAYld,UAAUC,OAAO,WAEX,QAAvBme,IACmD,IAAnD,EAAKnB,eAAezU,SAAS,EAAK0U,eAElC,EAAKpwB,QAAQwpB,QAAQ,EAAK4G,aAC1B,EAAKA,YAAYld,UAAU7J,IAAI,aA5NkD,KAkOhF0T,KAAO,WACR,EAAK8T,aACP,EAAK3T,SAEL,EAAK2T,WAAW9T,KAAK,EAAK/c,WAtOyD,KA2OhFgd,KAAO,WACR,EAAK6T,aACP,EAAK3T,SAEL,EAAK2T,WAAW7T,KAAK,EAAKhd,WA/OyD,KAoPhFoxB,OAAS,YACU,IAApB,EAAKR,aAEH,EAAKP,gBACP,EAAKA,eAAend,UAAUC,OAAO,UAInC,EAAKmd,cACP,EAAKA,aAAapd,UAAU7J,IAAI,UAI9B,EAAKmnB,gBACP,EAAKA,eAAetd,UAAU7J,IAAI,UAIpC,EAAK8V,aAAakJ,QAElB,EAAKuI,YAAa,EAClBnlB,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBAzQ4C,KA8QhFuxB,SAAW,WACZ,EAAKlB,gBACP,EAAKA,eAAend,UAAU7J,IAAI,UAIhC,EAAKinB,cACP,EAAKA,aAAapd,UAAUC,OAAO,UAGE,IAAnC,EAAKgM,aAAarhB,MAAMsC,QAC1B,EAAKqU,QAIP,EAAK0K,aAAakJ,QAElB,EAAKtL,OAEL,EAAK6T,YAAa,GAjSmE,KAqShFnc,MAAQ,YACqD,IAA9DhJ,oBAAiBuQ,QAAQ,EAAKhc,QAAS,qBAK3C,EAAKmf,aAAarhB,MAAQ,GAC1B,EAAKqhB,aAAakJ,QAGd,EAAKiI,cACP,EAAKA,aAAapd,UAAU7J,IAAI,UAI9B,EAAKmnB,gBACP,EAAKA,eAAetd,UAAUC,OAAO,WAIC,IAApC,EAAKwN,UAAU,kBACjB,EAAK3D,OAGPvR,oBAAiBuQ,QAAQ,EAAKhc,QAAS,uBA7T8C,KAgUhFwxB,aAAe,WACpB,OAAO,EAAKZ,YAjUyE,KAoUhFa,SAAW,WAChB,OAAO,EAAKtS,aAAarhB,OArU4D,KAwUhF4zB,QAAU,WACf,OAAO,EAAKb,YAzUyE,KA4UhFc,eAAiB,WACtB,OAAO,EAAKvB,aA7UyE,KA6VhFtjB,GAAK,SAAC5F,EAAcuF,GACzB,OAAOhB,oBAAiBqB,GAAG,EAAK9M,QAASkH,EAAMuF,IA9VsC,KAiWhFJ,IAAM,SAACnF,EAAcuF,GAC1B,OAAOhB,oBAAiBY,IAAI,EAAKrM,QAASkH,EAAMuF,IAlWqC,KAqWhF2Q,IAAM,SAAClW,GACZ,OAAOuE,oBAAiB2R,IAAI,EAAKpd,QAASkH,IApW1CxF,KAAKgY,QAAU4D,OAAOC,OAAOqS,GAAsB3Q,GACnDvd,KAAK8d,QAAUN,EAGfxd,KAAK1B,QAAUua,EACf7Y,KAAKyuB,eAAiBzuB,KAAKovB,YAAY,WACvCpvB,KAAK0uB,YAAc1uB,KAAKovB,YAAY,QACpCpvB,KAAKyd,aAAezd,KAAKovB,YAAY,SACrCpvB,KAAK2uB,eAAiB3uB,KAAKovB,YAAY,WACvCpvB,KAAK4uB,aAAe5uB,KAAKovB,YAAY,SACrCpvB,KAAK+Y,cAAgB/Y,KAAKovB,YAAY,UACtCpvB,KAAK6uB,cAAgB7uB,KAAKovB,YAAY,UACtCpvB,KAAK8uB,eAAiB9uB,KAAKovB,YAAY,WAEvCpvB,KAAK+uB,eAAiB/uB,KAAKovB,YAAY,WACvCpvB,KAAKgvB,kBAAoBhvB,KAAKovB,YAAY,cAC1CpvB,KAAKivB,aAAejvB,KAAKovB,YAAY,SAGrCpvB,KAAKquB,OAASruB,KAAKif,UAAU,UACT,SAAhBjf,KAAKquB,SACPruB,KAAKmvB,WAAa,IAAI7G,GAActoB,KAAKyuB,eAAgBzG,KAI3DhoB,KAAKwb,SAGLxb,KAAK0e,WAELzb,YAASC,IAAIlD,KAAK1B,QAAS0B,KAAK8d,QAAQf,cAAe/c,M,6CAiGzD,WAA0B,IAAD,OAEvBA,KAAKyd,aAAazC,iBAAiB,QAAShb,KAAK2mB,OAGjD3mB,KAAKyd,aAAazC,iBAAiB,OAAQhb,KAAKuvB,OAGb,IAA/BvvB,KAAKif,UAAU,aACjBjf,KAAKyd,aAAazC,iBAAiB,QAAShb,KAAK2vB,OAI/C3vB,KAAK6uB,eACP7uB,KAAK6uB,cAAc7T,iBAAiB,QAAShb,KAAK0vB,SAIpB,IAA5B1vB,KAAKif,UAAU,UACjBjf,KAAKyd,aAAazC,iBAAiB,WAAYhb,KAAKouB,OAIlDpuB,KAAK4uB,cACP5uB,KAAK4uB,aAAa5T,iBAAiB,QAAShb,KAAK+S,OAI/C/S,KAAKmvB,aAEHnvB,KAAK+Y,gBACP/Y,KAAK+Y,cAAciC,iBAAiB,QAAShb,KAAKqb,MAElDrb,KAAKmvB,WAAW/jB,GAAG,yBAAyB,WAEtCzJ,4BAAiB3B,KAAK+Y,iBAExB/Y,KAAK+Y,cAAcvH,UAAU7J,IAAI,UAEjC3H,KAAK+Y,cAAcvH,UAAU7J,IAAI,YAIrC3H,KAAKmvB,WAAW/jB,GAAG,yBAAyB,WAEtCzJ,4BAAiB3B,KAAK+Y,iBAExB/Y,KAAK+Y,cAAcvH,UAAUC,OAAO,UAEpCzR,KAAK+Y,cAAcvH,UAAUC,OAAO,aAK1CzR,KAAKmvB,WAAW/jB,GAAG,0BAA0B,WAE3CpL,KAAKyd,aAAakJ,YAKtBxlB,OAAO6Z,iBAAiB,UAAU,WAGhCpZ,oBAFIC,WAIF,WACE,EAAK2Z,WAEP,U,6BA0IN,WACE,OAAOxb,KAAKyd,e,+BAGd,WACE,OAAOzd,KAAKyuB,iB,wBAGd,WACE,OAAOzuB,KAAK1B,Y,KA9WVkwB,GA+XUxS,YAAc,SAC1Bjf,GAEI,IADJggB,EACG,uDADqBwR,GAAqBxR,cAEvCmT,EAASjtB,YAASD,IAAIjG,EAAIggB,GAChC,OAAImT,GAIG,MAxYL1B,GA2YU9R,gBAAkB,WAI1B,IAHJ9d,EAGG,uDAHgB2vB,GAAqBvR,cACxChF,EAEG,uDAFuBkW,GAC1BpQ,EACG,uDADuByQ,GAEpB3P,EAAWzhB,SAASiD,KAAKH,iBAAiBrB,GAChDggB,EAAS9C,SAAQ,SAAC/e,GAChB,IAAMmD,EAAOnD,EACTmzB,EAAS1B,GAAgBxS,YAAY9b,GACpCgwB,IACHA,EAAS,IAAI1B,GAAgBtuB,EAAM8X,EAAS8F,QArZ9C0Q,GA0ZU3P,cAAgB,WAIK,IAHjCjgB,EAGgC,uDAHb2vB,GAAqBvR,cACxChF,EAEgC,uDAFNkW,GAC1BpQ,EACgC,uDADNyQ,GAEpBjwB,EAAUnB,SAASiD,KAAKqe,cAAc7f,GAC5C,GAAKN,EAAL,CAGA,IAAM4B,EAAO5B,EACT4xB,EAAS1B,GAAgBxS,YAAY9b,GAIzC,OAHKgwB,IACHA,EAAS,IAAI1B,GAAgBtuB,EAAM8X,EAAS8F,IAEvCoS,IAxaL1B,GA2aU/R,UAAY,WAA4D,IAA3D7d,EAA0D,uDAAvC2vB,GAAqBvR,cACjEwR,GAAgB9R,gBAAgB9d,IA5a9B4vB,GA+aU5R,iBAAmB,WAA4D,IAA3Dhe,EAA0D,uDAAvC2vB,GAAqBvR,cACxEwR,GAAgB9R,gBAAgB9d,IC5cpC,IAAMuxB,GAA4B,SAAC,GAO5B,IANLre,EAMI,EANJA,GACA9E,EAKI,EALJA,MACAC,EAII,EAJJA,KACAmjB,EAGI,EAHJA,SAGI,IAFJC,gBAEI,aADJC,iBACI,SACGhlB,EAAYilB,cAAZjlB,SAEP,OACE,qBAAKS,UAAU,oBAAf,SACE,eAAC,KAAD,CACEA,UAAW8E,YAAK,iBAAkB,CAChC2f,OAAQhlB,YAAcF,EAAUwG,KAElCA,GAAIA,EAJN,UAMGwe,GACC,sBAAMvkB,UAAU,cAAhB,SACE,sBAAMA,UAAU,wBAInBkB,GACC,sBAAMlB,UAAU,YAAhB,SACE,cAAC,IAAD,CAAOC,KAAMiB,EAAMlB,UAAU,iBAIhCqkB,GACC,sBAAMrkB,UAAU,YAAhB,SACE,mBAAGA,UAAW8E,YAAK,UAAWuf,OAIlC,sBAAMrkB,UAAU,aAAhB,SAA8BiB,IAE7BqjB,GAAY,sBAAMtkB,UAAU,qBClD9B,SAAS0kB,KACd,OACE,qCACE,cAAC,GAAD,CAAUzjB,MAAM,uBAAe8E,GAAG,YAClC,cAAC,GAAD,CAAU9E,MAAM,wBAAgB8E,GAAG,gBCJzC,IAAM4e,GAAa,WACjB,OACE,qBACE3kB,UAAU,4CACV4kB,iBAAe,OACfC,sBAAoB,cACpBC,0BAAwB,6BACxBC,yBAAuB,OACvBC,uBAAqB,sCACrBC,2BAAyB,MACzBC,wBAAsB,gCACtBC,kBAAgB,OAChBC,uBAAqB,UACrBC,yBAAuB,8CAXzB,SAaE,qBACErlB,UAAU,iOACV0E,GAAG,kBACH4gB,eAAa,OAHf,SAKE,cAACZ,GAAD,S,mBCjBFa,GAAmB,WAAO,IAAD,EACyB/0B,eAA/CL,EADsB,EACtBA,UAAWC,EADW,EACXA,gBAAiBE,EADN,EACMA,gBADN,EAESib,eAA/Bia,EAFsB,EAEtBA,OAAQC,EAFc,EAEdA,WAAYna,EAFE,EAEFA,QAC3B,OACE,gDACMma,EAAWt1B,WADjB,IAEE6P,UAAW8E,YAAK,oBAAqBwG,EAAQnb,UAAUu1B,KAAK,MAF9D,UAKGv1B,GACC,qBAAI6P,UAAU,0DAAd,UACG7P,EACAC,GAAmBo1B,EAAOr1B,WAAaq1B,EAAOr1B,UAAUQ,aACvD,qCACE,sBAAMqP,UAAU,kDAChB,uBAAOA,UAAU,oCAAjB,SAAsD5P,UAO7DE,GACCA,EAAgBqC,OAAS,GACzB6yB,EAAOr1B,WACPq1B,EAAOr1B,UAAUw1B,aACf,qCACkC,QAA/BH,EAAOr1B,UAAUyc,WAChB,sBAAM5M,UAAU,6CAElB,qBAAIA,UAAU,wDAAd,UACG4lB,MAAM/f,KAAKvV,GAAiB+qB,KAAI,SAAClnB,EAAM+hB,GAAP,OAC/B,oBACElW,UAAW8E,YAAK,kBAAmB,CACjC,aAAc3Q,EAAK0xB,aAAe1xB,EAAK2xB,SACvC,cAAe3xB,EAAK0xB,cAAgB1xB,EAAK2xB,WAH7C,SAOI3xB,EAAK0xB,YAKL,sBAAM7lB,UAAU,mCAJhB,cAAC,KAAD,CAAMA,UAAU,gCAAgC+F,GAAI5R,EAAK8L,KAAzD,SACG9L,EAAK8M,SATZ,UAKU9M,EAAK8L,MALf,OAKsBiW,OAWxB,oBAAIlW,UAAU,4BAAd,SAA2C7P,eC9CnD41B,I,OAAqB,WACzB,IAAM1lB,EAAmD,MAAhCoB,IAAYukB,iBAA4BrkB,KAAK6I,MAAM/I,IAAYukB,kBAAoB,KAC5G,OACE,sBACEhmB,UAAU,oIACVslB,eAAa,OAFf,UAIE,qBAAKtlB,UAAU,iBAAf,SACE,qBAAKA,UAAU,8CAAf,SAGE,qBAAKA,UAAU,qBAAf,SACE,qBAAKA,UAAU,2CAAf,gBACGK,QADH,IACGA,OADH,EACGA,EAAMM,cAMf,qBAAKX,UAAU,mBAEf,qBAAKA,UAAU,iBAAf,SACE,cAAC,KAAD,CAAM+F,GAAG,UAAU/F,UAAU,iBAA7B,6B,OCdeI,ICdhB,SAAS6lB,KACd,OACE,sBAAKjmB,UAAU,gBAAf,UACE,qBAAKG,IAAKb,YAAc,iCAAkCqG,IAAI,eAC9D,kD,mCC8BJ5C,IAAW,CACTmjB,QAASnjB,MAAaI,WAAWrC,MAAM,YACvCqlB,SAAUpjB,MAAaI,WAAWrC,MAAM,cAE1CiC,IAAW,CACTqjB,UAAWrjB,MAAaI,WAAWrC,MAAM,eAE3CiC,IAAW,CACTsjB,OAAQtjB,MAAaI,WAAWrC,MAAM,iBACtCwlB,OAAQvjB,MAAaI,WAAWrC,MAAM,qBAExCiC,IAAW,CACTwjB,WAAYxjB,MAAaI,WAAWrC,MAAM,QAC1C0lB,WAAYzjB,MAAaI,WAAWrC,MAAM,eAC1C2lB,gBAAiB1jB,MAAaI,WAAWrC,MAAM,oBAC/C4lB,eAAgB3jB,MAAaI,WAAWrC,MAAM,mBAC9C6lB,QAAS5jB,MAAaI,WAAWrC,MAAM,S,ICzCrC8lB,GAAa,WAAO,IACjBpB,EAAUja,uBAAVia,OAEP,OACE,sBAAKxlB,UAAU,2CAAf,UAGE,sBACEA,UAAW8E,YAAK,4BAbS,gBAczBJ,GAAG,6BAFL,UAKE,qBACE1E,UAAW8E,YAAK,wBAhBO,8BAiBvB+hB,uBAAqB,QACrBC,sBAAoB,SACpBC,yBAAuB,aACvBC,oBAAkB,SALpB,SAOE,qBAAK7mB,IAAKb,YAAc,iDAAkDqG,IAAI,eAEhF,cAAC,GAAD,OAMsB,SAAvB6f,EAAOyB,OAAOxzB,MACb,qBAAKuM,UAAU,iDAAiDiB,MAAM,mBAAtE,SACE,qBACEjB,UAAU,0EACV0E,GAAG,+BAFL,SAIE,cAAC,IAAD,CAAOzE,KAAK,6CAA6CD,UAAU,uBCjCxE,SAASknB,KAAiB,IACxB3nB,EAAYilB,cAAZjlB,SADuB,EAEQgM,uBAA/Bia,EAFuB,EAEvBA,OAAQla,EAFe,EAEfA,QAASma,EAFM,EAENA,WACjBwB,EAAiBzB,EAAjByB,OAAQE,EAAS3B,EAAT2B,MAMf,OAJAt2B,qBAAU,WACR0rB,GAAc1L,qBACb,CAACtR,IAGF,6CACEmF,GAAG,YACH1E,UAAW8E,YAAK,SAAUwG,EAAQ2b,OAAOvB,KAAK,KAAM,wBAChDD,EAAW2B,YAHjB,aAKE,sBACEpnB,UAAW8E,YACTwG,EAAQ+b,gBAAgB3B,KAAK,KAC7B,sDAHJ,UAOGyB,EAAM1vB,SACL,qBAAKuI,UAAU,iDAAiDiB,MAAM,kBAAtE,SACE,qBACEjB,UAAU,0EACV0E,GAAG,yBAFL,SAIE,cAAC,IAAD,CAAOzE,KAAK,qCAAqCD,UAAU,0BAM/DmnB,EAAM1vB,SACN,qBAAKuI,UAAU,uDAAf,SACE,cAAC,KAAD,CAAM+F,GAAG,aAAa/F,UAAU,YAAhC,SACE,qBAAK2F,IAAI,OAAOxF,IAAKb,YAAc,2BAA4BU,UAAU,eAM9EmnB,EAAM1vB,SACL,qBAAKuI,UAAU,uDAAf,SACE,cAAC,KAAD,CAAM+F,GAAG,IAAI/F,UAAU,YAAvB,SACE,qBAAK2F,IAAI,OAAOxF,IAAKb,YAAc,2BAA4BU,UAAU,eAM/E,sBAAKA,UAAU,oEAAf,UAEmB,SAAhBinB,EAAOxzB,MACN,qBAAKuM,UAAU,6BAA6B0E,GAAG,gBAA/C,SACE,cAAC,GAAD,MAIa,eAAhBuiB,EAAOxzB,MACN,qBAAKuM,UAAU,4BAA4B0E,GAAG,gBAA9C,SACE,cAAC,GAAD,MAIJ,qBAAK1E,UAAU,2CAAf,SACE,cAAC,GAAD,eCzEZ,IAAMsnB,GAAU,WAAO,IAEdhc,EAAWC,eAAXD,QAEP,OACE,qBAAKtL,UAAU,UAAU0E,GAAG,aAA5B,SACE,qBACEA,GAAG,uBACH1E,UAAW8E,YAAKwG,EAAQic,iBAAiB7B,KAAK,KAAM,qBAFtD,SAIE,cAAC,GAAD,SCHD,SAAS8B,KAAa,IACpBjoB,EAAYilB,cAAZjlB,SACDkoB,EAAangB,kBAAO,GA0C1B,OAbAzW,qBAAU,WACJ42B,EAAW9nB,QACb8nB,EAAW9nB,SAAU,EA5BvB1J,YAAW,WAETsmB,GAAc1L,mBACdgH,GAAgB6P,mBAChBzxB,YAAW,WACT8iB,GAAgBlI,mBAChBhE,GAAgBgE,qBAEf,MACF,KAOsB,WACzB,IAAM8W,EAAev2B,SAASiD,KAAKH,iBAAd,kCACrB,GAAIyzB,GAAgBA,EAAah1B,OAAS,EAAG,CAC3C,IAAMkmB,EAAShB,GAAgB5H,YAAY0X,EAAa,IACpD9O,GACFA,EAAOpJ,UAYXmY,GACA3xB,YAAW,WArBX6e,GAAmBI,UAuBhB,KACF,CAAC3V,IAGF,qBAAKmF,GAAG,eAAe1E,UAAU,YAAY6nB,oBAAkB,OAA/D,SACE,cAAC,IAAD,CAAO5nB,KAAK,+CCpDlB,IAAM6nB,GAAoB,SAAC,GAAgB,IAAf73B,EAAc,EAAdA,SACnBqb,EAAWC,uBAAXD,QACDzJ,EAAW2iB,cAKjB,OAJA3zB,qBAAU,WACRgc,GAAgBuD,YACf,CAACvO,IAGF,qBAAK6C,GAAG,uBAAuB1E,UAAW8E,YAAKwG,EAAQyc,iBAAiBrC,KAAK,MAA7E,SACGz1B,KCHA,SAAS+3B,KAAc,IACrBxC,EAAUja,uBAAVia,OACDiC,EAAangB,kBAAO,GAoB1B,OAPAzW,qBAAU,WACJ42B,EAAW9nB,UACb8nB,EAAW9nB,SAAU,EAbvB8nB,EAAW9nB,SAAU,EACrB1J,YAAW,WACT8iB,GAAgBrI,YAChBoE,GAAmBpE,YACnB7D,GAAgB6D,YAChBmH,GAAgBnH,YAChB6L,GAAc7L,YACduC,GAAgBvC,cACf,QAQF,CAAC8U,IAEG,6BCxBT,IAAMyC,GAAyB,SAAC,GAAgB,IAAfh4B,EAAc,EAAdA,SAC/B,OACE,eAAC,oBAAD,WACE,qBAAK+P,UAAU,yCAAf,SACE,sBAAKA,UAAU,4CAA4C0E,GAAG,aAA9D,UACI,cAACwiB,GAAD,IAEA,sBAAKxiB,GAAG,aAAa1E,UAAU,+CAA/B,UACI,cAAC,GAAD,IACA,qBAAKA,UAAU,gCAAgC0E,GAAG,UAAlD,SACI,cAAC,GAAD,UAAUzU,SAGlB,cAAC,GAAD,SAIN,cAAC+3B,GAAD,IACA,cAACR,GAAD,QCxBC,SAASU,KAEd,IAAMC,EAAkBC,gBAAK,kBAAM,iCAC7BC,EAAiBD,gBAAK,kBAAM,uDAElC,OACE,cAAC,WAAD,CAAUE,SAAU,cAACrC,GAAD,IAApB,SACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOhmB,KAAK,WAAW2F,UAAYuiB,IACnC,cAAC,IAAD,CAAOloB,KAAK,UAAU2F,UAAYyiB,IAClC,cAAC,IAAD,CAAUxiB,KAAK,QAAQE,GAAG,YAC1B,cAAC,IAAD,CAAUD,OAAK,EAAC7F,KAAK,IAAI8F,GAAG,YAC5B,cAAC,IAAD,CAAUA,GAAG,mBCPnB,IAAMwiB,GAAa,WAGjB,IACMC,EAAsB,MADf/mB,IAAYukB,iBAE1B,OACE,eAAC,IAAD,WACIwC,EAOA,cAAC,IAAD,CAAU3iB,KAAK,QAAQE,GAAG,MAL1B,cAAC,IAAD,UACE,cAACP,EAAD,MAQJ,cAAC,IAAD,CAAOvF,KAAK,UAAU2F,UAAWkB,KAE/B0hB,EAIA,cAAC,GAAD,UACE,cAACN,GAAD,MAHF,cAAC,IAAD,CAAUniB,GAAG,oBCpBhB0iB,GAAuB,SAAC,GAAgB,IAAfC,EAAc,EAAdA,SAC7B,OACE,cAAC,WAAD,CAAUJ,SAAU,cAAC,sBAAD,IAApB,SACE,cAAC,KAAD,CAAeI,SAAUA,EAAzB,SACE,cAAC,GAAD,UACE,cAAC,kBAAD,UACE,cAAC,GAAD,UACE,cAAC,GAAD,e,OCwBdC,KAAMC,SAAN,MAAAD,KAAK,YAAaE,OAElBC,IAASC,OACP,cAAC,GAAD,UACE,cAAC,IAAD,CAAU7qB,MAAOA,GAAjB,SAEE,cAAC,IAAD,CAAa2L,UAAWA,GAAWvG,QAAS,0DAA5C,SACE,cAAC,GAAD,CAAKolB,SAvBQlpB,mBA2BnBpO,SAASuc,eAAe,U,oFCrDbzW,EAAb,wFAGE,SAAkBgZ,EAAmC1X,EAAayL,GAChE,GAAKiM,EAAL,CAIA,IAAM8Y,EAAe9xB,EAASgH,MAAMjH,IAAIiZ,GACxC,GAAK8Y,EAMLA,EAAa7xB,IAAIqB,EAAKyL,OANtB,CACE,IAAMglB,GAAS,IAAI3qB,KAAMnH,IAAIqB,EAAKyL,GAClC/M,EAASgH,MAAM/G,IAAI+Y,EAAU+Y,OAXnC,iBAkBE,SAAkB/Y,EAAuB1X,GACvC,IAAMwwB,EAAe9xB,EAASgH,MAAMjH,IAAIiZ,GACxC,GAAK8Y,EAIL,OAAOA,EAAa/xB,IAAIuB,KAxB5B,oBA2BE,SAAqB0X,EAAuB1X,GAC1C,IAAMwwB,EAAe9xB,EAASgH,MAAMjH,IAAIiZ,GACnC8Y,GAILA,EAAalqB,OAAOtG,KAjCxB,iBAoCE,SAAkB0X,EAAuB1X,GACvC,IAAMwwB,EAAe9xB,EAASgH,MAAMjH,IAAIiZ,GACxC,QAAI8Y,GACKA,EAAa5xB,IAAIoB,KAvC9B,kCA6CE,SAAmCA,GACjC,IAAMpC,EAAgB,GAQtB,OAPAc,EAASgH,MAAM6R,SAAQ,SAACjT,GACtBA,EAAIiT,SAAQ,SAACmZ,EAAGC,GACVA,IAAM3wB,GACRpC,EAAO7B,KAAK20B,SAIX9yB,MAtDX,KAAac,EACJgH,MAA4C,IAAII,K,gCCDzD,wtB,0MCcM8qB,EAAoB5pB,2IAAY6pB,kCAAoC,eAsBnE,SAASC,IACd,MAAO,CACLrC,OAAQ,GACRI,gBAAiB,GACjBkC,aAAc,GACdnC,WAAY,GACZD,MAAO,GACPqC,UAAW,GACXC,YAAa,GACbC,QAAS,GACTnC,iBAAkB,GAClB/Q,QAAS,GACTuR,iBAAkB,GAClBvc,gBAAiB,GACjBme,QAAS,GACTx5B,UAAW,IAIR,SAASy5B,IACd,MAAO,CACLJ,UAAW,IAAIlrB,IACfirB,aAAc,IAAIjrB,IAClB8oB,WAAY,IAAI9oB,IAChB+oB,gBAAiB,IAAI/oB,IACrBnO,UAAW,IAAImO,KAIZ,SAASurB,IACd,MAAO,CACLx1B,KAAM,IAAIiK,KAIP,IAAMwrB,EAAb,mGAOE,WACEA,EAAYxe,QA1CP,CACL2b,OAAQ,GACRI,gBAAiB,GACjBkC,aAAc,GACdnC,WAAY,GACZD,MAAO,GACPqC,UAAW,GACXC,YAAa,GACbC,QAAS,GACTnC,iBAAkB,GAClB/Q,QAAS,GACTuR,iBAAkB,GAClBvc,gBAAiB,GACjBme,QAAS,GACTx5B,UAAW,MAoBf,gCAWE,WACE25B,EAAYrE,WAAa5V,OAAOC,OAAO,GAAI8Z,OAZ/C,8BAeE,WACEE,EAAYC,aAAeF,MAhB/B,wBAmBE,SAA0BrE,GAAwB,IAAD,QAC/CI,MAAM/f,KAAKzU,SAASiD,KAAKoxB,YAAY1V,SAAQ,SAAC5B,GAC5C/c,SAASiD,KAAKqa,gBAAgBP,EAAK1U,SAErCrI,SAASiD,KAAKlC,aAAa,QAAS,IACpCf,SAASiD,KAAKlC,aAAa,KAAM,YACjC,UAAIqzB,EAAOwE,YAAX,iBAAI,EAAa31B,YAAjB,aAAI,EAAmB41B,mBACrB74B,SAASiD,KAAKvC,MAAMm4B,gBAApB,eAA8CzE,EAAOwE,KAAK31B,KAAK41B,gBAA/D,QAGF,UAAIzE,EAAOwE,YAAX,iBAAI,EAAa31B,YAAjB,aAAI,EAAmB61B,QACrB94B,SAASiD,KAAKoR,UAAU7J,IAAI4pB,EAAOwE,KAAK31B,KAAK61B,SA9BnD,wBAuCE,SAA0B1E,GACxBsE,EAAYxe,QAAQ+b,gBAAgB9yB,KACjB,UAAjBixB,EAAOrwB,MAAoB,kBAAoB,aAG7CqwB,EAAO2E,MAAMC,SACfh5B,SAASiD,KAAKoR,UAAU7J,IAAI,gBAG1B4pB,EAAO2E,MAAME,iBACfj5B,SAASiD,KAAKoR,UAAU7J,IAAI,oCAjDlC,yBAqDE,SAA2B4pB,GACzB,GAAKA,EAAO/tB,QAAZ,CAIArG,SAASiD,KAAKoR,UAAU7J,IAAI,mBAC5BkuB,EAAYxe,QAAQic,iBAAiBhzB,KAClB,UAAjBixB,EAAOrwB,MAAoB,kBAAoB,aAG7CqwB,EAAO2E,MAAMC,SACfh5B,SAASiD,KAAKoR,UAAU7J,IAAI,iBAG1B4pB,EAAO2E,MAAMG,qBACfl5B,SAASiD,KAAKoR,UAAU7J,IAAI,mCAI9B,IAAMH,EAAO+pB,EAAOlD,OACdiI,EAAc/E,EAAOgF,QAAQ/uB,GACnC,GAAI8uB,EAAa,CACf,IAAIE,EAAqB,GACrBF,EAAYj1B,SACdm1B,GAAU,gCAA6BF,EAAYj1B,OAAzC,MAGRi1B,EAAYG,4BACdD,GAAU,kDAA+CF,EAAYG,0BAA3D,MAEZt5B,SAASiD,KAAKlC,aAAa,QAASs4B,OAnF1C,2BAuFE,SAA6BjF,GACtBA,EAAO/tB,UAIa,WAArB+tB,EAAO5Y,WACT3Y,KAAKqX,QAAQnb,UAAUoE,KAAK,eAC5BN,KAAKqX,QAAQnb,UAAUoE,KAAK,uBAE5BN,KAAKqX,QAAQnb,UAAUoE,KAAK,sBAC5BN,KAAKqX,QAAQnb,UAAUoE,KAAK,cAE9BN,KAAKqX,QAAQnb,UAAUoE,KAAK,QAExBixB,EAAOjC,aACTtvB,KAAKqX,QAAQnb,UAAUoE,KAAK,QAC5BN,KAAKqX,QAAQnb,UAAUoE,KAAK,WAE5Bu1B,EAAYrE,WAAWt1B,UAAUgH,IAAI,mBAAmB,GACxD2yB,EAAYrE,WAAWt1B,UAAUgH,IAAI,uBAAwB,WAC7D2yB,EAAYrE,WAAWt1B,UAAUgH,IAC/B,yBADF,+CAE0CquB,EAAOmF,qBAFjD,eAE4EnF,EAAOoF,iBAFnF,WA3GN,yBAkHE,SAA2BpF,GACzBsE,EAAYxe,QAAQyc,iBAAiBxzB,MAEnCixB,EAAOrwB,MAAoB,sBArHjC,uBA4HE,SAAyBqwB,GAElBA,EAAO/tB,UAKZrG,SAASiD,KAAKoR,UAAU7J,IAAI,iBAC5BkuB,EAAYxe,QAAQ6b,MAAM5yB,KAA1B,gBAAwCixB,EAAOqF,QAG3CrF,EAAO2E,OACT/4B,SAASiD,KAAKoR,UAAU7J,IAAI,eAI1B4pB,EAAOsF,WACT15B,SAASiD,KAAKlC,aAAa,yBAA0B,MAInDqzB,EAAOuF,WACTjB,EAAYxe,QAAQ6b,MAAM5yB,KAAK,sBAlJrC,2BAsJE,SAA6BixB,MAtJ/B,wBAmLE,SAA0BA,GACxBsE,EAAYxe,QAAQE,gBAAgBjX,KAApC,mBAAsE,UAAjBixB,EAAOrwB,MAAoB,SAAW,OApL/F,wBAuLE,SAA0BqwB,GAAwB,IAAD,KAC/C,UAAIA,EAAOwE,YAAX,aAAI,EAAagB,kBACf55B,SAASiD,KAAKoR,UAAU7J,IAAI,aAI9BkuB,EAAYmB,WAAWzF,GACG,aAAtB,UAAAA,EAAOwE,YAAP,eAAavuB,QAIjBquB,EAAYoB,WAAW1F,EAAOyB,QAC9B6C,EAAYqB,cAAc3F,EAAOr1B,WACjC25B,EAAYsB,YAAY5F,EAAOkE,SAC/BI,EAAYuB,YAAY7F,EAAOhP,SAC/BsT,EAAYwB,UAAU9F,EAAO2B,OAC7B2C,EAAYyB,WAAW/F,EAAOgG,QAC9B1B,EAAY2B,cAAcjG,EAAO2B,UAxMrC,iCA2ME,SAAkCuE,GAChC,IAAMlG,EAASsE,EAAYtE,OACrBmG,EAAa,2BAAOnG,GAAWkG,GAQrC,OAPA5B,EAAY8B,iBACZ9B,EAAY+B,mBACZ/B,EAAYgC,qBACZhC,EAAYiC,UAAW,EACvBjC,EAAYtE,OAASmG,EACrB7B,EAAYkC,WAAWnc,OAAOC,OAAO,GAAI6b,IACzC7B,EAAYiC,UAAW,EAChBJ,IArNX,uBAwNE,SAAwBnG,IAnQ1B,SAAmBA,GACjB,IACEze,aAAaklB,QAAQ7C,EAAmBznB,KAAKC,UAAU4jB,IACvD,MAAO/a,GACPxP,QAAQsJ,MAAMkG,IAgQdyhB,CAAU1G,OAzNd,KAAasE,EACGiC,UAAoB,EADvBjC,EAEGtE,OAzDT,WACL,IAAMlb,EAAKvD,aAAawD,QAAQ6e,GAChC,GAAI9e,EACF,IACE,OAAO3I,KAAK6I,MAAMF,GAClB,MAAOG,GACPxP,QAAQsJ,MAAMkG,GAGlB,OAAO0hB,IAgDyBC,GAFrBtC,EAGGxe,QArCP,CACL2b,OAAQ,GACRI,gBAAiB,GACjBkC,aAAc,GACdnC,WAAY,GACZD,MAAO,GACPqC,UAAW,GACXC,YAAa,GACbC,QAAS,GACTnC,iBAAkB,GAClB/Q,QAAS,GACTuR,iBAAkB,GAClBvc,gBAAiB,GACjBme,QAAS,GACTx5B,UAAW,IAoBF25B,EAIGrE,WAAoCmE,IAJvCE,EAKGC,aAAoCF,IALvCC,EA4NGpZ,eACZoZ,EAAYuC,oBAAoBvC,EAAYtE,S,oFCpSnCxuB,EAAb,wFACE,SAAkBzE,EAAsB+5B,EAAkBj8B,EAAak8B,GACjEA,EACFh6B,EAAQT,MAAMwgB,YAAYga,EAAUj8B,EAAO,aAE3CkC,EAAQT,MAAMwgB,YAAYga,EAAUj8B,KAL1C,iBASE,SAAkBkC,EAAsBwlB,GACtC,OAAOxlB,EAAQT,MAAMN,iBAAiBumB,KAV1C,oBAaE,SAAqBxlB,EAAsBi6B,GACzCj6B,EAAQT,MAAM26B,eAAeD,OAdjC,M,iJCSelyB,G,OAAb,sCACEwB,MAAO,EADT,KAEED,WAAY,EAFd,KAGEE,WAAY,EAHd,KAIEC,YAAa,IAEFlB,EAAb,sCACE4xB,OAAO,EADT,KAEEC,iBAAkB,MAFpB,KAGE1wB,cAAe,EAHjB,KAIEG,gBAAiB,EAJnB,KAKED,aAAc,GAgCHqB,EAAb,sCACEH,WAA+B,K,gCCrDnC,SAAS5E,EAA4Bm0B,EAAUp0B,GAC7C,IAAM6iB,EAAM,IAAI/c,IAAIuR,OAAOgd,QAAQD,IACnC,GAAIA,EAAIE,eAAet0B,IAAQ6iB,EAC7B,OAAOA,EAAIpkB,IAAIuB,GASnB,SAASqG,EAAsBkuB,GAC7B,IAAM32B,EAASkG,KAAK0wB,MAAM1wB,KAAK2wB,UAAW,IAAIxhB,MAAOyhB,WAAWp8B,WAChE,OAAKi8B,EAIC,GAAN,OAAUA,GAAV,OAAmB32B,GAHVA,EAOX,SAASiY,EAAmB8e,GAC1B,OAAOA,EAAI97B,QAAQ,WAAW,SAAU+7B,GACtC,OAAOA,EAAE,GAAGC,iBAIhB,SAASh1B,EAAOhI,GACd,GAAqB,kBAAVA,EACT,OAAOA,EAGT,GAAKA,EAAL,CAKA,IAKIi9B,EALWj9B,EACZS,WACA8O,MAAM,IACNyb,KAAI,SAACrqB,GAAD,MAAgB,MAAPA,EAAaA,EAAK,OAC/B00B,KAAK,IACar0B,QAAQ,mBAAmB,SAAUk8B,GACxD,MAAO,IAAMA,EAAQC,UAAU,EAAGD,EAAQ56B,OAAS,GAAK,QAE1D,IACE,OAAOgP,KAAK6I,MAAM8iB,GAClB,SACA,SAjDJ,yI,6GCIaj2B,EAAb,4FACE,SACEwO,EACAE,EACA0nB,EACAhe,EACAqU,GAMA,IAAM4J,EACI,SAAUC,EAAWC,EAAWn7B,EAAWo7B,GACjD,OAAQp7B,EAAIk7B,EAAKE,EAAID,GAKpB9J,IACHA,EAAW,cAKb,IAAMgK,EAAS/nB,EAAKF,EAkBpB4J,EAAO5J,GAGP,IAAMkoB,EACJ34B,OAAO44B,aAAe54B,OAAO44B,YAAYC,IAAM74B,OAAO44B,YAAYC,OAAS,IAAIxiB,KAEjFrW,OAAO84B,uBAtBP,SAASC,EAAKC,GACZ,IAAI7tB,GAAQ6tB,IAAc,IAAI3iB,MAAUsiB,EAEpCxtB,GAAQ,GACVkP,EAAOie,EAAentB,EAAMsF,EAAMioB,EAAQL,IAExCltB,GAAQ,GAAKA,GAAQktB,GACvBhe,EAAO1J,GACH+d,GACFA,KAGF1uB,OAAO84B,sBAAsBC,QAvCrC,0BAoDE,SACE57B,EACA87B,EACAnvB,GAEA,IAAMovB,EAAiBD,EAAczuB,MAAM,KAC3C0uB,EAAeve,SAAQ,SAACwe,GAAD,OAAch8B,EAAQkT,UAAU7J,IAAI2yB,MAC3D9gB,IAAoB7O,IAAIrM,EAAS,gBAAgB,WAC/C+7B,EAAeve,SAAQ,SAACwe,GAAD,OAAch8B,EAAQkT,UAAUC,OAAO6oB,SAG5DrvB,GACFuO,IAAoB7O,IAAIrM,EAAS,eAAgB2M,KAhEvD,2BAoEE,SAA4B3M,EAAsB2M,GAChDuO,IAAoB7O,IAAIrM,EAAS,gBAAiB2M,KArEtD,0BAwEE,SAA2B3M,EAAsB2M,GAC/CuO,IAAoB7O,IAAIrM,EAAS,eAAgB2M,KAzErD,4BA4EE,SAA6B3M,EAAsBlC,GACjD2G,IAAiBG,IAAI5E,EAAS,kBAAmBlC,KA7ErD,+BAgFE,SAAgCkC,EAAsBlC,GACpD2G,IAAiBG,IAAI5E,EAAS,qBAAsBlC,KAjFxD,sBAoFE,SAAuBkC,EAA6BihB,GAAyC,IAAzBia,EAAwB,uDAAL,IACjFe,EAAYj8B,EAAUe,YAAiBf,GAASiB,IAAM,EACtDi7B,EACFr5B,OAAOvB,aAAezC,SAAS4D,gBAAgBC,WAAa7D,SAASiD,KAAKY,WAAa,EAErFue,IACFib,GAAajb,EACbgb,GAAwBhb,GAG1B,IAAM3N,EAAO4oB,EACP1oB,EAAKyoB,EAEXn3B,EAAmBC,QAAQuO,EAAME,EAAI0nB,GAAU,SAAUp9B,GACvDe,SAAS4D,gBAAgBC,UAAY5E,EAErCe,SAASiD,KAAKY,UAAY5E,OApGhC,uBAuGE,SAAwBmjB,EAAgBia,GACtCp2B,EAAmBq3B,SAAS,KAAMlb,EAAQia,OAxG9C,M,gCCOoB,KACZzH,eAXJ,WACI,IAAM3lB,EAAO0G,aAAawD,QAAQ,qBAElC,OADqB,MAARlK,EAAesB,KAAK6I,MAAM7I,KAAKC,UAAUvB,EAAKvP,aAAeuP,GAU1EqB,eANJ,SAAwBrB,GACpB0G,aAAaklB,QAAQ,oBAAoB5rB,M,4FCNpCoN,EAAb,uFAGE,SACElb,EACAM,EACA87B,EACAzvB,GAEA,IAAM0vB,EAAU/vB,YAAsB,YAmBtC,OAlBA4O,EAAoBvP,MAAM/G,IAAIy3B,GAAS,SAAC7vB,GAGtC,IAFA,IAAM8vB,EAAUt8B,EAAQ2B,iBAAiBrB,GACrCmK,EAA6B+B,EAAE/B,OAC5BA,GAAUA,IAAWzK,GAAS,CACnC,IAAK,IAAIG,EAAI,EAAGA,EAAIm8B,EAAQl8B,OAAQD,IAC9BsK,IAAW6xB,EAAQn8B,IACrBwM,EAAS7L,KAAK2J,EAAQ+B,GAKxB/B,EADEA,EAAO1I,cACA0I,EAAO1I,cAEP,SAIf/B,EAAQ0c,iBAAiB0f,EAAWlhB,EAAoBvP,MAAMjH,IAAI23B,IAC3DA,IA5BX,iBA+BE,SAAkBr8B,EAAsBo8B,EAAmBC,GACzD,IAAME,EAAgBrhB,EAAoBvP,MAAMjH,IAAI23B,GAC/CE,IAILv8B,EAAQ4hB,oBAAoBwa,EAAWG,GACvCrhB,EAAoBvP,MAAMY,OAAO8vB,MAtCrC,iBAyCE,SAAkBr8B,EAAsBo8B,EAAmBzvB,GACzD3M,EAAQ0c,iBAAiB0f,GAAW,SAASI,EAAMhwB,GAYjD,OAVIA,EAAE/B,QAAU+B,EAAE/B,OAAOmX,qBACvBpV,EAAE/B,OAAOmX,oBAAoBpV,EAAEtD,KAAMszB,GAGnCx8B,GAAWwM,GAAKA,EAAEiwB,eAEpBjwB,EAAEiwB,cAAc7a,oBAAoBpV,EAAEtD,KAAMszB,GAIvC7vB,EAASH,UAtDtB,KAAa0O,EACGvP,MAAQ,IAAII,K,gCCD5B,kCAAO,IAAM6tB,EAA+B,CAC1CnC,KAAM,CACJvuB,KAAM,UACNwzB,aAAc,UACdjE,iBAAiB,GAEnBkE,OAAQ,CACNz3B,SAAS,EACTgE,KAAM,WAER0zB,UAAW,CACT13B,SAAS,GAEXwvB,OAAQ,CACNxvB,SAAS,EACTtC,MAAO,QACP1B,KAAM,OACN02B,MAAO,CACLC,SAAS,EACTC,iBAAiB,GAEnB+E,SAAU,OAEZC,SAAU,CACR53B,SAAS,GAEX0vB,MAAO,CACL1vB,SAAS,EACTozB,MAAO,OACPpJ,KAAM,OACN0I,OAAO,EACPW,WAAW,EACXwE,UAAU,EACVvE,WAAW,EACXqE,SAAU,OAEZ5Y,QAAS,CACPrhB,MAAO,QACPmtB,OAAQ,WAEVoH,QAAS,CACPjyB,SAAS,EACTtC,MAAO,QACPg1B,MAAO,CACLC,SAAS,EACTE,qBAAqB,GAEvBhI,OAAQ,WACRkI,QAAS,CACP+E,SAAU,CACRj6B,OAAQ,OACRo1B,0BAA2B,QAE7B8E,SAAU,CACRl6B,OAAQ,OACRo1B,0BAA2B,QAE7B+E,SAAU,CACRn6B,OAAQ,OACRo1B,0BAA2B,QAE7BgF,SAAU,CACRp6B,OAAQ,OACRo1B,0BAA2B,QAE7BiF,SAAU,CACRr6B,OAAQ,OACRo1B,0BAA2B,UAIjCc,OAAQ,CACNr2B,MAAO,SAEThF,UAAW,CACTsH,SAAS,EACTkuB,aAAa,EACbh1B,aAAa,EACb2xB,OAAQ,UACR1V,UAAW,MACX2W,YAAY,EACZoH,qBAAsB,KACtBC,iBAAkB,2B,8IC7DhBgF,EAAgBngC,wBAAkC,CACtD+1B,OAAQ2G,IACR7gB,QAASge,cACT7D,WAAYmE,cACZG,aAAcF,cACdqC,UAAW,SAAC1G,OAURqK,EAAsB,WAC1B,IAAMC,EAAe1+B,SAASuc,eAAe,iBACzCmiB,GACFA,EAAah+B,MAAMwgB,YAAY,UAAW,SAIxCyd,EAA2B,SAAC,GAAgB,IAAf9/B,EAAc,EAAdA,SAAc,EACnBC,mBAAS45B,IAAYtE,QADF,mBACxCA,EADwC,KAChCwK,EADgC,OAEjB9/B,mBAAS45B,IAAYxe,SAFJ,mBAExCA,EAFwC,KAE/B2kB,EAF+B,OAGX//B,mBAAS45B,IAAYrE,YAHV,mBAGxCA,EAHwC,KAG5ByK,EAH4B,OAIPhgC,mBAAS45B,IAAYC,cAJd,mBAIxCA,EAJwC,KAI1BoG,EAJ0B,KAkBzC9/B,EAA4B,CAChCm1B,SACAla,UACAma,aACAsE,eACAmC,UAlBgB,SAACkE,IAnBM,WACzB,IAAMN,EAAe1+B,SAASuc,eAAe,iBACzCmiB,GACFA,EAAah+B,MAAMwgB,YAAY,UAAW,QAiB1C+d,GACoBzK,MAAM/f,KAAKzU,SAASiD,KAAKoR,WACjCsK,SAAQ,SAACugB,GAAD,OAAQl/B,SAASiD,KAAKoR,UAAUC,OAAO4qB,MAC3DxG,IAAYuC,oBAAoB+D,GAChCJ,EAAUngB,OAAOC,OAAO,GAAIga,IAAYtE,SACxCyK,EAAWnG,IAAYxe,SACvB4kB,EAAcpG,IAAYrE,YAC1B0K,EAAgBrG,IAAYC,cAC5B9zB,YAAW,WACT45B,MACC,OAcL,OAJAh/B,qBAAU,WACRg/B,MACC,IAEI,cAACD,EAAcr/B,SAAf,CAAwBF,MAAOA,EAA/B,SAAuCJ,KAKzC,SAASsb,IACd,OAAO9a,qBAAWm/B,M","file":"static/js/main.a762b013.chunk.js","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, {FC, createContext, useContext, useEffect, useState} from 'react'\r\n\r\nexport interface PageLink {\r\n title: string\r\n path: string\r\n isActive: boolean\r\n isSeparator?: boolean\r\n}\r\n\r\nexport interface PageDataContextModel {\r\n pageTitle?: string\r\n setPageTitle: (_title: string) => void\r\n pageDescription?: string\r\n setPageDescription: (_description: string) => void\r\n pageBreadcrumbs?: Array\r\n setPageBreadcrumbs: (_breadcrumbs: Array) => void\r\n}\r\n\r\nconst PageDataContext = createContext({\r\n setPageTitle: (_title: string) => {},\r\n setPageBreadcrumbs: (_breadcrumbs: Array) => {},\r\n setPageDescription: (_description: string) => {},\r\n})\r\n\r\nconst PageDataProvider: React.FC = ({children}) => {\r\n const [pageTitle, setPageTitle] = useState('')\r\n const [pageDescription, setPageDescription] = useState('')\r\n const [pageBreadcrumbs, setPageBreadcrumbs] = useState>([])\r\n const value: PageDataContextModel = {\r\n pageTitle,\r\n setPageTitle,\r\n pageDescription,\r\n setPageDescription,\r\n pageBreadcrumbs,\r\n setPageBreadcrumbs,\r\n }\r\n return {children}\r\n}\r\n\r\nfunction usePageData() {\r\n return useContext(PageDataContext)\r\n}\r\n\r\ntype Props = {\r\n description?: string\r\n breadcrumbs?: Array\r\n}\r\n\r\nconst PageTitle: FC = ({children, description, breadcrumbs}) => {\r\n const {setPageTitle, setPageDescription, setPageBreadcrumbs} = usePageData()\r\n useEffect(() => {\r\n if (children) {\r\n setPageTitle(children.toString())\r\n }\r\n return () => {\r\n setPageTitle('')\r\n }\r\n }, [children])\r\n\r\n useEffect(() => {\r\n if (description) {\r\n setPageDescription(description)\r\n }\r\n return () => {\r\n setPageDescription('')\r\n }\r\n }, [description])\r\n\r\n useEffect(() => {\r\n if (breadcrumbs) {\r\n setPageBreadcrumbs(breadcrumbs)\r\n }\r\n return () => {\r\n setPageBreadcrumbs([])\r\n }\r\n }, [breadcrumbs])\r\n\r\n return <>\r\n}\r\n\r\nconst PageDescription: React.FC = ({children}) => {\r\n const {setPageDescription} = usePageData()\r\n useEffect(() => {\r\n if (children) {\r\n setPageDescription(children.toString())\r\n }\r\n return () => {\r\n setPageDescription('')\r\n }\r\n }, [children])\r\n return <>\r\n}\r\n\r\nexport {PageDescription, PageTitle, PageDataProvider, usePageData}\r\n","import {OffsetModel} from './models/OffsetModel'\r\nimport {ViewPortModel} from './models/ViewPortModel'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {DataUtil} from './_DataUtil'\r\nimport {ElementAnimateUtil} from './ElementAnimateUtil'\r\nimport {getObjectPropertyValueByKey, toJSON} from './_TypesHelpers'\r\n\r\nfunction getCSS(el: HTMLElement, styleProp: string) {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n}\r\n\r\nfunction getCSSVariableValue(variableName: string) {\r\n let hex = getComputedStyle(document.documentElement).getPropertyValue(variableName)\r\n if (hex && hex.length > 0) {\r\n hex = hex.trim()\r\n }\r\n\r\n return hex\r\n}\r\n\r\nfunction getElementActualCss(el: HTMLElement, prop: any, cache: boolean) {\r\n let css = ''\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n let value\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;'\r\n\r\n if (prop === 'width') {\r\n value = el.offsetWidth\r\n } else if (prop === 'height') {\r\n value = el.offsetHeight\r\n }\r\n\r\n el.style.cssText = css\r\n\r\n // store it in cache\r\n if (value !== undefined) {\r\n el.setAttribute('kt-hidden-' + prop, value.toString())\r\n return parseFloat(value.toString())\r\n }\r\n return 0\r\n } else {\r\n // store it in cache\r\n const attributeValue = el.getAttribute('kt-hidden-' + prop)\r\n if (attributeValue || attributeValue === '0') {\r\n return parseFloat(attributeValue)\r\n }\r\n }\r\n}\r\n\r\nfunction getElementActualHeight(el: HTMLElement) {\r\n return getElementActualCss(el, 'height', false)\r\n}\r\n\r\nfunction getElementActualWidth(el: HTMLElement, cache?: boolean) {\r\n return getElementActualCss(el, 'width', false)\r\n}\r\n\r\nfunction getElementIndex(element: HTMLElement) {\r\n if (element.parentNode) {\r\n const c = element.parentNode.children\r\n for (let i = 0; i < c.length; i++) {\r\n if (c[i] === element) return i\r\n }\r\n }\r\n return -1\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\r\nfunction getElementMatches(element: HTMLElement, selector: string) {\r\n const p = Element.prototype\r\n const f = p.matches || p.webkitMatchesSelector\r\n\r\n if (element && element.tagName) {\r\n return f.call(element, selector)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nfunction getElementOffset(el: HTMLElement): OffsetModel {\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n if (!el.getClientRects().length) {\r\n return {top: 0, left: 0}\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n const rect = el.getBoundingClientRect()\r\n const win = el.ownerDocument.defaultView\r\n if (win) {\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset,\r\n }\r\n }\r\n\r\n return rect\r\n}\r\n\r\nfunction getElementParents(element: Element, selector: string) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = function (s) {\r\n const matches = (document || this.ownerDocument).querySelectorAll(s)\r\n let i = matches.length\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1\r\n }\r\n }\r\n\r\n // Set up a parent array\r\n const parents = []\r\n\r\n let el: Element | null = element\r\n\r\n // Push each parent element to the array\r\n for (; el && el !== document.body; el = el.parentElement) {\r\n if (selector) {\r\n if (el.matches(selector)) {\r\n parents.push(el)\r\n }\r\n continue\r\n }\r\n parents.push(el)\r\n }\r\n\r\n // Return our parent array\r\n return parents\r\n}\r\n\r\nfunction getHighestZindex(el: HTMLElement) {\r\n let bufferNode: Node | null = el as Node\r\n let buffer = el\r\n while (bufferNode && bufferNode !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n const position = buffer.style.getPropertyValue('position')\r\n if (position === 'absolute' || position === 'relative' || position === 'fixed') {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n //
\r\n const value = parseInt(buffer.style.getPropertyValue('z-index'))\r\n if (!isNaN(value) && value !== 0) {\r\n return value\r\n }\r\n }\r\n\r\n bufferNode = bufferNode.parentNode\r\n buffer = bufferNode as HTMLElement\r\n }\r\n return null\r\n}\r\n\r\nfunction getScrollTop(): number {\r\n return (document.scrollingElement || document.documentElement).scrollTop\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth\r\nfunction getViewPort(): ViewPortModel {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n}\r\n\r\nfunction insertAfterElement(el: HTMLElement, referenceNode: HTMLElement) {\r\n return referenceNode.parentNode?.insertBefore(el, referenceNode.nextSibling)\r\n}\r\n\r\nfunction isElementHasClasses(element: HTMLElement, classesStr: string): boolean {\r\n const classes = classesStr.split(' ')\r\n for (let i = 0; i < classes.length; i++) {\r\n if (!element.classList.contains(classes[i])) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction isVisibleElement(element: HTMLElement): boolean {\r\n return !(element.offsetWidth === 0 && element.offsetHeight === 0)\r\n}\r\n\r\n// Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\r\nfunction throttle(timer: number | undefined, func: Function, delay?: number) {\r\n // If setTimeout is already scheduled, no need to do anything\r\n if (timer) {\r\n return\r\n }\r\n\r\n // Schedule a setTimeout after delay seconds\r\n timer = window.setTimeout(function () {\r\n func()\r\n\r\n // Once setTimeout function execution is finished, timerId = undefined so that in
\r\n // the next scroll event function execution can be scheduled by the setTimeout\r\n timer = undefined\r\n }, delay)\r\n}\r\n\r\nfunction getElementChildren(element: HTMLElement, selector: string): Array | null {\r\n if (!element || !element.childNodes) {\r\n return null\r\n }\r\n\r\n const result: Array = []\r\n for (let i = 0; i < element.childNodes.length; i++) {\r\n const child = element.childNodes[i]\r\n // child.nodeType == 1 => Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference\r\n if (child.nodeType === 1 && getElementMatches(child as HTMLElement, selector)) {\r\n result.push(child as HTMLElement)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction getElementChild(element: HTMLElement, selector: string): HTMLElement | null {\r\n const children = getElementChildren(element, selector)\r\n return children ? children[0] : null\r\n}\r\n\r\nfunction isMobileDevice(): boolean {\r\n let test = getViewPort().width < +getBreakpoint('lg') ? true : false\r\n\r\n if (test === false) {\r\n // For use within normal web clients\r\n test = navigator.userAgent.match(/iPad/i) != null\r\n }\r\n\r\n return test\r\n}\r\n\r\nfunction slide(el: HTMLElement, dir: string, speed: number, callback: any) {\r\n if (\r\n !el ||\r\n (dir === 'up' && isVisibleElement(el) === false) ||\r\n (dir === 'down' && isVisibleElement(el) === true)\r\n ) {\r\n return\r\n }\r\n\r\n speed = speed ? speed : 600\r\n let calcHeight = getElementActualHeight(el)\r\n let calcPaddingTop: number = 0\r\n let calcPaddingBottom: number = 0\r\n\r\n if (ElementStyleUtil.get(el, 'padding-top') && DataUtil.get(el, 'slide-padding-top') !== true) {\r\n DataUtil.set(el, 'slide-padding-top', ElementStyleUtil.get(el, 'padding-top'))\r\n }\r\n\r\n if (\r\n ElementStyleUtil.get(el, 'padding-bottom') &&\r\n DataUtil.has(el, 'slide-padding-bottom') !== true\r\n ) {\r\n DataUtil.set(el, 'slide-padding-bottom', ElementStyleUtil.get(el, 'padding-bottom'))\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-top')) {\r\n calcPaddingTop = parseInt(DataUtil.get(el, 'slide-padding-top'))\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-bottom')) {\r\n calcPaddingBottom = parseInt(DataUtil.get(el, 'slide-padding-bottom'))\r\n }\r\n\r\n if (dir === 'up') {\r\n // up\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(0, calcPaddingTop, speed, function (value: number) {\r\n el.style.paddingTop = calcPaddingTop - value + 'px'\r\n })\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(0, calcPaddingBottom, speed, function (value: number) {\r\n el.style.paddingBottom = calcPaddingBottom - value + 'px'\r\n })\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = (calcHeight || 0) - value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = 'none'\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n } else if (dir === 'down') {\r\n // down\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingTop,\r\n speed,\r\n function (value: number) {\r\n //\r\n el.style.paddingTop = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingTop = ''\r\n }\r\n )\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingBottom,\r\n speed,\r\n function (value: number) {\r\n el.style.paddingBottom = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingBottom = ''\r\n }\r\n )\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = ''\r\n el.style.overflow = ''\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\nfunction slideUp(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'up', speed, callback)\r\n}\r\n\r\nfunction slideDown(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'down', speed, callback)\r\n}\r\n\r\nfunction getBreakpoint(breakpoint: string) {\r\n let value: number | string = getCSSVariableValue('--bs-' + breakpoint)\r\n if (value) {\r\n value = parseInt(value.trim())\r\n }\r\n\r\n return value\r\n}\r\n\r\nfunction getAttributeValueByBreakpoint(incomingAttr: string): string | JSON {\r\n let value = toJSON(incomingAttr)\r\n if (typeof value !== 'object') {\r\n return incomingAttr\r\n }\r\n\r\n const width = getViewPort().width\r\n let resultKey\r\n let resultBreakpoint = -1\r\n let breakpoint\r\n\r\n for (let key in value) {\r\n if (key === 'default') {\r\n breakpoint = 0\r\n } else {\r\n breakpoint = getBreakpoint(key) ? +getBreakpoint(key) : parseInt(key)\r\n }\r\n\r\n if (breakpoint <= width && breakpoint > resultBreakpoint) {\r\n resultKey = key\r\n resultBreakpoint = breakpoint\r\n }\r\n }\r\n\r\n return resultKey ? getObjectPropertyValueByKey(value, resultKey) : value\r\n}\r\n\r\nfunction colorLighten(color: string, amount: number) {\r\n const addLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(_color, 16) + _amount\r\n const cNum = cc > 255 ? 255 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n return (color = `#${addLight(color.substring(0, 2), amount)}${addLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${addLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nfunction colorDarken(color: string, amount: number) {\r\n const subtractLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(color, 16) - amount\r\n const cNum = cc < 0 ? 0 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n\r\n return (color = `#${subtractLight(color.substring(0, 2), amount)}${subtractLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${subtractLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nexport {\r\n getBreakpoint,\r\n getCSS,\r\n getCSSVariableValue,\r\n getElementActualCss,\r\n getElementActualHeight,\r\n getElementActualWidth,\r\n getElementIndex,\r\n getElementMatches,\r\n getElementOffset,\r\n getElementParents,\r\n getHighestZindex,\r\n getScrollTop,\r\n getViewPort,\r\n insertAfterElement,\r\n isElementHasClasses,\r\n isVisibleElement,\r\n throttle,\r\n getElementChildren,\r\n getElementChild,\r\n isMobileDevice,\r\n slide,\r\n slideUp,\r\n slideDown,\r\n getAttributeValueByBreakpoint,\r\n colorLighten,\r\n colorDarken,\r\n}\r\n","\r\nexport class Customer{\r\n customerID=0\r\n customerName= \"\";\r\n customerReference= \"\";\r\n level2= \"\";\r\n level3= \"\";\r\n level4= \"\";\r\n sales= 0;\r\n salesDevelop= 0.00;\r\n margin= 0;\r\n marginDevelop= 0.00; \r\n }\r\n\r\n\r\n export class CustomerListModel{\r\n customers: Customer[]=[];\r\n }\r\n \r\n\r\n \r\n","\r\nexport const API_URL = window.Configs.API_URL;","import { createSlice } from '@reduxjs/toolkit';\r\nimport { Customer, CustomerListModel } from 'app/pages/Models/customerModel';\r\n\r\nconst initialState:CustomerListModel={\r\n customers:[]\r\n}\r\n\r\nconst customerListSlice = createSlice({\r\n name:'customers',\r\n initialState,\r\n reducers:{\r\n setCustomerList(state,action:{payload:Customer[]}){\r\n state.customers = action.payload;\r\n //console.log(action.payload);\r\n }\r\n }});\r\n\r\nexport const {\r\n setCustomerList,\r\n} = customerListSlice.actions;\r\n\r\nexport default customerListSlice.reducer;","import { createSlice } from '@reduxjs/toolkit';\r\nimport { Campaign, CampaignListModel } from 'app/pages/Models/campaignModels';\r\n\r\nconst initialState:CampaignListModel={\r\n campaigns:[]\r\n}\r\n\r\nconst campaignListSlice = createSlice({\r\n name:'campaigns',\r\n initialState,\r\n reducers:{\r\n setCampaignList(state,action:{payload:Campaign[]}){\r\n state.campaigns = action.payload;\r\n //console.log(action.paayload);\r\n }\r\n }});\r\n\r\nexport const {\r\n setCampaignList,\r\n} = campaignListSlice.actions;\r\n\r\nexport default campaignListSlice.reducer;","\r\n\r\nimport { createSlice } from '@reduxjs/toolkit';\r\nimport { string } from 'yup/lib/locale';\r\nimport { CampaignDetails } from 'app/pages/Models//campaignModels';\r\n\r\nconst initialState={\r\n campaignDetail:new CampaignDetails()\r\n}\r\n\r\n\r\nconst campaignMarginSlice = createSlice({\r\n name:'campaignMargin',\r\n initialState,\r\n reducers:{\r\n setCampaignMargin(state,action:{payload:CampaignDetails}){\r\n state.campaignDetail = action.payload;\r\n }\r\n }});\r\n\r\nexport const {\r\n setCampaignMargin,\r\n} = campaignMarginSlice.actions;\r\n\r\nexport default campaignMarginSlice.reducer;","\r\n\r\nimport { createSlice } from '@reduxjs/toolkit';\r\nimport { string } from 'yup/lib/locale';\r\nimport { CampaignDetails } from 'app/pages/Models//campaignModels';\r\n\r\nconst initialState={\r\n campaignDetail:new CampaignDetails()\r\n}\r\n\r\n\r\nconst campaignDetailSlice = createSlice({\r\n name:'campaignDetail',\r\n initialState,\r\n reducers:{\r\n setCampaignDetail(state,action:{payload:CampaignDetails}){\r\n state.campaignDetail = action.payload;\r\n }\r\n }});\r\n\r\nexport const {\r\n setCampaignDetail,\r\n} = campaignDetailSlice.actions;\r\n\r\nexport default campaignDetailSlice.reducer;","import { createSlice } from '@reduxjs/toolkit';\r\nimport { Campaign, CampaignListModel } from 'app/pages/Models/campaignModels';\r\n\r\nconst initialState:CampaignListModel={\r\n campaigns:[]\r\n}\r\n\r\nconst lockInCandidateListSlice = createSlice({\r\n name:'campaigns',\r\n initialState,\r\n reducers:{\r\n setLockInCandidateList(state,action:{payload:Campaign[]}){\r\n state.campaigns = action.payload;\r\n //console.log(action.paayload);\r\n }\r\n }});\r\n\r\nexport const {\r\n setLockInCandidateList,\r\n} = lockInCandidateListSlice.actions;\r\n\r\nexport default lockInCandidateListSlice.reducer;","import { createSlice } from '@reduxjs/toolkit';\r\nimport React from 'react'\r\nimport { CampaignDetails, CampaignResult, CustomerCampaignDetail, IEnableCalculator } from 'app/pages/Models/campaignModels';\r\nimport { Customer } from 'app/pages/Models/customerModel';\r\n\r\nconst initialState = {\r\n campaignResult: new CampaignResult()\r\n}\r\n\r\nconst campaignResultSlice = createSlice({\r\n name: 'campaignResult',\r\n initialState,\r\n reducers: {\r\n setCampaignResult(state, action: { payload: { targetList: CampaignDetails, selectedType: string, detail: CampaignDetails,marginList: CampaignDetails, enableCalc: IEnableCalculator, customer: Customer } }) {\r\n var result = new CampaignResult();\r\n console.log(\"test\");\r\n\r\n var targetList = action.payload.targetList;\r\n var detail = action.payload.detail;\r\n var calc = action.payload.enableCalc;\r\n var totalTarget = 0;\r\n var customer = action.payload.customer;\r\n var type = action.payload.selectedType\r\n var ciro = 0;\r\n ciro = add(ciro, detail.disposable, calc.disposable);\r\n ciro = add(ciro, detail.dairy, calc.dairy);\r\n ciro = add(ciro, detail.deepFrozen, calc.deepFrozen);\r\n ciro = add(ciro, detail.cannedGoods, calc.cannedGoods);\r\n result.minimumTarget = calcMinTarget(type, ciro,calc);\r\n\r\n totalTarget = (targetList.cannedGoods + targetList.dairy + targetList.deepFrozen + targetList.disposable);\r\n result.paybackBonus = totalTarget * 0.10;\r\n result.estimatedMargin = 10;\r\n state.campaignResult = result;\r\n var dispossableSales = Math.abs(targetList.disposable - detail.disposable);\r\n var cannedGoodsSales = Math.abs(targetList.cannedGoods - detail.cannedGoods);\r\n var deepFrozenSales = Math.abs(targetList.disposable - detail.deepFrozen);\r\n var dairySales = Math.abs(targetList.dairy - detail.dairy);\r\n if (type === \"Big Check\") {\r\n var marginList = action.payload.marginList;\r\n var sales = customer.sales + (calc.disposable?dispossableSales:0) + (calc.cannedGoods?cannedGoodsSales:0) + (calc.deepFrozen?deepFrozenSales:0) + (calc.dairy?dairySales:0);\r\n var kar = ((customer.sales * customer.margin) / 100) + (calc.dairy?((dairySales * marginList.dairy) / 100):0) + (calc.cannedGoods?((cannedGoodsSales * marginList.cannedGoods) / 100):0) + (calc.deepFrozen?((deepFrozenSales * marginList.deepFrozen) / 100):0) + (calc.disposable?((dispossableSales * marginList.disposable) / 100):0) - result.paybackBonus;\r\n kar==0?result.estimatedMargin=0:result.estimatedMargin=parseInt(Math.abs(kar / sales).toString());\r\n }\r\n\r\n }\r\n }\r\n});\r\n\r\nconst add = (source: number, val: number, isEnable: boolean) => { isEnable ? source += val : source += 0; return source; }\r\nconst calcMinTarget = (type: string, ciro: number,calc:IEnableCalculator) => {\r\n var target = 0;\r\n switch (type) {\r\n case \"Frozen Fridge\":\r\n target = ciro <= 27000 ? 45000 : ciro * 1.50;\r\n break;\r\n case \"Big Check\":\r\n var factor=0;\r\n factor=calc.disposable?factor+1:factor+0;\r\n factor=calc.dairy?factor+1:factor+0;\r\n factor=calc.cannedGoods?factor+1:factor+0;\r\n factor=calc.deepFrozen?factor+1:factor+0;\r\n\r\n target = ciro * 2;\r\n target=target<(20000*factor)?(20000*factor):target\r\n break;\r\n default:\r\n break;\r\n }\r\n return target;\r\n}\r\nexport const {\r\n setCampaignResult,\r\n} = campaignResultSlice.actions;\r\n\r\nexport default campaignResultSlice.reducer;","\r\n\r\nimport { createSlice } from '@reduxjs/toolkit';\r\nimport { Customer } from 'app/pages/Models/customerModel';\r\n\r\nconst initialState={\r\n customer:new Customer()\r\n}\r\n\r\nconst customerDetailSlice = createSlice({\r\n name:'customer',\r\n initialState,\r\n reducers:{\r\n setCustomerDetail(state,action:{payload:Customer}){\r\n state.customer = action.payload;\r\n }\r\n \r\n }});\r\n\r\nexport const {\r\n setCustomerDetail,\r\n} = customerDetailSlice.actions;\r\n\r\nexport default customerDetailSlice.reducer;","import { createSlice } from '@reduxjs/toolkit';\r\nimport { ScoreCard, ScoreCardList } from 'app/pages/Models/campaignModels';\r\n\r\nconst initialState:ScoreCardList={\r\n scoreCards:[]\r\n}\r\n\r\nconst scoreCardSlice = createSlice({\r\n name:'scoreCards',\r\n initialState,\r\n reducers:{\r\n setScoreCards(state,action:{payload:ScoreCard[]}){\r\n state.scoreCards = action.payload;\r\n //console.log(action.payload);\r\n }\r\n }});\r\n\r\nexport const {\r\n setScoreCards,\r\n} = scoreCardSlice.actions;\r\n\r\nexport default scoreCardSlice.reducer;","import { createSlice } from '@reduxjs/toolkit';\r\nimport { ScoreCard, ScoreCardCustomerList } from 'app/pages/Models/campaignModels';\r\n\r\nconst initialState={\r\n scoreCardCustomerList:new ScoreCardCustomerList()\r\n}\r\n\r\nconst scoreCardCustomerListSlice = createSlice({\r\n name:'scoreCards',\r\n initialState,\r\n reducers:{\r\n setScoreCardCustomerList(state,action:{payload:ScoreCardCustomerList}){\r\n state.scoreCardCustomerList = action.payload;\r\n //console.log(action.payload);\r\n }\r\n }});\r\n\r\nexport const {\r\n setScoreCardCustomerList,\r\n} = scoreCardCustomerListSlice.actions;\r\n\r\nexport default scoreCardCustomerListSlice.reducer;","// Types\r\nexport * from './models/OffsetModel'\r\nexport * from './models/ViewPortModel'\r\n// Helpers\r\nexport * from './DomHelpers'\r\nexport * from './_TypesHelpers'\r\n// Basic\r\nexport * from './_DataUtil'\r\nexport * from './_DOMEventHandlerUtil'\r\nexport * from './_ElementStyleUtil'\r\nexport * from './ElementAnimateUtil'\r\nexport * from './EventHandlerUtil'\r\n","import React, {\r\n FC,\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n SetStateAction,\r\n Dispatch,\r\n} from 'react'\r\n\r\nconst MetronicSplashScreenContext = createContext> | undefined>(\r\n undefined\r\n)\r\n\r\nconst MetronicSplashScreenProvider: FC = ({children}) => {\r\n const [count, setCount] = useState(0)\r\n let visible = count > 0\r\n\r\n useEffect(() => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n\r\n // Show SplashScreen\r\n if (splashScreen && visible) {\r\n splashScreen.classList.remove('hidden')\r\n\r\n return () => {\r\n splashScreen.classList.add('hidden')\r\n }\r\n }\r\n\r\n // Hide SplashScreen\r\n let timeout: number\r\n if (splashScreen && !visible) {\r\n timeout = window.setTimeout(() => {\r\n splashScreen.classList.add('hidden')\r\n }, 3000)\r\n }\r\n\r\n return () => {\r\n clearTimeout(timeout)\r\n }\r\n }, [visible])\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nconst LayoutSplashScreen: FC<{visible?: boolean}> = ({visible = true}) => {\r\n // Everything are ready - remove splashscreen\r\n const setCount = useContext(MetronicSplashScreenContext)\r\n\r\n useEffect(() => {\r\n if (!visible) {\r\n return\r\n }\r\n\r\n if (setCount) {\r\n setCount((prev) => {\r\n return prev + 1\r\n })\r\n }\r\n\r\n return () => {\r\n if (setCount) {\r\n setCount((prev) => {\r\n return prev - 1\r\n })\r\n }\r\n }\r\n }, [setCount, visible])\r\n\r\n return null\r\n}\r\n\r\nexport {MetronicSplashScreenProvider, LayoutSplashScreen}\r\n","import {DataUtil} from './_DataUtil'\r\nimport {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport interface EventMeta {\r\n name: string\r\n callback: Function\r\n one: boolean\r\n fired: boolean\r\n}\r\n\r\nexport class EventHandlerUtil {\r\n static store: Map> = new Map()\r\n\r\n private static setEventMetasByName(name: string, metas: Map): void {\r\n EventHandlerUtil.store.set(name, metas)\r\n }\r\n\r\n private static getEventMetasByName(name: string): Map | undefined {\r\n return EventHandlerUtil.store.get(name)\r\n }\r\n\r\n private static setEventMetaByNameAndHandlerId(\r\n name: string,\r\n handlerId: string,\r\n meta: EventMeta\r\n ): void {\r\n let metas = EventHandlerUtil.getEventMetasByName(name)\r\n if (!metas) {\r\n metas = new Map()\r\n }\r\n\r\n metas.set(handlerId, meta)\r\n EventHandlerUtil.setEventMetasByName(name, metas)\r\n }\r\n\r\n private static getEventsMetaByHandlerId(name: string, handlerId: string): EventMeta | undefined {\r\n const metas = EventHandlerUtil.store.get(name)\r\n if (!metas) {\r\n return\r\n }\r\n\r\n return metas.get(handlerId)\r\n }\r\n\r\n private static setFiredByNameAndHandlerId(name: string, handerId: string, fired: boolean): void {\r\n const meta = EventHandlerUtil.getEventsMetaByHandlerId(name, handerId)\r\n if (!meta) {\r\n return\r\n }\r\n\r\n meta.fired = fired\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handerId, meta)\r\n }\r\n\r\n private static addEvent(\r\n element: HTMLElement,\r\n name: string,\r\n callback: Function,\r\n one: boolean = false\r\n ) {\r\n const handlerId = getUniqueIdWithPrefix('event')\r\n DataUtil.set(element, name, handlerId)\r\n const meta: EventMeta = {\r\n name: name,\r\n callback: callback,\r\n one: one,\r\n fired: false,\r\n }\r\n\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handlerId, meta)\r\n }\r\n\r\n private static removeEvent(element: HTMLElement, name: string) {\r\n const handlerId = DataUtil.get(element, name)\r\n if (!handlerId) {\r\n return\r\n }\r\n\r\n const metas = EventHandlerUtil.getEventMetasByName(name)\r\n if (!metas) {\r\n return\r\n }\r\n\r\n metas.delete(handlerId)\r\n EventHandlerUtil.setEventMetasByName(name, metas)\r\n }\r\n\r\n public static trigger(element: HTMLElement, name: string, e?: Event) {\r\n if (DataUtil.has(element, name)) {\r\n const handlerId = DataUtil.get(element, name)\r\n if (!handlerId) {\r\n return undefined\r\n }\r\n\r\n const handler = EventHandlerUtil.getEventsMetaByHandlerId(name, handlerId)\r\n if (handler) {\r\n if (handler.name === name) {\r\n if (handler.one === true) {\r\n if (handler.fired === false) {\r\n EventHandlerUtil.setFiredByNameAndHandlerId(name, handlerId, true)\r\n return handler.callback.call(this, e)\r\n }\r\n } else {\r\n return handler.callback.call(this, e)\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static on = function (element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, false)\r\n }\r\n\r\n public static one(element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, true)\r\n }\r\n\r\n public static off(element: HTMLElement, name: string): void {\r\n EventHandlerUtil.removeEvent(element, name)\r\n }\r\n}\r\n","export const toAbsoluteUrl = (pathname: string) => process.env.PUBLIC_URL + pathname\r\n","export function getCurrentUrl(pathname: string) {\r\n return pathname.split(/[?#]/)[0]\r\n}\r\n\r\nexport function checkIsActive(pathname: string, url: string) {\r\n const current = getCurrentUrl(pathname)\r\n if (!current || !url) {\r\n return false\r\n }\r\n\r\n if (current === url) {\r\n return true\r\n }\r\n\r\n if (current.indexOf(url) > -1) {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n","import React from 'react'\r\nimport SVG from 'react-inlinesvg'\r\nimport {toAbsoluteUrl} from '../AssetHelpers'\r\ntype Props = {\r\n className?: string\r\n path: string\r\n svgClassName?: string\r\n}\r\n\r\nconst KTSVG: React.FC = ({className = '', path, svgClassName = 'mh-50px'}) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {KTSVG}\r\n","export interface MessageModel {\r\n user: number\r\n type: 'in' | 'out'\r\n text: string\r\n time: string\r\n template?: boolean\r\n}\r\n\r\nconst defaultMessages: Array = [\r\n {\r\n user: 4,\r\n type: 'in',\r\n text: 'How likely are you to recommend our company to your friends and family ?',\r\n time: '2 mins',\r\n },\r\n {\r\n user: 2,\r\n type: 'out',\r\n text: 'Hey there, we’re just writing to let you know that you’ve been subscribed to a repository on GitHub.',\r\n time: '5 mins',\r\n },\r\n {\r\n user: 4,\r\n type: 'in',\r\n text: 'Ok, Understood!',\r\n time: '1 Hour',\r\n },\r\n {\r\n user: 2,\r\n type: 'out',\r\n text: 'You’ll receive notifications for all issues, pull requests!',\r\n time: '2 Hours',\r\n },\r\n {\r\n user: 4,\r\n type: 'in',\r\n text: 'You can unwatch this repository immediately by clicking here: Keenthemes.com',\r\n time: '3 Hours',\r\n },\r\n {\r\n user: 2,\r\n type: 'out',\r\n text: 'Most purchased Business courses during this sale!',\r\n time: '4 Hours',\r\n },\r\n {\r\n user: 4,\r\n type: 'in',\r\n text: 'Company BBQ to celebrate the last quater achievements and goals. Food and drinks provided',\r\n time: '5 Hours',\r\n },\r\n {\r\n template: true,\r\n user: 2,\r\n type: 'out',\r\n text: '',\r\n time: 'Just now',\r\n },\r\n {\r\n template: true,\r\n user: 4,\r\n type: 'in',\r\n text: 'Right before vacation season we have the next Big Deal for you.',\r\n time: 'Just now',\r\n },\r\n]\r\n\r\nexport interface UserInfoModel {\r\n initials?: {label: string; state: 'warning' | 'danger' | 'primary' | 'success' | 'info'}\r\n name: string\r\n avatar?: string\r\n email: string\r\n position: string\r\n online: boolean\r\n}\r\n\r\nconst defaultUserInfos: Array = [\r\n {\r\n name: 'Emma Smith',\r\n avatar: 'avatars/150-1.jpg',\r\n email: 'e.smith@kpmg.com.au',\r\n position: 'Art Director',\r\n online: false,\r\n },\r\n {\r\n name: 'Melody Macy',\r\n initials: {label: 'M', state: 'danger'},\r\n email: 'melody@altbox.com',\r\n position: 'Marketing Analytic',\r\n online: true,\r\n },\r\n {\r\n name: 'Max Smith',\r\n avatar: 'avatars/150-2.jpg',\r\n email: 'max@kt.com',\r\n position: 'Software Enginer',\r\n online: false,\r\n },\r\n {\r\n name: 'Sean Bean',\r\n avatar: 'avatars/150-4.jpg',\r\n email: 'sean@dellito.com',\r\n position: 'Web Developer',\r\n online: false,\r\n },\r\n {\r\n name: 'Brian Cox',\r\n avatar: 'avatars/150-15.jpg',\r\n email: 'brian@exchange.com',\r\n position: 'UI/UX Designer',\r\n online: false,\r\n },\r\n {\r\n name: 'Mikaela Collins',\r\n initials: {label: 'M', state: 'warning'},\r\n email: 'mikaela@pexcom.com',\r\n position: 'Head Of Marketing',\r\n online: true,\r\n },\r\n {\r\n name: 'Francis Mitcham',\r\n avatar: 'avatars/150-8.jpg',\r\n email: 'f.mitcham@kpmg.com.au',\r\n position: 'Software Arcitect',\r\n online: false,\r\n },\r\n\r\n {\r\n name: 'Olivia Wild',\r\n initials: {label: 'O', state: 'danger'},\r\n email: 'olivia@corpmail.com',\r\n position: 'System Admin',\r\n online: true,\r\n },\r\n {\r\n name: 'Neil Owen',\r\n initials: {label: 'N', state: 'primary'},\r\n email: 'owen.neil@gmail.com',\r\n position: 'Account Manager',\r\n online: true,\r\n },\r\n {\r\n name: 'Dan Wilson',\r\n avatar: 'avatars/150-6.jpg',\r\n email: 'dam@consilting.com',\r\n position: 'Web Desinger',\r\n online: false,\r\n },\r\n {\r\n name: 'Emma Bold',\r\n initials: {label: 'E', state: 'danger'},\r\n email: 'emma@intenso.com',\r\n position: 'Corporate Finance',\r\n online: true,\r\n },\r\n {\r\n name: 'Ana Crown',\r\n avatar: 'avatars/150-7.jpg',\r\n email: 'ana.cf@limtel.com',\r\n position: 'Customer Relationship',\r\n online: false,\r\n },\r\n {\r\n name: 'Robert Doe',\r\n initials: {label: 'A', state: 'info'},\r\n email: 'robert@benko.com',\r\n position: 'Marketing Executive',\r\n online: true,\r\n },\r\n {\r\n name: 'John Miller',\r\n avatar: 'avatars/150-17.jpg',\r\n email: 'miller@mapple.com',\r\n position: 'Project Manager',\r\n online: false,\r\n },\r\n {\r\n name: 'Lucy Kunic',\r\n initials: {label: 'L', state: 'success'},\r\n email: 'lucy.m@fentech.com',\r\n position: 'SEO Master',\r\n online: true,\r\n },\r\n {\r\n name: 'Ethan Wilder',\r\n avatar: 'avatars/150-10.jpg',\r\n email: 'ethan@loop.com.au',\r\n position: 'Accountant',\r\n online: true,\r\n },\r\n]\r\n\r\nconst messageFromClient: MessageModel = {\r\n user: 4,\r\n type: 'in',\r\n text: 'Thank you for your awesome support!',\r\n time: 'Just now',\r\n}\r\n\r\nexport interface AlertModel {\r\n title: string\r\n description: string\r\n time: string\r\n icon: string\r\n state: 'primary' | 'danger' | 'warning' | 'success' | 'info'\r\n}\r\n\r\nconst defaultAlerts: Array = [\r\n {\r\n title: 'Project Alice',\r\n description: 'Phase 1 development',\r\n time: '1 hr',\r\n icon: 'icons/duotone/Clothes/Crown.svg',\r\n state: 'primary',\r\n },\r\n {\r\n title: 'HR Confidential',\r\n description: 'Confidential staff documents',\r\n time: '2 hrs',\r\n icon: 'icons/duotone/Code/Warning-2.svg',\r\n state: 'danger',\r\n },\r\n {\r\n title: 'Company HR',\r\n description: 'Corporeate staff profiles',\r\n time: '5 hrs',\r\n icon: 'icons/duotone/Communication/Group.svg',\r\n state: 'warning',\r\n },\r\n {\r\n title: 'Project Redux',\r\n description: 'New frontend admin theme',\r\n time: '2 days',\r\n icon: 'icons/duotone/General/Thunder.svg',\r\n state: 'success',\r\n },\r\n {\r\n title: 'Project Breafing',\r\n description: 'Product launch status update',\r\n time: '21 Jan',\r\n icon: 'icons/duotone/Communication/Flag.svg',\r\n state: 'primary',\r\n },\r\n {\r\n title: 'Banner Assets',\r\n description: 'Collection of banner images',\r\n time: '21 Jan',\r\n icon: 'icons/duotone/Design/Image.svg',\r\n state: 'info',\r\n },\r\n {\r\n title: 'Icon Assets',\r\n description: 'Collection of SVG icons',\r\n time: '20 March',\r\n icon: 'icons/duotone/Design/Component.svg',\r\n state: 'warning',\r\n },\r\n]\r\nexport interface LogModel {\r\n code: string\r\n state: 'success' | 'danger' | 'warning'\r\n message: string\r\n time: string\r\n}\r\n\r\nconst defaultLogs: Array = [\r\n {code: '200 OK', state: 'success', message: 'New order', time: 'Just now'},\r\n {code: '500 ERR', state: 'danger', message: 'New customer', time: '2 hrs'},\r\n {code: '200 OK', state: 'success', message: 'Payment process', time: '5 hrs'},\r\n {code: '300 WRN', state: 'warning', message: 'Search query', time: '2 days'},\r\n {code: '200 OK', state: 'success', message: 'API connection', time: '1 week'},\r\n {code: '200 OK', state: 'success', message: 'Database restore', time: 'Mar 5'},\r\n {code: '300 WRN', state: 'warning', message: 'System update', time: 'May 15'},\r\n {code: '300 WRN', state: 'warning', message: 'Server OS update', time: 'Apr 3'},\r\n {code: '300 WRN', state: 'warning', message: 'API rollback', time: 'Jun 30'},\r\n {code: '500 ERR', state: 'danger', message: 'Refund process', time: 'Jul 10'},\r\n {code: '500 ERR', state: 'danger', message: 'Withdrawal process', time: 'Sep 10'},\r\n {code: '500 ERR', state: 'danger', message: 'Mail tasks', time: 'Dec 10'},\r\n]\r\n\r\nexport {defaultMessages, defaultUserInfos, defaultAlerts, defaultLogs, messageFromClient}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport {UserModel, UserModelState} from '../models/UserModel'\r\nimport AuthService from './AuthService'\r\n\r\n\r\nconst initialState:UserModelState = {\r\n usermodel : undefined\r\n}\r\n\r\nconst userSlice = createSlice({\r\n name:'user',\r\n initialState,\r\n reducers:{\r\n setUser(state,action:{payload:UserModel}){\r\n state.usermodel = action.payload;\r\n console.log(\"Action payload =>>>\", state.usermodel);\r\n if(action.payload != null){\r\n AuthService.SetCurrentUser(JSON.stringify(action.payload));\r\n document.location.reload()\r\n }\r\n },\r\n deleteUser(state, action:{payload:undefined}){\r\n state.usermodel = undefined;\r\n },\r\n }\r\n});\r\n\r\nexport const {\r\n setUser, \r\n deleteUser\r\n} = userSlice.actions;\r\n\r\nexport default userSlice.reducer;","import axios from 'axios'\r\nimport {UserModel, AccountLoginModel} from '../models/UserModel'\r\nimport {API_URL} from '../../../../setup/helpers/apiUrl'\r\n\r\nexport const LOGIN_URL = `${API_URL}/api/Account/MetroGoToken`\r\n\r\nexport async function login(email: string, password: string) {\r\n console.log(\"Resp 14\");\r\n // let loginObj:UserModel = {\r\n // userName : email,\r\n // password:password,\r\n // Info:'',\r\n // email:''\r\n // }; \r\n \r\n var loginModel = {\r\n userName:email,\r\n password:password\r\n };\r\n\r\n console.log(\"Resp 21\");\r\n console.log(\"Login url =>\",LOGIN_URL);\r\n// console.log(\"login obj =>\",loginObj);\r\n var resp;\r\n try{\r\n await axios.post(LOGIN_URL+'?projectGuid=F528E33B-6A10-4098-AF00-4A128CDF57B5',loginModel,{headers:{ \"Content-Type\": \"application/json\"}})\r\n .then((response) =>{\r\n console.log(\"then =>\", response);\r\n resp = response; \r\n })\r\n .catch((err) => {\r\n console.log(\"thenCatch =>\", err);\r\n });\r\n console.log(\"Response => \", resp);\r\n return resp;\r\n } \r\n catch(err){\r\n console.log(\"login error =>\", err);\r\n console.log(\"catch resp =>\", resp);\r\n return err;\r\n }\r\n}\r\n\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, {useState} from 'react'\r\nimport {useDispatch} from 'react-redux'\r\nimport * as Yup from 'yup'\r\nimport clsx from 'clsx'\r\nimport {useFormik} from 'formik'\r\nimport {login} from '../redux/AuthCRUD'\r\nimport {UserModel} from '../models/UserModel'\r\nimport {setUser} from '../redux/AuthSlice'\r\n\r\nconst loginSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email('Wrong email format')\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Email gerekli'),\r\n password: Yup.string()\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Şifre gerekli'),\r\n})\r\n\r\nconst initialValues = {\r\n email: '',\r\n password: '',\r\n}\r\n\r\n/*\r\n Formik+YUP+Typescript:\r\n https://jaredpalmer.com/formik/docs/tutorial#getfieldprops\r\n https://medium.com/@maurice.de.beijer/yup-validation-and-typescript-and-formik-6c342578a20e\r\n*/\r\n\r\nexport function Login() {\r\n const [loading, setLoading] = useState(false)\r\n const dispatch = useDispatch()\r\n const formik = useFormik({\r\n initialValues,\r\n validationSchema: loginSchema,\r\n onSubmit: (values, {setStatus, setSubmitting}) => {\r\n setLoading(true) \r\n setTimeout(async () => {\r\n await login(values.email, values.password)\r\n .then((data:any) => {\r\n setLoading(false)\r\n console.log(\"Data =>\",data);\r\n if(data != null){\r\n if (data.data.Status != \"SUCCESS\"){\r\n setLoading(false)\r\n setSubmitting(false)\r\n setStatus(data.data.Detail)\r\n }else{\r\n let user:UserModel = {\r\n email: values.email,\r\n password : values.password,\r\n userName : values.email,\r\n Info : '',\r\n accessToken: data.data.Detail.access_token\r\n };\r\n console.log(\"Dispatch yapacak =>\",user);\r\n dispatch(setUser(user))\r\n document.location.reload();\r\n }\r\n }else{\r\n setLoading(false)\r\n setSubmitting(false)\r\n setStatus('Email veya şifrenizi kontrol ediniz.')\r\n }\r\n \r\n })\r\n .catch((error) => {\r\n setLoading(false)\r\n setSubmitting(false)\r\n setStatus('Email veya şifrenizi kontrol ediniz.')\r\n console.log(\"catch 53\",error)\r\n })\r\n }, 1000)\r\n },\r\n })\r\n\r\n return (\r\n \r\n {/* begin::Heading */}\r\n
\r\n

Metro Call Center

\r\n
\r\n {/* begin::Heading */}\r\n\r\n {formik.status ? (\r\n
\r\n
{formik.status}
\r\n
\r\n ) : (\r\n \r\n )}\r\n\r\n {/* begin::Form group */}\r\n
\r\n \r\n \r\n {formik.touched.email && formik.errors.email && (\r\n
\r\n {formik.errors.email}\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group */}\r\n
\r\n
\r\n
\r\n {/* begin::Label */}\r\n \r\n {/* end::Label */}\r\n
\r\n
\r\n \r\n {formik.touched.password && formik.errors.password && (\r\n
\r\n
\r\n {formik.errors.password}\r\n
\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Action */}\r\n
\r\n

\r\n Şifremi unuttum\r\n

\r\n
\r\n
\r\n \r\n {!loading && GİRİŞ}\r\n {loading && (\r\n \r\n Lütfen bekleyin...\r\n \r\n \r\n )}\r\n \r\n
\r\n {/* end::Action */}\r\n \r\n )\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, {useEffect} from 'react'\r\nimport {Redirect, Route, Switch} from 'react-router-dom'\r\nimport {Login} from './components/Login'\r\nimport {toAbsoluteUrl} from '../../../_metronic/helpers'\r\n\r\nexport function AuthPage() {\r\n useEffect(() => {\r\n document.body.classList.add('bg-white')\r\n return () => {\r\n document.body.classList.remove('bg-white')\r\n }\r\n }, [])\r\n\r\n return (\r\n \r\n {/* begin::Content */}\r\n
\r\n {/* begin::Logo */}\r\n \r\n Logo\r\n \r\n {/* end::Logo */}\r\n {/* begin::Wrapper */}\r\n
\r\n \r\n \r\n {/* \r\n */}\r\n \r\n \r\n \r\n
\r\n {/* end::Wrapper */}\r\n
\r\n {/* end::Content */}\r\n {/* begin::Footer */}\r\n
\r\n
\r\n \r\n bestERA 2021\r\n \r\n
\r\n
\r\n {/* end::Footer */}\r\n \r\n )\r\n}\r\n","import {Action} from '@reduxjs/toolkit'\r\nimport {persistReducer} from 'redux-persist'\r\nimport storage from 'redux-persist/lib/storage'\r\nimport {put, takeLatest} from 'redux-saga/effects'\r\nimport {UserModel} from '../models/UserModel'\r\n\r\nexport interface ActionWithPayload extends Action {\r\n payload?: T\r\n}\r\n\r\nexport const actionTypes = {\r\n Login: '[Login] Action',\r\n Logout: '[Logout] Action',\r\n Register: '[Register] Action',\r\n UserRequested: '[Request User] Action',\r\n UserLoaded: '[Load User] Auth API',\r\n SetUser: '[Set User] Action',\r\n}\r\n\r\nconst initialAuthState: IAuthState = {\r\n user: undefined,\r\n accessToken: undefined,\r\n}\r\n\r\nexport interface IAuthState {\r\n user?: UserModel\r\n accessToken?: string\r\n}\r\n\r\nexport const reducer = persistReducer(\r\n {storage, key: 'v100-demo1-auth', whitelist: ['user', 'accessToken']},\r\n (state: IAuthState = initialAuthState, action: ActionWithPayload) => {\r\n switch (action.type) {\r\n case actionTypes.Login: {\r\n const accessToken = action.payload?.accessToken\r\n console.log(\"Action access token =>\",accessToken)\r\n return {accessToken, user: undefined}\r\n }\r\n\r\n case actionTypes.Logout: {\r\n return initialAuthState\r\n }\r\n\r\n case actionTypes.UserLoaded: {\r\n const user = action.payload?.user\r\n return {...state, user}\r\n }\r\n\r\n case actionTypes.SetUser: {\r\n const user = action.payload?.user\r\n return {...state, user}\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n }\r\n)\r\n\r\nexport const actions = {\r\n login: (accessToken: string) => ({type: actionTypes.Login, payload: {accessToken}}),\r\n\r\n logout: () => ({type: actionTypes.Logout}),\r\n requestUser: () => ({\r\n type: actionTypes.UserRequested,\r\n }),\r\n fulfillUser: (user: UserModel) => ({type: actionTypes.UserLoaded, payload: {user}}),\r\n setUser: (user: UserModel) => ({type: actionTypes.SetUser, payload: {user}}),\r\n}\r\n\r\nexport function* saga() {\r\n yield takeLatest(actionTypes.Login, function* loginSaga() {\r\n yield put(actions.requestUser())\r\n })\r\n\r\n yield takeLatest(actionTypes.Register, function* registerSaga() {\r\n yield put(actions.requestUser())\r\n })\r\n\r\n // yield takeLatest(actionTypes.UserRequested, function* userRequested() {\r\n // console.log(\"User Bulma =>\", actionTypes.UserRequested);\r\n // const {data: user} = yield getUserByToken()\r\n // yield put(actions.fulfillUser(user))\r\n // })\r\n}\r\n","import React, {useEffect} from 'react'\r\nimport {useDispatch} from 'react-redux'\r\nimport {Redirect, Switch} from 'react-router-dom'\r\nimport {deleteUser} from './redux/AuthSlice'\r\n\r\n\r\nexport function Logout() {\r\n const dispatch = useDispatch()\r\n useEffect(() => {\r\n dispatch(deleteUser(undefined))\r\n localStorage.clear();\r\n document.location.reload()\r\n }, [dispatch])\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import {FC, useRef, useEffect, useState} from 'react'\r\nimport {shallowEqual, useSelector, connect, useDispatch, ConnectedProps} from 'react-redux'\r\n// import {LayoutSplashScreen} from '../../../../_metronic/layout/core'\r\nimport * as auth from './AuthRedux'\r\nimport {RootState} from '../../../../setup'\r\n\r\nconst mapState = (state: RootState) => ({auth: state.auth})\r\nconst connector = connect(mapState, auth.actions)\r\ntype PropsFromRedux = ConnectedProps\r\n\r\nconst AuthInit: FC = (props) => {\r\n const didRequest = useRef(false)\r\n const dispatch = useDispatch()\r\n const [showSplashScreen, setShowSplashScreen] = useState(true)\r\n const accessToken = useSelector(({auth}) => auth.accessToken, shallowEqual)\r\n\r\n // We should request user by authToken before rendering the application\r\n useEffect(() => {\r\n const requestUser = async () => {\r\n try {\r\n if (!didRequest.current) {\r\n }\r\n } catch (error) {\r\n console.error(error)\r\n if (!didRequest.current) {\r\n dispatch(props.logout())\r\n }\r\n } finally {\r\n setShowSplashScreen(false)\r\n }\r\n\r\n return () => (didRequest.current = true)\r\n }\r\n\r\n if (accessToken) {\r\n requestUser()\r\n } else {\r\n dispatch(props.logout())\r\n setShowSplashScreen(false)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n // return showSplashScreen ? : <>{props.children}\r\n return <>{props.children}\r\n}\r\n\r\nexport default connector(AuthInit)\r\n","import {all} from 'redux-saga/effects'\r\nimport {combineReducers} from 'redux' \r\nimport UserSliceReducer from '../../app/modules/auth/redux/AuthSlice'\r\nimport * as auth from '../../app/modules/auth'\r\n\r\nimport CustomerListSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CustomerListSlice'\r\nimport CampaignListSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CampaignListSlice'\r\nimport CampaignMarginListSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CampaignMarginSlice'\r\nimport CampaignDetailSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CampaignDetailSlice'\r\nimport LockInCandidateListSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/LockInCandidateSlice'\r\nimport CampaignResultSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CampaignResultSlice'\r\nimport CustomerDetailSliceReducer from '../../app/pages/CreateCampaign/redux/Slice/CustomerDetailSlice'\r\nimport ScoreCardSliceSliceReducer from '../../app/pages/CampaignMonitor/redux/Slice/ScoreCardSlice'\r\nimport ScoreCardCustomerSliceSliceReducer from '../../app/pages/CampaignMonitor/redux/Slice/ScoreCardCustomerSlice'\r\n\r\n\r\n\r\nexport const rootReducer = combineReducers({\r\n auth: auth.reducer, \r\n userReducer:UserSliceReducer,\r\n customerListReducer:CustomerListSliceReducer,\r\n campaignListReducer:CampaignListSliceReducer,\r\n campaignDetailSliceReducer:CampaignDetailSliceReducer,\r\n campaignMarginListSliceReducer:CampaignMarginListSliceReducer,\r\n lockInCandidateListReducer:LockInCandidateListSliceReducer,\r\n campaignResultReducer:CampaignResultSliceReducer,\r\n customerDetailReducer:CustomerDetailSliceReducer,\r\n scoreCardSliceReducer:ScoreCardSliceSliceReducer,\r\n scoreCardCustomerSliceReducer:ScoreCardCustomerSliceSliceReducer,\r\n\r\n\r\n})\r\n\r\nexport type RootState = ReturnType\r\n\r\nexport function* rootSaga() {\r\n yield all([auth.saga()])\r\n}\r\n\r\n\r\n\r\n","import {configureStore, getDefaultMiddleware} from '@reduxjs/toolkit'\r\nimport createSagaMiddleware from 'redux-saga'\r\nimport {reduxBatch} from '@manaflair/redux-batch'\r\nimport {persistStore} from 'redux-persist'\r\nimport {rootReducer, rootSaga} from './RootReducer'\r\n\r\nconst sagaMiddleware = createSagaMiddleware()\r\nconst middleware = [\r\n ...getDefaultMiddleware({\r\n immutableCheck: false,\r\n serializableCheck: false,\r\n thunk: true,\r\n }),\r\n sagaMiddleware,\r\n]\r\n\r\nconst store = configureStore({\r\n reducer: rootReducer,\r\n middleware,\r\n devTools: process.env.NODE_ENV !== 'production',\r\n enhancers: [reduxBatch],\r\n})\r\n\r\nexport type AppDispatch = typeof store.dispatch\r\n\r\n/**\r\n * @see https://github.com/rt2zz/redux-persist#persiststorestore-config-callback\r\n * @see https://github.com/rt2zz/redux-persist#persistor-object\r\n */\r\nexport const persistor = persistStore(store)\r\n\r\nsagaMiddleware.run(rootSaga)\r\n\r\nexport default store\r\n","import React, {FC, createContext, useContext} from 'react'\r\n\r\nconst I18N_CONFIG_KEY = process.env.REACT_APP_I18N_CONFIG_KEY || 'i18nConfig'\r\n\r\ntype Props = {\r\n selectedLang: 'de' | 'en' | 'es' | 'fr' | 'ja' | 'zh'\r\n}\r\nconst initialState: Props = {\r\n selectedLang: 'en',\r\n}\r\n\r\nfunction getConfig(): Props {\r\n const ls = localStorage.getItem(I18N_CONFIG_KEY)\r\n if (ls) {\r\n try {\r\n return JSON.parse(ls) as Props\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n }\r\n return initialState\r\n}\r\n\r\n// Side effect\r\nexport function setLanguage(lang: string) {\r\n localStorage.setItem(I18N_CONFIG_KEY, JSON.stringify({selectedLang: lang}))\r\n window.location.reload()\r\n}\r\n\r\nconst I18nContext = createContext(initialState)\r\n\r\nconst useLang = () => {\r\n return useContext(I18nContext).selectedLang\r\n}\r\n\r\nconst MetronicI18nProvider: FC = ({children}) => {\r\n const lang = getConfig()\r\n return {children}\r\n}\r\n\r\nexport {MetronicI18nProvider, useLang}\r\n","import {FC} from 'react'\r\nimport {useLang} from './Metronici18n'\r\nimport {IntlProvider} from 'react-intl'\r\nimport '@formatjs/intl-relativetimeformat/polyfill'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/en'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/de'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/es'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/fr'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/ja'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/zh'\r\n\r\nimport deMessages from './messages/de.json'\r\nimport enMessages from './messages/en.json'\r\nimport esMessages from './messages/es.json'\r\nimport frMessages from './messages/fr.json'\r\nimport jaMessages from './messages/ja.json'\r\nimport zhMessages from './messages/zh.json'\r\n\r\nconst allMessages = {\r\n de: deMessages,\r\n en: enMessages,\r\n es: esMessages,\r\n fr: frMessages,\r\n ja: jaMessages,\r\n zh: zhMessages,\r\n}\r\n\r\nconst I18nProvider: FC = ({children}) => {\r\n const locale = useLang()\r\n const messages = allMessages[locale]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport {I18nProvider}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport {FC} from 'react'\r\nimport {useLayout} from '../core'\r\n\r\nconst Footer: FC = () => {\r\n const {classes} = useLayout()\r\n return (\r\n \r\n {/* end::Container */}\r\n \r\n )\r\n}\r\n\r\nexport {Footer}\r\n","/* eslint-disable no-useless-escape */\r\n// DOCS: https://javascript.info/cookie\r\nexport class CookieComponent {\r\n /**\r\n * Returns the cookie with the given name, or undefined if not found\r\n *\r\n * @param {string} name - cookie name\r\n * @returns string | null\r\n */\r\n public static get(name: string): string | undefined {\r\n let matches = document.cookie.match(\r\n new RegExp('(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)')\r\n )\r\n return matches ? decodeURIComponent(matches[1]) : undefined\r\n }\r\n\r\n /**\r\n * Please note that a cookie value is encoded,\r\n * so getCookie uses a built-in decodeURIComponent function to decode it.\r\n *\r\n * @param {string} name - cookie name\r\n * @param {string | number | boolean} value - cookie value\r\n * @param {any} cookieOptions - cookie options\r\n * @returns void\r\n */\r\n public static set(name: string, value: string | number | boolean, cookieOptions: any): void {\r\n const options = {\r\n path: '/',\r\n // add other defaults here if necessary\r\n ...cookieOptions,\r\n }\r\n\r\n if (options.expires instanceof Date) {\r\n options.expires = options.expires.toUTCString()\r\n }\r\n\r\n let updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value)\r\n\r\n for (let optionKey in options) {\r\n updatedCookie += '; ' + optionKey\r\n let optionValue = options[optionKey]\r\n if (optionValue !== true) {\r\n updatedCookie += '=' + optionValue\r\n }\r\n }\r\n\r\n document.cookie = updatedCookie\r\n }\r\n\r\n /**\r\n * To delete a cookie, we can call it with a negative expiration date\r\n *\r\n * @param {string} name\r\n */\r\n public static delete(name: string): void {\r\n CookieComponent.set(name, '', {\r\n 'max-age': -1,\r\n })\r\n }\r\n}\r\n","import {\r\n DataUtil,\r\n EventHandlerUtil,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getCSS,\r\n DOMEventHandlerUtil,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface DrawerOptions {\r\n overlay: boolean\r\n baseClass: string\r\n overlayClass: string\r\n direction: string\r\n}\r\n\r\nconst defaultDrawerOptions: DrawerOptions = {\r\n overlay: true,\r\n baseClass: 'drawer',\r\n overlayClass: 'drawer-overlay',\r\n direction: 'end',\r\n}\r\n\r\nclass DrawerComponent {\r\n element: HTMLElement\r\n overlayElement: HTMLElement | null = null\r\n toggleElement: HTMLElement | null = null\r\n options: DrawerOptions\r\n instanceUid: string\r\n name: string = ''\r\n shown: boolean = false\r\n lastWidth: number = 0\r\n closeElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: DrawerOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultDrawerOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('drawer')\r\n this.overlayElement = null\r\n this.name = this.element.getAttribute('data-kt-drawer-name') || ''\r\n this.shown = false\r\n this.toggleElement = null\r\n // Event Handlers\r\n this._handlers()\r\n // Update Instance\r\n this._update()\r\n // Bind Instance\r\n DataUtil.set(this.element, 'drawer', this)\r\n }\r\n\r\n private _handlers = () => {\r\n const togglers = this._getOption('toggle') as string\r\n const closers = this._getOption('close') as string\r\n\r\n if (togglers !== null && togglers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, togglers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.toggleElement = document.getElementById(togglers)\r\n this._toggle()\r\n })\r\n }\r\n\r\n if (closers !== null && closers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, closers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.closeElement = document.getElementById(closers)\r\n\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _update = () => {\r\n const width = String(this._getOption('width'))\r\n const direction = String(this._getOption('direction'))\r\n\r\n // Reset state\r\n const hasBaseClass = this.element.classList.contains(`${this.options.baseClass}-on`)\r\n const bodyCanvasAttr = String(document.body.getAttribute(`data-kt-drawer-${this.name}-`))\r\n\r\n if (hasBaseClass === true && bodyCanvasAttr === 'on') {\r\n this.shown = true\r\n } else {\r\n this.shown = false\r\n }\r\n\r\n // Activate/deactivate\r\n if (this._getOption('activate') === true) {\r\n this.element.classList.add(this.options.baseClass)\r\n this.element.classList.add(`${this.options.baseClass}-${direction}`)\r\n ElementStyleUtil.set(this.element, 'width', width, true)\r\n\r\n this.lastWidth = parseInt(width)\r\n } else {\r\n ElementStyleUtil.set(this.element, 'width', '')\r\n this.element.classList.remove(this.options.baseClass)\r\n this.element.classList.remove(`${this.options.baseClass}-${direction}`)\r\n this._hide()\r\n }\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-drawer-${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n return true\r\n } else {\r\n if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private _toggle = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.toggle') === false) {\r\n return\r\n }\r\n\r\n if (this.shown) {\r\n this._hide()\r\n } else {\r\n this._show()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.toggled')\r\n }\r\n\r\n private _hide = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.hide') === false) {\r\n return\r\n }\r\n\r\n this.shown = false\r\n this._deleteOverlay()\r\n document.body.removeAttribute(`data-kt-drawer-${this.name}`)\r\n document.body.removeAttribute(`data-kt-drawer`)\r\n this.element.classList.remove(`${this.options.baseClass}-on`)\r\n if (this.toggleElement != null) {\r\n this.toggleElement.classList.remove('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.after.hidden')\r\n }\r\n\r\n private _show = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.show') === false) {\r\n return\r\n }\r\n\r\n this.shown = true\r\n this._createOverlay()\r\n document.body.setAttribute(`data-kt-drawer-${this.name}`, 'on')\r\n document.body.setAttribute('data-kt-drawer', 'on')\r\n this.element.classList.add(`${this.options.baseClass}-on`)\r\n if (this.toggleElement !== null) {\r\n this.toggleElement.classList.add('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.shown')\r\n }\r\n\r\n private _createOverlay = () => {\r\n if (this._getOption('overlay') === true) {\r\n this.overlayElement = document.createElement('DIV')\r\n const elementZIndex = getCSS(this.element, 'z-index')\r\n if (elementZIndex) {\r\n const overlayZindex = parseInt(elementZIndex) - 1\r\n ElementStyleUtil.set(this.overlayElement, 'z-index', overlayZindex) // update\r\n }\r\n document.body.append(this.overlayElement)\r\n const overlayClassOption = this._getOption('overlay-class')\r\n if (overlayClassOption) {\r\n this.overlayElement.classList.add(overlayClassOption.toString())\r\n }\r\n this.overlayElement.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _deleteOverlay = () => {\r\n if (this.overlayElement !== null && this.overlayElement.parentNode) {\r\n this.overlayElement.parentNode.removeChild(this.overlayElement)\r\n }\r\n }\r\n\r\n private _getDirection = () => {\r\n return String(this._getOption('direction')) === 'left' ? 'left' : 'right'\r\n }\r\n\r\n private _getWidth = () => {\r\n let width = this._getOption('width')\r\n if (width && width === 'auto') {\r\n width = getCSS(this.element, 'width')\r\n }\r\n\r\n return width\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public toggle = () => {\r\n this._toggle()\r\n }\r\n\r\n public show = () => {\r\n this._show()\r\n }\r\n\r\n public hide = () => {\r\n this._hide()\r\n }\r\n\r\n public isShown = () => {\r\n return this.shown\r\n }\r\n\r\n public update = () => {\r\n this._update()\r\n }\r\n\r\n public goElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace = (element: HTMLElement): boolean => {\r\n return DataUtil.has(element, 'drawer')\r\n }\r\n\r\n public static getInstance = (element: HTMLElement) => {\r\n return DataUtil.get(element, 'drawer')\r\n }\r\n\r\n public static hideAll = () => {\r\n const oldInstances = DataUtil.getAllInstancesByKey('drawer')\r\n oldInstances.forEach((dr) => {\r\n dr.hide()\r\n })\r\n }\r\n\r\n public static updateAll = () => {\r\n const oldInstances = DataUtil.getAllInstancesByKey('drawer')\r\n oldInstances.forEach((dr) => {\r\n dr.update()\r\n })\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string): void {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let drawer = DrawerComponent.getInstance(item)\r\n if (!drawer) {\r\n drawer = new DrawerComponent(item, defaultDrawerOptions)\r\n }\r\n drawer.hide()\r\n })\r\n }\r\n\r\n // Dismiss instances\r\n public static handleDismiss = () => {\r\n // External drawer toggle handler\r\n DOMEventHandlerUtil.on(document.body, '[data-kt-drawer-dismiss=\"true\"]', 'click', () => {\r\n /* @ts-ignore */\r\n const element = this.closest('[data-kt-drawer=\"true\"]')\r\n if (element) {\r\n const drawer = DrawerComponent.getInstance(element)\r\n if (drawer && drawer.isShown()) {\r\n drawer.hide()\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Global Initialization\r\n public static initGlobalHandlers(): void {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer: number | undefined\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.body.querySelectorAll('[data-kt-drawer=\"true\"]')\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n const instance = DrawerComponent.getInstance(item)\r\n if (instance) {\r\n instance.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.initGlobalHandlers()\r\n DrawerComponent.handleDismiss()\r\n }\r\n\r\n public static reinitialization = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.hideAll()\r\n DrawerComponent.updateAll()\r\n DrawerComponent.handleDismiss()\r\n }\r\n}\r\n\r\nexport {DrawerComponent, defaultDrawerOptions}\r\n","import {\r\n DataUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n getUniqueIdWithPrefix,\r\n getAttributeValueByBreakpoint,\r\n} from '../_utils/index'\r\n\r\nexport interface FeedbackOptions {\r\n width?: number\r\n placement?: string\r\n content?: string\r\n type?: string\r\n}\r\n\r\nconst defaultFeedbackOptions: FeedbackOptions = {\r\n width: 100,\r\n placement: 'top-center',\r\n content: '',\r\n type: 'popup',\r\n}\r\n\r\nclass FeedbackComponent {\r\n element: HTMLElement\r\n options: FeedbackOptions\r\n instanceUid: string\r\n shown: boolean\r\n\r\n constructor(_element: HTMLElement, options: FeedbackOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultFeedbackOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('feedback')\r\n this.shown = false\r\n\r\n // Event handlers\r\n this._handlers() // will add in the show popup\r\n DataUtil.set(this.element, 'feedback', this)\r\n }\r\n\r\n private _handlers = () => {\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._go()\r\n })\r\n }\r\n\r\n private _go = () => {}\r\n\r\n private showPopup = () => {\r\n this.element = document.createElement('DIV')\r\n\r\n this.element.classList.add('feedback feedback-popup')\r\n this.element.innerHTML = this.options.content || ''\r\n\r\n if (this.options.placement === 'top-center') {\r\n this.setPopupTopCenterPosition()\r\n }\r\n\r\n document.body.appendChild(this.element)\r\n this.element.classList.add('feedback-shown')\r\n this.shown = true\r\n }\r\n\r\n private setPopupTopCenterPosition = () => {\r\n const width = getAttributeValueByBreakpoint(this.options.width?.toString() || '0')\r\n const height = ElementStyleUtil.get(this.element, 'height')\r\n this.element.classList.add('feedback-top-center')\r\n ElementStyleUtil.set(this.element, 'width', width)\r\n ElementStyleUtil.set(this.element, 'left', '50%')\r\n ElementStyleUtil.set(this.element, 'top', '-' + height)\r\n }\r\n\r\n private hidePopup = () => {\r\n this.element.remove()\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public show = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.show') === false) {\r\n return\r\n }\r\n\r\n if (this.options.type === 'popup') {\r\n this.showPopup()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.feedback.shown')\r\n\r\n return this\r\n }\r\n\r\n public hide = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.hide') === false) {\r\n return\r\n }\r\n\r\n if (this.options.type === 'popup') {\r\n this.hidePopup()\r\n }\r\n\r\n this.shown = false\r\n EventHandlerUtil.trigger(this.element, 'kt.feedback.hidden')\r\n return this\r\n }\r\n\r\n public isShown = () => {\r\n return this.isShown\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-Feedback]') {\r\n throw new Error('not implemented')\r\n }\r\n}\r\n\r\nexport {FeedbackComponent, defaultFeedbackOptions}\r\n","import {EventHandlerUtil, DataUtil, getUniqueIdWithPrefix, getCSS} from '../_utils/index'\r\n\r\nexport interface IImageInputOptions {}\r\n\r\nexport interface IImageInputQueries {\r\n componentName: string\r\n instanseQuery: string\r\n inputQuery: string\r\n wrapperQuery: string\r\n cancelQuery: string\r\n removeQuery: string\r\n hiddenQuery: string\r\n}\r\n\r\nconst defaultImageInputOptions = {}\r\n\r\nconst defaultImageInputQueires: IImageInputQueries = {\r\n componentName: 'image-input',\r\n instanseQuery: '[data-kt-image-input]',\r\n inputQuery: 'input[type=\"file\"]',\r\n wrapperQuery: '.image-input-wrapper',\r\n cancelQuery: '[data-kt-image-input-action=\"cancel\"]',\r\n removeQuery: '[data-kt-image-input-action=\"remove\"]',\r\n hiddenQuery: 'input[type=\"hidden\"]',\r\n}\r\n\r\nclass ImageInputComponent {\r\n element: HTMLElement\r\n inputElement: HTMLInputElement | null\r\n wrapperElement: HTMLElement | null\r\n cancelElement: HTMLElement | null\r\n removeElement: HTMLElement | null\r\n hiddenElement: HTMLInputElement | null\r\n src: string = ''\r\n options: IImageInputOptions\r\n queries: IImageInputQueries\r\n uid: string\r\n value: string = ''\r\n\r\n constructor(_element: HTMLElement, _options: IImageInputOptions, _queries: IImageInputQueries) {\r\n // Variables\r\n this.options = Object.assign(defaultImageInputOptions, _options)\r\n this.queries = _queries\r\n this.uid = getUniqueIdWithPrefix(this.queries.componentName)\r\n\r\n // Elements\r\n this.element = _element\r\n this.inputElement = this.element.querySelector(this.queries.inputQuery)\r\n this.wrapperElement = this.element.querySelector(this.queries.wrapperQuery)\r\n this.cancelElement = this.element.querySelector(this.queries.cancelQuery)\r\n this.removeElement = this.element.querySelector(this.queries.removeQuery)\r\n this.hiddenElement = this.element.querySelector(this.queries.hiddenQuery)\r\n if (this.wrapperElement) {\r\n this.src = getCSS(this.wrapperElement, 'backgroundImage')\r\n }\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private handlers(): void {\r\n this.element.addEventListener('change', this._change)\r\n if (this.cancelElement) {\r\n this.cancelElement.addEventListener('click', this._cancel)\r\n }\r\n\r\n if (this.removeElement) {\r\n this.removeElement.addEventListener('click', this._cancel)\r\n }\r\n }\r\n\r\n // Event Handlers\r\n private _change = (e: Event) => {\r\n e.preventDefault()\r\n\r\n if (this.inputElement !== null && this.inputElement.files && this.inputElement.files[0]) {\r\n // Fire change event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.change', e) === false) {\r\n return\r\n }\r\n\r\n const reader = new FileReader()\r\n\r\n reader.onload = (e: ProgressEvent) => {\r\n if (this.wrapperElement && e.target) {\r\n this.wrapperElement.style.setProperty('background-image', `url('${e.target.result}')`)\r\n }\r\n }\r\n\r\n reader.readAsDataURL(this.inputElement.files[0])\r\n this.element.classList.add('image-input-changed')\r\n this.element.classList.remove('image-input-empty')\r\n\r\n // Fire removed event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.changed', e)\r\n }\r\n }\r\n\r\n private _cancel = (e: Event) => {\r\n e.preventDefault()\r\n\r\n // Fire cancel event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.cancel', e) === false) {\r\n return\r\n }\r\n\r\n this.element.classList.remove('image-input-changed')\r\n this.element.classList.remove('image-input-empty')\r\n this.element.style.setProperty('background-image', this.src)\r\n if (this.inputElement) {\r\n this.inputElement.value = ''\r\n }\r\n\r\n if (this.hiddenElement !== null) {\r\n this.hiddenElement.value = '0'\r\n }\r\n\r\n // Fire canceled event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.canceled', e)\r\n }\r\n\r\n private _remove = (e: Event) => {\r\n e.preventDefault()\r\n\r\n // Fire remove event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.remove', e) === false) {\r\n return\r\n }\r\n\r\n this.element.classList.remove('image-input-changed')\r\n this.element.classList.add('image-input-empty')\r\n if (this.wrapperElement) {\r\n this.wrapperElement.style.setProperty('background-image', 'none')\r\n }\r\n\r\n if (this.inputElement) {\r\n this.inputElement.value = ''\r\n }\r\n\r\n if (this.hiddenElement !== null) {\r\n this.hiddenElement.value = '1'\r\n }\r\n\r\n // Fire removed event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.removed', e)\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public getInputElement(): HTMLInputElement | null {\r\n return this.inputElement\r\n }\r\n\r\n public getElement(): HTMLElement {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultImageInputQueires.componentName\r\n ) => {\r\n const ImageInput = DataUtil.get(el, componentName)\r\n if (ImageInput) {\r\n return ImageInput\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultImageInputQueires.instanseQuery,\r\n options: IImageInputOptions = defaultImageInputOptions,\r\n queries: IImageInputQueries = defaultImageInputQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let ImageInput = ImageInputComponent.getInstance(item)\r\n if (!ImageInput) {\r\n ImageInput = new ImageInputComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultImageInputQueires.instanseQuery,\r\n options: IImageInputOptions = defaultImageInputOptions,\r\n queries: IImageInputQueries = defaultImageInputQueires\r\n ): ImageInputComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let ImageInput = ImageInputComponent.getInstance(item)\r\n if (!ImageInput) {\r\n ImageInput = new ImageInputComponent(item, options, queries)\r\n }\r\n return ImageInput\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultImageInputQueires.instanseQuery) => {\r\n ImageInputComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultImageInputQueires.instanseQuery) => {\r\n ImageInputComponent.createInstances(selector)\r\n }\r\n}\r\nexport {ImageInputComponent, defaultImageInputOptions, defaultImageInputQueires}\r\n","import {\r\n DataUtil,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n getViewPort,\r\n isVisibleElement,\r\n throttle,\r\n getCSS,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\nimport {CookieComponent} from './_CookieComponent'\r\n\r\nexport interface ScrollOptions {\r\n saveState?: boolean\r\n}\r\n\r\nconst defaultScrollOptions: ScrollOptions = {\r\n saveState: true,\r\n}\r\n\r\nclass ScrollComponent {\r\n element: HTMLElement\r\n options: ScrollOptions\r\n id: string\r\n\r\n constructor(_element: HTMLElement, options: ScrollOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollOptions, options)\r\n this.id = this.element.getAttribute('id') || ''\r\n this.update()\r\n // this.element.setAttribute('data-kt-scrolltop', 'true')\r\n DataUtil.set(this.element, 'scroll', this)\r\n }\r\n\r\n private getOption = (name: string) => {\r\n if (this.element.hasAttribute('data-kt-scroll-' + name) === true) {\r\n const attr = this.element.getAttribute('data-kt-scroll-' + name) || ''\r\n let value: string | JSON | boolean = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private getHeightType = () => {\r\n if (this.getOption('height')) {\r\n return 'height'\r\n }\r\n if (this.getOption('min-height')) {\r\n return 'min-height'\r\n }\r\n if (this.getOption('max-height')) {\r\n return 'max-height'\r\n }\r\n }\r\n\r\n private getAutoHeight = () => {\r\n let height: number | string = getViewPort().height\r\n const dependencies = this.getOption('dependencies')\r\n const wrappers = this.getOption('wrappers')\r\n const offset = this.getOption('offset')\r\n\r\n // Height dependencies\r\n if (dependencies !== null) {\r\n const elements = document.querySelectorAll(dependencies as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n if (isVisibleElement(element) === false) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'height'))\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Wrappers\r\n if (wrappers !== null) {\r\n var elements = document.querySelectorAll(wrappers as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n\r\n if (!isVisibleElement(element)) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n height = height - parseInt(getCSS(element, 'padding-top'))\r\n height = height - parseInt(getCSS(element, 'padding-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Custom offset\r\n if (offset !== null) {\r\n height = height - parseInt(offset as string)\r\n }\r\n\r\n height = height - parseInt(getCSS(this.element, 'margin-top'))\r\n height = height - parseInt(getCSS(this.element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(this.element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(this.element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n\r\n height = String(height) + 'px'\r\n\r\n return height\r\n }\r\n\r\n private setupHeight = () => {\r\n let height = this.getHeight()\r\n let heightType = this.getHeightType() as string\r\n\r\n // Set height\r\n if (height !== null && height.length > 0) {\r\n ElementStyleUtil.set(this.element, heightType, height)\r\n } else {\r\n ElementStyleUtil.set(this.element, heightType, '')\r\n }\r\n }\r\n\r\n private setupState = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n const cookie = CookieComponent.get(this.id + 'st')\r\n if (cookie) {\r\n var pos = parseInt(cookie)\r\n\r\n if (pos > 0) {\r\n this.element.scrollTop = pos\r\n }\r\n }\r\n }\r\n }\r\n\r\n private setupScrollHandler = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n this.element.addEventListener('scroll', this.scrollHandler)\r\n } else {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n }\r\n\r\n private scrollHandler = () => {\r\n const cookieId = this.id + 'st'\r\n CookieComponent.set(cookieId, this.element.scrollTop, {})\r\n }\r\n\r\n private destroyScrollHandler = () => {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n\r\n private resetHeight = () => {\r\n const heghtType = this.getHeightType()\r\n if (heghtType) {\r\n ElementStyleUtil.set(this.element, heghtType, '')\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n // Activate/deactivate\r\n if (\r\n this.getOption('activate') === true ||\r\n !this.element.hasAttribute('data-kt-scroll-activate')\r\n ) {\r\n this.setupHeight()\r\n this.setupScrollHandler()\r\n this.setupState()\r\n } else {\r\n this.resetHeight()\r\n this.destroyScrollHandler()\r\n }\r\n }\r\n\r\n public getHeight = () => {\r\n const heightType = this.getHeightType()\r\n const height = this.getOption(heightType || '')\r\n if (height instanceof Function) {\r\n return height.call(height)\r\n } else if (height !== null && typeof height === 'string' && height.toLowerCase() === 'auto') {\r\n return this.getAutoHeight()\r\n } else {\r\n return height\r\n }\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'scroll')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n if (element !== null && ScrollComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'scroll')\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element: Element) => {\r\n const item = element as HTMLElement\r\n let scroll = ScrollComponent.getInstance(item)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(item, defaultScrollOptions)\r\n }\r\n })\r\n }\r\n\r\n public static destroyAll(attr: string = '[data-kt-scroll=\"true\"]') {}\r\n\r\n public static bootstrap(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n ScrollComponent.resize()\r\n }\r\n\r\n public static createInstance = (\r\n element: HTMLElement,\r\n options: ScrollOptions = defaultScrollOptions\r\n ): ScrollComponent | undefined => {\r\n let scroll = ScrollComponent.getInstance(element)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(element, options)\r\n }\r\n return scroll\r\n }\r\n\r\n public static reinitialization(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n }\r\n\r\n public static resize() {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.body.querySelectorAll('[data-kt-scroll=\"true\"]')\r\n elements.forEach((element: Element) => {\r\n const instance = ScrollComponent.getInstance(element as HTMLElement)\r\n if (instance) {\r\n instance.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n}\r\n\r\nexport {ScrollComponent, defaultScrollOptions}\r\n","import {\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface IScrollTopOptions {\r\n offset: number\r\n speed: number\r\n}\r\n\r\nconst defaultScrollTopOptions: IScrollTopOptions = {\r\n offset: 200,\r\n speed: 600,\r\n}\r\n\r\nclass ScrollTopComponent {\r\n element: HTMLElement\r\n options: IScrollTopOptions\r\n instanceUid: string\r\n\r\n constructor(_element: HTMLElement, options: IScrollTopOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollTopOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('scrolltop')\r\n\r\n // Event Handlers\r\n this._handlers()\r\n\r\n // Bind Instance\r\n DataUtil.set(this.element, 'scrolltop', this)\r\n }\r\n\r\n private _handlers = () => {\r\n let timer: number\r\n window.addEventListener('scroll', () => {\r\n throttle(timer, () => {\r\n this._scroll()\r\n })\r\n })\r\n\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._go()\r\n })\r\n }\r\n\r\n private _scroll = () => {\r\n const offset = parseInt(this._getOption('offset') as string)\r\n const pos = getScrollTop() // current vertical position\r\n if (pos > offset) {\r\n if (!document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.setAttribute('data-kt-scrolltop', 'on')\r\n }\r\n } else {\r\n if (document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.removeAttribute('data-kt-scrolltop')\r\n }\r\n }\r\n }\r\n\r\n private _go = () => {\r\n const speed = parseInt(this._getOption('speed') as string)\r\n ElementAnimateUtil.scrollTop(0, speed)\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-scrolltop-${name}`)\r\n if (attr) {\r\n const value = getAttributeValueByBreakpoint(attr)\r\n return value !== null && String(value) === 'true'\r\n }\r\n\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n\r\n return null\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n public go = () => {\r\n return this._go()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement) => {\r\n const scrollTop = DataUtil.get(el, 'scrolltop')\r\n if (scrollTop) {\r\n return scrollTop\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, defaultScrollTopOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: IScrollTopOptions = defaultScrollTopOptions\r\n ): ScrollTopComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, options)\r\n }\r\n return scrollTop\r\n }\r\n\r\n public static bootstrap = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static goTop = () => {\r\n ElementAnimateUtil.scrollTop(0, defaultScrollTopOptions.speed)\r\n }\r\n}\r\nexport {ScrollTopComponent, defaultScrollTopOptions}\r\n","import {\r\n getElementIndex,\r\n getUniqueIdWithPrefix,\r\n ElementAnimateUtil,\r\n EventHandlerUtil,\r\n DataUtil,\r\n DOMEventHandlerUtil,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface IStepperOptions {\r\n startIndex: number\r\n animation: boolean\r\n animationSpeed: string\r\n animationNextClass: string\r\n animationPreviousClass: string\r\n}\r\n\r\nconst defaultStepperOptions: IStepperOptions = {\r\n startIndex: 1,\r\n animation: false,\r\n animationSpeed: '0.3s',\r\n animationNextClass: 'animate__animated animate__slideInRight animate__fast',\r\n animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast',\r\n}\r\n\r\nclass StepperComponent {\r\n element: HTMLElement\r\n options: IStepperOptions\r\n instanceUid: string\r\n steps: NodeListOf\r\n btnNext: HTMLElement | null\r\n btnPrev: HTMLElement | null\r\n btnSubmit: HTMLElement | null\r\n totatStepsNumber: number = 0\r\n passedStepIndex: number = 0\r\n currentStepIndex: number = 1\r\n\r\n constructor(_element: HTMLElement, options: IStepperOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultStepperOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('stepper')\r\n\r\n // Elements\r\n this.steps = this.element.querySelectorAll('[data-kt-stepper-element=\"nav\"]')\r\n this.btnNext = this.element.querySelector('[data-kt-stepper-action=\"next\"]')\r\n this.btnPrev = this.element.querySelector('[data-kt-stepper-action=\"previous\"]')\r\n this.btnSubmit = this.element.querySelector('[data-kt-stepper-action=\"submit\"]')\r\n\r\n // Variables\r\n this.totatStepsNumber = this.steps?.length | 0\r\n this.passedStepIndex = 0\r\n this.currentStepIndex = 1\r\n\r\n // Set Current Step\r\n if (this.options.startIndex > 1) {\r\n this._goTo(this.options.startIndex)\r\n }\r\n\r\n // Event Handlers\r\n this.initHandlers()\r\n\r\n // Bind Instance\r\n DataUtil.set(this.element, 'stepper', this)\r\n }\r\n\r\n private _goTo = (index: number) => {\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.change')\r\n // Skip if this step is already shown\r\n if (index === this.currentStepIndex || index > this.totatStepsNumber || index < 0) {\r\n return\r\n }\r\n\r\n // Validate step number\r\n index = parseInt(index.toString())\r\n // Set current step\r\n this.passedStepIndex = this.currentStepIndex\r\n this.currentStepIndex = index\r\n\r\n // Refresh elements\r\n this.refreshUI()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.changed')\r\n }\r\n\r\n private initHandlers = () => {\r\n this.btnNext?.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.next', e)\r\n })\r\n\r\n this.btnPrev?.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.previous', e)\r\n })\r\n\r\n DOMEventHandlerUtil.on(this.element, '[data-kt-stepper-action=\"step\"]', 'click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n if (this.steps && this.steps.length > 0) {\r\n for (let i = 0; i < this.steps.length; i++) {\r\n if ((this.steps[i] as HTMLElement) === this.element) {\r\n let index = i + 1\r\n\r\n const stepDirection = this._getStepDirection(index)\r\n EventHandlerUtil.trigger(this.element, `stepper.${stepDirection}`, e)\r\n return\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n private _getStepDirection = (index: number) => {\r\n return index > this.currentStepIndex ? 'next' : 'previous'\r\n }\r\n\r\n private getStepContent = (index: number) => {\r\n const content = this.element.querySelectorAll('[data-kt-stepper-element=\"content\"]')\r\n if (!content) {\r\n return false\r\n }\r\n\r\n if (content[index - 1]) {\r\n return content[index - 1]\r\n }\r\n\r\n return false\r\n }\r\n\r\n private getLastStepIndex = () => {\r\n return this.totatStepsNumber\r\n }\r\n\r\n private getTotalStepsNumber = () => {\r\n return this.totatStepsNumber\r\n }\r\n\r\n private refreshUI = () => {\r\n let state = ''\r\n\r\n if (this.isLastStep()) {\r\n state = 'last'\r\n } else if (this.isFirstStep()) {\r\n state = 'first'\r\n } else {\r\n state = 'between'\r\n }\r\n\r\n // Set state class\r\n this.element.classList.remove('last')\r\n this.element.classList.remove('first')\r\n this.element.classList.remove('between')\r\n\r\n this.element.classList.add(state)\r\n\r\n // Step Items\r\n const elements = this.element.querySelectorAll(\r\n '[data-kt-stepper-element=\"nav\"], [data-kt-stepper-element=\"content\"], [data-kt-stepper-element=\"info\"]'\r\n )\r\n\r\n if (!elements || elements.length <= 0) {\r\n return\r\n }\r\n\r\n for (var i = 0, len = elements.length; i < len; i++) {\r\n var element = elements[i] as HTMLElement\r\n var index = getElementIndex(element) + 1\r\n\r\n element.classList.remove('current')\r\n element.classList.remove('completed')\r\n element.classList.remove('pending')\r\n\r\n if (index === this.currentStepIndex) {\r\n element.classList.add('current')\r\n\r\n if (\r\n this.options.animation !== false &&\r\n element.getAttribute('data-kt-stepper-element') === 'content'\r\n ) {\r\n ElementStyleUtil.set(element, 'animationDuration', this.options.animationSpeed)\r\n\r\n const animation =\r\n this._getStepDirection(this.passedStepIndex) === 'previous'\r\n ? this.options.animationPreviousClass\r\n : this.options.animationNextClass\r\n ElementAnimateUtil.animateClass(element, animation)\r\n }\r\n } else {\r\n if (index < this.currentStepIndex) {\r\n element.classList.add('completed')\r\n } else {\r\n element.classList.add('pending')\r\n }\r\n }\r\n }\r\n }\r\n\r\n private isLastStep = () => {\r\n return this.currentStepIndex === this.totatStepsNumber\r\n }\r\n\r\n private isFirstStep = () => {\r\n return this.currentStepIndex === 1\r\n }\r\n\r\n private isBetweenStep = () => {\r\n return this.isLastStep() === false && this.isFirstStep() === false\r\n }\r\n\r\n // ///////////////////////\r\n // // ** Public API ** //\r\n // ///////////////////////\r\n\r\n // // Plugin API\r\n public goto = (index: number) => {\r\n return this._goTo(index)\r\n }\r\n\r\n public goNext = () => {\r\n return this.goto(this.getNextStepIndex())\r\n }\r\n\r\n public goPrev = () => {\r\n return this.goto(this.getPrevStepIndex())\r\n }\r\n\r\n public goFirst = () => {\r\n return this.goto(1)\r\n }\r\n\r\n public goLast = () => {\r\n return this.goto(this.getLastStepIndex())\r\n }\r\n\r\n public getCurrentStepIndex = () => {\r\n return this.currentStepIndex\r\n }\r\n\r\n public getNextStepIndex = () => {\r\n if (this.totatStepsNumber >= this.currentStepIndex + 1) {\r\n return this.currentStepIndex + 1\r\n } else {\r\n return this.totatStepsNumber\r\n }\r\n }\r\n\r\n public getPassedStepIndex = () => {\r\n return this.passedStepIndex\r\n }\r\n\r\n public getPrevStepIndex = () => {\r\n if (this.currentStepIndex - 1 > 1) {\r\n return this.currentStepIndex - 1\r\n } else {\r\n return 1\r\n }\r\n }\r\n\r\n public getElement = (index: number) => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public destroy = () => {\r\n console.log('destroy stepper')\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement): boolean {\r\n return DataUtil.has(element, 'stepper')\r\n }\r\n\r\n public static getInstance(element: HTMLElement): StepperComponent | null {\r\n if (element !== null && StepperComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'stepper')\r\n }\r\n return null\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string): void {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let stepper = StepperComponent.getInstance(item)\r\n if (!stepper) {\r\n stepper = new StepperComponent(item, defaultStepperOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n element: HTMLElement,\r\n options: IStepperOptions = defaultStepperOptions\r\n ): StepperComponent | null => {\r\n if (!element) {\r\n return null\r\n }\r\n let stepper = StepperComponent.getInstance(element)\r\n if (!stepper) {\r\n stepper = new StepperComponent(element, options)\r\n }\r\n return stepper\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-kt-stepper]') {\r\n StepperComponent.createInstances(attr)\r\n }\r\n}\r\n\r\nexport {StepperComponent, defaultStepperOptions}\r\n","import {\r\n getElementOffset,\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getCSS,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface StickyOptions {\r\n offset: number\r\n reverse: boolean\r\n animation: boolean\r\n animationSpeed: string\r\n animationClass: string\r\n}\r\n\r\nconst defaultStickyOptions: StickyOptions = {\r\n offset: 200,\r\n reverse: false,\r\n animation: true,\r\n animationSpeed: '0.3s',\r\n animationClass: 'animation-slide-in-down',\r\n}\r\n\r\nclass StickyComponent {\r\n element: HTMLElement\r\n options: StickyOptions\r\n instanceUid: string\r\n instanceName: string | null = ''\r\n attributeName: string\r\n eventTriggerState: boolean\r\n lastScrollTop: number\r\n\r\n constructor(_element: HTMLElement, options: StickyOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultStickyOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('sticky')\r\n this.instanceName = this.element.getAttribute('data-kt-sticky-name')\r\n this.attributeName = 'data-kt-sticky-' + this.instanceName\r\n this.eventTriggerState = true\r\n this.lastScrollTop = 0\r\n\r\n // Event Handlers\r\n window.addEventListener('scroll', this.scroll)\r\n\r\n // Initial Launch\r\n this.scroll()\r\n\r\n DataUtil.set(this.element, 'sticky', this)\r\n }\r\n\r\n private scroll = () => {\r\n let offset = this.getOption('offset')\r\n let reverse = this.getOption('reverse')\r\n\r\n // Exit if false\r\n if (offset === false) {\r\n return\r\n }\r\n\r\n let offsetNum = 0\r\n if (typeof offset === 'string') {\r\n offsetNum = parseInt(offset)\r\n }\r\n\r\n const st = getScrollTop()\r\n\r\n // Reverse scroll mode\r\n if (reverse === true) {\r\n // Release on reverse scroll mode\r\n if (st > offsetNum && this.lastScrollTop < st) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // Back scroll mode\r\n if (document.body.hasAttribute(this.attributeName)) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = true\r\n }\r\n }\r\n\r\n this.lastScrollTop = st\r\n return\r\n }\r\n\r\n // Classic scroll mode\r\n if (st > offsetNum) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // back scroll mode\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = true\r\n }\r\n }\r\n }\r\n\r\n private getOption = (name: string) => {\r\n const dataStickyAttr = 'data-kt-sticky-' + name\r\n if (this.element.hasAttribute(dataStickyAttr) === true) {\r\n const attrValueInStr = this.element.getAttribute(dataStickyAttr)\r\n const attrValue = getAttributeValueByBreakpoint(attrValueInStr || '')\r\n if (attrValue !== null && String(attrValue) === 'true') {\r\n return true\r\n } else if (attrValue !== null && String(attrValue) === 'false') {\r\n return false\r\n }\r\n\r\n return attrValue\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n }\r\n }\r\n\r\n private disable = () => {\r\n ElementStyleUtil.remove(this.element, 'top')\r\n ElementStyleUtil.remove(this.element, 'width')\r\n ElementStyleUtil.remove(this.element, 'left')\r\n ElementStyleUtil.remove(this.element, 'right')\r\n ElementStyleUtil.remove(this.element, 'z-index')\r\n ElementStyleUtil.remove(this.element, 'position')\r\n }\r\n\r\n private enable = (update: boolean = false) => {\r\n const top = this.getOption('top')\r\n const left = this.getOption('left')\r\n // const right = this.getOption(\"right\");\r\n let width = this.getOption('width')\r\n const zindex = this.getOption('zindex')\r\n\r\n if (update !== true && this.getOption('animation') === true) {\r\n ElementStyleUtil.set(this.element, 'animationDuration', this.getOption('animationSpeed'))\r\n ElementAnimateUtil.animateClass(this.element, 'animation ' + this.getOption('animationClass'))\r\n }\r\n\r\n if (zindex !== null) {\r\n ElementStyleUtil.set(this.element, 'z-index', zindex)\r\n ElementStyleUtil.set(this.element, 'position', 'fixed')\r\n }\r\n\r\n if (top !== null) {\r\n ElementStyleUtil.set(this.element, 'top', top)\r\n }\r\n\r\n if (width !== null && width !== undefined) {\r\n const widthTarget = getObjectPropertyValueByKey(width, 'target')\r\n if (widthTarget) {\r\n const targetElement = document.querySelector(widthTarget)\r\n if (targetElement) {\r\n width = getCSS(targetElement, 'width')\r\n }\r\n }\r\n ElementStyleUtil.set(this.element, 'width', width)\r\n }\r\n\r\n if (left !== null) {\r\n if (String(left).toLowerCase() === 'auto') {\r\n var offsetLeft = getElementOffset(this.element).left\r\n\r\n if (offsetLeft > 0) {\r\n ElementStyleUtil.set(this.element, 'left', String(offsetLeft) + 'px')\r\n }\r\n }\r\n }\r\n }\r\n\r\n public update = () => {\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n this.enable(true)\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, callBack: Function) => {\r\n return EventHandlerUtil.on(this.element, name, callBack)\r\n }\r\n\r\n public one = (name: string, callback: Function) => {\r\n return EventHandlerUtil.one(this.element, name, callback)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string) => {\r\n return EventHandlerUtil.trigger(this.element, name)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'sticky')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n if (element !== null && StickyComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'sticky')\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, defaultStickyOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: StickyOptions = defaultStickyOptions\r\n ): StickyComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, options)\r\n }\r\n return sticky\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n\r\n public static reInitialization(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n}\r\n\r\nexport {StickyComponent, defaultStickyOptions}\r\n","import {DataUtil, getUniqueIdWithPrefix, EventHandlerUtil} from '../_utils/index'\r\n// Helpers\r\nimport {CookieComponent} from './_CookieComponent'\r\n\r\nexport interface ToggleOptions {\r\n saveState: boolean\r\n targetState?: string\r\n toggleState?: string\r\n targetToggleMode?: string\r\n}\r\n\r\nconst defaultToggleOptions: ToggleOptions = {\r\n saveState: false,\r\n}\r\n\r\nclass ToggleComponent {\r\n element: HTMLElement\r\n instanceUid: string\r\n options: ToggleOptions\r\n state: string = ''\r\n target: HTMLElement | null = null\r\n attribute: string = ''\r\n\r\n constructor(_element: HTMLElement, options: ToggleOptions) {\r\n this.options = Object.assign(defaultToggleOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('toggle')\r\n this.element = _element\r\n\r\n const elementTargetAttr = this.element.getAttribute('data-kt-toggle-target')\r\n if (elementTargetAttr) {\r\n this.target = document.querySelector(elementTargetAttr)\r\n }\r\n const elementToggleAttr = this.element.getAttribute('data-kt-toggle-state')\r\n this.state = elementToggleAttr || ''\r\n this.attribute = 'data-kt-' + this.element.getAttribute('data-kt-toggle-name')\r\n\r\n // Event Handlers\r\n this._handlers()\r\n\r\n // Update Instance\r\n // Bind Instance\r\n DataUtil.set(this.element, 'toggle', this)\r\n }\r\n\r\n private _handlers = () => {\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._toggle()\r\n })\r\n }\r\n\r\n // Event handlers\r\n private _toggle = () => {\r\n // Trigger \"after.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.change')\r\n\r\n if (this._isEnabled()) {\r\n this._disable()\r\n } else {\r\n this._enable()\r\n }\r\n\r\n // Trigger \"before.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.changed')\r\n return this\r\n }\r\n\r\n private _enable = () => {\r\n if (this._isEnabled()) {\r\n return\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enable')\r\n this.target?.setAttribute(this.attribute, 'on')\r\n if (this.state.length > 0) {\r\n this.element.classList.add(this.state)\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.set(this.attribute, 'on', {})\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enabled')\r\n return this\r\n }\r\n\r\n private _disable = () => {\r\n if (!this._isEnabled()) {\r\n return false\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disable')\r\n this.target?.removeAttribute(this.attribute)\r\n\r\n if (this.state.length > 0) {\r\n this.element.classList.remove(this.state)\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.delete(this.attribute)\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disabled')\r\n return this\r\n }\r\n\r\n private _isEnabled = () => {\r\n if (!this.target) {\r\n return false\r\n }\r\n\r\n return String(this.target.getAttribute(this.attribute)).toLowerCase() === 'on'\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n // Plugin API\r\n public toggle = () => {\r\n return this._toggle()\r\n }\r\n\r\n public enable = () => {\r\n return this._enable()\r\n }\r\n\r\n public disable = () => {\r\n return this._disable()\r\n }\r\n\r\n public isEnabled = () => {\r\n return this._isEnabled()\r\n }\r\n\r\n public goElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event?: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement) => {\r\n const toggleElement = DataUtil.get(el, 'toggle')\r\n if (toggleElement) {\r\n return toggleElement\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let toggleElement = ToggleComponent.getInstance(item)\r\n if (!toggleElement) {\r\n toggleElement = new ToggleComponent(item, defaultToggleOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: ToggleOptions = defaultToggleOptions\r\n ): ToggleComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let toggle = ToggleComponent.getInstance(item)\r\n if (!toggle) {\r\n toggle = new ToggleComponent(item, options)\r\n }\r\n return toggle\r\n }\r\n\r\n public static reinitialization = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]')\r\n }\r\n\r\n public static bootstrap = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]')\r\n }\r\n}\r\n\r\nexport {ToggleComponent, defaultToggleOptions}\r\n","/* eslint-disable array-callback-return */\r\n/* eslint-disable no-useless-escape */\r\nimport {DataUtil} from '../_utils/index'\r\n\r\nexport interface IPasswordMeterOptions {\r\n minLength: number\r\n checkUppercase: boolean\r\n checkLowercase: boolean\r\n checkDigit: boolean\r\n checkChar: boolean\r\n scoreHighlightClass: string\r\n}\r\n\r\nexport interface IPasswordMeterQueries {\r\n componentName: string\r\n instanseQuery: string\r\n inputQuery: string\r\n visibilityQuery: string\r\n highlightQuery: string\r\n}\r\n\r\nconst defaultPasswordMeterOptions = {\r\n minLength: 8,\r\n checkUppercase: true,\r\n checkLowercase: true,\r\n checkDigit: true,\r\n checkChar: true,\r\n scoreHighlightClass: 'active',\r\n}\r\n\r\nconst defaultPasswordMeterQueires: IPasswordMeterQueries = {\r\n componentName: 'password-meter',\r\n instanseQuery: '[data-kt-password-meter]',\r\n inputQuery: 'input[type]',\r\n visibilityQuery: '[data-kt-password-meter-control=\"visibility\"]',\r\n highlightQuery: '[data-kt-password-meter-control=\"highlight\"]',\r\n}\r\n\r\nclass PasswordMeterComponent {\r\n element: HTMLElement\r\n inputElement: HTMLInputElement | null\r\n visibilityElement: HTMLElement | null\r\n highlightElement: HTMLElement | null\r\n options: IPasswordMeterOptions\r\n queries: IPasswordMeterQueries\r\n score: number\r\n checkSteps: number\r\n\r\n constructor(\r\n _element: HTMLElement,\r\n _options: IPasswordMeterOptions,\r\n _queries: IPasswordMeterQueries\r\n ) {\r\n this.element = _element\r\n this.options = Object.assign(defaultPasswordMeterOptions, _options)\r\n this.queries = _queries\r\n this.score = 0\r\n this.checkSteps = 5\r\n\r\n // Elements\r\n this.inputElement = this.element.querySelector(this.queries.inputQuery)\r\n this.visibilityElement = this.element.querySelector(this.queries.visibilityQuery)\r\n this.highlightElement = this.element.querySelector(this.queries.highlightQuery)\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private handlers(): void {\r\n if (this.inputElement) {\r\n this.inputElement.addEventListener('input', () => {\r\n this.check()\r\n })\r\n }\r\n\r\n if (this.visibilityElement) {\r\n this.visibilityElement.addEventListener('click', () => {\r\n this.visitbility()\r\n })\r\n }\r\n }\r\n\r\n private visitbility() {\r\n if (this.visibilityElement && this.inputElement) {\r\n const visibleIcon = this.visibilityElement.querySelector(\r\n 'i:not(.d-none), .svg-icon:not(.d-none)'\r\n )\r\n\r\n const hiddenIcon = this.visibilityElement.querySelector('i.d-none, .svg-icon.d-none')\r\n\r\n const typeAttr = this.inputElement.getAttribute('type') || ''\r\n\r\n if (typeAttr === 'password') {\r\n this.inputElement.setAttribute('type', 'text')\r\n } else {\r\n this.inputElement.setAttribute('type', 'password')\r\n }\r\n\r\n visibleIcon?.classList.add('d-none')\r\n hiddenIcon?.classList.remove('d-none')\r\n\r\n this.inputElement.focus()\r\n }\r\n }\r\n\r\n private checkScore(): number {\r\n return 0\r\n }\r\n\r\n private checkLength(): boolean {\r\n if (this.inputElement) {\r\n return this.inputElement.value.length >= this.options.minLength // 20 score\r\n }\r\n\r\n return false\r\n }\r\n\r\n private checkLowerCase(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[a-z]/.test(val) // 20 score\r\n }\r\n\r\n private checkUppercase(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[A-Z]/.test(val) // 20 score\r\n }\r\n\r\n private checkDigit(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[0-9]/.test(val) // 20 score\r\n }\r\n\r\n private checkChar(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g.test(val) // 20 score\r\n }\r\n\r\n private getCheckScore(): number {\r\n let count = 1\r\n if (this.options.checkUppercase) {\r\n count++\r\n }\r\n\r\n if (this.options.checkLowercase) {\r\n count++\r\n }\r\n\r\n if (this.options.checkDigit) {\r\n count++\r\n }\r\n\r\n if (this.options.checkChar) {\r\n count++\r\n }\r\n\r\n this.checkSteps = count\r\n return 100 / this.checkSteps\r\n }\r\n\r\n private highlight() {\r\n const items = this.highlightElement\r\n ? [].slice.call(this.highlightElement.querySelectorAll('div'))\r\n : []\r\n const total = items.length\r\n let index = 0\r\n const checkScore = this.getCheckScore()\r\n const score = this.getScore()\r\n\r\n items.map((item: HTMLElement) => {\r\n index++\r\n if (checkScore * index * (this.checkSteps / total) <= score) {\r\n item.classList.add('active')\r\n } else {\r\n item.classList.remove('active')\r\n }\r\n })\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public reset = () => {\r\n this.score = 0\r\n this.highlight()\r\n }\r\n\r\n public getScore() {\r\n return this.score\r\n }\r\n\r\n public check() {\r\n let score = 0\r\n const checkScore = this.checkScore()\r\n if (this.checkLength()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkUppercase && this.checkLowerCase()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkLowercase && this.checkUppercase()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkDigit && this.checkDigit()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkChar && this.checkChar()) {\r\n score = score + checkScore\r\n }\r\n\r\n this.score = score\r\n this.highlight()\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultPasswordMeterQueires.componentName\r\n ) => {\r\n const passwordMeter = DataUtil.get(el, componentName)\r\n if (passwordMeter) {\r\n return passwordMeter\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery,\r\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\r\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let passwordMeter = PasswordMeterComponent.getInstance(item)\r\n if (!passwordMeter) {\r\n passwordMeter = new PasswordMeterComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery,\r\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\r\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\r\n ): PasswordMeterComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let passwordMeter = PasswordMeterComponent.getInstance(item)\r\n if (!passwordMeter) {\r\n passwordMeter = new PasswordMeterComponent(item, options, queries)\r\n }\r\n return passwordMeter\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultPasswordMeterQueires.instanseQuery) => {\r\n PasswordMeterComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery\r\n ) => {\r\n PasswordMeterComponent.createInstances(selector)\r\n }\r\n}\r\nexport {PasswordMeterComponent, defaultPasswordMeterOptions, defaultPasswordMeterQueires}\r\n","import {\r\n DataUtil,\r\n getAttributeValueByBreakpoint,\r\n stringSnakeToCamel,\r\n getObjectPropertyValueByKey,\r\n EventHandlerUtil,\r\n throttle,\r\n} from '../_utils/index'\r\n\r\nexport interface IPlaceOptions {\r\n mode: string\r\n}\r\n\r\nexport interface IPlaceQueries {\r\n componentName: string\r\n instanseQuery: string\r\n attrQuery: string\r\n}\r\n\r\nconst defaultPlaceOptions: IPlaceOptions = {\r\n mode: 'append',\r\n}\r\n\r\nconst defaultPlaceQueires: IPlaceQueries = {\r\n componentName: 'place',\r\n instanseQuery: '[data-kt-place=\"true\"]',\r\n attrQuery: 'data-kt-place-',\r\n}\r\n\r\nclass PlaceComponent {\r\n element: HTMLElement\r\n options: IPlaceOptions\r\n queries: IPlaceQueries\r\n\r\n constructor(_element: HTMLElement, _options: IPlaceOptions, _queries: IPlaceQueries) {\r\n this.element = _element\r\n this.options = Object.assign(defaultPlaceOptions, _options)\r\n this.queries = _queries\r\n\r\n // Initial update\r\n this.update()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private getOption(name: string) {\r\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (attr != null && String(value) === 'true') {\r\n return true\r\n } else if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n const parentSelector = this.getOption('parent')?.toString()\r\n const mode = this.getOption('mode')\r\n const parentElement = parentSelector ? document.querySelector(parentSelector) : null\r\n\r\n if (parentElement && this.element.parentNode !== parentElement) {\r\n if (mode === 'prepend') {\r\n parentElement.prepend(this.element)\r\n } else if (mode === 'append') {\r\n parentElement.append(this.element)\r\n }\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultPlaceQueires.componentName\r\n ): PlaceComponent | null => {\r\n const place = DataUtil.get(el, componentName)\r\n if (place) {\r\n return place as PlaceComponent\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultPlaceQueires.instanseQuery,\r\n options: IPlaceOptions = defaultPlaceOptions,\r\n queries: IPlaceQueries = defaultPlaceQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let place = PlaceComponent.getInstance(item)\r\n if (!place) {\r\n place = new PlaceComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultPlaceQueires.instanseQuery,\r\n options: IPlaceOptions = defaultPlaceOptions,\r\n queries: IPlaceQueries = defaultPlaceQueires\r\n ): PlaceComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let place = PlaceComponent.getInstance(item)\r\n if (!place) {\r\n place = new PlaceComponent(item, options, queries)\r\n }\r\n return place\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultPlaceQueires.instanseQuery) => {\r\n PlaceComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultPlaceQueires.instanseQuery) => {\r\n PlaceComponent.createInstances(selector)\r\n }\r\n}\r\n\r\n// Window resize handler\r\nwindow.addEventListener('resize', function () {\r\n let timer\r\n\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Offcanvas instances on window resize\r\n const elements = document.querySelectorAll(defaultPlaceQueires.instanseQuery)\r\n elements.forEach((el) => {\r\n const place = PlaceComponent.getInstance(el as HTMLElement)\r\n if (place) {\r\n place.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n})\r\n\r\nexport {PlaceComponent, defaultPlaceOptions, defaultPlaceQueires}\r\n","import {createPopper, VirtualElement} from '@popperjs/core'\r\nimport {\r\n getElementChild,\r\n getElementParents,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n insertAfterElement,\r\n slideUp,\r\n slideDown,\r\n DOMEventHandlerUtil,\r\n throttle,\r\n getHighestZindex,\r\n} from '../_utils/index'\r\n\r\nexport interface MenuOptions {\r\n dropdown: {\r\n hoverTimeout: number\r\n zindex: number\r\n }\r\n accordion: {\r\n slideSpeed: number\r\n expand: boolean\r\n }\r\n}\r\n\r\nconst defaultMenuOptions: MenuOptions = {\r\n dropdown: {\r\n hoverTimeout: 200,\r\n zindex: 105,\r\n },\r\n accordion: {\r\n slideSpeed: 250,\r\n expand: false,\r\n },\r\n}\r\n\r\ntype PopperPlacement =\r\n | 'right'\r\n | 'auto'\r\n | 'auto-start'\r\n | 'auto-end'\r\n | 'top'\r\n | 'bottom'\r\n | 'left'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'right-start'\r\n | 'right-end'\r\n | 'left-start'\r\n | 'left-end'\r\n | undefined\r\n\r\nclass MenuComponent {\r\n element: HTMLElement\r\n options: MenuOptions\r\n instanceUid: string\r\n triggerElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: MenuOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultMenuOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('menu')\r\n // this.element.setAttribute('data-kt-menu', 'true')\r\n this._setTriggerElement()\r\n this._update()\r\n DataUtil.set(this.element, 'menu', this)\r\n return this\r\n }\r\n\r\n // Set external trigger element\r\n private _setTriggerElement = () => {\r\n const target = document.querySelector(\r\n `[data-kt-menu-target=\"#${this.element.getAttribute('id')}\"`\r\n )\r\n\r\n if (target) {\r\n this.triggerElement = target as HTMLElement\r\n } else if (this.element.closest('[data-kt-menu-trigger]')) {\r\n this.triggerElement = this.element.closest('[data-kt-menu-trigger]') as HTMLElement\r\n } else if (\r\n this.element.parentNode &&\r\n getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]')\r\n ) {\r\n const child = getElementChild(\r\n this.element.parentNode as HTMLElement,\r\n '[data-kt-menu-trigger]'\r\n )\r\n if (child) {\r\n this.triggerElement = child\r\n }\r\n }\r\n\r\n if (this.triggerElement) {\r\n DataUtil.set(this.triggerElement, 'menu', this)\r\n }\r\n }\r\n\r\n // Test if menu has external trigger element\r\n private _isTriggerElement = (item: HTMLElement) => {\r\n return this.triggerElement === item\r\n }\r\n\r\n // Get item option(through html attributes)\r\n private _getItemOption = (item: HTMLElement, name: string) => {\r\n let value = null\r\n if (item && item.hasAttribute('data-kt-menu-' + name)) {\r\n const attr = item.getAttribute('data-kt-menu-' + name) || ''\r\n value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n }\r\n return value\r\n }\r\n\r\n // Get item element\r\n private _getItemElement = (_element: HTMLElement) => {\r\n // Element is the external trigger element\r\n if (this._isTriggerElement(_element)) {\r\n return _element\r\n }\r\n\r\n // Element has item toggler attribute\r\n if (_element.hasAttribute('data-kt-menu-trigger')) {\r\n return _element\r\n }\r\n\r\n // Element has item DOM reference in it's data storage\r\n const itemElement = DataUtil.get(_element, 'item')\r\n if (itemElement) {\r\n return itemElement\r\n }\r\n\r\n // Item is parent of element\r\n const item = _element.closest('.menu-item[data-kt-menu-trigger]')\r\n if (item) {\r\n return item\r\n }\r\n\r\n // Element's parent has item DOM reference in it's data storage\r\n const sub = _element.closest('.menu-sub')\r\n if (sub) {\r\n const subItem = DataUtil.get(sub as HTMLElement, 'item')\r\n if (subItem) {\r\n return subItem\r\n }\r\n }\r\n }\r\n\r\n // Get item parent element\r\n private _getItemParentElement = (item: HTMLElement) => {\r\n const sub = item.closest('.menu-sub')\r\n if (!sub) {\r\n return null\r\n }\r\n\r\n const subItem = DataUtil.get(sub as HTMLElement, 'item')\r\n if (subItem) {\r\n return subItem\r\n }\r\n\r\n const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')\r\n if (sub && parentItem) {\r\n return parentItem\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Get item parent elements\r\n private _getItemParentElements = (item: HTMLElement) => {\r\n const parents = []\r\n let parent\r\n let i = 0\r\n let buffer = item\r\n\r\n do {\r\n parent = this._getItemParentElement(buffer)\r\n if (parent) {\r\n parents.push(parent)\r\n buffer = parent\r\n }\r\n\r\n i++\r\n } while (parent !== null && i < 20)\r\n\r\n if (this.triggerElement) {\r\n parents.unshift(this.triggerElement)\r\n }\r\n\r\n return parents\r\n }\r\n\r\n // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)\r\n private _getDropdownPopperConfig = (item: HTMLElement) => {\r\n // Placement\r\n const placementOption = this._getItemOption(item, 'placement')\r\n let placement: PopperPlacement = 'right'\r\n if (placementOption) {\r\n placement = placementOption as PopperPlacement\r\n }\r\n\r\n // Flip\r\n const flipValue = this._getItemOption(item, 'flip')\r\n const flip = flipValue ? flipValue.toString().split(',') : []\r\n\r\n // Offset\r\n const offsetValue = this._getItemOption(item, 'offset')\r\n const offset = offsetValue ? offsetValue.toString().split(',') : []\r\n\r\n // Strategy\r\n const strategy: 'absolute' | 'fixed' | undefined =\r\n this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed'\r\n\r\n return {\r\n placement: placement,\r\n strategy: strategy,\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: offset,\r\n },\r\n },\r\n {\r\n name: 'preventOverflow',\r\n options: {\r\n //altBoundary: true,\r\n //altAxis: true,\r\n rootBoundary: 'clippingParents',\r\n },\r\n },\r\n {\r\n name: 'flip',\r\n options: {\r\n altBoundary: true,\r\n fallbackPlacements: flip,\r\n },\r\n },\r\n ],\r\n }\r\n }\r\n\r\n // Get item child element\r\n private _getItemChildElement = (item: HTMLElement) => {\r\n let selector = item\r\n\r\n const subItem = DataUtil.get(item, 'sub')\r\n if (subItem) {\r\n selector = subItem\r\n }\r\n\r\n if (selector) {\r\n //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');\r\n const element = selector.querySelector('.menu-item[data-kt-menu-trigger]')\r\n if (element) {\r\n return element\r\n }\r\n }\r\n return null\r\n }\r\n\r\n // Get item child elements\r\n private _getItemChildElements = (item: HTMLElement) => {\r\n const children = []\r\n let child\r\n let i = 0\r\n let buffer = item\r\n do {\r\n child = this._getItemChildElement(buffer)\r\n if (child) {\r\n children.push(child)\r\n buffer = child as HTMLElement\r\n }\r\n\r\n i++\r\n } while (child !== null && i < 20)\r\n\r\n return children\r\n }\r\n\r\n // Get item sub element\r\n private _getItemSubElement = (item: HTMLElement) => {\r\n if (!item) {\r\n return null\r\n }\r\n\r\n if (this._isTriggerElement(item)) {\r\n return this.element\r\n }\r\n\r\n if (item.classList.contains('menu-sub')) {\r\n return item\r\n } else if (DataUtil.has(item, 'sub')) {\r\n return DataUtil.get(item, 'sub')\r\n } else {\r\n return getElementChild(item, '.menu-sub')\r\n }\r\n }\r\n\r\n private _getCss = (el: HTMLElement, styleProp: string) => {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n }\r\n\r\n // Get item sub type\r\n private _getItemSubType = (element: HTMLElement) => {\r\n const sub = this._getItemSubElement(element)\r\n if (sub && parseInt(this._getCss(sub, 'z-index')) > 0) {\r\n return 'dropdown'\r\n } else {\r\n return 'accordion'\r\n }\r\n }\r\n\r\n // Test if item's sub is shown\r\n private _isItemSubShown = (item: HTMLElement) => {\r\n let sub = this._getItemSubElement(item)\r\n if (sub) {\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n return sub.classList.contains('show') && sub.hasAttribute('data-popper-placement')\r\n } else {\r\n return item.classList.contains('show')\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n // Test if item dropdown is permanent\r\n private _isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'permanent') === true\r\n }\r\n\r\n // Test if item's parent is shown\r\n private _isItemParentShown = (item: HTMLElement) => {\r\n return getElementParents(item, '.menu-item.show').length > 0\r\n }\r\n\r\n // Test of it is item sub element\r\n private _isItemSubElement = (item: HTMLElement) => {\r\n return item.classList.contains('menu-sub')\r\n }\r\n\r\n // Test if item has sub\r\n private _hasItemSub = (item: HTMLElement) => {\r\n return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger')\r\n }\r\n\r\n // Get link element\r\n private _getItemLinkElement = (item: HTMLElement) => {\r\n return getElementChild(item, '.menu-link')\r\n }\r\n\r\n // Get toggle element\r\n private _getItemToggleElement = (item: HTMLElement) => {\r\n if (this.triggerElement) {\r\n return this.triggerElement\r\n }\r\n\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n // Show item dropdown\r\n private _showDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {\r\n return\r\n }\r\n\r\n // Hide all currently shown dropdowns except current one\r\n MenuComponent.hideDropdowns(item)\r\n\r\n // const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);\r\n const sub = this._getItemSubElement(item)\r\n const width = this._getItemOption(item, 'width')\r\n const height = this._getItemOption(item, 'height')\r\n\r\n let zindex = this.options.dropdown.zindex\r\n const parentZindex = getHighestZindex(item) // update\r\n // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update\r\n if (parentZindex !== null && parentZindex >= zindex) {\r\n zindex = parentZindex + 1\r\n }\r\n\r\n if (zindex) {\r\n ElementStyleUtil.set(sub, 'z-index', zindex)\r\n }\r\n\r\n if (width) {\r\n ElementStyleUtil.set(sub, 'width', width)\r\n }\r\n\r\n if (height) {\r\n ElementStyleUtil.set(sub, 'height', height)\r\n }\r\n\r\n this.initDropdownPopper(item, sub)\r\n\r\n item.classList.add('show')\r\n item.classList.add('menu-dropdown')\r\n sub.classList.add('show')\r\n\r\n // Append the sub the the root of the menu\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n document.body.appendChild(sub)\r\n DataUtil.set(item, 'sub', sub)\r\n DataUtil.set(sub, 'item', item)\r\n DataUtil.set(sub, 'menu', this)\r\n } else {\r\n DataUtil.set(sub, 'item', item)\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown')\r\n }\r\n\r\n // Init dropdown popper(new)\r\n private initDropdownPopper = (item: HTMLElement, sub: HTMLElement) => {\r\n // Setup popper instance\r\n let reference\r\n const attach = this._getItemOption(item, 'attach') as string\r\n\r\n if (attach) {\r\n if (attach === 'parent') {\r\n reference = item.parentNode\r\n } else {\r\n reference = document.querySelector(attach)\r\n }\r\n } else {\r\n reference = item\r\n }\r\n\r\n if (reference) {\r\n const popper = createPopper(\r\n reference as Element | VirtualElement,\r\n sub,\r\n this._getDropdownPopperConfig(item)\r\n )\r\n DataUtil.set(item, 'popper', popper)\r\n }\r\n }\r\n\r\n // Hide item dropdown\r\n private _hideDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n ElementStyleUtil.set(sub, 'z-index', '')\r\n ElementStyleUtil.set(sub, 'width', '')\r\n ElementStyleUtil.set(sub, 'height', '')\r\n item.classList.remove('show')\r\n item.classList.remove('menu-dropdown')\r\n sub.classList.remove('show')\r\n\r\n // Append the sub back to it's parent\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n if (item.classList.contains('menu-item')) {\r\n item.appendChild(sub)\r\n } else {\r\n insertAfterElement(this.element, item)\r\n }\r\n\r\n DataUtil.remove(item, 'sub')\r\n DataUtil.remove(sub, 'item')\r\n DataUtil.remove(sub, 'menu')\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n // Destroy popper(new)\r\n this.destroyDropdownPopper(item)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n // Destroy dropdown popper(new)\r\n private destroyDropdownPopper = (item: HTMLElement) => {\r\n if (DataUtil.has(item, 'popper') === true) {\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n private _showAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {\r\n return\r\n }\r\n\r\n if (this.options.accordion.expand === false) {\r\n this._hideAccordions(item)\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n this._hideDropdown(item)\r\n }\r\n\r\n item.classList.add('hover') // updateWW\r\n item.classList.add('showing')\r\n\r\n const subElement = this._getItemSubElement(item)\r\n if (subElement) {\r\n const sub = subElement as HTMLElement\r\n slideDown(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('showing')\r\n item.classList.add('show')\r\n sub.classList.add('show')\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown')\r\n })\r\n }\r\n }\r\n\r\n private _hideAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n item.classList.add('hiding')\r\n\r\n if (sub) {\r\n slideUp(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('hiding')\r\n item.classList.remove('show')\r\n sub.classList.remove('show')\r\n item.classList.remove('hover') // update\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden')\r\n })\r\n }\r\n }\r\n\r\n // Hide all shown accordions of item\r\n private _hideAccordions = (item: HTMLElement) => {\r\n const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]')\r\n if (itemsToHide && itemsToHide.length > 0) {\r\n for (var i = 0, len = itemsToHide.length; i < len; i++) {\r\n const itemToHide = itemsToHide[i] as HTMLElement\r\n\r\n if (\r\n this._getItemSubType(itemToHide) === 'accordion' &&\r\n itemToHide !== item &&\r\n item.contains(itemToHide) === false &&\r\n itemToHide.contains(item) === false\r\n ) {\r\n this._hideAccordion(itemToHide)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Event Handlers\r\n // Reset item state classes if item sub type changed\r\n private _reset = (item: HTMLElement) => {\r\n if (this._hasItemSub(item) === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n\r\n // Reset sub state if sub type is changed during the window resize\r\n if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {\r\n // updated\r\n item.classList.remove('hover')\r\n item.classList.remove('show')\r\n item.classList.remove('show')\r\n if (sub && sub.removeClass) {\r\n sub.removeClass(sub, 'show')\r\n }\r\n } // updated\r\n }\r\n\r\n // TODO: not done\r\n private _destroy = () => {}\r\n\r\n // Update all item state classes if item sub type changed\r\n private _update = () => {\r\n const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]')\r\n items.forEach((el) => this._reset(el as HTMLElement))\r\n }\r\n\r\n // Hide item sub\r\n private _hide = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === false) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._hideDropdown(item)\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._hideAccordion(item)\r\n }\r\n }\r\n\r\n // Show item sub\r\n private _show = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._showDropdown(item) // // show current dropdown\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._showAccordion(item)\r\n }\r\n\r\n // Remember last submenu type\r\n\r\n DataUtil.set(item, 'type', this._getItemSubType(item)) // updated\r\n }\r\n\r\n // Toggle item sub\r\n private _toggle = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n this._hide(item)\r\n } else {\r\n this._show(item)\r\n }\r\n }\r\n\r\n // Mouseout handle\r\n private _mouseout = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n this._hide(item)\r\n }\r\n }, this.options.dropdown.hoverTimeout)\r\n\r\n DataUtil.set(item, 'hover', '1')\r\n DataUtil.set(item, 'timeout', timeout)\r\n }\r\n\r\n // Mouseover handle\r\n private _mouseover = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n clearTimeout(DataUtil.get(item, 'timeout'))\r\n DataUtil.remove(item, 'hover')\r\n DataUtil.remove(item, 'timeout')\r\n }\r\n\r\n this._show(item)\r\n }\r\n\r\n // Dismiss handler\r\n private _dismiss = (element: HTMLElement, e: Event) => {\r\n const item = this._getItemElement(element)\r\n const items = this._getItemChildElements(item)\r\n //if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n const itemSubType = this._getItemSubType(item)\r\n if (item !== null && itemSubType === 'dropdown') {\r\n this._hide(item) // hide items dropdown\r\n\r\n // Hide all child elements as well\r\n if (items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n //if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n if (items[i] !== null && this._getItemSubType(items[i] as HTMLElement) === 'dropdown') {\r\n this._hide(items[i] as HTMLElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Link handler\r\n private _link = (element: HTMLElement, e: Event) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {\r\n return\r\n }\r\n\r\n // Dismiss all shown dropdowns\r\n MenuComponent.hideDropdowns(undefined)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked')\r\n }\r\n\r\n private _click = (element: HTMLElement, e: Event) => {\r\n e.preventDefault()\r\n const item = this._getItemElement(element)\r\n if (this._getItemOption(item, 'trigger') !== 'click') {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'toggle') === false) {\r\n this._show(item)\r\n } else {\r\n this._toggle(item)\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public click = (element: HTMLElement, e: Event) => {\r\n return this._click(element, e)\r\n }\r\n\r\n public link = (element: HTMLElement, e: Event) => {\r\n return this._link(element, e)\r\n }\r\n\r\n public dismiss = (element: HTMLElement, e: Event) => {\r\n return this._dismiss(element, e)\r\n }\r\n\r\n public mouseover = (element: HTMLElement, e: Event) => {\r\n return this._mouseover(element, e as MouseEvent)\r\n }\r\n\r\n public mouseout = (element: HTMLElement, e: Event) => {\r\n return this._mouseout(element, e as MouseEvent)\r\n }\r\n\r\n // General Methods\r\n public getItemTriggerType = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'trigger')\r\n }\r\n\r\n public getItemSubType = (element: HTMLElement) => {\r\n return this._getItemSubType(element)\r\n }\r\n\r\n public show = (item: HTMLElement) => {\r\n return this._show(item)\r\n }\r\n\r\n public hide = (item: HTMLElement) => {\r\n return this._hide(item)\r\n }\r\n\r\n public reset = (item: HTMLElement) => {\r\n return this._reset(item)\r\n }\r\n\r\n public update = () => {\r\n return this._update()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n public getItemLinkElement = (item: HTMLElement) => {\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n public getItemToggleElement = (item: HTMLElement) => {\r\n return this._getItemToggleElement(item)\r\n }\r\n\r\n public getItemSubElement = (item: HTMLElement) => {\r\n return this._getItemSubElement(item)\r\n }\r\n\r\n public getItemParentElements = (item: HTMLElement) => {\r\n return this._getItemParentElements(item)\r\n }\r\n\r\n public isItemSubShown = (item: HTMLElement) => {\r\n return this._isItemSubShown(item)\r\n }\r\n\r\n public isItemParentShown = (item: HTMLElement) => {\r\n return this._isItemParentShown(item)\r\n }\r\n\r\n public getTriggerElement = () => {\r\n return this.triggerElement\r\n }\r\n\r\n public isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._isItemDropdownPermanent(item)\r\n }\r\n\r\n // Accordion Mode Methods\r\n public hideAccordions = (item: HTMLElement) => {\r\n return this._hideAccordions(item)\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: any) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: any) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n // public static methods\r\n // Get KTMenu instance by element\r\n public static getInstance = (element: HTMLElement) => {\r\n // Element has menu DOM reference in it's DATA storage\r\n const elementMenu = DataUtil.get(element, 'menu')\r\n if (elementMenu) {\r\n return elementMenu\r\n }\r\n\r\n // Element has .menu parent\r\n const menu = element.closest('.menu')\r\n if (menu) {\r\n const menuData = DataUtil.get(menu as HTMLElement, 'menu')\r\n if (menuData) {\r\n return menuData\r\n }\r\n }\r\n\r\n // Element has a parent with DOM reference to .menu in it's DATA storage\r\n if (element.classList.contains('menu-link')) {\r\n const sub = element.closest('.menu-sub')\r\n if (sub) {\r\n const subMenu = DataUtil.get(sub as HTMLElement, 'menu')\r\n if (subMenu) {\r\n return subMenu\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Hide all dropdowns and skip one if provided\r\n public static hideDropdowns = (skip: HTMLElement | undefined) => {\r\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n\r\n if (items && items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i]\r\n const menu = MenuComponent.getInstance(item as HTMLElement)\r\n\r\n if (menu && menu.getItemSubType(item) === 'dropdown') {\r\n if (skip) {\r\n if (\r\n menu.getItemSubElement(item).contains(skip) === false &&\r\n item.contains(skip) === false &&\r\n item !== skip\r\n ) {\r\n menu.hide(item)\r\n }\r\n } else {\r\n menu.hide(item)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static updateDropdowns = () => {\r\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (items && items.length > 0) {\r\n for (var i = 0, len = items.length; i < len; i++) {\r\n var item = items[i]\r\n\r\n if (DataUtil.has(item as HTMLElement, 'popper')) {\r\n DataUtil.get(item as HTMLElement, 'popper').forceUpdate()\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Global handlers\r\n public static createInstances = (selector: string) => {\r\n // Initialize menus\r\n document.querySelectorAll(selector).forEach((el) => {\r\n const menuItem = el as HTMLElement\r\n let menuInstance = MenuComponent.getInstance(menuItem)\r\n if (!menuInstance) {\r\n menuInstance = new MenuComponent(el as HTMLElement, defaultMenuOptions)\r\n }\r\n })\r\n }\r\n\r\n public static initGlobalHandlers = () => {\r\n // Dropdown handler\r\n document.addEventListener('click', (e) => {\r\n const menuItems = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (menuItems && menuItems.length > 0) {\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const item = menuItems[i] as HTMLElement\r\n const menuObj = MenuComponent.getInstance(item) as MenuComponent\r\n if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const menu = menuObj.getElement()\r\n const sub = menuObj.getItemSubElement(item) as HTMLElement\r\n if (item === e.target || item.contains(e.target as HTMLElement)) {\r\n continue\r\n }\r\n\r\n if (sub && (sub === e.target || sub.contains(e.target as HTMLElement))) {\r\n continue\r\n }\r\n menuObj.hide(item)\r\n }\r\n }\r\n }\r\n })\r\n\r\n // Sub toggle handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger=\"auto\"])',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.click(this, e)\r\n }\r\n }\r\n )\r\n\r\n // // Link handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item:not([data-kt-menu-trigger]) > .menu-link',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n e.stopPropagation()\r\n const menu = MenuComponent.getInstance(this)\r\n if (menu && menu.link) {\r\n return menu.link(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Dismiss handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-dismiss=\"true\"]',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.dismiss(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseover handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseover',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseover(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseout handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseout',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseout(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Resize handler\r\n window.addEventListener('resize', () => {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.querySelectorAll('[data-kt-menu=\"true\"]')\r\n elements.forEach((el) => {\r\n const menu = MenuComponent.getInstance(el as HTMLElement)\r\n if (menu) {\r\n menu.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n MenuComponent.initGlobalHandlers()\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: MenuOptions = defaultMenuOptions\r\n ): MenuComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let menu = MenuComponent.getInstance(item)\r\n if (!menu) {\r\n menu = new MenuComponent(item, options)\r\n }\r\n return menu\r\n }\r\n}\r\n\r\nexport {MenuComponent, defaultMenuOptions}\r\n","import {\r\n EventHandlerUtil,\r\n DataUtil,\r\n getBreakpoint,\r\n getAttributeValueByBreakpoint,\r\n stringSnakeToCamel,\r\n getObjectPropertyValueByKey,\r\n getViewPort,\r\n isVisibleElement,\r\n throttle,\r\n} from '../_utils/index'\r\n\r\nimport {MenuComponent, defaultMenuOptions} from './MenuComponent'\r\n\r\nexport interface ISearchOptions {\r\n minLength: number // Miniam text lenght to query search\r\n keypress: boolean // Enable search on keypress\r\n enter: boolean // Enable search on enter key press\r\n layout: 'menu' | 'inline' // Use 'menu' or 'inline' layout options to display search results\r\n responsive?: number // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value\r\n showOnFocus: boolean // Always show menu on input focus\r\n}\r\n\r\nexport interface ISearchQueries {\r\n componentName: string\r\n instanseQuery: string\r\n attrQuery: string\r\n}\r\n\r\nconst defaultSearchOptions: ISearchOptions = {\r\n minLength: 2, // Miniam text lenght to query search\r\n keypress: true, // Enable search on keypress\r\n enter: true, // Enable search on enter key press\r\n layout: 'menu', // Use 'menu' or 'inline' layout options to display search results\r\n showOnFocus: true, // Always show menu on input focus\r\n}\r\n\r\nconst defaultSearchQueires: ISearchQueries = {\r\n componentName: 'search',\r\n instanseQuery: '[data-kt-search]',\r\n attrQuery: 'data-kt-search-',\r\n}\r\n\r\nclass SearchComponent {\r\n element: HTMLElement\r\n contentElement: HTMLElement\r\n formElement: HTMLFormElement\r\n inputElement: HTMLInputElement\r\n spinnerElement: HTMLElement\r\n clearElement: HTMLElement\r\n toggleElement: HTMLElement\r\n submitElement: HTMLElement\r\n toolbarElement: HTMLElement\r\n resultsElement: HTMLElement\r\n suggestionElement: HTMLElement\r\n emptyElement: HTMLElement\r\n layout: any\r\n\r\n options: ISearchOptions\r\n queries: ISearchQueries\r\n\r\n processing: boolean = false\r\n menuObject: MenuComponent | undefined\r\n\r\n constructor(_element: HTMLElement, _options: ISearchOptions, _queries: ISearchQueries) {\r\n // Variables\r\n this.options = Object.assign(defaultSearchOptions, _options)\r\n this.queries = _queries\r\n\r\n // Elements\r\n this.element = _element\r\n this.contentElement = this._getElement('content') as HTMLElement\r\n this.formElement = this._getElement('form') as HTMLFormElement\r\n this.inputElement = this._getElement('input') as HTMLInputElement\r\n this.spinnerElement = this._getElement('spinner') as HTMLElement\r\n this.clearElement = this._getElement('clear') as HTMLElement\r\n this.toggleElement = this._getElement('toggle') as HTMLElement\r\n this.submitElement = this._getElement('submit') as HTMLElement\r\n this.toolbarElement = this._getElement('toolbar') as HTMLElement\r\n\r\n this.resultsElement = this._getElement('results') as HTMLElement\r\n this.suggestionElement = this._getElement('suggestion') as HTMLElement\r\n this.emptyElement = this._getElement('empty') as HTMLElement\r\n\r\n // Layout\r\n this.layout = this.getOption('layout')\r\n if (this.layout === 'menu') {\r\n this.menuObject = new MenuComponent(this.contentElement, defaultMenuOptions)\r\n }\r\n\r\n // Update\r\n this.update()\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private _getElement = (name: string) => {\r\n return this.element.querySelector('[data-kt-search-element=\"' + name + '\"]')\r\n }\r\n\r\n // Get option\r\n private getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n\r\n if (value !== null && String(value) === 'true') {\r\n return true\r\n } else if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n // Check if responsive form mode is enabled\r\n private getResponsiveFormMode = () => {\r\n const responsive = this.getOption('responsive') as string\r\n const width = getViewPort().width\r\n\r\n if (!responsive) {\r\n return null\r\n }\r\n\r\n const breakpoint = getBreakpoint(responsive)\r\n let breakPointNum = -1\r\n if (!breakpoint) {\r\n breakPointNum = parseInt(responsive)\r\n } else {\r\n breakPointNum = +breakpoint\r\n }\r\n\r\n if (width < breakPointNum) {\r\n return 'on'\r\n } else {\r\n return 'off'\r\n }\r\n }\r\n\r\n // Focus\r\n private focus = () => {\r\n this.element.classList.add('focus')\r\n\r\n if (\r\n this.getOption('show-on-focus') === true ||\r\n this.inputElement.value.length >= this.options.minLength\r\n ) {\r\n this.show()\r\n }\r\n }\r\n\r\n // Blur\r\n private blur = () => {\r\n this.element.classList.remove('focus')\r\n }\r\n\r\n // Enter\r\n private enter = (e: KeyboardEvent) => {\r\n const key = e.charCode || e.keyCode || 0\r\n\r\n if (key === 13) {\r\n e.preventDefault()\r\n\r\n this.search()\r\n }\r\n }\r\n\r\n // Input\r\n private input = () => {\r\n if (this.getOption('min-length')) {\r\n const minLength = parseInt(this.getOption('min-length') as string)\r\n\r\n if (this.inputElement.value.length >= minLength) {\r\n this.search()\r\n } else if (this.inputElement.value.length === 0) {\r\n this.clear()\r\n }\r\n }\r\n }\r\n\r\n private handlers(): void {\r\n // Focus\r\n this.inputElement.addEventListener('focus', this.focus)\r\n\r\n // Blur\r\n this.inputElement.addEventListener('blur', this.blur)\r\n\r\n // Keypress\r\n if (this.getOption('keypress') === true) {\r\n this.inputElement.addEventListener('input', this.input)\r\n }\r\n\r\n // Submit\r\n if (this.submitElement) {\r\n this.submitElement.addEventListener('click', this.search)\r\n }\r\n\r\n // Enter\r\n if (this.getOption('enter') === true) {\r\n this.inputElement.addEventListener('keypress', this.enter)\r\n }\r\n\r\n // Clear\r\n if (this.clearElement) {\r\n this.clearElement.addEventListener('click', this.clear)\r\n }\r\n\r\n // Menu\r\n if (this.menuObject) {\r\n // Toggle menu\r\n if (this.toggleElement) {\r\n this.toggleElement.addEventListener('click', this.show)\r\n\r\n this.menuObject.on('kt.menu.dropdown.show', function () {\r\n // @ts-ignore\r\n if (isVisibleElement(this.toggleElement)) {\r\n // @ts-ignore\r\n this.toggleElement.classList.add('active')\r\n // @ts-ignore\r\n this.toggleElement.classList.add('show')\r\n }\r\n })\r\n\r\n this.menuObject.on('kt.menu.dropdown.hide', function () {\r\n // @ts-ignore\r\n if (isVisibleElement(this.toggleElement)) {\r\n // @ts-ignore\r\n this.toggleElement.classList.remove('active')\r\n // @ts-ignore\r\n this.toggleElement.classList.remove('show')\r\n }\r\n })\r\n }\r\n\r\n this.menuObject.on('kt.menu.dropdown.shown', function () {\r\n // @ts-ignore\r\n this.inputElement.focus()\r\n })\r\n }\r\n\r\n // Window resize handling\r\n window.addEventListener('resize', () => {\r\n let timer\r\n\r\n throttle(\r\n timer,\r\n () => {\r\n this.update()\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n // Update\r\n public update = () => {\r\n // Handle responsive form\r\n if (this.layout === 'menu') {\r\n let responsiveFormMode = this.getResponsiveFormMode()\r\n\r\n if (responsiveFormMode === 'on' && this.contentElement.contains(this.formElement) === false) {\r\n this.contentElement.prepend(this.formElement)\r\n this.formElement.classList.remove('d-none')\r\n } else if (\r\n responsiveFormMode === 'off' &&\r\n this.contentElement.contains(this.formElement) === true\r\n ) {\r\n this.element.prepend(this.formElement)\r\n this.formElement.classList.add('d-none')\r\n }\r\n }\r\n }\r\n\r\n // Show menu\r\n public show = () => {\r\n if (this.menuObject) {\r\n this.update()\r\n\r\n this.menuObject.show(this.element)\r\n }\r\n }\r\n\r\n // Hide menu\r\n public hide = () => {\r\n if (this.menuObject) {\r\n this.update()\r\n\r\n this.menuObject.hide(this.element)\r\n }\r\n }\r\n\r\n // Search\r\n public search = () => {\r\n if (this.processing === false) {\r\n // Show search spinner\r\n if (this.spinnerElement) {\r\n this.spinnerElement.classList.remove('d-none')\r\n }\r\n\r\n // Hide search clear button\r\n if (this.clearElement) {\r\n this.clearElement.classList.add('d-none')\r\n }\r\n\r\n // Hide search toolbar\r\n if (this.toolbarElement) {\r\n this.toolbarElement.classList.add('d-none')\r\n }\r\n\r\n // Focus input\r\n this.inputElement.focus()\r\n\r\n this.processing = true\r\n EventHandlerUtil.trigger(this.element, 'kt.search.process')\r\n }\r\n }\r\n\r\n // Complete\r\n public complete = () => {\r\n if (this.spinnerElement) {\r\n this.spinnerElement.classList.add('d-none')\r\n }\r\n\r\n // Show search toolbar\r\n if (this.clearElement) {\r\n this.clearElement.classList.remove('d-none')\r\n }\r\n\r\n if (this.inputElement.value.length === 0) {\r\n this.clear()\r\n }\r\n\r\n // Focus input\r\n this.inputElement.focus()\r\n\r\n this.show()\r\n\r\n this.processing = false\r\n }\r\n\r\n // Clear\r\n public clear = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.search.clear') === false) {\r\n return\r\n }\r\n\r\n // Clear and focus input\r\n this.inputElement.value = ''\r\n this.inputElement.focus()\r\n\r\n // Hide clear icon\r\n if (this.clearElement) {\r\n this.clearElement.classList.add('d-none')\r\n }\r\n\r\n // Show search toolbar\r\n if (this.toolbarElement) {\r\n this.toolbarElement.classList.remove('d-none')\r\n }\r\n\r\n // Hide menu\r\n if (this.getOption('show-on-focus') === false) {\r\n this.hide()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.search.cleared')\r\n }\r\n\r\n public isProcessing = () => {\r\n return this.processing\r\n }\r\n\r\n public getQuery = () => {\r\n return this.inputElement.value\r\n }\r\n\r\n public getMenu = () => {\r\n return this.menuObject\r\n }\r\n\r\n public getFormElement = () => {\r\n return this.formElement\r\n }\r\n\r\n public getInputElement(): HTMLInputElement {\r\n return this.inputElement\r\n }\r\n\r\n public getContentElement(): HTMLElement {\r\n return this.contentElement\r\n }\r\n\r\n public getElement(): HTMLElement {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultSearchQueires.componentName\r\n ) => {\r\n const Search = DataUtil.get(el, componentName)\r\n if (Search) {\r\n return Search\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultSearchQueires.instanseQuery,\r\n options: ISearchOptions = defaultSearchOptions,\r\n queries: ISearchQueries = defaultSearchQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let Search = SearchComponent.getInstance(item)\r\n if (!Search) {\r\n Search = new SearchComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultSearchQueires.instanseQuery,\r\n options: ISearchOptions = defaultSearchOptions,\r\n queries: ISearchQueries = defaultSearchQueires\r\n ): SearchComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let Search = SearchComponent.getInstance(item)\r\n if (!Search) {\r\n Search = new SearchComponent(item, options, queries)\r\n }\r\n return Search\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultSearchQueires.instanseQuery) => {\r\n SearchComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultSearchQueires.instanseQuery) => {\r\n SearchComponent.createInstances(selector)\r\n }\r\n}\r\nexport {SearchComponent, defaultSearchOptions, defaultSearchQueires}\r\n","import React from 'react'\r\nimport {Link} from 'react-router-dom'\r\nimport {useLocation} from 'react-router'\r\nimport clsx from 'clsx'\r\nimport {checkIsActive, KTSVG} from '../../../helpers'\r\n\r\ntype Props = {\r\n to: string\r\n title: string\r\n icon?: string\r\n fontIcon?: string\r\n hasArrow?: boolean\r\n hasBullet?: boolean\r\n}\r\n\r\nconst MenuItem: React.FC = ({\r\n to,\r\n title,\r\n icon,\r\n fontIcon,\r\n hasArrow = false,\r\n hasBullet = false,\r\n}) => {\r\n const {pathname} = useLocation()\r\n\r\n return (\r\n
\r\n \r\n {hasBullet && (\r\n \r\n \r\n \r\n )}\r\n\r\n {icon && (\r\n \r\n \r\n \r\n )}\r\n\r\n {fontIcon && (\r\n \r\n \r\n \r\n )}\r\n\r\n {title}\r\n\r\n {hasArrow && }\r\n \r\n
\r\n )\r\n}\r\n\r\nexport {MenuItem}\r\n","import React from 'react'\r\nimport { MenuItem } from './MenuItem'\r\n\r\nexport function MenuInner() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n )\r\n}\r\n","import React, {FC} from 'react'\r\nimport {MenuInner} from './MenuInner'\r\n\r\nconst Header: FC = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {Header}\r\n","import clsx from 'clsx'\r\nimport React, {FC} from 'react'\r\nimport {Link} from 'react-router-dom'\r\nimport {useLayout} from '../../../core/LayoutProvider'\r\nimport {usePageData} from '../../../core/PageData'\r\n\r\nconst DefaultTitle: FC = () => {\r\n const {pageTitle, pageDescription, pageBreadcrumbs} = usePageData()\r\n const {config, attributes, classes} = useLayout()\r\n return (\r\n \r\n {/* begin::Title */}\r\n {pageTitle && (\r\n

\r\n {pageTitle}\r\n {pageDescription && config.pageTitle && config.pageTitle.description && (\r\n <>\r\n \r\n {pageDescription}\r\n \r\n )}\r\n

\r\n )}\r\n {/* end::Title */}\r\n\r\n {pageBreadcrumbs &&\r\n pageBreadcrumbs.length > 0 &&\r\n config.pageTitle &&\r\n config.pageTitle.breadCrumbs && (\r\n <>\r\n {config.pageTitle.direction === 'row' && (\r\n \r\n )}\r\n
    \r\n {Array.from(pageBreadcrumbs).map((item, index) => (\r\n \r\n {!item.isSeparator ? (\r\n \r\n {item.title}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n
  • {pageTitle}
  • \r\n
\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport {DefaultTitle}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport {FC} from 'react'\r\nimport {shallowEqual, useSelector} from 'react-redux'\r\nimport {Link} from 'react-router-dom'\r\nimport {UserModel} from '../../../../app/modules/auth/models/UserModel'\r\nimport {RootState} from '../../../../setup'\r\nimport AuthService from '../../../../app/modules/auth/redux/AuthService'\r\n\r\nconst HeaderUserMenu: FC = () => {\r\n const user: UserModel = AuthService.GetCurrentUser() != null ? JSON.parse(AuthService.GetCurrentUser()) : null;\r\n return (\r\n \r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n {user?.email}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n Sign Out\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport {HeaderUserMenu}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport {FC, useState} from 'react'\r\nimport clsx from 'clsx'\r\nimport {\r\n toAbsoluteUrl,\r\n defaultMessages,\r\n defaultUserInfos,\r\n MessageModel,\r\n UserInfoModel,\r\n messageFromClient,\r\n} from '../../helpers'\r\n\r\ntype Props = {\r\n isDrawer?: boolean\r\n}\r\n\r\nconst bufferMessages = defaultMessages\r\n\r\nconst ChatInner: FC = ({isDrawer = false}) => {\r\n const [chatUpdateFlag, toggleChatUpdateFlat] = useState(false)\r\n const [message, setMessage] = useState('')\r\n const [messages, setMessages] = useState(bufferMessages)\r\n const [userInfos] = useState(defaultUserInfos)\r\n\r\n const sendMessage = () => {\r\n const newMessage: MessageModel = {\r\n user: 2,\r\n type: 'out',\r\n text: message,\r\n time: 'Just now',\r\n }\r\n\r\n bufferMessages.push(newMessage)\r\n setMessages(bufferMessages)\r\n toggleChatUpdateFlat(!chatUpdateFlag)\r\n setMessage('')\r\n setTimeout(() => {\r\n bufferMessages.push(messageFromClient)\r\n setMessages(() => bufferMessages)\r\n toggleChatUpdateFlat((flag) => !flag)\r\n }, 1000)\r\n }\r\n\r\n const onEnterPress = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 13 && e.shiftKey === false) {\r\n e.preventDefault()\r\n sendMessage()\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {messages.map((message, index) => {\r\n const userInfo = userInfos[message.user]\r\n const state = message.type === 'in' ? 'info' : 'primary'\r\n const templateAttr = {}\r\n if (message.template) {\r\n Object.defineProperty(templateAttr, 'data-kt-element', {\r\n value: `template-${message.type}`,\r\n })\r\n }\r\n const contentClass = `${isDrawer ? '' : 'd-flex'} justify-content-${\r\n message.type === 'in' ? 'start' : 'end'\r\n } mb-10`\r\n return (\r\n \r\n \r\n
\r\n {message.type === 'in' ? (\r\n <>\r\n
\r\n Pic\r\n
\r\n
\r\n \r\n {userInfo.name}\r\n \r\n {message.time}\r\n
\r\n \r\n ) : (\r\n <>\r\n
\r\n {message.time}\r\n \r\n You\r\n \r\n
\r\n
\r\n Pic\r\n
\r\n \r\n )}\r\n
\r\n\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n\r\n \r\n setMessage(e.target.value)}\r\n onKeyDown={onEnterPress}\r\n >\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Send\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nexport {ChatInner}\r\n","import {toAbsoluteUrl} from '../../../helpers'\r\n\r\nexport function FallbackView() {\r\n return (\r\n
\r\n Start logo\r\n Loading ...\r\n
\r\n )\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, {FC, useEffect, useRef, useState} from 'react'\r\nimport {KTSVG, toAbsoluteUrl} from '../../../helpers'\r\nimport {Formik, Form, FormikValues, Field, ErrorMessage} from 'formik'\r\nimport * as Yup from 'yup'\r\nimport {StepperComponent} from '../../../assets/ts/components'\r\n\r\ninterface ICreateAccount {\r\n appName: string\r\n category: string\r\n framework: string\r\n dbName: string\r\n dbType: string\r\n nameOnCard: string\r\n cardNumber: string\r\n cardExpiryMonth: string\r\n cardExpiryYear: string\r\n cardCvv: string\r\n saveCard: string\r\n}\r\n\r\nconst inits: ICreateAccount = {\r\n appName: '',\r\n category: '1',\r\n framework: '1',\r\n dbName: '',\r\n dbType: '1',\r\n nameOnCard: 'Max Doe',\r\n cardNumber: '4111 1111 1111 1111',\r\n cardExpiryMonth: '1',\r\n cardExpiryYear: '2',\r\n cardCvv: '123',\r\n saveCard: '1',\r\n}\r\n\r\nconst createAppSchema = [\r\n Yup.object({\r\n appName: Yup.string().required().label('App name'),\r\n category: Yup.string().required().label('Category'),\r\n }),\r\n Yup.object({\r\n framework: Yup.string().required().label('Framework'),\r\n }),\r\n Yup.object({\r\n dbName: Yup.string().required().label('Database name'),\r\n dbType: Yup.string().required().label('Database engine'),\r\n }),\r\n Yup.object({\r\n nameOnCard: Yup.string().required().label('Name'),\r\n cardNumber: Yup.string().required().label('Card Number'),\r\n cardExpiryMonth: Yup.string().required().label('Expiration Month'),\r\n cardExpiryYear: Yup.string().required().label('Expiration Year'),\r\n cardCvv: Yup.string().required().label('CVV'),\r\n }),\r\n]\r\n\r\nconst Main: FC = () => {\r\n const stepperRef = useRef(null)\r\n const stepper = useRef(null)\r\n const [currentSchema, setCurrentSchema] = useState(createAppSchema[0])\r\n const [initValues] = useState(inits)\r\n\r\n const loadStepper = () => {\r\n stepper.current = StepperComponent.createInsance(stepperRef.current as HTMLDivElement)\r\n }\r\n\r\n const prevStep = () => {\r\n if (!stepper.current) {\r\n return\r\n }\r\n\r\n stepper.current.goPrev()\r\n\r\n setCurrentSchema(createAppSchema[stepper.current.currentStepIndex - 1])\r\n }\r\n\r\n const submitStep = (values: ICreateAccount, actions: FormikValues) => {\r\n if (!stepper.current) {\r\n return\r\n }\r\n\r\n setCurrentSchema(createAppSchema[stepper.current.currentStepIndex])\r\n\r\n if (stepper.current.currentStepIndex !== stepper.current.totatStepsNumber) {\r\n stepper.current.goNext()\r\n } else {\r\n stepper.current.goto(1)\r\n actions.resetForm()\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!stepperRef.current) {\r\n return\r\n }\r\n\r\n loadStepper()\r\n }, [stepperRef])\r\n\r\n return (\r\n \r\n \r\n )\r\n}\r\n\r\nexport {Main}\r\n","import clsx from 'clsx'\r\nimport React, {FC} from 'react'\r\nimport {KTSVG, toAbsoluteUrl} from '../../../helpers'\r\nimport { HeaderUserMenu} from '../../../partials'\r\nimport {useLayout} from '../../core'\r\n\r\nconst toolbarButtonMarginClass = 'ms-1 ms-lg-3',\r\n toolbarButtonHeightClass = 'w-30px h-30px w-md-40px h-md-40px',\r\n toolbarUserAvatarHeightClass = 'symbol-30px symbol-md-40px',\r\n toolbarButtonIconSizeClass = 'svg-icon-1'\r\n\r\nconst Topbar: FC = () => {\r\n const {config} = useLayout()\r\n\r\n return (\r\n
\r\n \r\n {/* begin::User */}\r\n \r\n {/* begin::Toggle */}\r\n \r\n metronic\r\n
\r\n \r\n {/* end::Toggle */}\r\n \r\n {/* end::User */}\r\n\r\n {/* begin::Aside Toggler */}\r\n {config.header.left === 'menu' && (\r\n
\r\n \r\n \r\n
\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport {Topbar}\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport clsx from 'clsx'\r\nimport React, {useEffect} from 'react'\r\nimport {Link, useLocation} from 'react-router-dom'\r\nimport {MenuComponent} from '../../../assets/ts/components'\r\nimport {KTSVG, toAbsoluteUrl} from '../../../helpers'\r\nimport {useLayout} from '../../core'\r\nimport {Header} from './Header'\r\nimport {DefaultTitle} from './page-title/DefaultTitle'\r\nimport {Topbar} from './Topbar'\r\n\r\nexport function HeaderWrapper() {\r\n const {pathname} = useLocation()\r\n const {config, classes, attributes} = useLayout()\r\n const {header, aside} = config\r\n\r\n useEffect(() => {\r\n MenuComponent.reinitialization()\r\n }, [pathname])\r\n\r\n return (\r\n \r\n \r\n {/* begin::Aside mobile toggle */}\r\n {aside.display && (\r\n
\r\n \r\n \r\n
\r\n \r\n )}\r\n {/* end::Aside mobile toggle */}\r\n {/* begin::Logo */}\r\n {!aside.display && (\r\n
\r\n \r\n Logo\r\n \r\n
\r\n )}\r\n {/* end::Logo */}\r\n\r\n {aside.display && (\r\n
\r\n \r\n Logo\r\n \r\n
\r\n )}\r\n\r\n {/* begin::Wrapper */}\r\n
\r\n {/* begin::Navbar */}\r\n {header.left === 'menu' && (\r\n
\r\n
\r\n
\r\n )}\r\n\r\n {header.left === 'page-title' && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n
\r\n \r\n
\r\n
\r\n {/* end::Wrapper */}\r\n \r\n \r\n )\r\n}\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\nimport {useLayout} from '../../core/LayoutProvider'\r\nimport {DefaultTitle} from '../header/page-title/DefaultTitle'\r\n\r\nconst Toolbar = () => {\r\n \r\n const {classes} = useLayout()\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport {Toolbar}\r\n","import React, {useEffect, useRef} from 'react'\r\nimport {useLocation} from 'react-router-dom'\r\nimport {\r\n // ScrollComponent,\r\n ScrollTopComponent,\r\n MenuComponent,\r\n DrawerComponent,\r\n ToggleComponent,\r\n StickyComponent,\r\n} from '../../assets/ts/components'\r\nimport {KTSVG} from '../../helpers'\r\n\r\nexport function ScrollTop() {\r\n const {pathname} = useLocation()\r\n const isFirstRun = useRef(true)\r\n\r\n const pluginsReinitialization = () => {\r\n setTimeout(() => {\r\n // ScrollTopComponent.reinitialization()\r\n MenuComponent.reinitialization()\r\n StickyComponent.reInitialization()\r\n setTimeout(() => {\r\n ToggleComponent.reinitialization()\r\n DrawerComponent.reinitialization()\r\n // ScrollComponent.reinitialization()\r\n }, 70)\r\n }, 140)\r\n }\r\n\r\n const scrollTop = () => {\r\n ScrollTopComponent.goTop()\r\n }\r\n\r\n const updateHeaderSticky = () => {\r\n const stickyHeader = document.body.querySelectorAll(`[data-kt-sticky-name=\"header\"]`)\r\n if (stickyHeader && stickyHeader.length > 0) {\r\n const sticky = StickyComponent.getInstance(stickyHeader[0] as HTMLElement)\r\n if (sticky) {\r\n sticky.update()\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false\r\n } else {\r\n pluginsReinitialization()\r\n }\r\n\r\n updateHeaderSticky()\r\n setTimeout(() => {\r\n scrollTop()\r\n }, 0)\r\n }, [pathname])\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import React, {useEffect} from 'react'\r\nimport {useLocation} from 'react-router'\r\nimport clsx from 'clsx'\r\nimport {useLayout} from '../core'\r\nimport {DrawerComponent} from '../../assets/ts/components'\r\n\r\nconst Content: React.FC = ({children}) => {\r\n const {classes} = useLayout()\r\n const location = useLocation()\r\n useEffect(() => {\r\n DrawerComponent.hideAll()\r\n }, [location])\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n )\r\n}\r\n\r\nexport {Content}\r\n","import {useEffect, useRef} from 'react'\r\nimport {\r\n MenuComponent,\r\n DrawerComponent,\r\n ScrollComponent,\r\n ScrollTopComponent,\r\n StickyComponent,\r\n ToggleComponent,\r\n} from '../assets/ts/components'\r\n\r\nimport {useLayout} from './core'\r\n\r\nexport function MasterInit() {\r\n const {config} = useLayout()\r\n const isFirstRun = useRef(true)\r\n const pluginsInitialization = () => {\r\n isFirstRun.current = false\r\n setTimeout(() => {\r\n ToggleComponent.bootstrap()\r\n ScrollTopComponent.bootstrap()\r\n DrawerComponent.bootstrap()\r\n StickyComponent.bootstrap()\r\n MenuComponent.bootstrap()\r\n ScrollComponent.bootstrap()\r\n }, 200)\r\n }\r\n\r\n useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false\r\n pluginsInitialization()\r\n }\r\n }, [config])\r\n\r\n return <>\r\n}\r\n","import React from 'react'\r\n\r\nimport {Footer} from './components/Footer'\r\nimport {HeaderWrapper} from './components/header/HeaderWrapper'\r\nimport {Toolbar} from './components/toolbar/Toolbar'\r\nimport {ScrollTop} from './components/ScrollTop'\r\nimport {Content} from './components/Content'\r\nimport {MasterInit} from './MasterInit'\r\nimport {PageDataProvider} from './core'\r\n\r\nconst MasterLayout: React.FC = ({children}) => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n\r\n
\r\n \r\n
\r\n {children}\r\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 {MasterLayout}\r\n","import React, { Suspense, lazy } from 'react'\r\nimport {Route, Switch, Redirect} from 'react-router-dom'\r\nimport {FallbackView} from '../../_metronic/partials'\r\n\r\nexport function PrivateRoutes() {\r\n\r\n const CampaignMonitor = lazy(() => import('../pages/CampaignMonitor'))\r\n const CreateCampaign = lazy(() => import('../pages/CreateCampaign'))\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 import React, {FC} from 'react'\r\n import {Redirect, Switch, Route} from 'react-router-dom'\r\n\r\n import {MasterLayout} from '../../_metronic/layout/MasterLayout'\r\n import{ PrivateRoutes} from './PrivateRoutes'\r\n import {Logout, AuthPage} from '../modules/auth'\r\n import AuthService from '../modules/auth/redux/AuthService'\r\n \r\n const Routes: FC = () => {\r\n \r\n \r\n const usr = AuthService.GetCurrentUser();\r\n const isAuthorized = usr != null ? true:false;\r\n return (\r\n \r\n {!isAuthorized ? (\r\n /*Render auth page when user at `/auth` and not authorized.*/\r\n \r\n \r\n \r\n ) : (\r\n /*Otherwise redirect to root page (`/`)*/\r\n \r\n )}\r\n \r\n {/* */}\r\n \r\n \r\n {!isAuthorized ? (\r\n /*Redirect to `/auth` when user is not authorized*/\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n \r\n export {Routes}\r\n ","import React, {Suspense} from 'react'\r\nimport {BrowserRouter} from 'react-router-dom'\r\nimport {I18nProvider} from '../_metronic/i18n/i18nProvider'\r\nimport {LayoutProvider, LayoutSplashScreen} from '../_metronic/layout/core'\r\nimport AuthInit from './modules/auth/redux/AuthInit'\r\nimport {Routes} from './routing/Routes'\r\n\r\ntype Props = {\r\n basename: string\r\n}\r\n\r\nconst App: React.FC = ({basename}) => {\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\nexport {App}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n// Redux\r\n// https://github.com/rt2zz/redux-persist\r\nimport {PersistGate} from 'redux-persist/integration/react'\r\nimport {Provider} from 'react-redux'\r\nimport * as _redux from './setup'\r\nimport store, {persistor} from './setup/redux/Store'\r\n// Axios\r\nimport axios from 'axios'\r\nimport {Chart, registerables} from 'chart.js'\r\n\r\n// Apps\r\nimport {App} from './app/App'\r\nimport {MetronicI18nProvider} from './_metronic/i18n/Metronici18n'\r\n/**\r\n * TIP: Replace this style import with dark styles to enable dark mode\r\n *\r\n * import './_metronic/assets/sass/style.dark.scss'\r\n **/\r\nimport './_metronic/assets/sass/style.scss'\r\n/**\r\n * Base URL of the website.\r\n *\r\n * @see https://facebook.github.io/create-react-app/docs/using-the-public-folder\r\n */\r\nconst {PUBLIC_URL} = process.env\r\n/**\r\n * Creates `axios-mock-adapter` instance for provided `axios` instance, add\r\n * basic Metronic mocks and returns it.\r\n *\r\n * @see https://github.com/ctimmerm/axios-mock-adapter\r\n */\r\n\r\n// /* const mock = */ _redux.mockAxios(axios)\r\n/**\r\n * Inject Metronic interceptors for axios.\r\n *\r\n * @see https://github.com/axios/axios#interceptors\r\n */\r\n// _redux.setupAxios(axios, store)\r\n\r\nChart.register(...registerables)\r\n\r\nReactDOM.render(\r\n \r\n \r\n {/* Asynchronously persist redux stores and show `SplashScreen` while it's loading. */}\r\n Lütfen bekleyiniz...}>\r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n","export class DataUtil {\r\n static store: Map> = new Map()\r\n\r\n public static set(instance: HTMLElement | undefined, key: string, data: any): void {\r\n if (!instance) {\r\n return\r\n }\r\n\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n const newMap = new Map().set(key, data)\r\n DataUtil.store.set(instance, newMap)\r\n return\r\n }\r\n\r\n instanceData.set(key, data)\r\n }\r\n\r\n public static get(instance: HTMLElement, key: string): any | undefined {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n return instanceData.get(key)\r\n }\r\n\r\n public static remove(instance: HTMLElement, key: string): void {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n instanceData.delete(key)\r\n }\r\n\r\n public static has(instance: HTMLElement, key: string): boolean {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (instanceData) {\r\n return instanceData.has(key)\r\n }\r\n\r\n return false\r\n }\r\n\r\n public static getAllInstancesByKey(key: string) {\r\n const result: any[] = []\r\n DataUtil.store.forEach((val) => {\r\n val.forEach((v, k) => {\r\n if (k === key) {\r\n result.push(v)\r\n }\r\n })\r\n })\r\n return result\r\n }\r\n}\r\n","export * from './DefaultLayoutConfig'\r\nexport * from './LayoutSetup'\r\nexport * from './LayoutModels'\r\nexport * from './LayoutProvider'\r\nexport * from './PageData'\r\nexport * from './MetronicSplashScreen'\r\n","import {\r\n IAside,\r\n IContent,\r\n IFooter,\r\n IHeader,\r\n IToolbar,\r\n ILayout,\r\n ILayoutCSSClasses,\r\n ILayoutHTMLAttributes,\r\n ILayoutCSSVariables,\r\n IPageTitle,\r\n} from './LayoutModels'\r\nimport {DefaultLayoutConfig} from './DefaultLayoutConfig'\r\n\r\nconst LAYOUT_CONFIG_KEY = process.env.REACT_APP_BASE_LAYOUT_CONFIG_KEY || 'LayoutConfig'\r\n\r\nexport function getLayout(): ILayout {\r\n const ls = localStorage.getItem(LAYOUT_CONFIG_KEY)\r\n if (ls) {\r\n try {\r\n return JSON.parse(ls) as ILayout\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n }\r\n return DefaultLayoutConfig\r\n}\r\n\r\nfunction setLayout(config: ILayout): void {\r\n try {\r\n localStorage.setItem(LAYOUT_CONFIG_KEY, JSON.stringify(config))\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n}\r\n\r\nexport function getEmptyCssClasses() {\r\n return {\r\n header: [],\r\n headerContainer: [],\r\n headerMobile: [],\r\n headerMenu: [],\r\n aside: [],\r\n asideMenu: [],\r\n asideToggle: [],\r\n toolbar: [],\r\n toolbarContainer: [],\r\n content: [],\r\n contentContainer: [],\r\n footerContainer: [],\r\n sidebar: [],\r\n pageTitle: [],\r\n }\r\n}\r\n\r\nexport function getEmptyHTMLAttributes() {\r\n return {\r\n asideMenu: new Map(),\r\n headerMobile: new Map(),\r\n headerMenu: new Map(),\r\n headerContainer: new Map(),\r\n pageTitle: new Map(),\r\n }\r\n}\r\n\r\nexport function getEmptyCSSVariables() {\r\n return {\r\n body: new Map(),\r\n }\r\n}\r\n\r\nexport class LayoutSetup {\r\n public static isLoaded: boolean = false\r\n public static config: ILayout = getLayout()\r\n public static classes: ILayoutCSSClasses = getEmptyCssClasses()\r\n public static attributes: ILayoutHTMLAttributes = getEmptyHTMLAttributes()\r\n public static cssVariables: ILayoutCSSVariables = getEmptyCSSVariables()\r\n\r\n private static initCSSClasses(): void {\r\n LayoutSetup.classes = getEmptyCssClasses()\r\n }\r\n\r\n private static initHTMLAttributes(): void {\r\n LayoutSetup.attributes = Object.assign({}, getEmptyHTMLAttributes())\r\n }\r\n\r\n private static initCSSVariables(): void {\r\n LayoutSetup.cssVariables = getEmptyCSSVariables()\r\n }\r\n\r\n private static initLayout(config: ILayout): void {\r\n Array.from(document.body.attributes).forEach((attr) => {\r\n document.body.removeAttribute(attr.name)\r\n })\r\n document.body.setAttribute('style', '')\r\n document.body.setAttribute('id', 'kt_body')\r\n if (config.main?.body?.backgroundImage) {\r\n document.body.style.backgroundImage = `url('${config.main.body.backgroundImage}')`\r\n }\r\n\r\n if (config.main?.body?.class) {\r\n document.body.classList.add(config.main.body.class)\r\n }\r\n\r\n // if (config.loader.display) {\r\n // document.body.classList.add('page-loading')\r\n // document.body.classList.add('page-loading-enabled')\r\n // }\r\n }\r\n\r\n private static initHeader(config: IHeader): void {\r\n LayoutSetup.classes.headerContainer.push(\r\n config.width === 'fluid' ? 'container-fluid' : 'container'\r\n )\r\n\r\n if (config.fixed.desktop) {\r\n document.body.classList.add('header-fixed')\r\n }\r\n\r\n if (config.fixed.tabletAndMobile) {\r\n document.body.classList.add('header-tablet-and-mobile-fixed')\r\n }\r\n }\r\n\r\n private static initToolbar(config: IToolbar): void {\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n document.body.classList.add('toolbar-enabled')\r\n LayoutSetup.classes.toolbarContainer.push(\r\n config.width === 'fluid' ? 'container-fluid' : 'container'\r\n )\r\n\r\n if (config.fixed.desktop) {\r\n document.body.classList.add('toolbar-fixed')\r\n }\r\n\r\n if (config.fixed.tabletAndMobileMode) {\r\n document.body.classList.add('toolbar-tablet-and-mobile-fixed')\r\n }\r\n\r\n // Height setup\r\n const type = config.layout\r\n const typeOptions = config.layouts[type]\r\n if (typeOptions) {\r\n let bodyStyles: string = ''\r\n if (typeOptions.height) {\r\n bodyStyles += ` --kt-toolbar-height: ${typeOptions.height};`\r\n }\r\n\r\n if (typeOptions.heightAndTabletMobileMode) {\r\n bodyStyles += ` --kt-toolbar-height-tablet-and-mobile: ${typeOptions.heightAndTabletMobileMode};`\r\n }\r\n document.body.setAttribute('style', bodyStyles)\r\n }\r\n }\r\n\r\n private static initPageTitle(config: IPageTitle): void {\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n if (config.direction === 'column') {\r\n this.classes.pageTitle.push('flex-column')\r\n this.classes.pageTitle.push('align-items-start')\r\n } else {\r\n this.classes.pageTitle.push('align-items-center')\r\n this.classes.pageTitle.push('flex-wrap')\r\n }\r\n this.classes.pageTitle.push('me-3')\r\n\r\n if (config.responsive) {\r\n this.classes.pageTitle.push('mb-5')\r\n this.classes.pageTitle.push('mb-lg-0')\r\n\r\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper', true)\r\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper-mode', 'prepend')\r\n LayoutSetup.attributes.pageTitle.set(\r\n 'data-kt-swapper-parent',\r\n `{ default: '#kt_content_container', '${config.responsiveBreakpoint}': '${config.responsiveTarget}'}`\r\n )\r\n }\r\n }\r\n\r\n private static initContent(config: IContent): void {\r\n LayoutSetup.classes.contentContainer.push(\r\n // config.width === 'fluid' ? 'container-fluid' : 'container'\r\n config.width === 'fluid' ? 'container-fluid' : 'container-fluid'\r\n )\r\n // if (Theme::getOption('layout', 'content/container-class')) {\r\n // \tTheme::addHtmlClass('content-container', Theme::getOption('layout', 'content/container-class'));\r\n // }\r\n }\r\n\r\n private static initAside(config: IAside): void {\r\n // Check if aside is displayed\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n // Enable Aside\r\n document.body.classList.add('aside-enabled')\r\n LayoutSetup.classes.aside.push(`aside-${config.theme}`)\r\n\r\n // Fixed Aside\r\n if (config.fixed) {\r\n document.body.classList.add('aside-fixed')\r\n }\r\n\r\n // Default minimized\r\n if (config.minimized) {\r\n document.body.setAttribute('data-kt-aside-minimize', 'on')\r\n }\r\n\r\n // Hoverable on minimize\r\n if (config.hoverable) {\r\n LayoutSetup.classes.aside.push('aside-hoverable')\r\n }\r\n }\r\n\r\n private static initAsideMenu(config: IAside): void {\r\n // if (Theme::getOption('layout', 'aside/menu') === 'documentation') {\r\n // \tself::$menu = new Menu( Theme::getOption('menu', 'documentation'), Theme::getPagePath() );\r\n // } else {\r\n // \tself::$menu = new Menu( Theme::getOption('menu', 'main'), Theme::getPagePath() );\r\n // }\r\n // if (Theme::getOption('layout', 'aside/menu-icons-display') === false) {\r\n // \tself::$menu->displayIcons(false);\r\n // }\r\n // self::$menu->setIconType(Theme::getOption('layout', 'aside/menu-icon'));\r\n }\r\n\r\n // private static initSidebar(sidebarConfig: ISidebarConfig): void {\r\n // // / Set Sidebar enabled class\r\n // if (sidebarConfig.display) {\r\n // document.body.classList.add('sidebar-enabled')\r\n // } else {\r\n // return\r\n // }\r\n\r\n // // Set Sidebar shown status\r\n // if (sidebarConfig.shown) {\r\n // document.body.setAttribute('data-sidebar', 'on')\r\n // }\r\n\r\n // // Set Sidebar background color class\r\n // ThemeSetup.classes.sidebar.push(sidebarConfig.bgColor)\r\n // }\r\n\r\n private static initFooter(config: IFooter): void {\r\n LayoutSetup.classes.footerContainer.push(`container${config.width === 'fluid' ? '-fluid' : ''}`)\r\n }\r\n\r\n private static initConfig(config: ILayout): void {\r\n if (config.main?.darkSkinEnabled) {\r\n document.body.classList.add('dark-skin')\r\n }\r\n\r\n // Init layout\r\n LayoutSetup.initLayout(config)\r\n if (config.main?.type !== 'default') {\r\n return\r\n }\r\n\r\n LayoutSetup.initHeader(config.header)\r\n LayoutSetup.initPageTitle(config.pageTitle as IPageTitle)\r\n LayoutSetup.initToolbar(config.toolbar)\r\n LayoutSetup.initContent(config.content)\r\n LayoutSetup.initAside(config.aside)\r\n LayoutSetup.initFooter(config.footer)\r\n LayoutSetup.initAsideMenu(config.aside)\r\n }\r\n\r\n public static updatePartialConfig(fieldsToUpdate: Partial): ILayout {\r\n const config = LayoutSetup.config\r\n const updatedConfig = {...config, ...fieldsToUpdate}\r\n LayoutSetup.initCSSClasses()\r\n LayoutSetup.initCSSVariables()\r\n LayoutSetup.initHTMLAttributes()\r\n LayoutSetup.isLoaded = false\r\n LayoutSetup.config = updatedConfig\r\n LayoutSetup.initConfig(Object.assign({}, updatedConfig))\r\n LayoutSetup.isLoaded = true // remove loading there\r\n return updatedConfig\r\n }\r\n\r\n public static setConfig(config: ILayout): void {\r\n setLayout(config)\r\n }\r\n\r\n public static bootstrap = (() => {\r\n LayoutSetup.updatePartialConfig(LayoutSetup.config)\r\n })()\r\n}\r\n","export class ElementStyleUtil {\r\n public static set(element: HTMLElement, property: string, value?: any, important?: boolean) {\r\n if (important) {\r\n element.style.setProperty(property, value, 'important')\r\n } else {\r\n element.style.setProperty(property, value)\r\n }\r\n }\r\n\r\n public static get(element: HTMLElement, attributeName: string) {\r\n return element.style.getPropertyValue(attributeName)\r\n }\r\n\r\n public static remove(element: HTMLElement, attibuteName: string) {\r\n element.style.removeProperty(attibuteName)\r\n }\r\n}\r\n","import { Customer } from \"./customerModel\";\r\n\r\nexport class Campaign{\r\n campaignID=0;\r\n displayName=\"\"\r\n }\r\n export class CampaignListModel{\r\n campaigns: Campaign[]=[];\r\n }\r\n export class CampaignDetails {\r\n dairy= 0;\r\n disposable= 0;\r\n deepFrozen= 0;\r\n cannedGoods= 0;\r\n }\r\n export class CampaignResult {\r\n period=6\r\n paybackBonusRate= \"%10\"\r\n minimumTarget= 0\r\n estimatedMargin= 0\r\n paybackBonus= 0\r\n }\r\n export class CampaignTarget{\r\n name=\"\"\r\n value=0\r\n }\r\n export class CampaignTargetList{\r\n targets:CampaignTarget[]=[];\r\n }\r\n export interface IEnableCalculator {\r\n dairy: boolean\r\n disposable: boolean\r\n deepFrozen: boolean\r\n cannedGoods: boolean\r\n }\r\n export class ScoreCard{\r\n id=0;\r\n image=\"\";\r\n title= \"\";\r\n value= 0;\r\n target= 0;\r\n ratio= 0;\r\n }\r\n export class ScoreCardList{\r\n scoreCards:ScoreCard[]=[];\r\n }\r\n export class ScoreCardCustomer{\r\n id=0;\r\n customer:Customer=new Customer;\r\n campaignInfo:CampaignInfo=new CampaignInfo;\r\n campaignDetail:CustomerCampaignDetail=new CustomerCampaignDetail\r\n }\r\n export class ScoreCardCustomerList{\r\n scoreCards:ScoreCardCustomer[]=[];\r\n }\r\n export class CampaignInfo {\r\n campaignType=\"\";\r\n startDate=\"\";\r\n endDate=\"\";\r\n }\r\n \r\nexport class CustomerCampaignDetail {\r\n isSuccessful=false;\r\n bonus?= 0;\r\n progress?: ScoreCard[]=[];\r\n weeks?:Number[]=[];\r\n margin?= 0;\r\n visits?=0;\r\n consignments?=0;\r\n serviceLevel?=\"\"\r\n}","function getObjectPropertyValueByKey(obj: any, key: string): any | undefined {\r\n const map = new Map(Object.entries(obj))\r\n if (obj.hasOwnProperty(key) && map) {\r\n return map.get(key)\r\n }\r\n}\r\n\r\n/**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\nfunction getUniqueIdWithPrefix(prefix: string | undefined): string {\r\n const result = Math.floor(Math.random() * new Date().getTime()).toString()\r\n if (!prefix) {\r\n return result\r\n }\r\n\r\n return `${prefix}${result}`\r\n}\r\n\r\n/* eslint-disable no-useless-escape */\r\nfunction stringSnakeToCamel(str: string): string {\r\n return str.replace(/(\\-\\w)/g, function (m) {\r\n return m[1].toUpperCase()\r\n })\r\n}\r\n\r\nfunction toJSON(value: string | JSON): JSON | undefined {\r\n if (typeof value !== 'string') {\r\n return value\r\n }\r\n\r\n if (!value) {\r\n return undefined\r\n }\r\n\r\n // (\"'\" => \"\\\"\");\r\n const result = value\r\n .toString()\r\n .split('')\r\n .map((el) => (el !== \"'\" ? el : '\"'))\r\n .join('')\r\n var jsonStr = result.replace(/(\\w+:)|(\\w+ :)/g, function (matched) {\r\n return '\"' + matched.substring(0, matched.length - 1) + '\":'\r\n })\r\n try {\r\n return JSON.parse(jsonStr)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n\r\nexport {getObjectPropertyValueByKey, getUniqueIdWithPrefix, stringSnakeToCamel, toJSON}\r\n","import {DOMEventHandlerUtil} from './_DOMEventHandlerUtil'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {getElementOffset} from './DomHelpers'\r\n\r\nexport class ElementAnimateUtil {\r\n public static animate(\r\n from: number,\r\n to: number,\r\n duration: number,\r\n update: Function,\r\n complete?: Function\r\n ) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n const easings = {\r\n linear: function (t: number, b: number, c: number, d: number) {\r\n return (c * t) / d + b\r\n },\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (!complete) {\r\n complete = function () {}\r\n }\r\n\r\n // Animation loop\r\n // let canceled = false;\r\n const change = to - from\r\n\r\n function loop(timestamp: number) {\r\n var time = (timestamp || +new Date()) - start\r\n\r\n if (time >= 0) {\r\n update(easings.linear(time, from, change, duration))\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to)\r\n if (complete) {\r\n complete()\r\n }\r\n } else {\r\n window.requestAnimationFrame(loop)\r\n }\r\n }\r\n\r\n update(from)\r\n\r\n // Start animation loop\r\n const start =\r\n window.performance && window.performance.now ? window.performance.now() : +new Date()\r\n\r\n window.requestAnimationFrame(loop)\r\n }\r\n\r\n public static animateClass(\r\n element: HTMLElement,\r\n animationName: string,\r\n callBack?: Function\r\n ): void {\r\n const animateClasses = animationName.split(' ')\r\n animateClasses.forEach((cssClass) => element.classList.add(cssClass))\r\n DOMEventHandlerUtil.one(element, 'animationend', function () {\r\n animateClasses.forEach((cssClass) => element.classList.remove(cssClass))\r\n })\r\n\r\n if (callBack) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n }\r\n\r\n public static transitionEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'transitionend', callBack)\r\n }\r\n\r\n public static animationEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n\r\n public static animationDelay(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-delay', value)\r\n }\r\n\r\n public static animationDuration(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-duration', value)\r\n }\r\n\r\n public static scrollTo(element: HTMLElement | null, offset: number, duration: number = 500) {\r\n let targetPos = element ? getElementOffset(element).top : 0\r\n let scrollPos =\r\n window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\r\n\r\n if (offset) {\r\n scrollPos += offset\r\n targetPos = targetPos - offset\r\n }\r\n\r\n const from = scrollPos\r\n const to = targetPos\r\n\r\n ElementAnimateUtil.animate(from, to, duration, function (value: number) {\r\n document.documentElement.scrollTop = value\r\n // document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value\r\n }) //, easing, done\r\n }\r\n public static scrollTop(offset: number, duration: number) {\r\n ElementAnimateUtil.scrollTo(null, offset, duration)\r\n }\r\n}\r\n","\r\n function GetCurrentUser() {\r\n const user = localStorage.getItem('currentUserLockIn');\r\n const resp = user != null ? JSON.parse(JSON.stringify(user.toString())) : user;\r\n return resp;\r\n }\r\n\r\n function SetCurrentUser(user:string){\r\n localStorage.setItem('currentUserLockIn',user);\r\n }\r\n\r\n export default {\r\n GetCurrentUser,\r\n SetCurrentUser\r\n };\r\n\r\n \r\n\r\n","import {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport class DOMEventHandlerUtil {\r\n public static store = new Map()\r\n\r\n public static on(\r\n element: HTMLElement,\r\n selector: string,\r\n eventName: string,\r\n callBack: any\r\n ): string {\r\n const eventId = getUniqueIdWithPrefix('DOMEvent')\r\n DOMEventHandlerUtil.store.set(eventId, (e: Event) => {\r\n const targets = element.querySelectorAll(selector)\r\n let target: HTMLElement | null = e.target as HTMLElement\r\n while (target && target !== element) {\r\n for (let i = 0; i < targets.length; i++) {\r\n if (target === targets[i]) {\r\n callBack.call(target, e)\r\n }\r\n }\r\n\r\n if (target.parentElement) {\r\n target = target.parentElement\r\n } else {\r\n target = null\r\n }\r\n }\r\n })\r\n element.addEventListener(eventName, DOMEventHandlerUtil.store.get(eventId))\r\n return eventId\r\n }\r\n\r\n public static off(element: HTMLElement, eventName: string, eventId: string): void {\r\n const funcFromStore = DOMEventHandlerUtil.store.get(eventId)\r\n if (!funcFromStore) {\r\n return\r\n }\r\n\r\n element.removeEventListener(eventName, funcFromStore)\r\n DOMEventHandlerUtil.store.delete(eventId)\r\n }\r\n\r\n public static one(element: HTMLElement, eventName: string, callBack: Function): void {\r\n element.addEventListener(eventName, function calee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, calee)\r\n }\r\n\r\n if (element && e && e.currentTarget) {\r\n // if (element && element.removeEventListener && e && e.currentTarget) {\r\n e.currentTarget.removeEventListener(e.type, calee)\r\n }\r\n\r\n // call hander\r\n return callBack(e)\r\n })\r\n }\r\n}\r\n","import {ILayout} from './LayoutModels'\r\n\r\nexport const DefaultLayoutConfig: ILayout = {\r\n main: {\r\n type: 'default',\r\n primaryColor: '#009EF7',\r\n darkSkinEnabled: true,\r\n },\r\n loader: {\r\n display: true,\r\n type: 'default', // Set default|spinner-message|spinner-logo to hide or show page loader\r\n },\r\n scrolltop: {\r\n display: true,\r\n },\r\n header: {\r\n display: true, // Set true|false to show or hide Header\r\n width: 'fluid', // Set fixed|fluid to change width type\r\n left: 'menu',\r\n fixed: {\r\n desktop: true, // Set true|false to set fixed Header for desktop mode\r\n tabletAndMobile: true, // Set true|false to set fixed Header for tablet and mobile modes\r\n },\r\n menuIcon: 'svg',\r\n },\r\n megaMenu: {\r\n display: true, // Set true|false to show or hide Mega Menu\r\n },\r\n aside: {\r\n display: true,\r\n theme: 'dark',\r\n menu: 'main',\r\n fixed: true,\r\n minimized: false,\r\n minimize: true,\r\n hoverable: true,\r\n menuIcon: 'svg',\r\n },\r\n content: {\r\n width: 'fixed', // Set fixed|fluid to change width\r\n layout: 'default',\r\n },\r\n toolbar: {\r\n display: true, // Display toolbar\r\n width: 'fluid', // Set fixed|fluid to change width type,\r\n fixed: {\r\n desktop: true,\r\n tabletAndMobileMode: true,\r\n },\r\n layout: 'toolbar1',\r\n layouts: {\r\n toolbar1: {\r\n height: '55px',\r\n heightAndTabletMobileMode: '55px',\r\n },\r\n toolbar2: {\r\n height: '75px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n toolbar3: {\r\n height: '55px',\r\n heightAndTabletMobileMode: '55px',\r\n },\r\n toolbar4: {\r\n height: '65px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n toolbar5: {\r\n height: '75px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n },\r\n },\r\n footer: {\r\n width: 'fluid', // Set fixed|fluid to change width type\r\n },\r\n pageTitle: {\r\n display: true,\r\n breadCrumbs: true,\r\n description: false,\r\n layout: 'default',\r\n direction: 'row',\r\n responsive: true,\r\n responsiveBreakpoint: 'lg',\r\n responsiveTarget: '#kt_toolbar_container',\r\n },\r\n}\r\n","import React, {createContext, useContext, useState, useEffect} from 'react'\r\nimport {DefaultLayoutConfig} from './DefaultLayoutConfig'\r\nimport {\r\n getEmptyCssClasses,\r\n getEmptyCSSVariables,\r\n getEmptyHTMLAttributes,\r\n LayoutSetup,\r\n} from './LayoutSetup'\r\nimport {\r\n ILayout,\r\n ILayoutCSSVariables,\r\n ILayoutCSSClasses,\r\n ILayoutHTMLAttributes,\r\n} from './LayoutModels'\r\n\r\nexport interface LayoutContextModel {\r\n config: ILayout\r\n classes: ILayoutCSSClasses\r\n attributes: ILayoutHTMLAttributes\r\n cssVariables: ILayoutCSSVariables\r\n setLayout: (config: LayoutSetup) => void\r\n}\r\n\r\nconst LayoutContext = createContext({\r\n config: DefaultLayoutConfig,\r\n classes: getEmptyCssClasses(),\r\n attributes: getEmptyHTMLAttributes(),\r\n cssVariables: getEmptyCSSVariables(),\r\n setLayout: (config: LayoutSetup) => {},\r\n})\r\n\r\nconst enableSplashScreen = () => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n if (splashScreen) {\r\n splashScreen.style.setProperty('display', 'flex')\r\n }\r\n}\r\n\r\nconst disableSplashScreen = () => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n if (splashScreen) {\r\n splashScreen.style.setProperty('display', 'none')\r\n }\r\n}\r\n\r\nconst LayoutProvider: React.FC = ({children}) => {\r\n const [config, setConfig] = useState(LayoutSetup.config)\r\n const [classes, setClasses] = useState(LayoutSetup.classes)\r\n const [attributes, setAttributes] = useState(LayoutSetup.attributes)\r\n const [cssVariables, setCSSVariables] = useState(LayoutSetup.cssVariables)\r\n const setLayout = (_themeConfig: Partial) => {\r\n enableSplashScreen()\r\n const bodyClasses = Array.from(document.body.classList)\r\n bodyClasses.forEach((cl) => document.body.classList.remove(cl))\r\n LayoutSetup.updatePartialConfig(_themeConfig)\r\n setConfig(Object.assign({}, LayoutSetup.config))\r\n setClasses(LayoutSetup.classes)\r\n setAttributes(LayoutSetup.attributes)\r\n setCSSVariables(LayoutSetup.cssVariables)\r\n setTimeout(() => {\r\n disableSplashScreen()\r\n }, 500)\r\n }\r\n const value: LayoutContextModel = {\r\n config,\r\n classes,\r\n attributes,\r\n cssVariables,\r\n setLayout,\r\n }\r\n\r\n useEffect(() => {\r\n disableSplashScreen()\r\n }, [])\r\n\r\n return {children}\r\n}\r\n\r\nexport {LayoutContext, LayoutProvider}\r\n\r\nexport function useLayout() {\r\n return useContext(LayoutContext)\r\n}\r\n"],"sourceRoot":""}