@maestro_io/maestro-web-sdk 5.1.0 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/12.maestro-web-sdk.esm.js +1 -1
- package/dist/12.maestro-web-sdk.esm.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/maestro-web-sdk.esm.js +1 -1
- package/dist/maestro-web-sdk.esm.js.map +1 -1
- package/dist/maestro-web-sdk.umd.js +2 -2
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/src/interfaces/IMaestroEventDelegate.d.ts +8 -1
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.js +7 -0
- package/dist/src/modules/fox/multi-view/types.d.ts +62 -0
- package/dist/src/modules/fox/multi-view/types.js +89 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +13 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +43 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.js +2 -0
- package/dist/src/services/StaticService/StaticService.js +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack:///./src/models/IPanel.ts","webpack:///./node_modules/axios/lib/utils.js","webpack:///./src/helpers/Observable.ts","webpack:///./src/sentry.ts","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./src/external/ReactRenderer.tsx","webpack:///./src/view-models/PanelManagerViewModel.ts","webpack:///./src/services/StaticService/StaticService.ts","webpack:///./src/services/StaticService/index.ts","webpack:///./src/view-models/MaestroEventViewModel.ts","webpack:///./src/services/InsightsService/InsightsService.ts","webpack:///./src/services/InsightsService/InsightsPayloadBuilder.ts","webpack:///./src/services/AnalyticsService/AnalyticsService.ts","webpack:///./src/index.tsx","webpack:///./src/services/UserSettingsManager.ts","webpack:///./src/external/AxiosNetworkClient.ts","webpack:///./node_modules/axios/lib/core/AxiosError.js","webpack:///./src/interfaces/IUserSettings.ts","webpack:///external {\"root\":\"ReactDOM\",\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack:///./node_modules/axios/lib/cancel/CanceledError.js","webpack:///./src/external/LocalStorageCacheManager.ts","webpack:///./src/external/spatial-navigation/measureLayout.ts","webpack:///./src/external/spatial-navigation/visualDebugger.ts","webpack:///./src/external/spatial-navigation/spatialNavigation.ts","webpack:///./src/external/spatial-navigation/utils.ts","webpack:///./node_modules/axios/lib/defaults/index.js","webpack:///./src/components/core/App/App.styles.css","webpack:///./src/components/core/PanelManager/PanelManager.styles.css","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.styles.css","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.styles.css","webpack:///./src/components/atoms/BaseButton/BaseButton.styles.css","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.styles.css","webpack:///./node_modules/prop-types/index.js","webpack:///./src/components/core/ScrollableContainer/FocusableItem.tsx","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.styles.css?2329","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.tsx","webpack:///./src/components/core/ScrollableContainer/useScrollableContainer.ts","webpack:///./src/components/atoms/SvgIcon/Icon.tsx","webpack:///./src/components/atoms/BaseButton/BaseButton.styles.css?f4c1","webpack:///./src/components/atoms/BaseButton/BaseButton.tsx","webpack:///./src/view-models/ViewModel.ts","webpack:///./src/services/NetworkManager/errors.ts","webpack:///./src/services/NetworkManager/NetworkManager.ts","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/defaults/transitional.js","webpack:///./node_modules/axios/lib/helpers/toFormData.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/env/data.js","webpack:///./node_modules/axios/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/buffer/node_modules/isarray/index.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/parseProtocol.js","webpack:///./node_modules/axios/lib/helpers/null.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/components/core/PanelManager/PanelManager.styles.css?b788","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.styles.css?7e02","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.tsx","webpack:///./src/components/molecules/PanelNavButton/index.ts","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.styles.css?d524","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.tsx","webpack:///./src/components/organisms/PanelNavigation/index.ts","webpack:///./src/components/core/PanelManager/PanelManager.tsx","webpack:///./src/components/core/PanelManager/index.tsx","webpack:///./src/models/ITheme.ts","webpack:///./src/services/ThemeManager/constants.ts","webpack:///./src/components/core/App/App.styles.css?bef0","webpack:///./src/components/core/App/App.tsx","webpack:///./src/components/core/App/index.ts","webpack:///./src/external/spatial-navigation/withFocusable.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","0","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","require","MaestroPanelType","ESPN_KEY_PLAYS","ESPN_STATS","ESPN_BETS","ESPN_FANTASY","ESPN_SHOP","HELLO_WORLD","FOX_KEY_PLAYS","FOX_MULTI_VIEW","FOX_STATS","BUILDER_BLOCK_PANEL","cache","toString","kindOf","thing","str","toLowerCase","kindOfTest","isArray","val","Array","isUndefined","isArrayBuffer","isObject","isPlainObject","getPrototypeOf","isDate","isFile","isBlob","isFileList","isFunction","isURLSearchParams","forEach","obj","fn","TypedArray","isTypedArray","Uint8Array","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isStream","pipe","isStandardBrowserEnv","navigator","product","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","prop","merged","getOwnPropertyNames","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","Observable","initialValue","_defineProperty","this","_value","newValue","notify","subscribe","listener","listeners","DEV_DOMAINS","sentryClient","pendingErrors","isInitializing","initSentry","async","process","BrowserClient","defaultStackParser","defaultIntegrations","makeFetchTransport","isDev","find","domain","test","location","href","dsn","transport","stackParser","integrations","integration","includes","tracesSampleRate","release","pkg","version","environment","enabled","extra","_sentryClient","captureException","memo","isOldIE","Boolean","atob","getTarget","styleTarget","querySelector","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","list","options","idCountMap","identifiers","item","id","base","count","concat","index","css","media","sourceMap","references","updater","addStyle","insertStyleElement","style","attributes","nonce","keys","insert","textStore","replaceText","replacement","join","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","btoa","unescape","encodeURIComponent","JSON","stringify","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","removeStyleElement","newObj","lastIdentifiers","newList","newLastIdentifiers","_i","_index","splice","_slicedToArray","_arrayWithHoles","iterator","_s","_e","_arr","_n","_d","next","done","_iterableToArrayLimit","minLen","_arrayLikeToArray","from","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","_item","cssMapping","base64","sourceMapping","sourceURLs","sources","map","source","sourceRoot","cssWithMappingToString","mediaQuery","dedupe","alreadyImportedModules","ReactRenderer","Map","renderersMap","has","unmount","delete","renderer","getRenderer","App","default","PanelManager","render","React","el","getElementById","children","ReactDOM","unmountComponentAtNode","innerHTML","set","PanelManagerViewModel","getAvailablePanelsFromConfig","config","SDK","getPageConfig","panels","_p$renderer","_p$renderer$supported","supported_platforms","bbd","panel","panelType","panel_type","values","title","panel_name","settingsManager","UserSettingsManager","getInstance","initializePanels","subscribeToSettingsChanges","filteredPanels","filterPanels","isProdEnv","getIsProdEnv","_panels","updateActivePanel","settingsUnsubscribe","settings","updatePanelsBasedOnSettings","isPanelHidden","currentPanel","_currentPanel","cleanup","setActivePanel","getIndex","forPanelType","findIndex","getPanelType","atIndex","_this$panels$atIndex","currentIndex","getUnlistedPanels","SITE_ID_STATIC_BASE_URL_MAP","StaticService","siteId","baseURL","client","NetworkManager","externalNetworkClient","AxiosNetworkClient","backoff","delay","retries","metadataValue","externalApiRequest","endpoint","fetchPageConfig","pageId","fetchPageConfigById","fetchPageConfigByMetadata","pageConfig","_pageConfig$panels","some","_panel$renderer","_panel$renderer$suppo","pollGlobalConfig","onData","interval","Math","floor","random","pollExternalApiRequest","onError","context","MaestroEventViewModel","ViewModel","eventId","delegate","analyticsService","super","_pageId","_eventId","panelManagerViewModel","navigation","SpatialNavigation","loadPromises","isPanelAvailable","then","KeyPlaysViewModel","keyPlaysViewModel","catch","warn","BetsViewModel","betsViewModel","StatsViewModel","statsViewModel","FantasyViewModel","fantasyViewModel","ShopViewModel","shopViewModel","builderPanel","BuilderPanelViewModel","builderPanelViewModel","paused","focusKey","updatePlayerTimeCode","timestamp","_this$keyPlaysViewMod","_this$statsViewModel","timestampDate","Date","isNaN","getTime","playerTimeCode","onUpdatePlayerTimeCode","getPlayerTimeCode","setDataToPanel","panelData","panelTypes","viewModels","espnStats","espnBet","espnKeyPlays","espnFantasy","espnShop","builderBlockPanel","foxKeyPlays","foxMultiview","foxStats","helloWorld","viewModel","log","_this$betsViewModel","_this$statsViewModel2","_this$fantasyViewMode","_this$shopViewModel","_this$builderPanelVie","destroy","didHidePanel","updateKeyPlaysData","setKeyPlays","updateUserSettings","updateSettings","startFocusManagement","setCurrentFocusedKey","resume","didStartPlayingClip","lastPlayedClipIndex","currentClipPlaybackProgress","currentlyPlayingClipIndex","clearLoadFailureStatus","didStopPlayingClip","didFailToPlayClip","_this$keyPlaysViewMod2","handleKeyPlayLoadFailure","didUpdatePlaybackProgressOfClip","to","isShowingPanel","currentEventDoesNotSupportKeyPlays","errorState","getCurrentEventID","getCurrentlyPlayingClipIndex","_this$keyPlaysViewMod3","_this$keyPlaysViewMod4","getLastPlayedClipIndex","_this$keyPlaysViewMod5","_this$keyPlaysViewMod6","getCurrentClipPlaybackProgress","_this$keyPlaysViewMod7","_this$keyPlaysViewMod8","getKeyPlaysCount","_this$keyPlaysViewMod9","_this$keyPlaysViewMod0","allItems","_title","_isLive","_isShowingPanel","deliverFocus","pause","InsightsService","isEnabled","_globalConfig$bbd$ana","_globalConfig$bbd","_globalConfig$bbd$ana2","globalConfig","getGlobalConfig","analytics","payload","parsedData","URLSearchParams","entries","append","post","time","now","diff","responseStart","_","randomId","client_time","substring","InsightsPayloadBuilder","insightsService","cacheManager","LocalStorageCacheManager","currentTime","serverOffsetTime","getDeviceOffset","getPageInsights","getDeviceInsights","getInsightsInsights","getMetadataInsights","getReferrerInsights","getSessionInsights","getSiteInsights","getUserInsights","getEventInsights","eventData","ontology","e_d","e_m","metadata","e_t","e_u","e0","kingdom","e1","phylum","e2","class","e3","order","e4","family","e5","genus","e6","species","p_c","p_id","page","_id","p_n","p_s","slug","p_t","getDevicePermanentID","devicePermanentId","localStorage","getItem","newDevicePermanentId","setItem","getDeviceCreated","deviceCreated","getCache","Number","setCache","getTabID","tabId","sessionStorage","newTabId","d_ct","d_nd","d_np","platform","d_pid","d_sh","screen","height","d_sw","width","d_tid","d_tim","d_tof","d_ua","userAgent","serverOffset","serverTime","getServerTime","responseEnd","_this$pageConfig","i_id","insights","m_iv","r_d","r_s","r_u","getSessionID","sessionId","newSessionId","se_id","se_s","_this$pageConfig2","_this$pageConfig3","_this$pageConfig4","_this$pageConfig5","_this$pageConfig6","si_d","site","domainUrl","si_id","si_pid","package","si_pv","si_s","u_a","u_c","u_e","u_id","u_li","u_n","u_nu","u_s","u_u","u_un","AnalyticsService","insightsPayloadBuilder","getMaestroEventViewModel","trackAction","eventInsightsData","getPayload","e2_class","e4_family","e3_order","e0_kingdom","e1_phylum","e5_genus","e6_species","action","trackImpression","getPanelDataFromPageConfig","panel_id","getBaseMetadataFromPageConfig","league","airing","sport","external_field_4","external_field_1","external_field_2","external_field_3","SDKSessionId","pageSessionId","isPageSessionActive","baseMetadata","session","page_session","scheduleNextBeacon","pageSessionBeaconTimeoutId","pinchBackSessionId","pinchback_session","beaconInterval","beacon_interval","sendSessionBeacon","isPageSessionBeaconRunning","sessionBeacon","paywall_gated","viewer_id","is_billable","MaestroWebSDK","_analyticsService","instance","userSettings","useProdEnv","getSiteID","staticService","globalConfigPoller","SDKSessionStart","maestroEventViewModel","initViewModels","pageSessionStart","_config","activePanelUnmountFn","pageSessionEnd","deinit","SDKSessionEnd","stop","configure","configParams","setSiteID","siteID","info","pinchBackSessionStart","panelUnmountFn","renderPanel","isCleanedUp","cleanupFn","pinchBackSessionEnd","PANEL_TYPE_SETTINGS_KEY_MAP","_settings","DEFAULT_USER_SETTINGS","getCurrentSettings","validateSettings","mergedSettings","mergeSettings","getPanelSettings","_this$_settings$value","panelKey","mapPanelTypeToSettingsKey","panelSettings","hidePanel","shouldHideWagers","betsSettings","hideWagers","resetToDefaults","currentSettings","mergedPanelSettings","settingKey","settingValue","axiosInstance","axios","headers","operation","attempt","axiosError","response","status","code","delayTime","pow","retry","params","setAuthentication","token","apiKey","defaults","common","utils","AxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","defineProperties","customProps","bets","stats","keyPlays","fantasy","CanceledError","ERR_CANCELED","__CANCEL__","cacheDuration","maxSize","accessLog","produceCacheKey","prefix","getCurrentSize","totalSize","startsWith","cleanupOldEntries","keysToRemove","parse","removeItem","logicalKey","cleanupLRUEntries","newItemSize","sort","cacheKey","cacheData","cachedData","clearCache","clearCacheByPattern","pattern","clearAllCache","clear","getRect","node","offsetParent","offsetHeight","offsetWidth","left","offsetLeft","top","offsetTop","nodeType","scrollLeft","scrollTop","measureLayout","callback","relativeNode","relativeRect","hasDOM","WIDTH","innerWidth","HEIGHT","innerHeight","VisualDebugger","debugCtx","createCanvas","layoutsCtx","zIndex","canvas","ctx","getContext","body","clearRect","clearLayouts","drawLayout","layout","parentFocusKey","strokeStyle","strokeRect","font","fillStyle","fillText","drawPoint","x","y","color","size","lineWidth","ROOT_FOCUS_KEY","DEFAULT_KEY_MAP","DEBUG_FN_COLORS","THROTTLE_OPTIONS","leading","trailing","throttle","func","wait","previous","args","remaining","apply","sortBy","array","iteratee","aValue","bValue","first","difference","isVertical","isIncremental","isSibling","itemX","itemY","itemWidth","itemHeight","coordinate","itemSize","direction","refCorners","siblingCorners","isVerticalDirection","refA","refB","siblingA","siblingB","refCoordinateA","refCoordinateB","siblingCoordinateA","siblingCoordinateB","thresholdDistance","max","min","abs","distancesToCompare","sortSiblingsByPriority","siblings","currentLayout","_focusKey","getRefCorners","aCorners","bCorners","aIsAdjacentSlice","isAdjacentSlice","bIsAdjacentSlice","aPrimaryAxisFunction","getPrimaryAxisDistance","getSecondaryAxisDistance","bPrimaryAxisFunction","aSecondaryAxisFunction","bSecondaryAxisFunction","aPrimaryAxisDistance","bPrimaryAxisDistance","focusableComponents","parentsHavingFocusedChild","nativeMode","throttleKeypresses","pressedKeys","keyDownEventListener","clickEventListener","keyUpEventListener","keyMap","debug","visualDebugger","logIndex","onKeyEvent","setFocus","updateAllLayouts","navigateByDirection","init","setKeyMap","visualDebug","isInteger","bindEventHandlers","startDrawLayouts","draw","requestAnimationFrame","_this$visualDebugger","component","_this$visualDebugger2","unbindEventHandlers","getEventType","keyCode","getKeyMap","addEventListener","keyDownHandler","eventType","preventDefault","stopPropagation","details","getNodeLayoutByFocusKey","onEnterPress","onBackPress","_this$visualDebugger3","onArrowPress","_this$keyDownEventLis","_this$keyDownEventLis2","cancel","onEnterRelease","findFocusKeyForElement","mouseClick","onClickPress","removeEventListener","element","focusable","contains","_component$onClickPre","onClickPressHandler","_component$onEnterPre","onEnterPressHandler","_component$onBackPres","onBackPressHandler","_component$onEnterRel","onEnterReleaseHandler","_component$onArrowPre","onArrowPressHandler","validDirections","smartNavigate","_this$visualDebugger4","fromParentFocusKey","layoutUpdated","currentComponent","updateLayout","isIncrementalDirection","currentCutoffCoordinate","getCutoffCoordinate","siblingCutoffCoordinate","sortedSiblings","nextComponent","saveLastFocusedChildKey","lastFocusedChildKey","functionName","debugString","rest","getNextFocusKey","targetFocusKey","targetComponent","trackChildren","preferredChildFocusKey","forgetLastFocusedChild","isParticipatingFocusableComponent","childKey","childrenClosestToOrigin","getChildClosestToOrigin","addFocusable","onBecameFocusedHandler","onBecameBlurredHandler","onUpdateFocus","onUpdateHasFocusedChild","autoRestoreFocus","blockNavigationOut","removeFocusable","componentToRemove","Reflect","deleteProperty","parentComponent","wasFocused","newFocusKey","isFocusableComponent","_oldComponent$onUpdat","_oldComponent$onBecam","oldComponent","_newComponent$onUpdat","_newComponent$onBecam","newComponent","updateParentsHasFocusedChild","parents","currentParentFocusKey","parentsToRemoveFlag","parentsToAddFlag","_parentComponent$onUp","onIntermediateNodeBecameBlurred","_parentComponent$onUp2","onIntermediateNodeBecameFocused","updateParentsLastFocusedChild","_this$focusableCompon","_this$focusableCompon2","_this$focusableCompon3","_this$focusableCompon4","_this$visualDebugger5","_this$visualDebugger6","getFocusableComponents","_component$onUpdateFo","_component$onUpdateHa","lastFocusedKey","updateFocusable","isNativeMode","getFocusableComponentsByParentFocusKey","normalizeHeaderName","transitionalDefaults","toFormData","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","transitional","XMLHttpRequest","transformRequest","isObjectPayload","contentType","_FormData","env","rawValue","parser","encoder","stringifySafely","transformResponse","silentJSONParsing","forcedJSONParsing","strictJSONParsing","responseType","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","method","___CSS_LOADER_EXPORT___","FocusableItem","ref","useRef","setRef","removeRef","useScrollableContainer","useEffect","current","className","locals","ScrollableContainerContext","createContext","scrollToFocusedElement","ScrollableContainer","scrollableContainerRef","containerTopOffset","scrolled","setScrolled","useState","refsSet","Set","hashRef","lastHashRef","sortedRefsCache","useCallback","add","getOrderedRefs","refsArray","containerRect","getBoundingClientRect","aRect","bottom","bRect","refs","ms","nodeRect","hasOutside","rect","prev","newScrolled","contextValue","useMemo","Provider","_extends","data-scrolled","useContext","KeyPlaysIcon","lazy","PlayIcon","BetsIcon","StatsIcon","WarningIcon","ExpandIcon","CollapseIcon","TimesIcon","CheckmarkIcon","FlameIcon","BetsWarningIcon","MobilePhoneIcon","FantasyIcon","ShopIcon","HelloWorldIcon","ChatIcon","ShopifyIcon","BuilderIcon","FoxKeyPlaysIcon","FoxStatsIcon","FoxMultiViewIcon","iconImports","play","warning","expand","collapse","times","checkmark","flame","betsWarning","mobilePhone","chat","shopifyBlockPanel","Skeleton","Icon","Component","iconName","IconComponent","Suspense","fallback","BaseButton","_isLoading","_error","setLoading","loading","setError","NetworkError","AuthError","NotFoundError","ServerError","statusCode","BadRequestError","HttpMethod","GET","POST","PUT","DELETE","localStorageOverride","pollingTasks","defaultCacheDuration","maestroClient","networkClient","externalClient","externalBaseURL","globalThis","cacheParams","useCache","fetchFn","handleError","_error$response$data","maestroDefaultHeaders","skipResponseBodyDeserialization","requestHeaders","jwt","shouldCache","withCache","getWithHeaders","postWithHeaders","pollMaestroApiRequest","taskKey","_this$pollingTasks$ge","controller","abort","AbortController","signal","aborted","maestroApiRequest","_this$pollingTasks$ge2","_this$pollingTasks$ge3","_this$pollingTasks$ge4","pollExternalApiRequestWithHeaders","_this$pollingTasks$ge5","externalApiRequestWithHeaders","_this$pollingTasks$ge6","stopAllPolling","originalLength","encode","url","paramsSerializer","serializedParams","parts","v","toISOString","hashmarkIndex","clarifyTimeoutError","formData","convertValue","Blob","Buffer","build","parentKey","fullKey","pop","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","parseProtocol","onCanceled","requestData","cancelToken","unsubscribe","auth","username","password","Authorization","fullPath","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","toUpperCase","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","protocol","ERR_BAD_REQUEST","send","isAbsoluteURL","combineURLs","requestedURL","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","g","Function","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","browser","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","Axios","mergeConfig","createInstance","defaultConfig","instanceConfig","CancelToken","isCancel","VERSION","Cancel","spread","isAxiosError","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","boolean","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","handlers","use","eject","h","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","normalizedName","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","arg","encodingOrOffset","allocUnsafe","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","checked","copy","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","global","foo","subarray","typedArraySupport","poolSize","_augment","configurable","fill","allocUnsafeSlow","_isBuffer","compare","pos","swap16","swap32","swap64","equals","inspect","match","thisStart","thisEnd","thisCopy","targetCopy","isFinite","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","num","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","expires","path","secure","cookie","toGMTString","RegExp","decodeURIComponent","relativeURL","ignoreDuplicateOf","split","line","originURL","msie","urlParsingNode","resolveURL","host","search","hash","hostname","port","pathname","charAt","requestURL","exec","deprecatedWarnings","formatMessage","opt","desc","opts","ERR_DEPRECATED","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","executor","resolvePromise","_listeners","onfulfilled","_resolve","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","PanelNavButton","active","focused","data-focused","withFocusable","PanelNavigationButton","_props","onBecameFocused","handleArrowPress","PanelNavigation","items","onEnter","itemsCount","buttonWidth","FocusableWrapper","handleBecameFocused","Wrapper","KeyPlaysView","BetsView","StatsView","FantasyView","ShopView","HelloWorldView","BuilderView","PanelLoading","PANELS_MAP","state","activePanel","visiblePanels","panelsObservable","componentDidMount","currentPanelObservable","setState","panelsUnsubscribe","componentWillUnmount","goToPanel","PANEL_ITEMS","ActivePanelComponent","DARK_THEME","button","borderRadius","textCapitalization","colors","accentPrimary","accentSecondary","accentTertiary","surface1","surface2","surface3","surface4","surface5","surface6","highlightPrimary","highlightSecondary","highlightTertiary","alertConfirmation","alertWarning","alertError","text100","text200","text300","text400","text500","creator","owner","typography","headline","FONT_FAMILY_MAP","_config$theme","theme","documentElement","setProperty","removeProperty","configForgetLastFocusedChild","configTrackChildren","configAutoRestoreFocus","configBlockNavigationOut","WrappedComponent","_WithFocusable","realFocusKey","hasFocusedChild","onBecameBlurred","getChildContext","domNode","findDOMNode","componentDidUpdate","filteredProps","omit","stealFocus"],"mappings":"2BACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GAKAK,EAAI,EAAGC,EAAW,GACpCD,EAAIF,EAASI,OAAQF,IACzBH,EAAUC,EAASE,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBV,IAAYU,EAAgBV,IACpFI,EAASO,KAAKD,EAAgBV,GAAS,IAExCU,EAAgBV,GAAW,EAE5B,IAAID,KAAYG,EACZI,OAAOC,UAAUC,eAAeC,KAAKP,EAAaH,KACpDa,EAAQb,GAAYG,EAAYH,IAKlC,IAFGc,GAAqBA,EAAoBf,GAEtCM,EAASC,QACdD,EAASU,OAATV,GAOF,IAAIW,EAAmB,GAKnBL,EAAkB,CACrBM,EAAG,GAWJ,SAASC,EAAoBlB,GAG5B,GAAGgB,EAAiBhB,GACnB,OAAOgB,EAAiBhB,GAAUmB,QAGnC,IAAIC,EAASJ,EAAiBhB,GAAY,CACzCI,EAAGJ,EACHqB,GAAG,EACHF,QAAS,IAUV,OANAN,EAAQb,GAAUU,KAAKU,EAAOD,QAASC,EAAQA,EAAOD,QAASD,GAG/DE,EAAOC,GAAI,EAGJD,EAAOD,QAKfD,EAAoBI,EAAI,SAAuBrB,GAC9C,IAAIsB,EAAW,GAKXC,EAAqBb,EAAgBV,GACzC,GAA0B,IAAvBuB,EAGF,GAAGA,EACFD,EAASX,KAAKY,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAIC,SAAQ,SAASC,EAASC,GAC3CJ,EAAqBb,EAAgBV,GAAW,CAAC0B,EAASC,MAE3DL,EAASX,KAAKY,EAAmB,GAAKC,GAGtC,IACII,EADAC,EAASC,SAASC,cAAc,UAGpCF,EAAOG,QAAU,QACjBH,EAAOI,QAAU,IACbhB,EAAoBiB,IACvBL,EAAOM,aAAa,QAASlB,EAAoBiB,IAElDL,EAAOO,IA1DV,SAAwBpC,GACvB,OAAOiB,EAAoBoB,EAAI,IAAM,GAAGrC,IAAUA,GAAW,0BAyD9CsC,CAAetC,GAG5B,IAAIuC,EAAQ,IAAIC,MAChBZ,EAAmB,SAAUa,GAE5BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjCC,aAAaX,GACb,IAAIY,EAAQnC,EAAgBV,GAC5B,GAAa,IAAV6C,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYL,IAAyB,SAAfA,EAAMM,KAAkB,UAAYN,EAAMM,MAChEC,EAAUP,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOb,IACpDG,EAAMW,QAAU,iBAAmBlD,EAAU,cAAgB8C,EAAY,KAAOE,EAAU,IAC1FT,EAAMY,KAAO,iBACbZ,EAAMQ,KAAOD,EACbP,EAAMa,QAAUJ,EAChBH,EAAM,GAAGN,GAEV7B,EAAgBV,QAAWqD,IAG7B,IAAIpB,EAAUqB,YAAW,WACxB1B,EAAiB,CAAEmB,KAAM,UAAWE,OAAQpB,MAC1C,MACHA,EAAOa,QAAUb,EAAOc,OAASf,EACjCE,SAASyB,KAAKC,YAAY3B,GAG5B,OAAOJ,QAAQgC,IAAInC,IAIpBL,EAAoByC,EAAI9C,EAGxBK,EAAoB0C,EAAI5C,EAGxBE,EAAoB2C,EAAI,SAAS1C,EAASiC,EAAMU,GAC3C5C,EAAoB6C,EAAE5C,EAASiC,IAClC7C,OAAOyD,eAAe7C,EAASiC,EAAM,CAAEa,YAAY,EAAMC,IAAKJ,KAKhE5C,EAAoBiD,EAAI,SAAShD,GACX,oBAAXiD,QAA0BA,OAAOC,aAC1C9D,OAAOyD,eAAe7C,EAASiD,OAAOC,YAAa,CAAEC,MAAO,WAE7D/D,OAAOyD,eAAe7C,EAAS,aAAc,CAAEmD,OAAO,KAQvDpD,EAAoBqD,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQpD,EAAoBoD,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKnE,OAAOoE,OAAO,MAGvB,GAFAzD,EAAoBiD,EAAEO,GACtBnE,OAAOyD,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOpD,EAAoB2C,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRxD,EAAoB4D,EAAI,SAAS1D,GAChC,IAAI0C,EAAS1C,GAAUA,EAAOqD,WAC7B,WAAwB,OAAOrD,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAF,EAAoB2C,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR5C,EAAoB6C,EAAI,SAASgB,EAAQC,GAAY,OAAOzE,OAAOC,UAAUC,eAAeC,KAAKqE,EAAQC,IAGzG9D,EAAoBoB,EAAI,GAGxBpB,EAAoB+D,GAAK,SAASC,GAA2B,MAApBC,QAAQ3C,MAAM0C,GAAYA,GAEnE,IAAIE,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAWxE,KAAKiE,KAAKO,GAC5CA,EAAWxE,KAAOd,EAClBsF,EAAaA,EAAWG,QACxB,IAAI,IAAInF,EAAI,EAAGA,EAAIgF,EAAW9E,OAAQF,IAAKN,EAAqBsF,EAAWhF,IAC3E,IAAIU,EAAsBwE,EAI1B,OAAOpE,EAAoBA,EAAoBsE,EAAI,G,gBCrMrDpE,EAAOD,QAAUsE,QAAQ,U,6BCAzB,kCAAO,MAAMC,EAAmB,CAC9BC,eAAgB,eAChBC,WAAY,YACZC,UAAW,UACXC,aAAc,cACdC,UAAW,WACXC,YAAa,aACbC,cAAe,cACfC,eAAgB,eAChBC,UAAW,WACXC,oBAAqB,sB,6BCRvB,IAOuBC,EAPnBxB,EAAO,EAAQ,IAIfyB,EAAW/F,OAAOC,UAAU8F,SAG5BC,GAAmBF,EAMpB9F,OAAOoE,OAAO,MAJR,SAAS6B,GACd,IAAIC,EAAMH,EAAS5F,KAAK8F,GACxB,OAAOH,EAAMI,KAASJ,EAAMI,GAAOA,EAAIlB,MAAM,GAAI,GAAGmB,iBAIxD,SAASC,EAAW3D,GAElB,OADAA,EAAOA,EAAK0D,cACL,SAAkBF,GACvB,OAAOD,EAAOC,KAAWxD,GAU7B,SAAS4D,EAAQC,GACf,OAAOC,MAAMF,QAAQC,GASvB,SAASE,EAAYF,GACnB,YAAsB,IAARA,EAqBhB,IAAIG,EAAgBL,EAAW,eA6C/B,SAASM,EAASJ,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAShC,SAASK,EAAcL,GACrB,GAAoB,WAAhBN,EAAOM,GACT,OAAO,EAGT,IAAIrG,EAAYD,OAAO4G,eAAeN,GACtC,OAAqB,OAAdrG,GAAsBA,IAAcD,OAAOC,UAUpD,IAAI4G,EAAST,EAAW,QASpBU,EAASV,EAAW,QASpBW,EAASX,EAAW,QASpBY,EAAaZ,EAAW,YAQ5B,SAASa,EAAWX,GAClB,MAA8B,sBAAvBP,EAAS5F,KAAKmG,GAkCvB,IAAIY,EAAoBd,EAAW,mBAmDnC,SAASe,EAAQC,EAAKC,GAEpB,GAAID,QAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGLf,EAAQe,GAEV,IAAK,IAAIvH,EAAI,EAAGiB,EAAIsG,EAAIrH,OAAQF,EAAIiB,EAAGjB,IACrCwH,EAAGlH,KAAK,KAAMiH,EAAIvH,GAAIA,EAAGuH,QAI3B,IAAK,IAAI/C,KAAO+C,EACVpH,OAAOC,UAAUC,eAAeC,KAAKiH,EAAK/C,IAC5CgD,EAAGlH,KAAK,KAAMiH,EAAI/C,GAAMA,EAAK+C,GA4JrC,IAA6BE,EAAzBC,GAAyBD,EAKJ,oBAAfE,YAA8BxH,OAAO4G,eAAeY,YAHrD,SAASvB,GACd,OAAOqB,GAAcrB,aAAiBqB,IAI1CzG,EAAOD,QAAU,CACfyF,QAASA,EACTI,cAAeA,EACfgB,SAvYF,SAAkBnB,GAChB,OAAe,OAARA,IAAiBE,EAAYF,IAA4B,OAApBA,EAAIoB,cAAyBlB,EAAYF,EAAIoB,cAChD,mBAA7BpB,EAAIoB,YAAYD,UAA2BnB,EAAIoB,YAAYD,SAASnB,IAsYhFqB,WA9PF,SAAoB1B,GAElB,OAAOA,IACgB,mBAAb2B,UAA2B3B,aAAiB2B,UAFxC,sBAGZ7B,EAAS5F,KAAK8F,IACbgB,EAAWhB,EAAMF,WAJN,sBAImBE,EAAMF,aA0PvC8B,kBApXF,SAA2BvB,GAOzB,MAL4B,oBAAhBwB,aAAiCA,YAAkB,OACpDA,YAAYC,OAAOzB,GAEnB,GAAUA,EAAU,QAAMG,EAAcH,EAAI0B,SAgXvDC,SArWF,SAAkB3B,GAChB,MAAsB,iBAARA,GAqWd4B,SA5VF,SAAkB5B,GAChB,MAAsB,iBAARA,GA4VdI,SAAUA,EACVC,cAAeA,EACfH,YAAaA,EACbK,OAAQA,EACRC,OAAQA,EACRC,OAAQA,EACRE,WAAYA,EACZkB,SAnRF,SAAkB7B,GAChB,OAAOI,EAASJ,IAAQW,EAAWX,EAAI8B,OAmRvClB,kBAAmBA,EACnBmB,qBAjOF,WACE,OAAyB,oBAAdC,WAAoD,gBAAtBA,UAAUC,SACY,iBAAtBD,UAAUC,SACY,OAAtBD,UAAUC,WAI/B,oBAAXzD,QACa,oBAAbtD,WA0NT2F,QAASA,EACTqB,MA/JF,SAASA,IACP,IAAIC,EAAS,GACb,SAASC,EAAYpC,EAAKjC,GACpBsC,EAAc8B,EAAOpE,KAASsC,EAAcL,GAC9CmC,EAAOpE,GAAOmE,EAAMC,EAAOpE,GAAMiC,GACxBK,EAAcL,GACvBmC,EAAOpE,GAAOmE,EAAM,GAAIlC,GACfD,EAAQC,GACjBmC,EAAOpE,GAAOiC,EAAItB,QAElByD,EAAOpE,GAAOiC,EAIlB,IAAK,IAAIzG,EAAI,EAAGiB,EAAI6H,UAAU5I,OAAQF,EAAIiB,EAAGjB,IAC3CsH,EAAQwB,UAAU9I,GAAI6I,GAExB,OAAOD,GA+IPG,OApIF,SAAgBC,EAAGC,EAAGC,GAQpB,OAPA5B,EAAQ2B,GAAG,SAAqBxC,EAAKjC,GAEjCwE,EAAExE,GADA0E,GAA0B,mBAARzC,EACXhC,EAAKgC,EAAKyC,GAEVzC,KAGNuC,GA6HPG,KAxPF,SAAc9C,GACZ,OAAOA,EAAI8C,KAAO9C,EAAI8C,OAAS9C,EAAI+C,QAAQ,aAAc,KAwPzDC,SArHF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQC,WAAW,KACrBD,EAAUA,EAAQnE,MAAM,IAEnBmE,GAkHPE,SAvGF,SAAkB3B,EAAa4B,EAAkBC,EAAOC,GACtD9B,EAAYzH,UAAYD,OAAOoE,OAAOkF,EAAiBrJ,UAAWuJ,GAClE9B,EAAYzH,UAAUyH,YAAcA,EACpC6B,GAASvJ,OAAOyJ,OAAO/B,EAAYzH,UAAWsJ,IAqG9CG,aA1FF,SAAsBC,EAAWC,EAASC,GACxC,IAAIN,EACA1J,EACAiK,EACAC,EAAS,GAEbH,EAAUA,GAAW,GAErB,EAAG,CAGD,IADA/J,GADA0J,EAAQvJ,OAAOgK,oBAAoBL,IACzB5J,OACHF,KAAM,GAENkK,EADLD,EAAOP,EAAM1J,MAEX+J,EAAQE,GAAQH,EAAUG,GAC1BC,EAAOD,IAAQ,GAGnBH,EAAY3J,OAAO4G,eAAe+C,SAC3BA,KAAeE,GAAUA,EAAOF,EAAWC,KAAaD,IAAc3J,OAAOC,WAEtF,OAAO2J,GAsEP5D,OAAQA,EACRI,WAAYA,EACZ6D,SA9DF,SAAkB/D,EAAKgE,EAAcC,GACnCjE,EAAMkE,OAAOlE,SACInD,IAAboH,GAA0BA,EAAWjE,EAAInG,UAC3CoK,EAAWjE,EAAInG,QAEjBoK,GAAYD,EAAanK,OACzB,IAAIsK,EAAYnE,EAAIoE,QAAQJ,EAAcC,GAC1C,OAAsB,IAAfE,GAAoBA,IAAcF,GAwDzCI,QA/CF,SAAiBtE,GACf,IAAKA,EAAO,OAAO,KACnB,IAAIpG,EAAIoG,EAAMlG,OACd,GAAIyG,EAAY3G,GAAI,OAAO,KAE3B,IADA,IAAI2K,EAAM,IAAIjE,MAAM1G,GACbA,KAAM,GACX2K,EAAI3K,GAAKoG,EAAMpG,GAEjB,OAAO2K,GAwCPjD,aAAcA,EACdP,WAAYA,I,4fCjdP,MAAMyD,EAIX/C,YAAYgD,GAAiBC,EAAA,iBAHe,IAAEA,EAAA,sBAI5CC,KAAKC,OAASH,EAGhB,YACE,OAAOE,KAAKC,OAGd,UAAUC,GACRF,KAAKC,OAASC,EACdF,KAAKG,SAGPC,UAAUC,GAIR,OAHAL,KAAKM,UAAU7K,KAAK4K,GAGb,KACLL,KAAKM,UAAYN,KAAKM,UAAUrB,OAAQ/I,GAAMA,IAAMmK,IAIhDF,SACNH,KAAKM,UAAU/D,QAAS8D,GAAaA,EAASL,KAAKC,Y,6BC9BvD,6CAEA,MAAMM,EAAc,CAAC,kDAGrB,IAAIC,EAAoB,KACpBC,EAAwD,GACxDC,GAAiB,EAErB,MAAMC,EAAaC,UACjB,IAAIJ,IAAgBE,EAApB,CACIG,EAEJH,GAAiB,EAEjB,IACE,MAAM,cACJI,EAAa,mBACbC,EAAkB,oBAClBC,EAAmB,mBACnBC,SACQ,6BAEJC,EACgE,OAApEX,EAAYY,KAAMC,GAAWA,EAAOC,KAAKnH,OAAOoH,SAASC,OAE3Df,EAAe,IAAIM,EAAc,CAC/BU,IACE,kGACFC,UAAWR,EACXS,YAAaX,EACbY,aAAcX,EAAoB/B,OAAQ2C,IAEhC,CAAC,mBAAoB,cAAe,kBAAkBC,SAC5DD,EAAY3J,OAGhB6J,iBAAkBZ,EAAQ,EAAI,GAC9Ba,QAASC,EAAIC,QACbC,YAAahB,EAAQ,cAAgB,aACrCiB,SAAU,YAAYd,KAAKnH,OAAOoH,SAASC,QAI7Cd,EAAclE,QAAQ,EAAGlF,QAAO+K,YAAY,IAAAC,EAC9B,QAAZA,EAAA7B,SAAY,IAAA6B,GAAZA,EAAcC,iBAAiBjL,EAAO+K,KAExC3B,EAAgB,GAChB,MAAOtK,GACP6D,QAAQ3C,MAAM,2CAA4ClB,GAC1D,QACAuK,GAAiB,KAIR4B,EAAmBA,CAACjL,EAAgB+K,KAC3C5B,EACFA,EAAa8B,iBAAiBjL,EAAO+K,IAErC3B,EAAchL,KAAK,CAAE4B,QAAO+K,UAC5BzB,O,6BC1DJ,IACM4B,EADFC,EAEK,WAUL,YAToB,IAATD,IAMTA,EAAOE,QAAQvI,QAAUtD,UAAYA,SAAS2B,MAAQ2B,OAAOwI,OAGxDH,GAIPI,EAAY,WACd,IAAIJ,EAAO,GACX,OAAO,SAAkBxK,GACvB,QAA4B,IAAjBwK,EAAKxK,GAAyB,CACvC,IAAI6K,EAAchM,SAASiM,cAAc9K,GAEzC,GAAImC,OAAO4I,mBAAqBF,aAAuB1I,OAAO4I,kBAC5D,IAGEF,EAAcA,EAAYG,gBAAgB1K,KAC1C,MAAOlC,GAEPyM,EAAc,KAIlBL,EAAKxK,GAAU6K,EAGjB,OAAOL,EAAKxK,IApBA,GAwBZiL,EAAc,GAElB,SAASC,EAAqBC,GAG5B,IAFA,IAAIrF,GAAU,EAEL5I,EAAI,EAAGA,EAAI+N,EAAY7N,OAAQF,IACtC,GAAI+N,EAAY/N,GAAGiO,aAAeA,EAAY,CAC5CrF,EAAS5I,EACT,MAIJ,OAAO4I,EAGT,SAASsF,EAAaC,EAAMC,GAI1B,IAHA,IAAIC,EAAa,GACbC,EAAc,GAETtO,EAAI,EAAGA,EAAImO,EAAKjO,OAAQF,IAAK,CACpC,IAAIuO,EAAOJ,EAAKnO,GACZwO,EAAKJ,EAAQK,KAAOF,EAAK,GAAKH,EAAQK,KAAOF,EAAK,GAClDG,EAAQL,EAAWG,IAAO,EAC1BP,EAAa,GAAGU,OAAOH,EAAI,KAAKG,OAAOD,GAC3CL,EAAWG,GAAME,EAAQ,EACzB,IAAIE,EAAQZ,EAAqBC,GAC7B1G,EAAM,CACRsH,IAAKN,EAAK,GACVO,MAAOP,EAAK,GACZQ,UAAWR,EAAK,KAGH,IAAXK,GACFb,EAAYa,GAAOI,aACnBjB,EAAYa,GAAOK,QAAQ1H,IAE3BwG,EAAYvN,KAAK,CACfyN,WAAYA,EACZgB,QAASC,EAAS3H,EAAK6G,GACvBY,WAAY,IAIhBV,EAAY9N,KAAKyN,GAGnB,OAAOK,EAGT,SAASa,EAAmBf,GAC1B,IAAIgB,EAAQzN,SAASC,cAAc,SAC/ByN,EAAajB,EAAQiB,YAAc,GAEvC,QAAgC,IAArBA,EAAWC,MAAuB,CAC3C,IAAIA,EAAmD,KAEnDA,IACFD,EAAWC,MAAQA,GAQvB,GAJAnP,OAAOoP,KAAKF,GAAY/H,SAAQ,SAAU9C,GACxC4K,EAAMpN,aAAawC,EAAK6K,EAAW7K,OAGP,mBAAnB4J,EAAQoB,OACjBpB,EAAQoB,OAAOJ,OACV,CACL,IAAItM,EAAS4K,EAAUU,EAAQoB,QAAU,QAEzC,IAAK1M,EACH,MAAM,IAAIT,MAAM,2GAGlBS,EAAOO,YAAY+L,GAGrB,OAAOA,EAcT,IACMK,EADFC,GACED,EAAY,GACT,SAAiBb,EAAOe,GAE7B,OADAF,EAAUb,GAASe,EACZF,EAAUzF,OAAOwD,SAASoC,KAAK,QAI1C,SAASC,EAAoBT,EAAOR,EAAOkB,EAAQvI,GACjD,IAAIsH,EAAMiB,EAAS,GAAKvI,EAAIuH,MAAQ,UAAUH,OAAOpH,EAAIuH,MAAO,MAAMH,OAAOpH,EAAIsH,IAAK,KAAOtH,EAAIsH,IAIjG,GAAIO,EAAMW,WACRX,EAAMW,WAAWC,QAAUN,EAAYd,EAAOC,OACzC,CACL,IAAIoB,EAAUtO,SAASuO,eAAerB,GAClCsB,EAAaf,EAAMe,WAEnBA,EAAWvB,IACbQ,EAAMgB,YAAYD,EAAWvB,IAG3BuB,EAAWjQ,OACbkP,EAAMiB,aAAaJ,EAASE,EAAWvB,IAEvCQ,EAAM/L,YAAY4M,IAKxB,SAASK,EAAWlB,EAAOhB,EAAS7G,GAClC,IAAIsH,EAAMtH,EAAIsH,IACVC,EAAQvH,EAAIuH,MACZC,EAAYxH,EAAIwH,UAepB,GAbID,EACFM,EAAMpN,aAAa,QAAS8M,GAE5BM,EAAMmB,gBAAgB,SAGpBxB,GAA6B,oBAATyB,OACtB3B,GAAO,uDAAuDF,OAAO6B,KAAKC,SAASC,mBAAmBC,KAAKC,UAAU7B,MAAe,QAMlIK,EAAMW,WACRX,EAAMW,WAAWC,QAAUnB,MACtB,CACL,KAAOO,EAAMyB,YACXzB,EAAMgB,YAAYhB,EAAMyB,YAG1BzB,EAAM/L,YAAY1B,SAASuO,eAAerB,KAI9C,IAAIiC,EAAY,KACZC,EAAmB,EAEvB,SAAS7B,EAAS3H,EAAK6G,GACrB,IAAIgB,EACA4B,EACAlB,EAEJ,GAAI1B,EAAQ0C,UAAW,CACrB,IAAIG,EAAaF,IACjB3B,EAAQ0B,IAAcA,EAAY3B,EAAmBf,IACrD4C,EAASnB,EAAoBpL,KAAK,KAAM2K,EAAO6B,GAAY,GAC3DnB,EAASD,EAAoBpL,KAAK,KAAM2K,EAAO6B,GAAY,QAE3D7B,EAAQD,EAAmBf,GAC3B4C,EAASV,EAAW7L,KAAK,KAAM2K,EAAOhB,GAEtC0B,EAAS,YAxFb,SAA4BV,GAE1B,GAAyB,OAArBA,EAAM8B,WACR,OAAO,EAGT9B,EAAM8B,WAAWd,YAAYhB,GAmFzB+B,CAAmB/B,IAKvB,OADA4B,EAAOzJ,GACA,SAAqB6J,GAC1B,GAAIA,EAAQ,CACV,GAAIA,EAAOvC,MAAQtH,EAAIsH,KAAOuC,EAAOtC,QAAUvH,EAAIuH,OAASsC,EAAOrC,YAAcxH,EAAIwH,UACnF,OAGFiC,EAAOzJ,EAAM6J,QAEbtB,KAKN9O,EAAOD,QAAU,SAAUoN,EAAMC,IAC/BA,EAAUA,GAAW,IAGR0C,WAA0C,kBAAtB1C,EAAQ0C,YACvC1C,EAAQ0C,UAAYvD,KAItB,IAAI8D,EAAkBnD,EADtBC,EAAOA,GAAQ,GAC0BC,GACzC,OAAO,SAAgBkD,GAGrB,GAFAA,EAAUA,GAAW,GAE2B,mBAA5CnR,OAAOC,UAAU8F,SAAS5F,KAAKgR,GAAnC,CAIA,IAAK,IAAItR,EAAI,EAAGA,EAAIqR,EAAgBnR,OAAQF,IAAK,CAC/C,IACI4O,EAAQZ,EADKqD,EAAgBrR,IAEjC+N,EAAYa,GAAOI,aAKrB,IAFA,IAAIuC,EAAqBrD,EAAaoD,EAASlD,GAEtCoD,EAAK,EAAGA,EAAKH,EAAgBnR,OAAQsR,IAAM,CAClD,IAEIC,EAASzD,EAFKqD,EAAgBG,IAIK,IAAnCzD,EAAY0D,GAAQzC,aACtBjB,EAAY0D,GAAQxC,UAEpBlB,EAAY2D,OAAOD,EAAQ,IAI/BJ,EAAkBE,M,6BCxQtB,SAASI,EAAehH,EAAK3K,GAAK,OAUlC,SAAyB2K,GAAO,GAAIjE,MAAMF,QAAQmE,GAAM,OAAOA,EAVtBiH,CAAgBjH,IAQzD,SAA+BA,EAAK3K,GAAK,IAAIwR,EAAK7G,IAA0B,oBAAX3G,QAA0B2G,EAAI3G,OAAO6N,WAAalH,EAAI,eAAgB,GAAU,MAAN6G,EAAY,OAAQ,IAAkDM,EAAIC,EAAlDC,EAAO,GAAQC,GAAK,EAAUC,GAAK,EAAmB,IAAM,IAAKV,EAAKA,EAAGlR,KAAKqK,KAAQsH,GAAMH,EAAKN,EAAGW,QAAQC,QAAoBJ,EAAKxR,KAAKsR,EAAG5N,QAAYlE,GAAKgS,EAAK9R,SAAWF,GAA3DiS,GAAK,IAAoE,MAAOnN,GAAOoN,GAAK,EAAMH,EAAKjN,EAAO,QAAU,IAAWmN,GAAsB,MAAhBT,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIU,EAAI,MAAMH,GAAQ,OAAOC,EAR7aK,CAAsB1H,EAAK3K,IAI5F,SAAqC2D,EAAG2O,GAAU,IAAK3O,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAO4O,EAAkB5O,EAAG2O,GAAS,IAAI5N,EAAIvE,OAAOC,UAAU8F,SAAS5F,KAAKqD,GAAGwB,MAAM,GAAI,GAAc,WAANT,GAAkBf,EAAEkE,cAAanD,EAAIf,EAAEkE,YAAY7E,MAAM,GAAU,QAAN0B,GAAqB,QAANA,EAAa,OAAOgC,MAAM8L,KAAK7O,GAAI,GAAU,cAANe,GAAqB,2CAA2C0H,KAAK1H,GAAI,OAAO6N,EAAkB5O,EAAG2O,GAJpTG,CAA4B9H,EAAK3K,IAEnI,WAA8B,MAAM,IAAI0S,UAAU,6IAFuFC,GAMzI,SAASJ,EAAkB5H,EAAKiI,IAAkB,MAAPA,GAAeA,EAAMjI,EAAIzK,UAAQ0S,EAAMjI,EAAIzK,QAAQ,IAAK,IAAIF,EAAI,EAAG6S,EAAO,IAAInM,MAAMkM,GAAM5S,EAAI4S,EAAK5S,IAAO6S,EAAK7S,GAAK2K,EAAI3K,GAAM,OAAO6S,EAMhL7R,EAAOD,QAAU,SAAgCwN,GAC/C,IAAIuE,EAAQnB,EAAepD,EAAM,GAC7BjF,EAAUwJ,EAAM,GAChBC,EAAaD,EAAM,GAEvB,IAAKC,EACH,OAAOzJ,EAGT,GAAoB,mBAATkH,KAAqB,CAE9B,IAAIwC,EAASxC,KAAKC,SAASC,mBAAmBC,KAAKC,UAAUmC,MACzDpT,EAAO,+DAA+DgP,OAAOqE,GAC7EC,EAAgB,OAAOtE,OAAOhP,EAAM,OACpCuT,EAAaH,EAAWI,QAAQC,KAAI,SAAUC,GAChD,MAAO,iBAAiB1E,OAAOoE,EAAWO,YAAc,IAAI3E,OAAO0E,EAAQ,UAE7E,MAAO,CAAC/J,GAASqF,OAAOuE,GAAYvE,OAAO,CAACsE,IAAgBrD,KAAK,MAGnE,MAAO,CAACtG,GAASsG,KAAK,Q,6BC1BxB5O,EAAOD,QAAU,SAAUwS,GACzB,IAAIpF,EAAO,GAuDX,OArDAA,EAAKjI,SAAW,WACd,OAAO6E,KAAKqI,KAAI,SAAU7E,GACxB,IAAIjF,EAAUiK,EAAuBhF,GAErC,OAAIA,EAAK,GACA,UAAUI,OAAOJ,EAAK,GAAI,MAAMI,OAAOrF,EAAS,KAGlDA,KACNsG,KAAK,KAKVzB,EAAKnO,EAAI,SAAUS,EAAS+S,EAAYC,GACf,iBAAZhT,IAETA,EAAU,CAAC,CAAC,KAAMA,EAAS,MAG7B,IAAIiT,EAAyB,GAE7B,GAAID,EACF,IAAK,IAAIzT,EAAI,EAAGA,EAAI+K,KAAK7K,OAAQF,IAAK,CAEpC,IAAIwO,EAAKzD,KAAK/K,GAAG,GAEP,MAANwO,IACFkF,EAAuBlF,IAAM,GAKnC,IAAK,IAAIgD,EAAK,EAAGA,EAAK/Q,EAAQP,OAAQsR,IAAM,CAC1C,IAAIjD,EAAO,GAAGI,OAAOlO,EAAQ+Q,IAEzBiC,GAAUC,EAAuBnF,EAAK,MAKtCiF,IACGjF,EAAK,GAGRA,EAAK,GAAK,GAAGI,OAAO6E,EAAY,SAAS7E,OAAOJ,EAAK,IAFrDA,EAAK,GAAKiF,GAMdrF,EAAK3N,KAAK+N,MAIPJ,I,8tCCaMwF,MApEf,MAAyC9L,cAAAiD,EAAA,oBACO,IAAI8I,KAOlD,kBAAkBpF,GAEhB,GAAIzD,KAAK8I,aAAaC,IAAItF,GAAK,CACJzD,KAAK8I,aAAa/P,IAAI0K,GAC9BuF,UACjBhJ,KAAK8I,aAAaG,OAAOxF,GAG3B,MAAMyF,QAAiBlJ,KAAKmJ,YAAY1F,GAClC2F,EAAM9O,EAAQ,IAA0B+O,QACxCC,EAAehP,EAAQ,IAAmC+O,QAQhE,OANAH,EAASK,OACPC,IAAA3S,cAACuS,EAAG,KACFI,IAAA3S,cAACyS,EAAY,QAIV,KAEDtJ,KAAK8I,aAAaC,IAAItF,IAAOzD,KAAK8I,aAAa/P,IAAI0K,KAAQyF,IAC7DA,EAASF,UACThJ,KAAK8I,aAAaG,OAAOxF,KAU/B,kBAA0BA,GACxB,GAAIzD,KAAK8I,aAAaC,IAAItF,GACxB,OAAOzD,KAAK8I,aAAa/P,IAAI0K,GAG/B,MAAMgG,EAAK7S,SAAS8S,eAAejG,GACnC,IAAKgG,EACH,MAAM,IAAInS,MAAM,mBAAmBmM,eAGrC,MAAMyF,EAAqB,CACzBK,OAASI,IACPC,IAASL,OAAOI,EAAiBF,IAEnCT,QAASA,KAGPY,IAASC,uBAAuBJ,GAEhCA,EAAGK,UAAY,KAKnB,OADA9J,KAAK8I,aAAaiB,IAAItG,EAAIyF,GACnBA,I,6gBC/DJ,MAAMc,EAKHC,+BACN,MAAMC,EAASC,EAAIC,gBACnB,OAAIF,GAAUvO,MAAMF,QAAQyO,EAAOG,SAAWH,EAAOG,OAAOlV,OAAS,EAE5D+U,EAAOG,OACXpL,OAAQ9H,IAAC,IAAAmT,EAAAC,EAAA,OAA8C,KAA/B,QAAVD,EAAAnT,EAAE+R,gBAAQ,IAAAoB,GAAqB,QAArBC,EAAVD,EAAYE,2BAAmB,IAAAD,OAArB,EAAVA,EAAiCE,OAC/CpC,IAAKqC,IACJ,MAAMC,EAAYD,EAAME,WACxB,OACGD,GACAvV,OAAOyV,OAAOtQ,KAAkBsH,SAAS8I,GAKrC,CACL9S,KAAM8S,EACNG,MAAOJ,EAAMK,YAAc,IALpB,OAQV9L,OAAQ0L,GAAoD,OAAdA,GAG5C,GAGT7N,cAAciD,EAAA,eA9BI,IAAIF,IAAwB,KAAGE,EAAA,qBACzB,IAAIF,IAAoC,OAAKE,EAAA,+BAAAA,EAAA,2BAElB,MA4BjDC,KAAKgL,gBAAkBC,IAAoBC,cAC3ClL,KAAKmL,mBACLnL,KAAKoL,6BAMCD,mBACN,MAAME,EAAiBrL,KAAKsL,eACtBC,EAAYpB,EAAIqB,eAEjBH,EAAelW,QAAWoW,EAQ7BvL,KAAKyL,QAAQtS,MAAQkS,EAPrBrL,KAAKyL,QAAQtS,MAAQ,CACnB,CACEtB,KAAM,aACNiT,MAAO,gBAOb9K,KAAK0L,oBAMCN,6BACNpL,KAAK2L,oBAAsB3L,KAAKgL,gBAAgBY,SAASxL,UAAU,KACjEJ,KAAK6L,gCAODP,eAEN,OADwBtL,KAAKiK,+BACNhL,OAAQyL,IACrB1K,KAAKgL,gBAAgBc,cAAcpB,EAAM7S,OAI7C6T,qBACD1L,KAAK+L,cAAgB/L,KAAKqK,OAAO,KACpCrK,KAAK+L,aAAe/L,KAAKqK,OAAO,GAAGxS,MAKnCmI,KAAKqK,OAAOlV,OAAS,GACrB6K,KAAKgM,cAAc7S,QAClB6G,KAAKqK,OAAOlJ,KAAMhK,GAAMA,EAAEU,OAASmI,KAAKgM,cAAc7S,SAEvD6G,KAAKgM,cAAc7S,MAAQ6G,KAAKqK,OAAO,GAAGxS,MAOtCgU,8BACN,MAAMR,EAAiBrL,KAAKsL,eAC5BtL,KAAKyL,QAAQtS,MAAQkS,EAErBrL,KAAK0L,oBAMAO,UACDjM,KAAK2L,sBACP3L,KAAK2L,sBACL3L,KAAK2L,oBAAsB,MAK/B,aACE,OAAO3L,KAAKyL,QAAQtS,MAItB,uBACE,OAAO6G,KAAKyL,QAId,mBACE,OAAOzL,KAAKgM,cAAc7S,MAI5B,iBAAiBA,GACf6G,KAAKgM,cAAc7S,MAAQA,EAI7B,6BACE,OAAO6G,KAAKgM,cAGdE,eAAevB,GAEXA,IAAc3K,KAAK+L,mBAC+B5T,IAAlD6H,KAAKqK,OAAOlJ,KAAMhK,GAAMA,EAAEU,OAAS8S,KAIrC3K,KAAK+L,aAAepB,EACpB3K,KAAK0L,qBAIPS,SAASC,GACP,MAAMvI,EAAQ7D,KAAKqK,OAAOgC,UAAWlV,GAAMA,EAAEU,OAASuU,GACtD,OAAkB,IAAXvI,EAAeA,EAAQ,KAIhCyI,aAAaC,GAA0C,IAAAC,EACrD,OAA2B,QAApBA,EAAAxM,KAAKqK,OAAOkC,UAAQ,IAAAC,OAAA,EAApBA,EAAsB3U,OAAQ,KAIvC,sBACE,IAAKmI,KAAK+L,aAAc,OAAO,KAC/B,MAAMU,EAAezM,KAAKmM,SAASnM,KAAK+L,cACxC,OAAqB,OAAjBU,GAA0C,IAAjBA,EAA2B,KACjDzM,KAAKsM,aAAaG,EAAe,GAI1C,uBACE,IAAKzM,KAAK+L,aAAc,OAAO,KAC/B,MAAMU,EAAezM,KAAKmM,SAASnM,KAAK+L,cACxC,OAAqB,OAAjBU,GAAyBA,IAAiBzM,KAAKqK,OAAOlV,OAAS,EAC1D,KACF6K,KAAKsM,aAAaG,EAAe,GAM1CC,oBACE,MAAMxC,EAASC,EAAIC,gBACnB,OAAKF,GAAWvO,MAAMF,QAAQyO,EAAOG,QAI9BH,EAAOG,OACXpL,OAAQyL,KAEHA,EAAME,aACPxV,OAAOyV,OAAOtQ,KAAkBsH,SAAS6I,EAAME,aAGnDvC,IACEqC,IACQ,CACL7S,KAAM6S,EAAME,WACZE,MAAOJ,EAAMK,YAAc,MAd1B,I,wdC1Lb,MAAM4B,EAAsD,CAC1D,2BACE,4DCNWC,MDcA,MAIb9P,YAAY+P,GAAgB9M,EAAA,wBAHF,IAAIF,IAA8B,OAAKE,EAAA,sBAI/D,MAAM+M,EACJH,EAA4BE,IAAW,gCACzC7M,KAAK+M,OAAS,IAAIC,IAAe,CAC/BC,sBAAuB,IAAIC,IAAmB,CAC5CC,QAAS,EACTL,UACAM,MAAO,IACPC,QAAS,MAKf,gCACER,EACAS,GAEA,IACE,aAAatN,KAAK+M,OAAOQ,mBAA+B,CACtDC,SAAU,gBAAgBX,cAAmBS,WAE/C,MAAOvT,GAOP,OANAuI,YAAiBvI,EAAK,CAAE8S,SAAQS,kBAChCtT,QAAQ3C,MACN,+CAA+CwV,yBAA8BS,KAC7EvT,aAAezC,MAAQyC,EAAI/B,QAAUwH,OAAOzF,IAGvCxD,QAAQC,QAAQ,OAI3BiX,iBAAgB,OAAEZ,EAAM,cAAES,EAAa,OAAEI,IACvC,OAAIA,EACK1N,KAAK2N,oBAAoBd,EAAQa,GAC/BJ,EACFtN,KAAK4N,0BAA0Bf,EAAQS,GAGzC/W,QAAQC,QAAQ,MAGzB,0BACEqW,EACAa,GAEA,IACE,aAAa1N,KAAK+M,OAAOQ,mBAA+B,CACtDC,SAAU,gBAAgBX,WAAgBa,WAE5C,MAAO3T,GAOP,OANAuI,YAAiBvI,EAAK,CAAE8S,SAAQa,WAChC1T,QAAQ3C,MACN,+CAA+CwV,kBAAuBa,KACtE3T,aAAezC,MAAQyC,EAAI/B,QAAUwH,OAAOzF,IAGvCxD,QAAQC,QAAQ,OAI3B,wBAAwBqX,EAA+BlD,GAAmB,IAAAmD,EACxE,OAAOD,SAAkB,QAARC,EAAVD,EAAYxD,cAAM,IAAAyD,OAAR,EAAVA,EAAoBC,KACxBrD,IAAK,IAAAsD,EAAAC,EAAA,OACJvD,EAAME,aAAeD,IACwB,KAA/B,QAAdqD,EAAAtD,EAAMxB,gBAAQ,IAAA8E,GAAqB,QAArBC,EAAdD,EAAgBxD,2BAAmB,IAAAyD,OAArB,EAAdA,EAAqCxD,OAI3CyD,iBAAiBC,GAEf,MAAMC,EAAW,KAASC,KAAKC,MAAsB,KAAhBD,KAAKE,UAC1C,OAAOvO,KAAK+M,OAAOyB,uBAAqC,CACtDhB,SAAU,sBACVY,WACAD,SACAM,QAAU1U,IACRuI,YAAiBvI,EAAK,CACpB2U,QAAS,mCAEX1U,QAAQ3C,MACN,sCACA0C,aAAezC,MAAQyC,EAAI/B,QAAUwH,OAAOzF,S,6bElF/C,MAAM4U,UAA8BC,IAkBzC9R,YACE+R,EAAkB,GAClBnB,EAAiB,GACjBoB,EACAC,GAEAC,QAAQjP,EAAA,gBAvBS,IAAIF,IAAW,KAAGE,EAAA,eACnB,IAAIF,IAAW,KAAGE,EAAA,cACnB,IAAIF,IAAW,KAAGE,EAAA,eACjB,IAAIF,KAAoB,IAAME,EAAA,uBACtB,IAAIF,KAAW,IAAME,EAAA,sBACP,MAAIA,EAAA,gCAAAA,EAAA,wBAAAA,EAAA,yBAGG,MAAIA,EAAA,wBACN,MAAIA,EAAA,qBACV,MAAIA,EAAA,sBACF,MAAIA,EAAA,qBACN,MAAIA,EAAA,6BACW,MAAIA,EAAA,qCAAAA,EAAA,0BAWxDC,KAAKiP,QAAQ9V,MAAQuU,EACrB1N,KAAKkP,SAAS/V,MAAQ0V,EACtB7O,KAAK8O,SAAWA,EAChB9O,KAAK+O,iBAAmBA,EAExB/O,KAAKmP,sBAAwB,IAAInF,EACjChK,KAAKoP,WAAa,IAAIC,IA+BxB,uBACE,MAAMxB,EAAa1D,EAAIC,gBACjBkF,EAAgC,GA+EtC,GA7EI1C,EAAc2C,iBAAiB1B,EAAY,iBAC7CyB,EAAa7Z,KACX,+BACG+Z,KAAK,EAAGnG,QAASoG,MAChBzP,KAAK0P,kBAAoB,IAAID,EAC3BzP,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,oCAAqC7V,MAKtD6S,EAAc2C,iBAAiB1B,EAAY,YAC7CyB,EAAa7Z,KACX,+BACG+Z,KAAK,EAAGnG,QAASwG,MAChB7P,KAAK8P,cAAgB,IAAID,EACvB7P,KAAKkP,SAAS/V,MACd6G,KAAK8O,SACL9O,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,gCAAiC7V,MAKlD6S,EAAc2C,iBAAiB1B,EAAY,cAC7CyB,EAAa7Z,KACX,8BACG+Z,KAAK,EAAGnG,QAAS0G,MAChB/P,KAAKgQ,eAAiB,IAAID,EACxB/P,KAAKkP,SAAS/V,MACd6G,KAAK8O,SACL9O,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,iCAAkC7V,MAKnD6S,EAAc2C,iBAAiB1B,EAAY,gBAC7CyB,EAAa7Z,KACX,+BACG+Z,KAAK,EAAGnG,QAAS4G,MAChBjQ,KAAKkQ,iBAAmB,IAAID,EAC1BjQ,KAAKkP,SAAS/V,MACd6G,KAAK8O,SACL9O,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,mCAAoC7V,MAKrD6S,EAAc2C,iBAAiB1B,EAAY,aAC7CyB,EAAa7Z,KACX,+BACG+Z,KAAK,EAAGnG,QAAS8G,MAChBnQ,KAAKoQ,cAAgB,IAAID,EACvBnQ,KAAKkP,SAAS/V,MACd6G,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,gCAAiC7V,MAKlD6S,EAAc2C,iBAAiB1B,EAAY,qBAAsB,KAAAC,EACnE,MAAMuC,EAAexC,SAAkB,QAARC,EAAVD,EAAYxD,cAAM,IAAAyD,OAAR,EAAVA,EAAoB3M,KACtChK,GAAuB,sBAAjBA,EAAEyT,YAEPyF,GACFf,EAAa7Z,KACX,+BACG+Z,KAAK,EAAGc,4BACPtQ,KAAKuQ,sBAAwB,IAAID,EAC/BD,EACArQ,KAAK+O,oBAGRY,MAAO5V,IACNC,QAAQ4V,KAAK,wCAAyC7V,YAM1DxD,QAAQgC,IAAI+W,GAGpBpD,eAAevB,GACb,MAAM9G,EAAQ7D,KAAKmP,sBAAsBhD,SAASxB,GACpC,OAAV9G,EAKC7D,KAAKoP,WAAWoB,QAOrBxQ,KAAKmP,sBAAsBjD,eAAevB,GAC1C3K,KAAKoP,WAAWqB,SAAW,oBAAoB5M,GAP7C7J,QAAQ4V,KACN,6FANF5V,QAAQ4V,KAAK,eAAejF,iBAehC+F,qBAAqBC,GAAyB,IAAAC,EAAAC,EAC5C,MAAMC,EAAgB,IAAIC,KAAKJ,GAC/B,GAAIK,MAAMF,EAAcG,WAKtB,OAJAjX,QAAQ4V,KAAK,8BAA+Be,QAC5C3W,QAAQ4V,KACN,yIAKJ5P,KAAKkR,eAAiBP,EACA,QAAtBC,EAAA5Q,KAAK0P,yBAAiB,IAAAkB,GAAtBA,EAAwBO,uBAAuBnR,KAAKkR,gBACjC,QAAnBL,EAAA7Q,KAAKgQ,sBAAc,IAAAa,GAAnBA,EAAqBM,uBAAuBnR,KAAKkR,gBAGnDE,oBACE,OAAOpR,KAAKkR,eAGdG,eAAeC,GACb,MAAMC,EAAanc,OAAOoP,KAAK8M,GAGzBE,EAA4C,CAChDC,UAAWzR,KAAKgQ,eAChB0B,QAAS1R,KAAK8P,cACd6B,aAAc3R,KAAK0P,kBACnBkC,YAAa5R,KAAKkQ,iBAClB2B,SAAU7R,KAAKoQ,cACf0B,kBAAmB9R,KAAKuQ,sBACxBwB,YAAa,KACbC,aAAc,KACdC,SAAU,KACVC,WAAY,MAGd,IAAK,MAAMvH,KAAa4G,EAAY,CAClC,MAAM3c,EAAO0c,EAAU3G,GACvB,IAAK/V,EAAM,SAEX,MAAMud,EAAYX,EAAW7G,GAExBwH,EAOCA,EAAUd,gBACZc,EAAUd,eAAezc,GAN3BoF,QAAQoY,IACN,2BAA2BzH,gDAWnC,eAAe,IAAA0H,EAAAC,EAAAC,EAAAC,EAAAC,EACK,QAAlBJ,EAAArS,KAAK8P,qBAAa,IAAAuC,GAAlBA,EAAoBpG,UACD,QAAnBqG,EAAAtS,KAAKgQ,sBAAc,IAAAsC,GAAnBA,EAAqBrG,UACA,QAArBsG,EAAAvS,KAAKkQ,wBAAgB,IAAAqC,GAArBA,EAAuBtG,UACL,QAAlBuG,EAAAxS,KAAKoQ,qBAAa,IAAAoC,GAAlBA,EAAoBvG,UACM,QAA1BwG,EAAAzS,KAAKuQ,6BAAqB,IAAAkC,GAA1BA,EAA4BxG,UAC5BjM,KAAKoP,WAAWsD,UAChB,UACQ1S,KAAK2S,eACX,MAAOtb,GACP2C,QAAQ3C,MAAM,uCAAwCA,IAI1Dub,mBAAmBhe,GACjB,OAAKoL,KAAK0P,kBAGH1P,KAAK0P,kBAAkBmD,YAAYje,EAAMoL,KAAKkR,gBAF5C3a,QAAQC,UAKnBsc,mBAAmBlH,GACjB,OAAO,IAAIrV,QAASC,IAClByU,IAAoBC,cAAc6H,eAAenH,GACjDpV,MAIJwc,uBAQE,OAPAhT,KAAKoP,WAAW6D,qBACdjT,KAAKoP,WAAWqB,UAAY,sBAE9BrY,WAAW,KACT4H,KAAKoP,WAAW8D,UACf,GAEI3c,QAAQC,UAGjB2c,oBAAoBtP,GACb7D,KAAK0P,oBACV1P,KAAK0P,kBAAkB0D,oBAAoBja,MAAQ0K,EACnD7D,KAAK0P,kBAAkB2D,4BAA4Bla,MAAQ,EAC3D6G,KAAK0P,kBAAkB4D,0BAA0Bna,MAAQ0K,EACzD7D,KAAK0P,kBAAkB6D,uBAAuB1P,IAGhD2P,mBAAmB3P,GACZ7D,KAAK0P,oBACV1P,KAAK0P,kBAAkB0D,oBAAoBja,MAAQ0K,EACnD7D,KAAK0P,kBAAkB4D,0BAA0Bna,MAAQ,KACzD6G,KAAK0P,kBAAkB2D,4BAA4Bla,MAAQ,MAG7Dsa,kBAAkB5P,GAAqB,IAAA6P,EACf,QAAtBA,EAAA1T,KAAK0P,yBAAiB,IAAAgE,GAAtBA,EAAwBC,yBAAyB9P,GAGnD+P,gCAAgC/P,EAAegQ,GACxC7T,KAAK0P,oBACV1P,KAAK0P,kBAAkB2D,4BAA4Bla,MAAQ0a,EAC3D7T,KAAK0P,kBAAkB6D,uBAAuB1P,IAGhD,qBACE7D,KAAK8T,gBAAiB,EAGxB,qBACE9T,KAAK8T,gBAAiB,EACtB9T,KAAKoP,WAAWqB,SAAW,KAG7BsD,qCACM/T,KAAK0P,oBACP1P,KAAK0P,kBAAkBsE,WAAW7a,MAAQ,oBAI9C8a,oBACE,OAAOjU,KAAK6O,QAAQ1V,MAGtB+a,+BAA+B,IAAAC,EAAAC,EAC7B,OAA8D,QAA9DD,EAA6B,QAA7BC,EAAOpU,KAAK0P,yBAAiB,IAAA0E,OAAA,EAAtBA,EAAwBd,0BAA0Bna,aAAK,IAAAgb,IAAI,KAGpEE,yBAAyB,IAAAC,EAAAC,EACvB,OAAwD,QAAxDD,EAA6B,QAA7BC,EAAOvU,KAAK0P,yBAAiB,IAAA6E,OAAA,EAAtBA,EAAwBnB,oBAAoBja,aAAK,IAAAmb,IAAI,KAG9DE,iCAAiC,IAAAC,EAAAC,EAC/B,OAAgE,QAAhED,EAA6B,QAA7BC,EAAO1U,KAAK0P,yBAAiB,IAAAgF,OAAA,EAAtBA,EAAwBrB,4BAA4Bla,aAAK,IAAAsb,IAAI,KAGtEE,mBAAmB,IAAAC,EAAAC,EACjB,OAA8C,QAA9CD,EAA6B,QAA7BC,EAAO7U,KAAK0P,yBAAiB,IAAAmF,OAAA,EAAtBA,EAAwBC,SAAS3f,cAAM,IAAAyf,IAAI,EAGpD,cACE,OAAO5U,KAAKkP,SAGd,YACE,OAAOlP,KAAK+U,OAGd,aACE,OAAO/U,KAAKgV,QAGd,qBACE,OAAOhV,KAAKiV,gBAAgB9b,MAG9B,mBAAmBA,GACjB6G,KAAKiV,gBAAgB9b,MAAQA,EAO/B+b,eACElV,KAAKoP,WAAW+F,QAChBnV,KAAK8O,SAASkE,wB,kdC1XH,MAAMoC,EAGnBtY,cAAciD,EAAA,sBACZC,KAAK+M,OAAS,IAAIG,IAAmB,CACnCJ,QAPoB,8BAQpBK,QAAS,EACTC,MAAO,IACPC,QAAS,IAILgI,YAAY,IAAAC,EAAAC,EAAAC,EAClB,MAAMC,EAAetL,EAAIuL,kBAGzB,OAF8D,QAAxCJ,EAAGG,SAAiB,QAALF,EAAZE,EAAchL,WAAG,IAAA8K,GAAW,QAAXC,EAAjBD,EAAmBI,iBAAS,IAAAH,OAAhB,EAAZA,EAA8BrT,eAAO,IAAAmT,KAKhE,aAAaM,GACX,GAAK5V,KAAKqV,YAKV,IAEE,MAAMQ,EAAa,IAAIC,gBACvB,IAAK,MAAOrc,EAAKN,KAAU/D,OAAO2gB,QAAQH,GACpCzc,SACF0c,EAAWG,OAAOvc,EAAKN,EAAMgC,kBAG3B6E,KAAK+M,OAAOkJ,KAAK,UAAWJ,OAAY1d,EAAW,CACvD,eAAgB,sCAElB,MAAO4B,GACPuI,YAAiBvI,EAAK,CAAE6b,YACxB5b,QAAQ3C,MAAM,kCAAmC0C,QAjBjDC,QAAQ4V,KAAK,2DAqBjB,sBACE,IAAK5P,KAAKqV,YACR,MAAO,CACLa,KAAMnF,KAAKoF,MACXC,KAAM,GAGV,MAAMC,EAAgBtF,KAAKoF,MAE3B,IACE,aAAanW,KAAK+M,OAAOhU,IAAoC,QAAS,CACpEud,EAAG,GAAGvF,KAAKoF,SAASnW,KAAKuW,aACzBC,YAAaH,IAEf,MAAOtc,GAGP,OAFAuI,YAAiBvI,GACjBC,QAAQ3C,MAAM,6BAA8B0C,GACrC,CACLmc,KAAMnF,KAAKoF,MACXC,KAAM,IAKJG,WACN,OACElI,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IACxCpI,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,K,ycCzD/B,MAAMC,EAOnB5Z,cAAciD,EAAA,mBANA,GAACA,EAAA,wBACI,GAACA,EAAA,+BAAAA,EAAA,4BAAAA,EAAA,kBAGY,MAG9BC,KAAK2W,gBAAkB,IAAIvB,EAC3BpV,KAAK4W,aAAe,IAAIC,IAG1B,iBAAiBtf,GAKf,OAJAyI,KAAK8W,YAAc/F,KAAKoF,MACxBnW,KAAK+W,uBAAyB/W,KAAKgX,kBACnChX,KAAK6N,WAAa1D,EAAIC,gBAEf,IACFpK,KAAKiX,qBACLjX,KAAKkX,uBACLlX,KAAKmX,yBACLnX,KAAKoX,yBACLpX,KAAKqX,yBACLrX,KAAKsX,wBACLtX,KAAKuX,qBACLvX,KAAKwX,qBACLxX,KAAKyX,iBAAiBlgB,IAIrBkgB,iBAAiBC,GACvB,MAAMC,EAAWD,EAAUC,SAE3B,MAAO,CAKLC,IAAK,UAKLC,IACEziB,OAAOyV,OAAO6M,EAAUI,UAAY,IAAI3iB,OAAS,EAC7CyQ,KAAKC,UAAU6R,EAAUI,UACzB,KAINC,IAAK/X,KAAK8W,YAAc9W,KAAK+W,iBAI7BiB,IAAK9d,OAAOoH,SAASC,KAKrB0W,GAAIN,EAASO,QAKbC,GAAIR,EAASS,OAKbC,GAAIV,EAASW,MAKbC,GAAIZ,EAASa,MAKbC,GAAId,EAASe,OAIbC,GAAIhB,EAASiB,MAIbC,GAAIlB,EAASmB,QAIb1f,EAAG4G,KAAK8W,aAIJG,kBACN,MAAM/M,EAASC,EAAIC,gBACnB,MAAO,CAKL2O,IAAK,QAKLC,KAAM9O,aAAM,EAANA,EAAQ+O,KAAKC,IAKnBC,IAAKjP,aAAM,EAANA,EAAQ+O,KAAKhhB,KAKlBmhB,IAAKlP,aAAM,EAANA,EAAQ+O,KAAKI,KAKlBC,IAAKpP,aAAM,EAANA,EAAQ+O,KAAKphB,MAItB0hB,uBACE,MAAMC,EAAoBC,aAAaC,QAAQ,0BAC/C,GAAIF,EACF,OAAOA,EAET,MAAMG,EAAuB3Z,KAAKuW,WAElC,OADAkD,aAAaG,QAAQ,yBAA0BD,GACxCA,EAGDE,mBACN,MAAMC,EAAgB9Z,KAAK4W,aAAamD,SAAS,sBACjD,GAAID,EACF,OAAOE,OAAOF,GAEhB,MAAM3D,GAAM,IAAIpF,MAAOE,UAEvB,OADAjR,KAAK4W,aAAaqD,SAAS,qBAAsB9D,EAAIhb,YAC9Cgb,EAGD+D,WACN,MAAMC,EAAQC,eAAeV,QAAQ,oBACrC,GAAIS,EACF,OAAOA,EAGT,MAAME,EAAWra,KAAKuW,WAEtB,OADA6D,eAAeR,QAAQ,mBAAoBS,GACpCA,EAGDnD,oBACN,MAAO,CAKLoD,KAAMta,KAAK6Z,mBAKXU,MAAM,EAMNC,KAAMtgB,OAAOwD,UAAU+c,SAKvBC,MAAO1a,KAAKuZ,uBAKZoB,KAAMzgB,OAAO0gB,OAAOC,OAKpBC,KAAM5gB,OAAO0gB,OAAOG,MAIpBC,MAAOhb,KAAKka,WAIZe,MAAOjb,KAAK8W,YAIZoE,MAAOlb,KAAK+W,iBAMZoE,KAAMjhB,OAAOwD,UAAU0d,WAInB7E,WACN,OACElI,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IACxCpI,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IAI5C,wBACE,MAAMJ,EAAgBtF,KAAKoF,OAEzBC,KAAMiF,EACNnF,KAAMoF,SACEtb,KAAK2W,gBAAgB4E,gBAEzBC,EAAczK,KAAKoF,MASzB,OAAQkF,GAPUG,EAAcnF,IACXmF,EAAcF,IAMgB,EAG7CnE,sBAAsB,IAAAsE,EAC5B,MAAO,CAKLC,KAAqB,QAAjBD,EAAEzb,KAAK6N,kBAAU,IAAA4N,OAAA,EAAfA,EAAiBE,SAASzC,KAG5B9B,sBACN,MAAO,CAKLwE,KAAM,UAGFvE,sBACN,MAAO,CAKLwE,IAAK,UAMLC,IAAK,KAKLC,IAAK,WAIDC,eACN,MAAMC,EAAY7B,eAAeV,QAAQ,kBACzC,GAAIuC,EACF,OAAOA,EAGT,MAAMC,EAAelc,KAAKuW,WAE1B,OADA6D,eAAeR,QAAQ,iBAAkBsC,GAClCA,EAGD5E,qBACN,MAAO,CAIL6E,MAAOnc,KAAKgc,eAKZI,KAAMpc,KAAK8W,aAGPS,kBAAkB,IAAA8E,EAAAC,EAAAC,EAAAC,EAAAC,EACxB,MAAO,CAKLC,KAAqB,QAAjBL,EAAErc,KAAK6N,kBAAU,IAAAwO,OAAA,EAAfA,EAAiBM,KAAKC,UAK5BC,MAAsB,QAAjBP,EAAEtc,KAAK6N,kBAAU,IAAAyO,OAAA,EAAfA,EAAiBK,KAAKzD,IAK7B4D,QAA0B,QAAlBP,EAAGvc,KAAK6N,kBAAU,IAAA0O,OAAA,EAAfA,EAAiBI,KAAKI,QAAQtZ,IAAjC,YAKRuZ,OAAyB,QAAlBR,EAAGxc,KAAK6N,kBAAU,IAAA2O,OAAA,EAAfA,EAAiBG,KAAKI,QAAQ9a,SAAjC,YAKPgb,KAAqB,QAAjBR,EAAEzc,KAAK6N,kBAAU,IAAA4O,OAAA,EAAfA,EAAiBE,KAAKtD,MAGxB7B,kBACN,MAAO,CAKL0F,IAAK,KAKLC,IAAK,KAKLC,IAAK,KAKLC,KAAM,KAINC,MAAM,EAKNC,IAAK,KAKLC,MAAM,EAKNC,IAAK,KAKLC,IAAK,KAKLC,KAAM,O,wcC8EGC,MAhZf,MAUE9gB,cAAciD,EAAA,+BAAAA,EAAA,sCAAAA,EAAA,oBAPiB,IAAEA,EAAA,qBACD,IAAEA,EAAA,0BACG,IAAEA,EAAA,kCACqB,MAAIA,EAAA,mCAClB,GAAKA,EAAA,4BACZ,GAGrCC,KAAK2W,gBAAkB,IAAIvB,EAC3BpV,KAAK6d,uBAAyB,IAAInH,EAGpC,kBAA0Bnf,GAKxB4S,EAAI2T,2BAA2BhP,SAASiP,YAAYxmB,GAEpD,MAAMymB,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRW,MAAO/gB,EAAM2mB,SACbxF,OAAQnhB,EAAM4mB,UACd3F,MAAOjhB,EAAM6mB,SACblG,QAAS3gB,EAAM8mB,WACfjG,OAAQ7gB,EAAM+mB,UACd1F,MAAOrhB,EAAMgnB,SACbzF,QAASvhB,EAAMinB,YAEjB1G,SAAUvgB,EAAMugB,iBAGZ9X,KAAK2W,gBAAgB8H,OAAOT,GAGpC,sBAA8BzmB,GAK5B4S,EAAI2T,2BAA2BhP,SAAS4P,gBAAgBnnB,GAExD,MAAMymB,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS3gB,EAAM8mB,WACfjG,OAAQ7gB,EAAM+mB,UACdhG,MAAO/gB,EAAM2mB,SACb1F,MAAOjhB,EAAM6mB,SACb1F,OAAQnhB,EAAM4mB,UACdvF,MAAOrhB,EAAMgnB,SACbzF,QAASvhB,EAAMinB,YAEjB1G,SAAUvgB,EAAMugB,iBAGZ9X,KAAK2W,gBAAgB8H,OAAOT,GAGpC,gBAAgBrT,EAA6BmN,GAC3C,MAAM5N,EAASC,EAAIC,gBACbkH,EAAYtR,KAAK2e,2BAA2BhU,EAAWT,SACvDlK,KAAK0e,gBAAgB,CACzBzmB,KAAM,iBACNomB,WAAY,QACZC,UAAW,OACXJ,SAAU5M,EAAU1G,WACpBwT,SAAU9M,EAAUsN,SACpBT,UAAW7M,EAAUvG,WACrB+M,SAAU,IACJA,GAAY,MACb9X,KAAK6e,8BAA8B3U,MAK5C,kBAAiB,KAAErS,EAAI,SAAEigB,EAAQ,KAAE7f,IACjC,MAAMiS,EAASC,EAAIC,gBACbkH,EAAYtR,KAAK2e,2BAA2B9mB,EAAMqS,SAClDlK,KAAK+d,YAAY,CACrB9lB,OACAomB,WAAY,QACZC,UAAW,SACXJ,SAAU5M,EAAU1G,WACpBwT,SAAU9M,EAAUsN,SACpBT,UAAW7M,EAAUvG,WACrB+M,SAAU,IACL9X,KAAK6e,8BAA8B3U,MACnC4N,KAKT+G,8BAA8BhR,GAC5B,IAAKA,EAEH,OADA7T,QAAQ4V,KAAK,sDACN,CACLkP,OAAQ,GACRC,OAAQ,GACRxnB,MAAO,GACPynB,MAAO,IAIX,MAAMlH,EAAWjK,EAAWoL,KAAKnB,SAC3BiH,EAC2B,YAA/BjH,aAAQ,EAARA,EAAUmH,mBACNnH,EAASoH,kBACT,GACA3nB,EAC2B,WAA/BugB,aAAQ,EAARA,EAAUmH,mBACNnH,EAASoH,kBACT,UACAF,GAAQlH,aAAQ,EAARA,EAAUqH,mBAAoB,GAG5C,MAAO,CACLL,QAHahH,aAAQ,EAARA,EAAUsH,mBAAoB,GAI3CL,SACAxnB,QACAynB,SAIJL,2BACE9mB,EACAgW,GAEA,IAAKA,EAEH,OADA7T,QAAQ4V,KAAK,wDACN,CACLgP,SAAU,GACV7T,WAAY,GACZH,WAAY,IAIhB,MAAMF,EAAQmD,EAAWxD,OAAOlJ,KAAMhK,GAAMA,EAAEyT,aAAe/S,GAC7D,OAAK6S,EASE,CACLkU,SAAUlU,EAAMwO,IAChBnO,WAAYL,EAAMK,YAAc,GAChCH,WAAYF,EAAME,YAAc,KAXhC5Q,QAAQ4V,KAAK,iBAAiB/X,+BACvB,CACL+mB,SAAU,GACV7T,WAAY,GACZH,WAAY,KAWlB,wBACE,IACE5K,KAAKqf,aAAehR,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IAC5D,MAAMuH,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,QACRE,MAAO,OAETR,SAAU,CACR7V,2BAIEjC,KAAK2W,gBAAgB8H,OAAOT,GAClC,MAAOjkB,GACPC,QAAQ3C,MAAM,gCAAgC0C,GAC9CuI,YAAiBvI,EAAK,CACpB2U,QAAS,sCAKf,yBACE,IACE1O,KAAKsf,cAAgBjR,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IAC7DzW,KAAKuf,qBAAsB,EAE3B,MAAM1R,EAAa1D,EAAIC,gBACjBoV,EAAexf,KAAK6e,8BAA8BhR,GAElDmQ,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,QACRE,MAAO,QAETR,SAAU,IACL0H,EACHvd,kBACAwd,QAASzf,KAAKqf,aACdK,aAAc1f,KAAKsf,uBAIjBtf,KAAK2W,gBAAgB8H,OAAOT,GAGlChe,KAAK2f,qBACL,MAAO5lB,GACPC,QAAQ3C,MAAM,iCAAiC0C,GAC/CuI,YAAiBvI,EAAK,CACpB2U,QAAS,uCAKf,uBACE,IACE1O,KAAKuf,qBAAsB,EAE3B,MAAM1R,EAAa1D,EAAIC,gBACjBoV,EAAexf,KAAK6e,8BAA8BhR,GAElDmQ,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,MACRE,MAAO,QAETR,SAAU,IACL0H,EACHvd,kBACAwd,QAASzf,KAAKqf,aACdK,aAAc1f,KAAKsf,iBAIvBtlB,QAAQoY,IAAI,mCAAoC4L,SAC1Che,KAAK2W,gBAAgB8H,OAAOT,GAClC,MAAOjkB,GACPC,QAAQ3C,MAAM,+BAA+B0C,GAC7CuI,YAAiBvI,EAAK,CACpB2U,QAAS,oCAEX,QAEI1O,KAAK4f,6BACPloB,aAAasI,KAAK4f,4BAClB5f,KAAK4f,2BAA6B,MAEpC5f,KAAKsf,cAAgB,IAIzB,8BACE,IACEtf,KAAK6f,mBAAqBxR,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,IAElE,MAAM5I,EAAa1D,EAAIC,gBACjBoV,EAAexf,KAAK6e,8BAA8BhR,GAElDmQ,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,QACRE,MAAO,aAETR,SAAU,IACL0H,EACHvd,kBACAwd,QAASzf,KAAKqf,aACdK,aAAc1f,KAAKsf,cACnBQ,kBAAmB9f,KAAK6f,4BAItB7f,KAAK2W,gBAAgB8H,OAAOT,GAClC,MAAOjkB,GACPC,QAAQ3C,MAAM,sCAAsC0C,GACpDuI,YAAiBvI,EAAK,CACpB2U,QAAS,4CAKf,4BACE,IACE,MAAMb,EAAa1D,EAAIC,gBACjBoV,EAAexf,KAAK6e,8BAA8BhR,GAElDmQ,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,MACRE,MAAO,aAETR,SAAU,IACL0H,EACHvd,kBACAwd,QAASzf,KAAKqf,aACdK,aAAc1f,KAAKsf,cACnBQ,kBAAmB9f,KAAK6f,sBAI5B7lB,QAAQoY,IAAI,wCAAyC4L,SAC/Che,KAAK2W,gBAAgB8H,OAAOT,GAClC,MAAOjkB,GACPC,QAAQ3C,MAAM,oCAAoC0C,GAClDuI,YAAiBvI,EAAK,CACpB2U,QAAS,yCAEX,QACA1O,KAAK6f,mBAAqB,IAI9B,sBACE,IACE,MAAM7B,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,MACRE,MAAO,OAETR,SAAU,CACR7V,2BAIEjC,KAAK2W,gBAAgB8H,OAAOT,GAClC,MAAOjkB,GACPC,QAAQ3C,MAAM,8BAA8B0C,GAC5CuI,YAAiBvI,EAAK,CACpB2U,QAAS,mCAEX,QACA1O,KAAKqf,aAAe,IAIhBM,qBAAqB,IAAApK,EAAAD,EAE3B,IAAKtV,KAAKuf,oBACR,OAGF,MAAM9J,EAAetL,EAAIuL,kBACnBqK,GACJtK,SAAiB,QAALF,EAAZE,EAAchL,WAAG,IAAA8K,GAAW,QAAXD,EAAjBC,EAAmBI,iBAAS,IAAAL,OAAhB,EAAZA,EAA8B0K,kBA5VL,IA6V3BhgB,KAAK4f,2BAA6BxnB,WAAWwI,gBACrCZ,KAAKigB,qBACO,IAAjBF,GAGL,0BAEE,IAAI/f,KAAKkgB,4BAA+BlgB,KAAKuf,oBAA7C,CAIAvf,KAAKkgB,4BAA6B,EAElC,UACQlgB,KAAKmgB,gBACX,MAAOpmB,GACPC,QAAQ3C,MAAM,kCAAkC0C,GAChDuI,YAAiBvI,EAAK,CACpB2U,QAAS,qCACT2Q,aAAcrf,KAAKqf,aACnBC,cAAetf,KAAKsf,gBAEtB,QACAtf,KAAKkgB,4BAA6B,EAG9BlgB,KAAKuf,qBACPvf,KAAK2f,uBAKX,sBACE,MAAM3B,QAA0Bhe,KAAK6d,uBAAuBI,WAAW,CACrEtG,SAAU,CACRO,QAAS,UACTE,OAAQ,SACRE,MAAO,YAETR,SAAU,CACRsI,eAAe,EACfC,UAAWrgB,KAAK6d,uBAAuBtE,uBACvC+G,aAAa,EACbb,QAASzf,KAAKqf,aACdK,aAAc1f,KAAKsf,cACnBQ,kBAAmB9f,KAAK6f,4BAItB7f,KAAK2W,gBAAgB8H,OAAOT,K,qcC3atC,MAAMuC,EAYIzjB,YAAYoM,GAAqBnJ,EAAA,wBAAAA,EAAA,cAThB,IAAEA,EAAA,6BACmC,MAAIA,EAAA,kBAC1B,MAAIA,EAAA,oBACA,MAAIA,EAAA,0BACU,MAAIA,EAAA,yBACT,MAAIA,EAAA,kBAC5B,GAAIA,EAAA,4BAC4B,MAG3DC,KAAKkJ,SAAWA,EAGlB,uBAIE,OAHKlJ,KAAKwgB,oBACRxgB,KAAKwgB,kBAAoB,IAAI5C,GAExB5d,KAAKwgB,kBAOd,qBACE,IAAKD,EAAcE,SAAU,CAC3B,MAAMvX,EAAW,IAAIN,EACrB2X,EAAcE,SAAW,IAAIF,EAAcrX,GAE7C,OAAOqX,EAAcE,SAGvB,iCAAgC,QAC9B5R,EAAO,OACPnB,EAAM,aACNgT,EAAY,SACZ5R,EAAQ,WACR6R,GAAa,IAEb3gB,KAAKuL,UAAYoV,EAGjB,MAAM9T,EAAS7M,KAAK4gB,YACpB,IAAK/T,GAA4B,KAAlBA,EAAOzO,OACpB,MAAM,IAAI9G,MACR,gEAIJ,IAAKuX,IAAYnB,EACf,MAAM,IAAIpW,MACR,6EAIJ,MAAMupB,EAAgB,IAAIjU,EAAcC,GAMxC,GALA7M,KAAK6N,iBAAmBgT,EAAcpT,gBAAgB,CACpDZ,SACAS,cAAeuB,EACfnB,YAEG1N,KAAK6N,WACR,MAAM,IAAIvW,MACR,sDAAsDuV,cAAmBa,kBAAuBmB,MAuBpG,OAnBA7O,KAAK8gB,mBAAqBD,EAAc3S,iBAAkBtZ,IACxDoL,KAAKyV,aAAe7gB,IAIlB8rB,GACFzV,IAAoBC,cAAc6H,eAAe2N,SAG7C1gB,KAAK+O,iBAAiBgS,kBAC5B/gB,KAAKghB,sBAAwB,IAAIrS,EAC/BE,EACAnB,EACAoB,EACA9O,KAAK+O,wBAED/O,KAAKghB,sBAAsBC,uBAC3BjhB,KAAK+O,iBAAiBmS,mBAErBlhB,KAAKghB,sBAGd,+BAA+BG,GACzBnhB,KAAKohB,4BACDphB,KAAKohB,6BAGPphB,KAAK+O,iBAAiBsS,iBAExBrhB,KAAKghB,8BACDhhB,KAAKghB,sBAAsBM,SACjCthB,KAAKghB,sBAAwB,YAGzBhhB,KAAK+O,iBAAiBwS,gBAExBvhB,KAAK8gB,qBACP9gB,KAAK8gB,mBAAmBU,OACxBxhB,KAAK8gB,mBAAqB,MAI9BW,UAAUC,GACR1hB,KAAK2hB,UAAUD,EAAaE,QAGxBF,EAAahB,cACfzV,IAAoBC,cAAc6H,eAChC2O,EAAahB,cAIjB1mB,QAAQ6nB,KAAK,2BAA4BH,GAOpCC,UAAUC,GACf,IAAKA,GAA4B,KAAlBA,EAAOxjB,OACpB,MAAM,IAAI9G,MAAM,4BAElB0I,KAAK4hB,OAASA,EAGThB,YACL,OAAO5gB,KAAK4hB,OAGPpW,eACL,OAAOxL,KAAKuL,UAOPuS,2BACL,IAAK9d,KAAKghB,sBACR,MAAM,IAAI1pB,MAAM,mCAGlB,OAAO0I,KAAKghB,sBAGd,kBAAkBvd,SACVzD,KAAK+O,iBAAiB+S,wBAE5B,MAAMC,QAAuB/hB,KAAKkJ,SAAS8Y,YAAYve,GACvD,IAAIwe,GAAc,EAElB,MAAMC,EAAYthB,UACZqhB,IAGJA,GAAc,EAIdF,UACM/hB,KAAK+O,iBAAiBoT,sBAExBniB,KAAKohB,uBAAyBc,IAChCliB,KAAKohB,qBAAuB,QAKhC,OADAphB,KAAKohB,qBAAuBc,EACrBA,EAGF9X,gBACL,OAAOpK,KAAK6N,WAGP6H,kBACL,OAAO1V,KAAKyV,cA3LG1V,EAAbwgB,EAAa,mBA+LnB,MAAMpW,EAAMoW,EAAcrV,cACXf,mB,m0FC9Nf,MAAMiY,EAGF,CACF,CAAC7nB,IAAiBG,WAAY,OAC9B,CAACH,IAAiBE,YAAa,QAC/B,CAACF,IAAiBC,gBAAiB,WACnC,CAACD,IAAiBI,cAAe,UACjC,CAACJ,IAAiBK,WAAY,QAOzB,MAAMqQ,EAIHnO,cAAciD,EAAA,yBACpBC,KAAKqiB,UAAY,IAAIxiB,IAA0ByiB,KAMjD,qBAIE,OAHKrX,EAAoBwV,WACvBxV,EAAoBwV,SAAW,IAAIxV,GAE9BA,EAAoBwV,SAM7B,eACE,OAAOzgB,KAAKqiB,UAMdE,qBACE,OAAOviB,KAAKqiB,UAAUlpB,MAOxB4Z,eAAe2N,GACb,IAAK1gB,KAAKwiB,iBAAiB9B,GAEzB,YADA1mB,QAAQ4V,KAAK,yDAIf,MAAM6S,EAAiBziB,KAAK0iB,cAC1B1iB,KAAKqiB,UAAUlpB,MACfunB,GAEF1gB,KAAKqiB,UAAUlpB,MAAQspB,EAOzBE,iBACEhY,GAC8B,IAAAiY,EAC9B,OAAkC,QAAlCA,EAAO5iB,KAAKqiB,UAAUlpB,MAAMkR,cAAM,IAAAuY,OAAA,EAA3BA,EAA8BjY,GAOvCmB,cAAcnB,GACZ,MAAMkY,EAAW7iB,KAAK8iB,0BAA0BnY,GAChD,IAAKkY,EAAU,OAAO,EAEtB,MAAME,EAAgB/iB,KAAK2iB,iBAAiBE,GAC5C,OAA6C,KAArCE,aAAa,EAAbA,EAAuBC,WAMjCC,mBACE,MAAMC,EAAeljB,KAAK2iB,iBAAiB,QAC3C,OAAoC,KAA7BO,aAAY,EAAZA,EAAcC,YAMvBC,kBACEpjB,KAAKqiB,UAAUlpB,MAAQmpB,IAOjBE,iBAAiB5W,GACvB,IAAKA,GAAgC,iBAAbA,EACtB,OAAO,EAIT,GAAIA,EAASvB,QAAqC,iBAApBuB,EAASvB,OACrC,OAAO,EAIT,GAAIuB,EAASvB,OACX,IAAK,MAAOwY,EAAUE,KAAkB3tB,OAAO2gB,QAAQnK,EAASvB,QAAS,CACvE,GAAI0Y,GAA0C,iBAAlBA,EAC1B,OAAO,EAIT,GAAIA,EACF,IAAK,MAAOtpB,EAAKN,KAAU/D,OAAO2gB,QAAQgN,GACxC,QAAc5qB,IAAVgB,GAAwC,kBAAVA,EAIhC,OAHAa,QAAQ4V,KACN,6BAA6BiT,KAAYppB,mCAAqCN,MAEzE,EAOjB,OAAO,EAQDupB,cACNW,EACA3C,GAEA,MAAMvhB,EAAwB,CAC5BkL,OAAQ,IACHgZ,EAAgBhZ,SAIvB,GAAIqW,EAAarW,OACf,IAAK,MAAOwY,EAAUE,KAAkB3tB,OAAO2gB,QAC7C2K,EAAarW,QAEb,GAAI0Y,EAAe,CACjB,MAGMO,EAAsB,IAHCnkB,EAAOkL,OAClCwY,IAKF,IAAK,MAAOU,EAAYC,KAAiBpuB,OAAO2gB,QAC9CgN,QAEqB5qB,IAAjBqrB,IACDF,EAA4BC,GAAcC,GAI/CrkB,EAAOkL,OACLwY,GACES,EAKV,OAAOnkB,EAOD2jB,0BACNnY,GAEA,OAAIA,KAAayX,EACRA,EAA4BzX,GAE9B,MAlLqB5K,EAAnBkL,EAAmB,oB,+eC8GjBiC,IAvIf,MAMEpQ,aAAY,QACVgQ,EAAO,QACPO,EAAO,MACPD,EAAK,QACLD,EAAO,cACPsW,IAOC1jB,EAAA,sBAAAA,EAAA,uBAAAA,EAAA,qBAAAA,EAAA,uBACDC,KAAKqN,QAAUA,EACfrN,KAAKoN,MAAQA,EACbpN,KAAKmN,QAAUA,EAEfnN,KAAK+M,OACH0W,GACAC,IAAMlqB,OAAO,CACXsT,UACA6W,QAAS,CACP,eAAgB,oBAElB5sB,QAhCgB,MAoCtB,YACE6sB,EACAC,EAAkB,GAElB,IACE,aAAaD,IACb,MAAOvsB,GACP,MAAMysB,EAAazsB,EAQnB,GAJEwsB,EAAU7jB,KAAKqN,UACbyW,EAAWC,UAA2C,MAA/BD,EAAWC,SAASC,QACvB,iBAApBF,EAAWG,MAEE,CACf,MAAMC,EAAYlkB,KAAKoN,MAAQiB,KAAK8V,IAAInkB,KAAKmN,QAAS0W,GAMtD,OALA7pB,QAAQoY,IACN,uBAAuB8R,eAAuBJ,EAAW9rB,iBAGrD,IAAIzB,QAASC,GAAY4B,WAAW5B,EAAS0tB,IAC5ClkB,KAAKokB,MAAMR,EAAWC,EAAU,GAGzC,MAAMxsB,GAIV,UACEmW,EACA6W,EACAV,GAEA,OAAO3jB,KAAKokB,MAAMxjB,gBACOZ,KAAK+M,OAAOhU,IAAmByU,EAAU,CAC9D6W,SACAV,aAEc/uB,MAIpB,qBACE4Y,EACA6W,EACAV,GAEA,OAAO3jB,KAAKokB,MAAMxjB,UAChB,MAAMmjB,QAAiB/jB,KAAK+M,OAAOhU,IAAmByU,EAAU,CAC9D6W,SACAV,YAEF,MAAO,CACL/uB,KAAMmvB,EAASnvB,KACf+uB,QAASI,EAASJ,WAKxB,WACEnW,EACA5Y,EACAyvB,EACAV,GAEA,OAAO3jB,KAAKokB,MAAMxjB,gBACOZ,KAAK+M,OAAOkJ,KAAoBzI,EAAU5Y,EAAM,CACrEyvB,SACAV,aAEc/uB,MAIpB,sBACE4Y,EACA5Y,EACAyvB,EACAV,GAEA,OAAO3jB,KAAKokB,MAAMxjB,UAChB,MAAMmjB,QAAiB/jB,KAAK+M,OAAOkJ,KAAoBzI,EAAU5Y,EAAM,CACrEyvB,SACAV,YAEF,MAAO,CACL/uB,KAAMmvB,EAASnvB,KACf+uB,QAASI,EAASJ,WAKxBW,kBAAkBC,EAAsBC,GACtCxkB,KAAK+M,OAAO0X,SAASd,QAAQe,OAAsB,cAAIH,EACnD,UAAUA,EACV,GACJvkB,KAAK+M,OAAO0X,SAASd,QAAQe,OAAO,qBAAuBF,GAAU,M,6BCtIzE,IAAIG,EAAQ,EAAQ,GAYpB,SAASC,EAAW5sB,EAASisB,EAAM/Z,EAAQhS,EAAS6rB,GAClDzsB,MAAM/B,KAAKyK,MACXA,KAAKhI,QAAUA,EACfgI,KAAK/H,KAAO,aACZgsB,IAASjkB,KAAKikB,KAAOA,GACrB/Z,IAAWlK,KAAKkK,OAASA,GACzBhS,IAAY8H,KAAK9H,QAAUA,GAC3B6rB,IAAa/jB,KAAK+jB,SAAWA,GAG/BY,EAAMlmB,SAASmmB,EAAYttB,MAAO,CAChCutB,OAAQ,WACN,MAAO,CAEL7sB,QAASgI,KAAKhI,QACdC,KAAM+H,KAAK/H,KAEX6sB,YAAa9kB,KAAK8kB,YAClBC,OAAQ/kB,KAAK+kB,OAEbC,SAAUhlB,KAAKglB,SACfC,WAAYjlB,KAAKilB,WACjBC,aAAcllB,KAAKklB,aACnBC,MAAOnlB,KAAKmlB,MAEZjb,OAAQlK,KAAKkK,OACb+Z,KAAMjkB,KAAKikB,KACXD,OAAQhkB,KAAK+jB,UAAY/jB,KAAK+jB,SAASC,OAAShkB,KAAK+jB,SAASC,OAAS,SAK7E,IAAI3uB,EAAYuvB,EAAWvvB,UACvBuJ,EAAc,GAElB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,gBAEArC,SAAQ,SAAS0nB,GACjBrlB,EAAYqlB,GAAQ,CAAC9qB,MAAO8qB,MAG9B7uB,OAAOgwB,iBAAiBR,EAAYhmB,GACpCxJ,OAAOyD,eAAexD,EAAW,eAAgB,CAAC8D,OAAO,IAGzDyrB,EAAWnd,KAAO,SAASpQ,EAAO4sB,EAAM/Z,EAAQhS,EAAS6rB,EAAUsB,GACjE,IAAIvB,EAAa1uB,OAAOoE,OAAOnE,GAY/B,OAVAsvB,EAAM7lB,aAAazH,EAAOysB,GAAY,SAAgBtnB,GACpD,OAAOA,IAAQlF,MAAMjC,aAGvBuvB,EAAWrvB,KAAKuuB,EAAYzsB,EAAMW,QAASisB,EAAM/Z,EAAQhS,EAAS6rB,GAElED,EAAW7rB,KAAOZ,EAAMY,KAExBotB,GAAejwB,OAAOyJ,OAAOilB,EAAYuB,GAElCvB,GAGT7tB,EAAOD,QAAU4uB,G,6BCrFjB,kCAkCO,MAAMtC,EAAuC,CAClDjY,OAAQ,CACNib,KAAM,CACJtC,WAAW,EACXG,YAAY,GAEdoC,MAAO,CACLvC,WAAW,GAEbwC,SAAU,CACRxC,WAAW,GAEbyC,QAAS,CACPzC,WAAW,M,cC/CjB/sB,EAAOD,QAAUsE,QAAQ,c,6BCEzB,IAAIsqB,EAAa,EAAQ,IASzB,SAASc,EAAc1tB,GAErB4sB,EAAWrvB,KAAKyK,KAAiB,MAAXhI,EAAkB,WAAaA,EAAS4sB,EAAWe,cACzE3lB,KAAK/H,KAAO,gBAXF,EAAQ,GAcdwG,SAASinB,EAAed,EAAY,CACxCgB,YAAY,IAGd3vB,EAAOD,QAAU0vB,G,4fCdF,MAAM7O,EAanB/Z,YACE+oB,EAAwB,KACxBC,EAAkB,QAClB7jB,EAAkB,OAClBlC,EAAA,cAhBgC,kBAAgBA,EAAA,6BAAAA,EAAA,uBAAAA,EAAA,uBAAAA,EAAA,yBAiBhDC,KAAK6lB,cAAgBA,EACrB7lB,KAAK8lB,QAAUA,EACf9lB,KAAKiC,QAAUA,EACfjC,KAAK+lB,UAAY,IAAIld,IAQhBmd,gBAAgBvsB,GACrB,MAAO,GAAGuG,KAAKimB,SAASjmB,KAAKiC,WAAWxI,IAOlCysB,iBACN,IAAIC,EAAY,EAChB,IAAK,IAAIlxB,EAAI,EAAGA,EAAIwkB,aAAatkB,OAAQF,IAAK,CAC5C,MAAMwE,EAAMggB,aAAahgB,IAAIxE,GAC7B,GAAIwE,WAAK2sB,WAAWpmB,KAAKimB,QAAS,CAChC,MAAM9sB,EAAQsgB,aAAaC,QAAQjgB,GAC/BN,IACFgtB,GAAa1sB,EAAItE,OAASgE,EAAMhE,SAItC,OAAOgxB,EAMDE,oBACN,MAAMlQ,EAAMpF,KAAKoF,MAEXmQ,EAAyB,GAC/B,IAAK,IAAIrxB,EAAI,EAAGA,EAAIwkB,aAAatkB,OAAQF,IAAK,CAC5C,MAAMwE,EAAMggB,aAAahgB,IAAIxE,GAC7B,GAAIwE,WAAK2sB,WAAWpmB,KAAKimB,QAAS,CAChC,MAAM9sB,EAAQsgB,aAAaC,QAAQjgB,GACnC,GAAIN,EACF,IACE,MAAM,UAAEwX,GAAc/K,KAAK2gB,MAAMptB,GAC7Bgd,EAAMxF,EAAY3Q,KAAK6lB,eACzBS,EAAa7wB,KAAKgE,GAEpB,MAAOM,GACPusB,EAAa7wB,KAAKgE,KAK1B6sB,EAAa/pB,QAAS9C,IACpBggB,aAAa+M,WAAW/sB,GAExB,MAAMgtB,EAAahtB,EAAI4E,QAAQ2B,KAAKimB,OAASjmB,KAAKiC,QAAU,IAAK,IACjEjC,KAAK+lB,UAAU9c,OAAOwd,KAOlBC,kBAAkBC,GAExB,MAAM5Q,EAAUpa,MAAM8L,KAAKzH,KAAK+lB,UAAUhQ,WAAW6Q,KACnD,EAAE,CAAE3oB,IAAK,CAAEC,KAAOD,EAAIC,GAExB,KACE8B,KAAKkmB,iBAAmBS,EAAc3mB,KAAK8lB,SAC3C/P,EAAQ5gB,OAAS,GACjB,CACA,MAAOsE,GAAOsc,EAAQngB,QACtB6jB,aAAa+M,WAAWxmB,KAAKgmB,gBAAgBvsB,IAC7CuG,KAAK+lB,UAAU9c,OAAOxP,IAS1BwgB,SAASxgB,EAAa7E,GACpBoL,KAAKqmB,oBACL,MAAMQ,EAAW7mB,KAAKgmB,gBAAgBvsB,GAChCqtB,EAAY,CAChBlyB,OACA+b,UAAWI,KAAKoF,OAEZwQ,EAAcE,EAAS1xB,OAASyQ,KAAKC,UAAUihB,GAAW3xB,OAChE6K,KAAK0mB,kBAAkBC,GAEnB3mB,KAAKkmB,iBAAmBS,EAAc3mB,KAAK8lB,UAI/CrM,aAAaG,QAAQiN,EAAUjhB,KAAKC,UAAUihB,IAC9C9mB,KAAK+lB,UAAUhc,IAAItQ,EAAKsX,KAAKoF,QAQ/B4D,SAAStgB,GACPuG,KAAKqmB,oBACL,MAAMQ,EAAW7mB,KAAKgmB,gBAAgBvsB,GAChCstB,EAAatN,aAAaC,QAAQmN,GACxC,IAAKE,EACH,OAAO,KAET,IACE,MAAM,KAAEnyB,EAAI,UAAE+b,GAAc/K,KAAK2gB,MAAMQ,GACjC5Q,EAAMpF,KAAKoF,MACjB,OAAIA,EAAMxF,EAAY3Q,KAAK6lB,eACzBpM,aAAa+M,WAAWK,GACxB7mB,KAAK+lB,UAAU9c,OAAOxP,GACf,OAGTuG,KAAK+lB,UAAUhc,IAAItQ,EAAK0c,GACjBvhB,GACP,MAAOmF,GAGP,OAFA0f,aAAa+M,WAAWK,GACxB7mB,KAAK+lB,UAAU9c,OAAOxP,GACf,MAQXutB,WAAWvtB,GACT,MAAMotB,EAAW7mB,KAAKgmB,gBAAgBvsB,GACtCggB,aAAa+M,WAAWK,GACxB7mB,KAAK+lB,UAAU9c,OAAOxP,GAOxBwtB,oBAAoBC,GAElB,MAAMZ,EAAyB,GAC/B,IAAK,IAAIrxB,EAAI,EAAGA,EAAIwkB,aAAatkB,OAAQF,IAAK,CAC5C,MAAMwE,EAAMggB,aAAahgB,IAAIxE,GACzBwE,WAAK2sB,WAAWpmB,KAAKimB,SAAWxsB,EAAIoI,SAASqlB,IAC/CZ,EAAa7wB,KAAKgE,GAGtB6sB,EAAa/pB,QAAS9C,IACpBggB,aAAa+M,WAAW/sB,GAExB,MAAMgtB,EAAahtB,EAAI4E,QAAQ2B,KAAKimB,OAASjmB,KAAKiC,QAAU,IAAK,IACjEjC,KAAK+lB,UAAU9c,OAAOwd,KAO1BU,gBACE,MAAMb,EAAyB,GAC/B,IAAK,IAAIrxB,EAAI,EAAGA,EAAIwkB,aAAatkB,OAAQF,IAAK,CAC5C,MAAMwE,EAAMggB,aAAahgB,IAAIxE,GACzBwE,WAAK2sB,WAAWpmB,KAAKimB,SACvBK,EAAa7wB,KAAKgE,GAGtB6sB,EAAa/pB,QAAS9C,GAAQggB,aAAa+M,WAAW/sB,IACtDuG,KAAK+lB,UAAUqB,W,+DC3MnB,MAEMC,EAAWC,IACf,IAAI,aAAEC,GAAiBD,EACvB,MAAMzM,EAASyM,EAAKE,aACdzM,EAAQuM,EAAKG,YACnB,IAAIC,EAAOJ,EAAKK,WACZC,EAAMN,EAAKO,UAEf,KAAON,GATY,IASIA,EAAaO,UAClCJ,GAAQH,EAAaI,WAAaJ,EAAaQ,WAC/CH,GAAOL,EAAaM,UAAYN,EAAaS,YAC1CT,gBAAiBA,GAGtB,MAAO,CACL1M,SACA6M,OACAE,MACA7M,UA2BWkN,MAvBOA,CACpBX,EACAY,KASA,MAAMC,EAAeb,GAAQA,EAAKnhB,WAElC,GAAIgiB,EAAc,CAChB,MAAMC,EAAef,EAAQc,IACvB,OAAEtN,EAAM,KAAE6M,EAAI,IAAEE,EAAG,MAAE7M,GAAUsM,EAAQC,GAI7CY,EAHUR,EAAOU,EAAaV,KACpBE,EAAMQ,EAAaR,IAEd7M,EAAOF,EAAQ6M,EAAME,K,6bCzCxC,MAAMS,EAA2B,oBAAXnuB,QAA0BA,OAAOtD,SAEjD0xB,EAAQD,EAASnuB,OAAOquB,WAAa,EACrCC,EAASH,EAASnuB,OAAOuuB,YAAc,EAS7C,MAAMC,EAIJ5rB,cAAciD,EAAA,wBAAAA,EAAA,0BACRsoB,GACFroB,KAAK2oB,SAAWD,EAAeE,aAAa,WAAY,MACxD5oB,KAAK6oB,WAAaH,EAAeE,aAAa,aAAc,OAE5D5oB,KAAK2oB,SAAW,KAChB3oB,KAAK6oB,WAAa,MAItB,oBAAoBplB,EAAYqlB,GAC9B,MAAMC,EAAUnyB,SAASiM,cAAc,IAAIY,IACzC7M,SAASC,cAAc,UAEzBkyB,EAAO9xB,aAAa,KAAMwM,GAE1B,MAAMulB,EAAMD,EAAOE,WAAW,MAC9B,IAAKD,EACH,MAAM,IAAI1xB,MAAM,wCAUlB,OAPAyxB,EAAO1kB,MAAMY,QAAU,8CAA8C6jB,EAErElyB,SAASsyB,KAAK5wB,YAAYywB,GAE1BA,EAAOhO,MAAQuN,EACfS,EAAOlO,OAAS2N,EAETQ,EAGT5B,QACOiB,GAAWroB,KAAK2oB,UAGrB3oB,KAAK2oB,SAASQ,UAAU,EAAG,EAAGb,EAAOE,GAGvCY,eACOf,GAAWroB,KAAK6oB,YAGrB7oB,KAAK6oB,WAAWM,UAAU,EAAG,EAAGb,EAAOE,GAGzCa,WAAWC,EAAgB7Y,EAAkB8Y,GACtClB,GAAWroB,KAAK6oB,aAGrB7oB,KAAK6oB,WAAWW,YAAc,QAC9BxpB,KAAK6oB,WAAWY,WACdH,EAAO5B,KACP4B,EAAO1B,IACP0B,EAAOvO,MACPuO,EAAOzO,QAET7a,KAAK6oB,WAAWa,KAAO,gBACvB1pB,KAAK6oB,WAAWc,UAAY,MAC5B3pB,KAAK6oB,WAAWe,SAASnZ,EAAU6Y,EAAO5B,KAAM4B,EAAO1B,IAAM,IAC7D5nB,KAAK6oB,WAAWe,SAASL,EAAgBD,EAAO5B,KAAM4B,EAAO1B,IAAM,IACnE5nB,KAAK6oB,WAAWe,SACd,SAASN,EAAO5B,KAChB4B,EAAO5B,KACP4B,EAAO1B,IAAM,IAEf5nB,KAAK6oB,WAAWe,SACd,QAAQN,EAAO1B,IACf0B,EAAO5B,KACP4B,EAAO1B,IAAM,KAIjBiC,UACEC,EACAC,EACAC,EAAgB,OAChBC,EAAe,IAEV5B,GAAWroB,KAAK2oB,WAGrB3oB,KAAK2oB,SAASa,YAAcQ,EAC5BhqB,KAAK2oB,SAASuB,UAAY,EAC1BlqB,KAAK2oB,SAASc,WAAWK,EAAIG,EAAO,EAAGF,EAAIE,EAAO,EAAGA,EAAMA,KAIhDvB,Q,6bClGR,MAAMyB,EAAiB,UAqBxBC,EAA0B,CAC9B,KAAkB,CAAC,IACnB,GAAgB,CAAC,IACjB,MAAmB,CAAC,IACpB,KAAkB,CAAC,IACnB,MAAa,CAAC,IACd,KAAY,CAAC,EAAG,MAAO,MAGnBC,EAAkB,CAAC,OAAQ,OAAQ,QAEnCC,EAAmB,CACvBC,SAAS,EACTC,UAAU,GA0FNC,EAAWA,CACfC,EACAC,EACAtnB,EAAqD,MAErD,IAAItM,EAAyB,KACzB6zB,EAAW,EACf,MAAM,QAAEL,GAAU,EAAI,SAAEC,GAAW,GAASnnB,EAE5C,OAAO,YAAwBwnB,GAC7B,MAAM1U,EAAMpF,KAAKoF,MACZyU,GAAaL,IAASK,EAAWzU,GACtC,MAAM2U,EAAYH,GAAQxU,EAAMyU,GAE5BE,GAAa,GAAKA,EAAYH,GAC5B5zB,IACFW,aAAaX,GACbA,EAAU,MAEZ6zB,EAAWzU,EACXuU,EAAKK,MAAM/qB,KAAM6qB,KACP9zB,GAAWyzB,IACrBzzB,EAAUmD,OAAO9B,WAAW,KAC1BwyB,EAAWL,EAAUxZ,KAAKoF,MAAQ,EAClCpf,EAAU,KACV2zB,EAAKK,MAAM/qB,KAAM6qB,IAChBC,MAKHE,EAASA,CAAIC,EAAYC,IAC7B,IAAID,GAAOrE,KAAK,CAAC3oB,EAAGC,KAClB,MAAMitB,EAASD,EAASjtB,GAClBmtB,EAASF,EAAShtB,GACxB,OAAOitB,EAASC,GAAU,EAAID,EAASC,EAAS,EAAI,IAGlDC,EAAYJ,GAA8BA,EAAM,GAEhDK,EAAaA,CAAIL,EAAYpgB,IACjCogB,EAAMhsB,OAAQ6qB,IAAOjf,EAAOhJ,SAASioB,IAEjCvtB,EAAUA,CACd0uB,EACAC,IACSD,EAAM1uB,QAAQ2uB,GAGzB,MAAM7b,EAoBJ,2BACEkc,EACAC,EACAC,EACAnC,GAEA,MAAMoC,EAAQpC,EAAO5B,KACfiE,EAAQrC,EAAO1B,IACfgE,EAAYtC,EAAOvO,MACnB8Q,EAAavC,EAAOzO,OAEpBiR,EAAaP,EAAaI,EAAQD,EAClCK,EAAWR,EAAaM,EAAaD,EAE3C,OAAOJ,EACHC,EACEK,EACAA,EAAaC,EACfN,EACAK,EAAaC,EACbD,EAON,qBACEE,EACAP,EACAnC,GAEA,MAAMoC,EAAQpC,EAAO5B,KACfiE,EAAQrC,EAAO1B,IACfgE,EAAYtC,EAAOvO,MACnB8Q,EAAavC,EAAOzO,OAEpBhd,EAAqB,CACzBI,EAAG,CACD6rB,EAAG,EACHC,EAAG,GAEL7rB,EAAG,CACD4rB,EAAG,EACHC,EAAG,IAIP,OAAQiC,GACN,ICtPsB,KDsPH,CACjB,MAAMjC,EAAI0B,EAAYE,EAAQE,EAAaF,EAE3C9tB,EAAOI,EAAI,CACT6rB,EAAG4B,EACH3B,KAGFlsB,EAAOK,EAAI,CACT4rB,EAAG4B,EAAQE,EACX7B,KAGF,MAGF,ICrQwB,ODqQH,CACnB,MAAMA,EAAI0B,EAAYE,EAAQA,EAAQE,EAEtChuB,EAAOI,EAAI,CACT6rB,EAAG4B,EACH3B,KAGFlsB,EAAOK,EAAI,CACT4rB,EAAG4B,EAAQE,EACX7B,KAGF,MAGF,ICxRwB,ODwRH,CACnB,MAAMD,EAAI2B,EAAYC,EAAQE,EAAYF,EAE1C7tB,EAAOI,EAAI,CACT6rB,IACAC,EAAG4B,GAGL9tB,EAAOK,EAAI,CACT4rB,IACAC,EAAG4B,EAAQE,GAGb,MAGF,ICvSyB,QDuSH,CACpB,MAAM/B,EAAI2B,EAAYC,EAAQA,EAAQE,EAEtC/tB,EAAOI,EAAI,CACT6rB,IACAC,EAAG4B,GAGL9tB,EAAOK,EAAI,CACT4rB,IACAC,EAAG4B,EAAQE,GAGb,OAOJ,OAAOhuB,EAMT,uBACEouB,EACAC,EACAC,GAEA,MAAQluB,EAAGmuB,EAAMluB,EAAGmuB,GAASJ,GACrBhuB,EAAGquB,EAAUpuB,EAAGquB,GAAaL,EAC/BJ,EAAaK,EAAsB,IAAM,IAEzCK,EAAiBJ,EAAKN,GACtBW,EAAiBJ,EAAKP,GACtBY,EAAqBJ,EAASR,GAC9Ba,EAAqBJ,EAAST,GAE9Bc,EAxUuB,IAyU1BH,EAAiBD,GAQpB,OAN2Bne,KAAKwe,IAC9B,EACAxe,KAAKye,IAAIL,EAAgBE,GACvBte,KAAKwe,IAAIL,EAAgBE,KAGAE,EAG/B,8BACEX,EACAC,EACAC,GAEA,MAAQluB,EAAGmuB,GAASH,GACZhuB,EAAGquB,GAAaJ,EAClBJ,EAAaK,EAAsB,IAAM,IAE/C,OAAO9d,KAAK0e,IAAIT,EAASR,GAAcM,EAAKN,IAG9C,gCACEG,EACAC,EACAC,GAEA,MAAQluB,EAAGmuB,EAAMluB,EAAGmuB,GAASJ,GACrBhuB,EAAGquB,EAAUpuB,EAAGquB,GAAaL,EAC/BJ,EAAaK,EAAsB,IAAM,IAEzCK,EAAiBJ,EAAKN,GACtBW,EAAiBJ,EAAKP,GACtBY,EAAqBJ,EAASR,GAC9Ba,EAAqBJ,EAAST,GAE9BkB,EAAqB,GAO3B,OALAA,EAAmBv3B,KAAK4Y,KAAK0e,IAAIL,EAAqBF,IACtDQ,EAAmBv3B,KAAK4Y,KAAK0e,IAAIL,EAAqBD,IACtDO,EAAmBv3B,KAAK4Y,KAAK0e,IAAIJ,EAAqBH,IACtDQ,EAAmBv3B,KAAK4Y,KAAK0e,IAAIJ,EAAqBF,IAE/Cpe,KAAKye,OAAOE,GAQrBC,uBACEC,EACAC,EACAnB,EACAoB,GAEA,MAAMjB,ECxYoB,SDyYxBH,GC1YsB,OD0YUA,EAE5BC,EAAa5c,EAAkBge,cACnCrB,GACA,EACAmB,GAGF,MAAO,IAAID,GAAUtG,KACnB,CAAC3oB,EAAuBC,KACtB,MAAMovB,EAAWje,EAAkBge,cACjCrB,GACA,EACA/tB,EAAEqrB,QAEEiE,EAAWle,EAAkBge,cACjCrB,GACA,EACA9tB,EAAEorB,QAGEkE,EAAmBne,EAAkBoe,gBACzCxB,EACAqB,EACAnB,GAEIuB,EAAmBre,EAAkBoe,gBACzCxB,EACAsB,EACApB,GAGIwB,EAAuBH,EACzBne,EAAkBue,uBAClBve,EAAkBwe,yBAChBC,EAAuBJ,EACzBre,EAAkBue,uBAClBve,EAAkBwe,yBAEhBE,EAAyBP,EAC3Bne,EAAkBwe,yBAClBxe,EAAkBue,uBAChBI,EAAyBN,EAC3Bre,EAAkBwe,yBAClBxe,EAAkBue,uBAEhBK,EAAuBN,EAC3B1B,EACAqB,EACAnB,GAEI+B,EAAuBJ,EAC3B7B,EACAsB,EACApB,GA4BF,OA3cuB,EA8brB8B,EAZ6BF,EAC7B9B,EACAqB,EACAnB,GAgBwB,IACvBqB,EA5cmB,EACA,IAKC,EAicrBU,EAV6BF,EAC7B/B,EACAsB,EACApB,GAcwB,IACvBuB,EA/cmB,EACA,KAqd5B5wB,YAAYuG,EAAuB,IAAItD,EAAA,mCAAAA,EAAA,wBAAAA,EAAA,yCAAAA,EAAA,0BAAAA,EAAA,wBAAAA,EAAA,kCAAAA,EAAA,2BAAAA,EAAA,sBAAAA,EAAA,oCAAAA,EAAA,kCAAAA,EAAA,kCAAAA,EAAA,sBAAAA,EAAA,qBAAAA,EAAA,8BAAAA,EAAA,wBACrCC,KAAKmuB,oBAAsB,GAC3BnuB,KAAKyQ,SAAW,KAChBzQ,KAAKouB,0BAA4B,GACjCpuB,KAAKquB,YAAa,EAClBruB,KAAKyqB,SAAW,EAChBzqB,KAAKsuB,oBAAqB,EAC1BtuB,KAAKuuB,YAAc,GACnBvuB,KAAKwQ,QAAS,EACdxQ,KAAKwuB,qBAAuB,KAC5BxuB,KAAKyuB,mBAAqB,KAC1BzuB,KAAK0uB,mBAAqB,KAC1B1uB,KAAK2uB,OAASvE,EACdpqB,KAAK4uB,OAAQ,EACb5uB,KAAK6uB,eAAiB,KACtB7uB,KAAK8uB,SAAW,EAEhB9uB,KAAK+uB,WAAa/uB,KAAK+uB,WAAWr1B,KAAKsG,MACvCA,KAAKmV,MAAQnV,KAAKmV,MAAMzb,KAAKsG,MAC7BA,KAAKkT,OAASlT,KAAKkT,OAAOxZ,KAAKsG,MAC/BA,KAAKgvB,SAAWhvB,KAAKgvB,SAASt1B,KAAKsG,MACnCA,KAAKivB,iBAAmBjvB,KAAKivB,iBAAiBv1B,KAAKsG,MACnDA,KAAKkvB,oBAAsBlvB,KAAKkvB,oBAAoBx1B,KAAKsG,MACzDA,KAAKmvB,KAAOnvB,KAAKmvB,KAAKz1B,KAAKsG,MAC3BA,KAAKovB,UAAYpvB,KAAKovB,UAAU11B,KAAKsG,MAErCA,KAAKmvB,KAAK9rB,GAGZ8rB,MAAK,MACHP,GAAQ,EAAK,YACbS,GAAc,EAAK,WACnBhB,GAAa,EAAK,SAClB5D,EAAW,EAAC,mBACZ6D,GAAqB,GACN,IACftuB,KAAKquB,WAAaA,EAClBruB,KAAKsuB,mBAAqBA,EAC1BtuB,KAAK4uB,MAAQA,EAER5uB,KAAKquB,aACJrU,OAAOsV,UAAU7E,IAAaA,EAAW,IAC3CzqB,KAAKyqB,SAAWA,GAElBzqB,KAAKuvB,oBACDF,IACFrvB,KAAK6uB,eAAiB,IAAInG,EAC1B1oB,KAAKwvB,qBAKXA,mBACE,MAAMC,EAAOA,KACXC,sBAAsB,KAAM,IAAAC,EACP,QAAnBA,EAAA3vB,KAAK6uB,sBAAc,IAAAc,GAAnBA,EAAqBvG,eACrBh0B,OAAO2gB,QAAQ/V,KAAKmuB,qBAAqB5xB,QACvC,EAAEkU,EAAUmf,MAAe,IAAAC,EACN,QAAnBA,EAAA7vB,KAAK6uB,sBAAc,IAAAgB,GAAnBA,EAAqBxG,WACnBuG,EAAUtG,OACV7Y,EACAmf,EAAUrG,kBAIhBkG,OAIJA,IAGF/c,UACE1S,KAAK8vB,sBAGPC,aAAaC,GACX,OAAO56B,OAAOoP,KAAKxE,KAAKiwB,aAAa9uB,KAAM1H,GACzCuG,KAAKiwB,YAAYx2B,GAAKoI,SAASmuB,IAInCT,oBACE,GAAsB,oBAAXr1B,QAA0BA,OAAOg2B,iBAAkB,CAC5D,MAAMC,EAAkB54B,IACtB,IAAoB,IAAhByI,KAAKwQ,OACP,OAGExQ,KAAK4uB,QACP5uB,KAAK8uB,UAAY,GAGnB,MAAMsB,EAAYpwB,KAAK+vB,aAAax4B,EAAMy4B,SAE1C,IAAKI,EACH,OAGFpwB,KAAKuuB,YAAY6B,GAAapwB,KAAKuuB,YAAY6B,GAC3CpwB,KAAKuuB,YAAY6B,GAAa,EAC9B,EAEJ74B,EAAM84B,iBACN94B,EAAM+4B,kBAEN,MAAMC,EAAmB,CACvBhC,YAAavuB,KAAKuuB,aAOpB,GAJIvuB,KAAKyQ,UAAYzQ,KAAKwwB,wBAAwBxwB,KAAKyQ,YACrD8f,EAAQjH,OAAStpB,KAAKwwB,wBAAwBxwB,KAAKyQ,WC9kBpC,UDilBb2f,GAA2BpwB,KAAKyQ,SAElC,YADAzQ,KAAKywB,aAAaF,GAIpB,GCrlBgB,SDqlBZH,GAA0BpwB,KAAKyQ,SAEjC,YADAzQ,KAAK0wB,YAAYH,GAOW,IAAAI,GAF2B,IAAvD3wB,KAAK4wB,aAAaR,EAAwBG,IAG1CvwB,KAAKoS,IAAI,uBAAwB,gCACd,QAAnBue,EAAA3wB,KAAK6uB,sBAAc,IAAA8B,GAAnBA,EAAqBvJ,SAErBpnB,KAAK+uB,WAAWx3B,IAIpByI,KAAKwuB,qBAAuBxuB,KAAKyqB,SAC7BA,EAAS0F,EAAgBnwB,KAAKyqB,SAAUH,GACxC6F,EAEJnwB,KAAK0uB,mBAAsBn3B,IACzB,MAAM64B,EAAYpwB,KAAK+vB,aAAax4B,EAAMy4B,SAMK,IAAAa,EAAAC,GAJ3CV,UACKpwB,KAAKuuB,YAAY6B,GAGtBpwB,KAAKyqB,WAAazqB,KAAKsuB,sBAEA,QAAzBuC,EAAA7wB,KAAKwuB,4BAAoB,IAAAqC,GAAQ,QAARC,EAAzBD,EAA2BE,cAAM,IAAAD,GAAjCA,EAAAv7B,KAAAs7B,ICnnBe,UDsnBbT,GAA2BpwB,KAAKyQ,UAClCzQ,KAAKgxB,kBAKThxB,KAAKyuB,mBAAsBl3B,IACzB,IAAoB,IAAhByI,KAAKwQ,OACP,OAEF,MAAMzY,EAASR,EAAMQ,OACrB,IAAKA,EACH,OAIF,MAAM0Y,EAAWzQ,KAAKixB,uBAAuBl5B,GAC7C,IAAK0Y,EACH,OAGF,MAAM8f,EAAmB,CACvBhC,YAAa,GACbh3B,QACA25B,YAAY,GAGR5H,EAAStpB,KAAKwwB,wBAAwB/f,GACxC6Y,IACFiH,EAAQjH,OAASA,GAGMtpB,KAAKyQ,WAAaA,GAEzCzQ,KAAKgvB,SAASve,EAAU8f,GAG1BvwB,KAAKmxB,aAAaZ,IAGpBr2B,OAAOg2B,iBAAiB,QAASlwB,KAAK0uB,oBACtCx0B,OAAOg2B,iBAAiB,UAAWlwB,KAAKwuB,sBACxCt0B,OAAOg2B,iBAAiB,QAASlwB,KAAKyuB,qBAI1CqB,sBACwB,oBAAX51B,QAA0BA,OAAOk3B,sBAC1Cl3B,OAAOk3B,oBAAoB,UAAWpxB,KAAKwuB,sBAC3Ct0B,OAAOk3B,oBAAoB,QAASpxB,KAAKyuB,oBACzCzuB,KAAKwuB,qBAAuB,KAC5BxuB,KAAKyuB,mBAAqB,KAEtBzuB,KAAKyqB,WACPvwB,OAAOk3B,oBAAoB,QAASpxB,KAAK0uB,oBACzC1uB,KAAK0uB,mBAAqB,OAKhCuC,uBAAuBI,GACrB,IAAK,MAAM5gB,KAAYrb,OAAOoP,KAAKxE,KAAKmuB,qBAAsB,CAC5D,MAAMyB,EAAY5vB,KAAKmuB,oBAAoB1d,GAC3C,GAAImf,GAAaA,EAAUtI,MAAQsI,EAAU0B,YACvC1B,EAAUtI,OAAS+J,GAAWzB,EAAUtI,KAAKiK,SAASF,IACxD,OAAO5gB,EAIb,OAAO,KAGT0gB,aAAaZ,GAAwB,IAAAiB,EACnC,MAAM5B,EAAY5vB,KAAKmuB,oBAAoBnuB,KAAKyQ,UAE3Cmf,EAKAA,EAAU0B,UAKc,QAA7BE,EAAA5B,EAAU6B,2BAAmB,IAAAD,GAA7BA,EAAAj8B,KAAAq6B,EAAgCW,GAJ9BvwB,KAAKoS,IAAI,eAAgB,yBALzBpS,KAAKoS,IAAI,eAAgB,eAY7Bqe,aAAaF,GAAwB,IAAAmB,EACnC,MAAM9B,EAAY5vB,KAAKmuB,oBAAoBnuB,KAAKyQ,UAE3Cmf,EAKAA,EAAU0B,UAKc,QAA7BI,EAAA9B,EAAU+B,2BAAmB,IAAAD,GAA7BA,EAAAn8B,KAAAq6B,EAAgCW,GAJ9BvwB,KAAKoS,IAAI,eAAgB,yBALzBpS,KAAKoS,IAAI,eAAgB,eAY7Bse,YAAYH,GAAwB,IAAAqB,EAClC,MAAMhC,EAAY5vB,KAAKmuB,oBAAoBnuB,KAAKyQ,UAE3Cmf,EAKAA,EAAU0B,UAKa,QAA5BM,EAAAhC,EAAUiC,0BAAkB,IAAAD,GAA5BA,EAAAr8B,KAAAq6B,EAA+BW,GAJ7BvwB,KAAKoS,IAAI,cAAe,yBALxBpS,KAAKoS,IAAI,cAAe,eAY5B4e,iBAAuB,IAAAc,EACrB,MAAMlC,EAAY5vB,KAAKmuB,oBAAoBnuB,KAAKyQ,UAE3Cmf,EAKAA,EAAU0B,UAKgB,QAA/BQ,EAAAlC,EAAUmC,6BAAqB,IAAAD,GAA/BA,EAAAv8B,KAAAq6B,GAJE5vB,KAAKoS,IAAI,iBAAkB,yBAL3BpS,KAAKoS,IAAI,iBAAkB,eAY/Bwe,aAAa5E,EAAsBuE,GAAkC,IAAAyB,EACnE,MAAMpC,EAAY5vB,KAAKmuB,oBAAoBnuB,KAAKyQ,UAEhD,GAAKmf,EAKL,OAAoC,QAApCoC,EAAOpC,EAAUqC,2BAAmB,IAAAD,OAAA,EAA7BA,EAAAz8B,KAAAq6B,EAAgC5D,EAAWuE,GAJhDvwB,KAAKoS,IAAI,eAAgB,eAO7B8c,oBACElD,EACAuE,EAAmB,CAAEhC,YAAa,KAElC,IAAoB,IAAhBvuB,KAAKwQ,OACP,OAGF,MAAM0hB,EAAkB,CClxBE,OADF,KAFE,OACC,SD2xBvBA,EAAgBrwB,SAASmqB,IAC3BhsB,KAAKoS,IAAI,sBAAuB,YAAa4Z,GAC7ChsB,KAAKmyB,cAAcnG,EAAW,KAAMuE,IAEpCvwB,KAAKoS,IACH,sBACA,oCAAoC4Z,oCACpCkG,GAKNnD,WAAWx3B,GAA4B,IAAA66B,EAClB,QAAnBA,EAAApyB,KAAK6uB,sBAAc,IAAAuD,GAAnBA,EAAqBhL,QAErB,MAAM4E,EAAY52B,OAAOoP,KAAKxE,KAAKiwB,aAAa9uB,KAAM1H,GACpDuG,KAAKiwB,YAAYx2B,GAAKoI,SAAStK,EAAMy4B,UAGnChE,GACFhsB,KAAKmyB,cAAcnG,EAAwB,KAAM,CAC/CuC,YAAa,GACbh3B,UAKN46B,cACEnG,EACAqG,EACA9B,GAEAvwB,KAAKoS,IAAI,gBAAiB,YAAa4Z,GACvChsB,KAAKoS,IAAI,gBAAiB,qBAAsBigB,GAChDryB,KAAKoS,IAAI,gBAAiB,gBAAiBpS,KAAKyQ,UAE3CzQ,KAAKquB,YAAegE,GACvBj9B,OAAOyV,OAAO7K,KAAKmuB,qBAAqB5xB,QAASqzB,IAC/CA,EAAU0C,eAAgB,IAI9B,MAAMC,EAAmBvyB,KAAKmuB,oBAC5BkE,GAAsBryB,KAAKyQ,UAU7B,GAPAzQ,KAAKoS,IACH,gBACA,mBACAmgB,EAAmBA,EAAiB9hB,cAAWtY,EAC/Co6B,EAAmBA,EAAiBjL,UAAOnvB,GAGzCo6B,EAAkB,CACpBvyB,KAAKwyB,aAAaD,EAAiB9hB,UACnC,MAAM,eAAE8Y,EAAc,SAAE9Y,EAAQ,OAAE6Y,GAAWiJ,EAEvCpG,ECl1BkB,SDm1BtBH,GCp1BoB,ODo1BYA,EAC5ByG,ECp1BkB,SDq1BtBzG,GCv1BuB,UDu1BSA,EAE5B0G,EAA0BrjB,EAAkBsjB,oBAChDxG,EACAsG,GACA,EACAnJ,GAMI4D,EAAW93B,OAAOyV,OAAO7K,KAAKmuB,qBAAqBlvB,OACtD2wB,IACC,GACEA,EAAUrG,iBAAmBA,GAC7BqG,EAAU0B,UACV,CACAtxB,KAAKwyB,aAAa5C,EAAUnf,UAC5B,MAAMmiB,EAA0BvjB,EAAkBsjB,oBAChDxG,EACAsG,GACA,EACA7C,EAAUtG,QAGZ,OAAOmJ,EACHG,GAA2BF,EAC3BE,GAA2BF,EAGjC,OAAO,IAQX,GAJI1yB,KAAK4uB,OACP5uB,KAAKoS,IAAI,gBAAiB,WAAY8a,GAGpCA,EAAS/3B,OAAS,EAAG,CACvB,MAAM09B,EAAiB7yB,KAAKitB,uBAC1BC,EACA5D,EACA0C,EACAvb,GAGEzQ,KAAK4uB,OACP5uB,KAAKoS,IAAI,gBAAiB,iBAAkBygB,GAG9C,MAAMC,EAAgBD,EAAe,GAEjCC,GACF9yB,KAAKgvB,SAAS8D,EAAcriB,SAAU8f,QAGxCvwB,KAAKoS,IAAI,gBAAiB,cAEtBmX,GACFvpB,KAAKmyB,cAAcnG,EAAWzC,EAAgBgH,IAMtDwC,wBACEnD,EACAnf,GAEImf,IACF5vB,KAAKoS,IACH,0BACGwd,EAAUnf,SAAb,2BACAA,GAEFmf,EAAUoD,oBAAsBviB,GAIpC2B,IAAI6gB,EAAsBC,KAAwBC,GAC5CnzB,KAAK4uB,OACP50B,QAAQoY,IACN,KAAK6gB,MAAiBC,IACtB,eACE7I,EAAgBrqB,KAAK8uB,SAAWzE,EAAgBl1B,2CAElD,yDACGg+B,GAKTC,gBAAgBC,GACdrzB,KAAKoS,IAAI,kBAAmB,iBAAkBihB,GAE9C,MAAMC,EAAkBtzB,KAAKmuB,oBAAoBkF,GAEjD,IAAKC,EACH,OAAOD,EAGT,MAAM,cAAEE,GAAkBD,EAE1B,IAAKC,EACH,OAAOF,EAGT,MAAM1pB,EAAWvU,OAAOyV,OAAO7K,KAAKmuB,qBAAqBlvB,OACtD2wB,GACCA,EAAUrG,iBAAmB8J,GAAkBzD,EAAU0B,WAG7D,GAAwB,IAApB3nB,EAASxU,OACX,OAAOk+B,EAGT,MAAM,oBAAEL,EAAmB,uBAAEQ,GAA2BF,EAKxD,GACEN,IACCM,EAAgBG,wBACjBzzB,KAAK0zB,kCAAkCV,GAQvC,OANAhzB,KAAKoS,IACH,kBACA,sCACA4gB,GAGKhzB,KAAKozB,gBAAgBJ,GAM9B,GACEQ,GACAxzB,KAAK0zB,kCAAkCF,GAQvC,OANAxzB,KAAKoS,IACH,kBACA,yCACAohB,GAGKxzB,KAAKozB,gBAAgBI,GAM9B7pB,EAASpN,QAASqzB,GAAc5vB,KAAKwyB,aAAa5C,EAAUnf,WAC5D,MAAQA,SAAUkjB,GA53BpBhqB,KAEA,MAAMiqB,EAA0B5I,EAC9BrhB,EACA,EAAG2f,YAAajb,KAAK0e,IAAIzD,EAAO5B,MAAQrZ,KAAK0e,IAAIzD,EAAO1B,MAG1D,OAAOyD,EAAMuI,IAq3BoBC,CAAwBlqB,GAIvD,OAFA3J,KAAKoS,IAAI,kBAAmB,2BAA4BuhB,GAEjD3zB,KAAKozB,gBAAgBO,GAG9BG,cAAa,SACXrjB,EAAQ,KACR6W,EAAI,eACJiC,EAAc,oBACdoI,EAAmB,sBACnBI,EAAqB,mBACrBF,EAAkB,oBAClBI,EAAmB,uBACnB8B,EAAsB,uBACtBC,EAAsB,uBACtBP,EAAsB,cACtBF,EAAa,cACbU,EAAa,wBACbC,EAAuB,uBACvBV,EAAsB,oBACtB/B,EAAmB,iBACnB0C,EAAgB,UAChB7C,GAAY,EAAI,mBAChB8C,IAEAp0B,KAAKmuB,oBAAoB1d,GAAY,CACnCA,WACA6W,OACAiC,iBACAkI,sBACAE,sBACAI,wBACAF,qBACAI,sBACA8B,yBACAC,yBACAC,gBACAC,0BACAT,yBACAF,gBACAP,oBAAqB,KACrBQ,yBACAlC,YACA8C,qBACAD,mBACA7K,OAAQ,CACNQ,EAAG,EACHC,EAAG,EACHhP,MAAO,EACPF,OAAQ,EACR6M,KAAM,EACNE,IAAK,EACLN,QAEFgL,eAAe,GAGbtyB,KAAKquB,aAITruB,KAAKwyB,aAAa/hB,GAKdA,IAAazQ,KAAKyQ,UACpBzQ,KAAKgvB,SAASve,IAIlB4jB,iBAAgB,SAAE5jB,IAChB,MAAM6jB,EAAoBt0B,KAAKmuB,oBAAoB1d,GAEnD,GAAI6jB,EAAmB,CACrB,MAAM,eAAE/K,GAAmB+K,EAE3BC,QAAQC,eAAex0B,KAAKmuB,oBAAqB1d,GAEjD,MAAMgkB,EAAkBz0B,KAAKmuB,oBAAoB5E,GAC3CmL,EAAajkB,IAAazQ,KAAKyQ,SAmBrC,GAhBIikB,IACE10B,KAAKwQ,OACPxQ,KAAKyQ,SAAW,KAGhBzQ,KAAKgvB,SAAS,qBAOlByF,GACEA,EAAgBzB,sBAAwBviB,IACvCgkB,EAAgBzB,oBAAsB,MAErChzB,KAAKquB,WACP,OAOAqG,GACAD,GACAA,EAAgBN,mBACfn0B,KAAKwQ,QAENxQ,KAAKgvB,SAASzF,IAKpBiH,wBAAwB/f,GACtB,MAAMmf,EAAY5vB,KAAKmuB,oBAAoB1d,GAE3C,OAAImf,GACF5vB,KAAKwyB,aAAa5C,EAAUnf,UAErBmf,EAAUtG,QAGZ,KAGTrW,qBACE0hB,EACApE,EAAmB,CAAEhC,YAAa,KAElC,GACEvuB,KAAK40B,qBAAqB50B,KAAKyQ,WAC/BkkB,IAAgB30B,KAAKyQ,SACrB,KAAAokB,EAAAC,EACA,MAAMC,EAAe/0B,KAAKmuB,oBAAoBnuB,KAAKyQ,UAC7CgkB,EAAkBz0B,KAAKmuB,oBAC3B4G,EAAaxL,gBAGfvpB,KAAK+yB,wBAAwB0B,EAAiBz0B,KAAKyQ,UAEzB,QAA1BokB,EAAAE,EAAad,qBAAa,IAAAY,GAA1BA,EAAAt/B,KAAAw/B,GAA6B,GACM,QAAnCD,EAAAC,EAAaf,8BAAsB,IAAAc,GAAnCA,EAAAv/B,KAAAw/B,EACE/0B,KAAKwwB,wBAAwBxwB,KAAKyQ,UAClC8f,GAMJ,GAFAvwB,KAAKyQ,SAAWkkB,EAEZ30B,KAAK40B,qBAAqB50B,KAAKyQ,UAAW,KAAAukB,EAAAC,EAC5C,MAAMC,EAAel1B,KAAKmuB,oBAAoBnuB,KAAKyQ,UAEzB,QAA1BukB,EAAAE,EAAajB,qBAAa,IAAAe,GAA1BA,EAAAz/B,KAAA2/B,GAA6B,GAC7Bl1B,KAAKm1B,6BAA6Bn1B,KAAKyQ,SAAU8f,GACd,QAAnC0E,EAAAC,EAAanB,8BAAsB,IAAAkB,GAAnCA,EAAA1/B,KAAA2/B,EACEl1B,KAAKwwB,wBAAwBxwB,KAAKyQ,UAClC8f,IAKN4E,6BAA6B1kB,EAAkB8f,GAC7C,MAAM6E,EAAoB,GAE1B,IAAI7C,EAAmBvyB,KAAKmuB,oBAAoB1d,GAKhD,KAAO8hB,GAAkB,CACvB,MAAM,eAAEhJ,GAAmBgJ,EAErBkC,EAAkBz0B,KAAKmuB,oBAAoB5E,GAEjD,GAAIkL,EAAiB,CACnB,MAAQhkB,SAAU4kB,GAA0BZ,EAE5CW,EAAQ3/B,KAAK4/B,GAGf9C,EAAmBkC,EAGrB,MAAMa,EAAsBhK,EAC1BtrB,KAAKouB,0BACLgH,GAEIG,EAAmBjK,EACvB8J,EACAp1B,KAAKouB,2BAGP7xB,EAAQ+4B,EAAsB/L,IAAmB,IAAAiM,EAC/C,MAAMf,EAAkBz0B,KAAKmuB,oBAAoB5E,GAEjDkL,GACEA,EAAgBlB,gBACuB,QADViC,EAC7Bf,EAAgBP,+BAAuB,IAAAsB,GAAvCA,EAAAjgC,KAAAk/B,GAA0C,IAC5Cz0B,KAAKy1B,gCAAgClM,EAAgBgH,KAGvDh0B,EAAQg5B,EAAmBhM,IAAmB,IAAAmM,EAC5C,MAAMjB,EAAkBz0B,KAAKmuB,oBAAoB5E,GAEjDkL,GACEA,EAAgBlB,gBACuB,QADVmC,EAC7BjB,EAAgBP,+BAAuB,IAAAwB,GAAvCA,EAAAngC,KAAAk/B,GAA0C,IAC5Cz0B,KAAK21B,gCAAgCpM,EAAgBgH,KAGvDvwB,KAAKouB,0BAA4BgH,EAGnCQ,8BAA8BnlB,GAC5B,IAAI8hB,EAAmBvyB,KAAKmuB,oBAAoB1d,GAKhD,KAAO8hB,GAAkB,CACvB,MAAM,eAAEhJ,GAAmBgJ,EAErBkC,EAAkBz0B,KAAKmuB,oBAAoB5E,GAE7CkL,GACFz0B,KAAK+yB,wBACH0B,EACAlC,EAAiB9hB,UAIrB8hB,EAAmBkC,GAIvBxE,YACE,OAAOjwB,KAAK2uB,OAGdS,UAAUT,GACR3uB,KAAK2uB,OAAS,IACT3uB,KAAKiwB,eACLtB,GAIPiG,qBAAqBnkB,GACnB,QAASzQ,KAAKmuB,oBAAoB1d,GAOpCijB,kCAAkCjjB,GAChC,OACEzQ,KAAK40B,qBAAqBnkB,IAC1BzQ,KAAKmuB,oBAAoB1d,GAAU6gB,UAIvCqE,gCAAgCllB,EAAkB8f,GAAwB,IAAAsF,EAAAC,EACxE91B,KAAK0zB,kCAAkCjjB,KACoB,QADXolB,GAC9CC,EAAA91B,KAAKmuB,oBAAoB1d,IAAUsjB,8BAAsB,IAAA8B,GAAzDA,EAAAtgC,KAAAugC,EACE91B,KAAKwwB,wBAAwB/f,GAC7B8f,IAINkF,gCAAgChlB,EAAkB8f,GAAwB,IAAAwF,EAAAC,EACxEh2B,KAAK0zB,kCAAkCjjB,KACoB,QADXslB,GAC9CC,EAAAh2B,KAAKmuB,oBAAoB1d,IAAUujB,8BAAsB,IAAA+B,GAAzDA,EAAAxgC,KAAAygC,EACEh2B,KAAKwwB,wBAAwB/f,GAC7B8f,IAINpb,QAAc,IAAA8gB,EAAAC,EACZl2B,KAAKouB,0BAA4B,GACjCpuB,KAAKuuB,YAAc,GACnBvuB,KAAKoS,IAAI,QAAS,UACC,QAAnB6jB,EAAAj2B,KAAK6uB,sBAAc,IAAAoH,GAAnBA,EAAqB7O,QACF,QAAnB8O,EAAAl2B,KAAK6uB,sBAAc,IAAAqH,GAAnBA,EAAqB9M,eACrBppB,KAAKm2B,yBAAyB55B,QAASqzB,IAAc,IAAAwG,EAAAC,EAC5B,QAAvBD,EAAAxG,EAAUqE,qBAAa,IAAAmC,GAAvBA,EAAA7gC,KAAAq6B,GAA0B,GACO,QAAjCyG,EAAAzG,EAAUsE,+BAAuB,IAAAmC,GAAjCA,EAAA9gC,KAAAq6B,GAAoC,KAEtC5vB,KAAKwQ,QAAS,EAGhB0C,SACElT,KAAKwQ,QAAS,EAGhBwe,SACEqE,EACA9C,EAAmB,CAAEhC,YAAa,KAElC,MAAM+H,EAAiBt2B,KAAKyQ,SACtBkkB,EAAc30B,KAAKozB,gBAAgBC,GAEzCrzB,KAAKoS,IAAI,WAAY,cAAeuiB,GAEpC30B,KAAKiT,qBAAqB0hB,EAAapE,GACvCvwB,KAAKm1B,6BAA6BR,EAAapE,GAC/CvwB,KAAK41B,8BAA8BU,GAGrCrH,mBACMjvB,KAAKquB,YAITj5B,OAAO2gB,QAAQ/V,KAAKmuB,qBAAqB5xB,QAAQ,EAAEkU,MACjDzQ,KAAKwyB,aAAa/hB,KAItB+hB,aAAa/hB,GACX,MAAMmf,EAAY5vB,KAAKmuB,oBAAoB1d,GAE3C,IAAKmf,GAAa5vB,KAAKquB,YAAcuB,EAAU0C,cAC7C,OAGF,MAAM,KAAEhL,GAASsI,EAEjB3H,EACEX,EACA,CACEwC,EACAC,EACAhP,EACAF,EACA6M,EACAE,KAEAgI,EAAUtG,OAAS,CACjBQ,IACAC,IACAhP,QACAF,SACA6M,OACAE,MACAN,UAMRiP,gBACE9lB,GACA,KACE6W,EAAI,uBACJkM,EAAsB,UACtBlC,EAAS,mBACT8C,IAGF,GAAIp0B,KAAKquB,WACP,OAGF,MAAMuB,EAAY5vB,KAAKmuB,oBAAoB1d,GAEvCmf,IACFA,EAAU4D,uBAAyBA,EACnC5D,EAAU0B,UAAYA,UAAa1B,EAAU0B,UAC7C1B,EAAUwE,mBAAqBA,EAE3B9M,IACFsI,EAAUtI,KAAOA,IAKvBkP,eACE,OAAOx2B,KAAKquB,WAGd8H,yBACE,OAAO/gC,OAAOyV,OAAO7K,KAAKmuB,qBAG5BsI,uCACElN,GAEA,OAAOn0B,OAAOyV,OAAO7K,KAAKmuB,qBAAqBlvB,OAC5C2wB,GAAcA,EAAUrG,iBAAmBA,IAQnCla,O,8DEt4Cf,YAEA,IAAIsV,EAAQ,EAAQ,GAChB+R,EAAsB,EAAQ,IAC9B9R,EAAa,EAAQ,IACrB+R,EAAuB,EAAQ,IAC/BC,EAAa,EAAQ,IAErBC,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBnT,EAASxqB,IACjCwrB,EAAM/oB,YAAY+nB,IAAYgB,EAAM/oB,YAAY+nB,EAAQ,mBAC3DA,EAAQ,gBAAkBxqB,GA+B9B,IA1BM49B,EA0BFtS,EAAW,CAEbuS,aAAcL,EAEdI,UA7B8B,oBAAnBE,qBAGmB,IAAZp2B,GAAuE,qBAA5CzL,OAAOC,UAAU8F,SAAS5F,KAAKsL,MAD1Ek2B,EAAU,EAAQ,KAKbA,GAwBPG,iBAAkB,CAAC,SAA0BtiC,EAAM+uB,GAIjD,GAHA+S,EAAoB/S,EAAS,UAC7B+S,EAAoB/S,EAAS,gBAEzBgB,EAAM5nB,WAAWnI,IACnB+vB,EAAM9oB,cAAcjH,IACpB+vB,EAAM9nB,SAASjI,IACf+vB,EAAMpnB,SAAS3I,IACf+vB,EAAMzoB,OAAOtH,IACb+vB,EAAMxoB,OAAOvH,GAEb,OAAOA,EAET,GAAI+vB,EAAM1nB,kBAAkBrI,GAC1B,OAAOA,EAAKwI,OAEd,GAAIunB,EAAMroB,kBAAkB1H,GAE1B,OADAkiC,EAAsBnT,EAAS,mDACxB/uB,EAAKuG,WAGd,IAGIiB,EAHA+6B,EAAkBxS,EAAM7oB,SAASlH,GACjCwiC,EAAczT,GAAWA,EAAQ,gBAIrC,IAAKvnB,EAAauoB,EAAMvoB,WAAWxH,KAAWuiC,GAAmC,wBAAhBC,EAAwC,CACvG,IAAIC,EAAYr3B,KAAKs3B,KAAOt3B,KAAKs3B,IAAIt6B,SACrC,OAAO45B,EAAWx6B,EAAa,CAAC,UAAWxH,GAAQA,EAAMyiC,GAAa,IAAIA,GACrE,OAAIF,GAAmC,qBAAhBC,GAC5BN,EAAsBnT,EAAS,oBAnDrC,SAAyB4T,EAAUC,EAAQC,GACzC,GAAI9S,EAAMtnB,SAASk6B,GACjB,IAEE,OADCC,GAAU5xB,KAAK2gB,OAAOgR,GAChB5S,EAAMvmB,KAAKm5B,GAClB,MAAOphC,GACP,GAAe,gBAAXA,EAAE8B,KACJ,MAAM9B,EAKZ,OAAQshC,GAAW7xB,KAAKC,WAAW0xB,GAwCxBG,CAAgB9iC,IAGlBA,IAGT+iC,kBAAmB,CAAC,SAA2B/iC,GAC7C,IAAIoiC,EAAeh3B,KAAKg3B,cAAgBvS,EAASuS,aAC7CY,EAAoBZ,GAAgBA,EAAaY,kBACjDC,EAAoBb,GAAgBA,EAAaa,kBACjDC,GAAqBF,GAA2C,SAAtB53B,KAAK+3B,aAEnD,GAAID,GAAsBD,GAAqBlT,EAAMtnB,SAASzI,IAASA,EAAKO,OAC1E,IACE,OAAOyQ,KAAK2gB,MAAM3xB,GAClB,MAAOuB,GACP,GAAI2hC,EAAmB,CACrB,GAAe,gBAAX3hC,EAAE8B,KACJ,MAAM2sB,EAAWnd,KAAKtR,EAAGyuB,EAAWoT,iBAAkBh4B,KAAM,KAAMA,KAAK+jB,UAEzE,MAAM5tB,GAKZ,OAAOvB,IAOTmC,QAAS,EAETkhC,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBd,IAAK,CACHt6B,SAAU,EAAQ,KAGpBq7B,eAAgB,SAAwBrU,GACtC,OAAOA,GAAU,KAAOA,EAAS,KAGnCL,QAAS,CACPe,OAAQ,CACN,OAAU,uCAKhBC,EAAMpoB,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6B+7B,GACpE7T,EAASd,QAAQ2U,GAAU,MAG7B3T,EAAMpoB,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+B+7B,GACrE7T,EAASd,QAAQ2U,GAAU3T,EAAM/mB,MAAMi5B,MAGzC5gC,EAAOD,QAAUyuB,I,+CCjJjB,2BAGI8T,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,+jDAAgkD,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,sDAAsD,MAAQ,GAAG,SAAW,quBAAquB,eAAiB,CAAC,gkDAAgkD,WAAa,MAErgI,O,6BCPf,2BAGIsjC,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,8QAA+Q,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wEAAwE,MAAQ,GAAG,SAAW,+HAA+H,eAAiB,CAAC,+QAA+Q,WAAa,MAE/0B,O,6BCPf,2BAGIsjC,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,0TAA2T,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mFAAmF,MAAQ,GAAG,SAAW,sHAAsH,eAAiB,CAAC,2TAA2T,WAAa,MAEz6B,O,6BCPf,2BAGIsjC,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,yhDAA0hD,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iFAAiF,MAAQ,GAAG,SAAW,gbAAgb,eAAiB,CAAC,0hDAA0hD,WAAa,MAE/pH,O,6BCPf,2BAGIsjC,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,iQAAkQ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,qEAAqE,MAAQ,GAAG,SAAW,gIAAgI,eAAiB,CAAC,kQAAkQ,WAAa,MAEnzB,O,6BCPf,2BAGIsjC,EAHJ,MAG8B,GAA4B,KAE1DA,EAAwB9iC,KAAK,CAACQ,EAAOhB,EAAI,otBAAqtB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,sFAAsF,MAAQ,GAAG,SAAW,4SAA4S,eAAiB,CAAC,qtBAAqtB,WAAa,MAEt5D,O,gBCUbgB,EAAOD,QAAU,EAAQ,GAAR,I,6BCjBnB,4BAoCewiC,IAxBwBA,EAAG7uB,eACxC,MAAM8uB,EAAMC,iBAA8B,OACpC,OAAEC,EAAM,UAAEC,GAAcC,cAe9B,OAbAC,oBAAU,KACR,MAAMzH,EAAUoH,EAAIM,QAKpB,OAJI1H,GACFsH,EAAOtH,GAGF,KACDA,GACFuH,EAAUvH,KAGb,CAACsH,EAAQC,IAGVpvB,IAAA3S,cAAA,OAAKmiC,UAAU,iBAAiBP,IAAKA,GAClC9uB,K,2GC5BHtG,EAAU,CAEd,OAAiB,OACjB,WAAoB,GAEP,IAAI,IAASA,GAIX,IAAQ41B,O,uNCRvB,MAwCaC,EAA6B1vB,IAAM2vB,cAE9C,CACAR,OAAQA,OACRC,UAAWA,OACXQ,uBAAwBA,SA8IXC,IA9HwDA,EACrE1vB,WACA2vB,yBACAC,qBAAqB,KAClBpG,MAEH,MAAOqG,EAAUC,GAAeC,oBAAS,GACnCC,EAAUjB,iBAAyB,IAAIkB,KACvCC,EAAUnB,iBAAO,IACjBoB,EAAcpB,iBAAO,IACrBqB,EAAkBrB,iBAAsB,IAExCC,EAASqB,sBAAavB,IAC1BkB,EAAQZ,QAAQkB,IAAIxB,GACpBoB,EAAQd,QAAU1qB,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,KACzD,IAEGmiB,EAAYoB,sBAAavB,IAC7BkB,EAAQZ,QAAQ9vB,OAAOwvB,GACvBoB,EAAQd,QAAU1qB,KAAKE,SAASpT,SAAS,IAAIsb,UAAU,EAAG,KACzD,IAEGyjB,EAAiBF,sBAAY,KACjC,GAAIH,EAAQd,UAAYe,EAAYf,QAClC,OAAOgB,EAAgBhB,QAGzB,MAAMoB,EAAYx+B,MAAM8L,KAAKkyB,EAAQZ,SAgBrC,OAdAgB,EAAgBhB,QAAUoB,EAAUvT,KAAK,CAAC3oB,EAAGC,KAC3C,IAAKo7B,EAAwB,OAAO,EACpC,MAAMc,EAAgBd,EAAuBe,wBACvCC,EAAQr8B,EAAIA,EAAEo8B,wBAA0B,CAAEzS,IAAK,EAAG2S,OAAQ,GAC1DC,EAAQt8B,EAAIA,EAAEm8B,wBAA0B,CAAEzS,IAAK,EAAG2S,OAAQ,GAMhE,OAHkBD,EAAM1S,IAAMwS,EAAcxS,KAC1B4S,EAAM5S,IAAMwS,EAAcxS,OAK9CkS,EAAYf,QAAUc,EAAQd,QACvBgB,EAAgBhB,SACtB,CAACO,IAKEF,EAAyBY,sBAC7Bp5B,MAAO0oB,EAAgBjmB,KACrB,IAAKi2B,IAA2BhQ,EAAOhC,KAAM,OAE7C,MAAMO,GAAYxkB,aAAO,EAAPA,EAASwkB,YAAa,EAClC4S,EAAOP,IAnHLQ,cAuHK,EAvHU,IAAInkC,QAASC,GAAY4B,WAAW5B,EAASkkC,KA0HpE,MAAMN,EAAgBd,EAAuBe,wBACvCM,EAAWrR,EAAOhC,KAAK+S,wBAC7B,IAAIx2B,GAAS,EAEb,IAAK,IAAI5O,EAAIwlC,EAAKtlC,OAAS,EAAGF,GAAK,EAAGA,IACpC,GAAIwlC,EAAKxlC,GAAGs8B,SAASjI,EAAOhC,MAAO,CACjCzjB,EAAQ5O,EACR,MAIJ,IAAe,IAAX4O,EAIF,YAHA7J,QAAQ4V,KACN,qGAKJ,IAAIgrB,GAAa,EAYjB,GAVAH,EAAKrgC,MAAMyJ,GAAOtH,QAASkN,IACzB,MAAMoxB,EAAOpxB,EAAG4wB,yBAEdQ,EAAKN,OAASH,EAAcG,QAC5BM,EAAKjT,IAAMwS,EAAcxS,OAEzBgT,GAAa,MAIZA,EAAY,OAEjB,MAAM7iC,EACM,IAAV8L,EACI,EACAy1B,EAAuBtR,WACtB2S,EAAS/S,IAAMwS,EAAcxS,IAAM2R,EAAqB1R,GAC/DyR,EAAuBtR,UAAYjwB,EAEnC0hC,EAAaqB,IACX,MAAMC,EAAchjC,EAAS,EAC7B,OAAO+iC,IAASC,EAAcA,EAAcD,KAGhD,CAACxB,EAAwBC,EAAoBW,IAGzCc,EAAeC,kBACnB,KAAM,CACJtC,SACAC,YACAQ,2BAEF,CAACT,EAAQC,EAAWQ,IAGtB,OACE5vB,IAAA3S,cAACqiC,EAA2BgC,SAAQ,CAAC/hC,MAAO6hC,GAC1CxxB,IAAA3S,cAAA,MAAAskC,EAAA,CAAKnC,UAAU,uBAAuBoC,gBAAe5B,GAAcrG,GAChExpB,M,6BCzLT,qDAgBO,MAAMkvB,EAAyBA,KACpC,MAAMnqB,EAAU2sB,qBAAWnC,KAC3B,IAAKxqB,EACH,MAAM,IAAIpX,MACR,oEAGJ,OAAOoX,I,6BCvBT,2BAIA,MAAM4sB,EAAeC,eAAK,IAAM,+BAC1BC,EAAWD,eAAK,IAAM,+BACtBE,EAAWF,eAAK,IAAM,+BACtBG,EAAYH,eAAK,IAAM,+BACvBI,EAAcJ,eAAK,IAAM,+BACzBK,EAAaL,eAAK,IAAM,+BACxBM,EAAeN,eAAK,IAAM,+BAC1BO,EAAYP,eAAK,IAAM,+BACvBQ,EAAgBR,eAAK,IAAM,+BAC3BS,EAAYT,eAAK,IAAM,+BACvBU,EAAkBV,eAAK,IAAM,+BAC7BW,EAAkBX,eAAK,IAAM,+BAC7BY,EAAcZ,eAAK,IAAM,+BACzBa,EAAWb,eAAK,IAAM,+BACtBc,EAAiBd,eAAK,IAAM,+BAC5Be,EAAWf,eAAK,IAAM,+BACtBgB,EAAchB,eAAK,IAAM,+BACzBiB,EAAcjB,eAAK,IAAM,+BACzBkB,EAAkBlB,eAAK,IAAM,+BAC7BmB,EAAenB,eAAK,IAAM,+BAC1BoB,EAAmBpB,eAAK,IAAM,+BA8B9BqB,EAA8D,IA3BS,CAC3E,CAACriC,IAAiBC,gBAAiB8gC,EACnC,CAAC/gC,IAAiBG,WAAY+gC,EAC9B,CAAClhC,IAAiBE,YAAaihC,EAC/B,CAACnhC,IAAiBI,cAAewhC,EACjC,CAAC5hC,IAAiBK,WAAYwhC,EAC9B,CAAC7hC,IAAiBM,aAAcwhC,EAChC,CAAC9hC,IAAiBS,WAAY0hC,EAC9B,CAACniC,IAAiBO,eAAgB2hC,EAClC,CAACliC,IAAiBQ,gBAAiB4hC,EACnC,CAACpiC,IAAiBU,qBAAsBuhC,MAGyB,CACjEK,KAAMrB,EACNsB,QAASnB,EACToB,OAAQnB,EACRoB,SAAUnB,EACVoB,MAAOnB,EACPoB,UAAWnB,EACXoB,MAAOnB,EACPoB,YAAanB,EACboB,YAAanB,EACboB,KAAMhB,EACNiB,kBAAmBhB,IAiBfiB,EAAY7+B,GAChB6K,IAAA3S,cAAA,OAAKwN,MAAO,CAAE0W,MAAOpc,EAAMoc,MAAOF,OAAQlc,EAAMkc,UAMlD,MAAM4iB,UAAaj0B,IAAMk0B,UACvBn0B,SACE,MAAM,SAAEo0B,EAAQ,MAAE5iB,EAAK,OAAEF,GAAW7a,KAAKrB,MAEnCi/B,EAAgBhB,EAAYe,GAClC,OAAKC,EAKHp0B,IAAA3S,cAACgnC,WAAQ,CAACC,SAAUt0B,IAAA3S,cAAC2mC,EAAQ,CAACziB,MAAOA,EAAOF,OAAQA,KAClDrR,IAAA3S,cAAC+mC,EAAa,CAACD,SAAUA,EAAU5iB,MAAOA,EAAOF,OAAQA,KALpDrR,IAAA3S,cAAC2mC,EAAQ,CAACziB,MAAOA,EAAOF,OAAQA,KAW9B4iB,O,yECzFXp6B,EAAU,CAEd,OAAiB,OACjB,WAAoB,G,GAEP,IAAI,IAASA,GAIX,IAAQ41B,O,8NCPvB,MAAM8E,UAAmBv0B,IAAMk0B,UAG7Bn0B,SACE,MAAMyvB,EAAY,CAAC,cAAeh5B,KAAKrB,MAAMq6B,WAAWn0B,KAAK,KAE7D,OACE2E,IAAA3S,cAAC2hC,IAAa,KACZhvB,IAAA3S,cAAA,SAAAskC,EAAA,GAAYn7B,KAAKrB,MAAK,CAAEq6B,UAAWA,IAChCh5B,KAAKrB,MAAMgL,YAOPo0B,O,ugBChBR,MAAenvB,EAAU9R,cAAAiD,EAAA,kBACT,IAAIF,KAAoB,IAAME,EAAA,cAClC,IAAIF,IAA0B,OAE/C,gBACE,OAAOG,KAAKg+B,WAGd,YACE,OAAOh+B,KAAKi+B,OAGJC,WAAWC,GACnBn+B,KAAKg+B,WAAW7kC,MAAQglC,EAGhBC,SAAS/mC,GACjB2I,KAAKi+B,OAAO9kC,MAAQ9B,K,ghBCrBjB,MAAMgnC,UAAqB/mC,MAChCwF,YAAY9E,GACVgX,MAAMhX,GACNgI,KAAK/H,KAAO,gBAIT,MAAMqmC,UAAkBhnC,MAC7BwF,YAAY9E,GACVgX,MAAMhX,GACNgI,KAAK/H,KAAO,aAIT,MAAMsmC,UAAsBjnC,MACjCwF,YAAY9E,GACVgX,MAAMhX,GACNgI,KAAK/H,KAAO,iBAIT,MAAMumC,UAAoBlnC,MAG/BwF,YAAY2hC,EAAoBzmC,GAC9BgX,MAAMhX,GAAS+H,EAAA,0BACfC,KAAK/H,KAAO,cACZ+H,KAAKy+B,WAAaA,GAIf,MAAMC,UAAwBpnC,MAGnCwF,YAAY2hC,EAAoBzmC,GAC9BgX,MAAMhX,GAAS+H,EAAA,0BACfC,KAAK/H,KAAO,kBACZ+H,KAAKy+B,WAAaA,G,6bC1Bf,MAaME,EAAa,CACxBC,IAAK,MACLC,KAAM,OACNC,IAAK,MACLC,OAAQ,UAslBK/xB,IAzkBf,MAUElQ,YACEuG,EAAiC,GACjC27B,GACAj/B,EAAA,4BAAAA,EAAA,6BAAAA,EAAA,8BAAAA,EAAA,4BAAAA,EAAA,4BACAC,KAAKi/B,aAAe,IAAIp2B,IAGxB7I,KAAK4W,aACHvT,EAAQuT,cACR,IAAIC,IAAyBxT,EAAQ67B,sBAGvCl/B,KAAKm/B,cACH97B,EAAQ+7B,eACR,IAAIlyB,IAAmB,CACrBJ,QAvDwB,yBAwDxBO,QAAS,EACTD,MAAO,IACPD,QAAS,IAIbnN,KAAKq/B,eACHh8B,EAAQ4J,uBACR,IAAIC,IAAmB,CACrBJ,QAASzJ,EAAQi8B,iBAAmB,GACpCjyB,QAAS,EACTD,MAAO,IACPD,QAAS,IAGbnN,KAAKyZ,aAAeulB,GACK,oBAAfO,YAA8BA,WAAW9lB,cAAiB,CAChEtkB,OAAQ,EACRiyB,MAAOA,OACP1N,QAASA,IAAM,KACfjgB,IAAKA,IAAM,KACX+sB,WAAYA,OACZ5M,QAASA,QAOf0K,kBAAkBC,EAAsBC,GACtCxkB,KAAKm/B,cAAc7a,kBAAkBC,EAAOC,GAO9C,gBACEgb,EACAC,EACAC,GAEA,MAAM7Y,EAAW7mB,KAAK4W,aAAaoP,gBACjCpgB,KAAKC,UAAU,CACb2H,SAAUgyB,EAAYhyB,SACtB6W,OAAQmb,EAAYnb,OACpBzvB,KAAM,QAIV,GAAI6qC,EAAU,CACZ,MAAM1Y,EAAa/mB,KAAK4W,aAAamD,SAAY8M,GACjD,GAAIE,EACF,OAAOA,EAIX,MAAMhD,QAAiB2b,IAMvB,OAJID,GACFz/B,KAAK4W,aAAaqD,SAAS4M,EAAU9C,GAGhCA,EAMD4b,YAAYtoC,GAElB,GAAIA,EAAM0sB,SAAU,KAAA6b,EAClB,MAAM5b,EAAS3sB,EAAM0sB,SAASC,OACxBhsB,GAA6B,QAAnB4nC,EAAAvoC,EAAM0sB,SAASnvB,YAAI,IAAAgrC,OAAA,EAAnBA,EAAqB5nC,UAAWX,EAAMW,QAEtD,MAAe,MAAXgsB,GAA6B,MAAXA,EACd,IAAIsa,EAAUtmC,GACA,MAAXgsB,EACH,IAAIua,EAAcvmC,GACfgsB,GAAU,IACb,IAAIwa,EAAYxa,EAAQhsB,GAExB,IAAI0mC,EAAgB1a,EAAQhsB,GAE/B,MAAIX,EAAMa,QAET,IAAImmC,EAAa,0BAGjBhnC,EAOV,yBAAiC,SAC/BmW,EAAQ,OACR8qB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,SACZ8b,GAAW,EAAK,sBAChBI,EAAwB,KAAI,gCAC5BC,GAAkC,IAYlC,MAAMC,EAAyC,CAC7C,+BA5KoB,oBA6KjBpc,GAIDkc,IACFE,EAAe,uBAAyBF,EAAsBhzB,OAC9DkzB,EAA8B,cAAI,UAAUF,EAAsBG,IAClED,EAAe,gBAAkB,oBAGnC,MAAME,EAAc3H,IAAWqG,EAAWC,KAAOa,EAE3CC,EAAU9+B,UACd,IAAImjB,EAEJ,GAAIuU,IAAWqG,EAAWC,IACxB7a,QAAiB/jB,KAAKm/B,cAAcpmC,IAClCyU,EACA6W,EACA0b,OAEG,IAAIzH,IAAWqG,EAAWE,KAG/B,MAAM,IAAIvnC,MAAM,UAAUghC,qBAF1BvU,QAAiB/jB,KAAKm/B,cAAclpB,KAAazI,EAAU5Y,GAS7D,OAJIkrC,IAAoC/b,IACtCA,EAAW,IAGNA,GAGT,IACE,aAAa/jB,KAAKkgC,UAChB,CAAE1yB,WAAU6W,UACZ4b,EACAP,GAEF,MAAOroC,GACP,OAAO2I,KAAK2/B,YAAYtoC,IAO5B,0BAAkC,SAChCmW,EAAQ,OACR8qB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,SACZ8b,GAAW,EAAK,gCAChBK,GAAkC,IAUlC,MAAMG,EAAc3H,IAAWqG,EAAWC,KAAOa,EAE3CC,EAAU9+B,UACd,IAAImjB,EAEJ,GAAIuU,IAAWqG,EAAWC,IACxB7a,QAAiB/jB,KAAKq/B,eAAetmC,IAAOyU,EAAU6W,EAAQV,OACzD,IAAI2U,IAAWqG,EAAWE,KAG/B,MAAM,IAAIvnC,MAAM,UAAUghC,qBAF1BvU,QAAiB/jB,KAAKq/B,eAAeppB,KAAazI,EAAU5Y,GAS9D,OAJIkrC,IAAoC/b,IACtCA,EAAW,IAGNA,GAGT,IACE,aAAa/jB,KAAKkgC,UAChB,CAAE1yB,WAAU6W,UACZ4b,EACAP,GAEF,MAAOroC,GACP,OAAO2I,KAAK2/B,YAAYtoC,IAQ5B,qCAA6C,SAC3CmW,EAAQ,OACR8qB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,SACZ8b,GAAW,EAAK,gCAChBK,GAAkC,IAUlC,MAAMG,EAAc3H,IAAWqG,EAAWC,KAAOa,EAC3C5Y,EAAW7mB,KAAK4W,aAAaoP,gBACjCpgB,KAAKC,UAAU,CAAE2H,WAAU6W,SAAQzvB,KAAM,QAI3C,GAAIqrC,EAAa,CACf,MAAMlZ,EAAa/mB,KAAK4W,aAAamD,SAAY8M,GACjD,GAAIE,EACF,MAAO,CAAEnyB,KAAMmyB,EAAYpD,QAAS,IAIxC,IACE,IAAII,EAEJ,GAAIuU,IAAWqG,EAAWC,IACxB7a,QAAiB/jB,KAAKq/B,eAAec,eACnC3yB,EACA6W,EACAV,OAEG,IAAI2U,IAAWqG,EAAWE,KAQ/B,MAAM,IAAIvnC,MAAM,UAAUghC,qBAP1BvU,QAAiB/jB,KAAKq/B,eAAee,gBACnC5yB,EACA5Y,EACAyvB,EACAV,GAeJ,OATImc,IAAoC/b,EAASnvB,OAC/CmvB,EAASnvB,KAAO,IAIdqrC,GACFjgC,KAAK4W,aAAaqD,SAAS4M,EAAU9C,EAASnvB,MAGzCmvB,EACP,MAAO1sB,GACP,OAAO2I,KAAK2/B,YAAYtoC,IAO5BgpC,uBAA+B,SAC7B7yB,EAAQ,SACRY,EAAQ,OACRkqB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,sBACZkc,EAAwB,KAAI,gCAC5BC,GAAkC,EAAK,OACvC3xB,EAAM,QACNM,IAcA,MAAM6xB,EAAU,GAAG9yB,KAAY5H,KAAKC,UAAUwe,MAAWze,KAAKC,UAC5DjR,KAIkC,IAAA2rC,EAAhCvgC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9BC,EAAAvgC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAC,GAA9BA,EAAgCC,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,IAI3B,MAAME,EAAa,IAAIE,gBACjBC,EAASH,EAAWG,OAqC1B,MAlCA,WACE,MAAQA,EAAOC,SAAS,CACtB,IACE,MAAM7c,QAAiB/jB,KAAK6gC,kBAAqB,CAC/CrzB,WACA8qB,SACAjU,SACAzvB,OACA+uB,UACAkc,wBACAC,kCACAL,UAAU,IAIZtxB,EAAO4V,GACP,MAAO1sB,GAEHoX,GACFA,EAAQpX,GAKPspC,EAAOC,eACJ,IAAIrqC,QAASC,GAAY4B,WAAW5B,EAAS4X,MAzBzD,GA+BApO,KAAKi/B,aAAal1B,IAAIu2B,EAAS,CAAEE,aAAYpyB,aAGtC,CACLoT,KAAMA,KACgC,IAAAsf,EAAhC9gC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9BQ,EAAA9gC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAQ,GAA9BA,EAAgCN,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,MASjC9xB,wBAAgC,SAC9BhB,EAAQ,SACRY,EAAQ,OACRkqB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,gCACZmc,GAAkC,EAAK,OACvC3xB,EAAM,QACNM,IAaA,MAAM6xB,EAAU,YAAY9yB,KAAY5H,KAAKC,UAC3Cwe,MACGze,KAAKC,UAAUjR,KAGgB,IAAAmsC,EAAhC/gC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9BS,EAAA/gC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAS,GAA9BA,EAAgCP,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,IAI3B,MAAME,EAAa,IAAIE,gBACjBC,EAASH,EAAWG,OAoC1B,MAjCA,WACE,MAAQA,EAAOC,SAAS,CACtB,IACE,MAAM7c,QAAiB/jB,KAAKuN,mBAAsB,CAChDC,WACA8qB,SACAjU,SACAzvB,OACA+uB,UACAmc,kCACAL,UAAU,IAIZtxB,EAAO4V,GACP,MAAO1sB,GAEHoX,GACFA,EAAQpX,GAKPspC,EAAOC,eACJ,IAAIrqC,QAASC,GAAY4B,WAAW5B,EAAS4X,MAxBzD,GA8BApO,KAAKi/B,aAAal1B,IAAIu2B,EAAS,CAAEE,aAAYpyB,aAGtC,CACLoT,KAAMA,KACgC,IAAAwf,EAAhChhC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9BU,EAAAhhC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAU,GAA9BA,EAAgCR,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,MASjCW,mCAA2C,SACzCzzB,EAAQ,SACRY,EAAQ,OACRkqB,EAASqG,EAAWC,IAAG,OACvBva,EAAS,GAAE,KACXzvB,EAAO,KAAI,QACX+uB,EAAU,GAAE,gCACZmc,GAAkC,EAAK,OACvC3xB,EAAM,QACNM,IAaA,MAAM6xB,EAAU,oBAAoB9yB,KAAY5H,KAAKC,UACnDwe,MACGze,KAAKC,UAAUjR,KAGgB,IAAAssC,EAAhClhC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9BY,EAAAlhC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAY,GAA9BA,EAAgCV,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,IAI3B,MAAME,EAAa,IAAIE,gBACjBC,EAASH,EAAWG,OAoC1B,MAjCA,WACE,MAAQA,EAAOC,SAAS,CACtB,IACE,MAAM7c,QAAiB/jB,KAAKmhC,8BAAiC,CAC3D3zB,WACA8qB,SACAjU,SACAzvB,OACA+uB,UACAmc,kCACAL,UAAU,IAIZtxB,EAAO4V,GACP,MAAO1sB,GAEHoX,GACFA,EAAQpX,GAKPspC,EAAOC,eACJ,IAAIrqC,QAASC,GAAY4B,WAAW5B,EAAS4X,MAxBzD,GA8BApO,KAAKi/B,aAAal1B,IAAIu2B,EAAS,CAAEE,aAAYpyB,aAGtC,CACLoT,KAAMA,KACgC,IAAA4f,EAAhCphC,KAAKi/B,aAAal2B,IAAIu3B,KACM,QAA9Bc,EAAAphC,KAAKi/B,aAAalmC,IAAIunC,UAAQ,IAAAc,GAA9BA,EAAgCZ,WAAWC,QAC3CzgC,KAAKi/B,aAAah2B,OAAOq3B,MASjCe,iBACE,IAAK,MAAO5nC,GAAK,WAAE+mC,MAAiBxgC,KAAKi/B,aAAalpB,UACpDyqB,EAAWC,QACXzgC,KAAKi/B,aAAah2B,OAAOxP,GAO7B0tB,gBACE,MAAMma,EAAiBthC,KAAKyZ,aAAatkB,OACzC,IAAK,IAAIF,EAAI,EAAGA,EAAIqsC,EAAgBrsC,IAAK,CACvC,MAAMwE,EAAMuG,KAAKyZ,aAAahgB,IAAIxE,GAC9BwE,GAAOA,EAAI2sB,WAAW,mBACxBpmB,KAAKyZ,aAAa+M,WAAW/sB,O,6DC3mBrCxD,EAAOD,QAAU,SAAcyG,EAAI0B,GACjC,OAAO,WAEL,IADA,IAAI0sB,EAAO,IAAIlvB,MAAMoC,UAAU5I,QACtBF,EAAI,EAAGA,EAAI41B,EAAK11B,OAAQF,IAC/B41B,EAAK51B,GAAK8I,UAAU9I,GAEtB,OAAOwH,EAAGsuB,MAAM5sB,EAAS0sB,M,6BCN7B,IAAIlG,EAAQ,EAAQ,GAEpB,SAAS4c,EAAO7lC,GACd,OAAOiK,mBAAmBjK,GACxB2C,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrBpI,EAAOD,QAAU,SAAkBwrC,EAAKnd,EAAQod,GAE9C,IAAKpd,EACH,OAAOmd,EAGT,IAAIE,EACJ,GAAID,EACFC,EAAmBD,EAAiBpd,QAC/B,GAAIM,EAAMroB,kBAAkB+nB,GACjCqd,EAAmBrd,EAAOlpB,eACrB,CACL,IAAIwmC,EAAQ,GAEZhd,EAAMpoB,QAAQ8nB,GAAQ,SAAmB3oB,EAAKjC,GACxCiC,UAIAipB,EAAMlpB,QAAQC,GAChBjC,GAAY,KAEZiC,EAAM,CAACA,GAGTipB,EAAMpoB,QAAQb,GAAK,SAAoBkmC,GACjCjd,EAAM1oB,OAAO2lC,GACfA,EAAIA,EAAEC,cACGld,EAAM7oB,SAAS8lC,KACxBA,EAAIh8B,KAAKC,UAAU+7B,IAErBD,EAAMlsC,KAAK8rC,EAAO9nC,GAAO,IAAM8nC,EAAOK,WAI1CF,EAAmBC,EAAM98B,KAAK,KAGhC,GAAI68B,EAAkB,CACpB,IAAII,EAAgBN,EAAI9hC,QAAQ,MACT,IAAnBoiC,IACFN,EAAMA,EAAIpnC,MAAM,EAAG0nC,IAGrBN,KAA8B,IAAtBA,EAAI9hC,QAAQ,KAAc,IAAM,KAAOgiC,EAGjD,OAAOF,I,6BClETvrC,EAAOD,QAAU,CACf4hC,mBAAmB,EACnBC,mBAAmB,EACnBkK,qBAAqB,I,8BCLvB,YAEA,IAAIpd,EAAQ,EAAQ,GAqEpB1uB,EAAOD,QA5DP,SAAoBwG,EAAKwlC,GAEvBA,EAAWA,GAAY,IAAIhlC,SAE3B,IAAImoB,EAAQ,GAEZ,SAAS8c,EAAa9oC,GACpB,OAAc,OAAVA,EAAuB,GAEvBwrB,EAAM1oB,OAAO9C,GACRA,EAAM0oC,cAGXld,EAAM9oB,cAAc1C,IAAUwrB,EAAMhoB,aAAaxD,GAC5B,mBAAT+oC,KAAsB,IAAIA,KAAK,CAAC/oC,IAAUgpC,EAAO16B,KAAKtO,GAG/DA,EAwCT,OArCA,SAASipC,EAAMxtC,EAAMytC,GACnB,GAAI1d,EAAM5oB,cAAcnH,IAAS+vB,EAAMlpB,QAAQ7G,GAAO,CACpD,IAA6B,IAAzBuwB,EAAMzlB,QAAQ9K,GAChB,MAAM0C,MAAM,kCAAoC+qC,GAGlDld,EAAM1vB,KAAKb,GAEX+vB,EAAMpoB,QAAQ3H,GAAM,SAAcuE,EAAOM,GACvC,IAAIkrB,EAAM/oB,YAAYzC,GAAtB,CACA,IACIyG,EADA0iC,EAAUD,EAAYA,EAAY,IAAM5oC,EAAMA,EAGlD,GAAIN,IAAUkpC,GAA8B,iBAAVlpC,EAChC,GAAIwrB,EAAMtlB,SAAS5F,EAAK,MAEtBN,EAAQyM,KAAKC,UAAU1M,QAClB,GAAIwrB,EAAMtlB,SAAS5F,EAAK,QAAUmG,EAAM+kB,EAAMhlB,QAAQxG,IAK3D,YAHAyG,EAAIrD,SAAQ,SAASkN,IAClBkb,EAAM/oB,YAAY6N,IAAOu4B,EAAShsB,OAAOssB,EAASL,EAAax4B,OAMtE24B,EAAMjpC,EAAOmpC,OAGfnd,EAAMod,WAENP,EAAShsB,OAAOqsB,EAAWJ,EAAartC,IAI5CwtC,CAAM5lC,GAECwlC,K,sDClET,IAAIrd,EAAQ,EAAQ,GAChB6d,EAAS,EAAQ,IACjBC,EAAU,EAAQ,IAClBC,EAAW,EAAQ,IACnBC,EAAgB,EAAQ,IACxBC,EAAe,EAAQ,IACvBC,EAAkB,EAAQ,IAC1BlM,EAAuB,EAAQ,IAC/B/R,EAAa,EAAQ,IACrBc,EAAgB,EAAQ,IACxBod,EAAgB,EAAQ,IAE5B7sC,EAAOD,QAAU,SAAoBkU,GACnC,OAAO,IAAI3T,SAAQ,SAA4BC,EAASC,GACtD,IAGIssC,EAHAC,EAAc94B,EAAOtV,KACrBmrC,EAAiB71B,EAAOyZ,QACxBoU,EAAe7tB,EAAO6tB,aAE1B,SAAS1wB,IACH6C,EAAO+4B,aACT/4B,EAAO+4B,YAAYC,YAAYH,GAG7B74B,EAAOy2B,QACTz2B,EAAOy2B,OAAOvP,oBAAoB,QAAS2R,GAI3Cpe,EAAM5nB,WAAWimC,IAAgBre,EAAMlnB,+BAClCsiC,EAAe,gBAGxB,IAAI7nC,EAAU,IAAI++B,eAGlB,GAAI/sB,EAAOi5B,KAAM,CACf,IAAIC,EAAWl5B,EAAOi5B,KAAKC,UAAY,GACnCC,EAAWn5B,EAAOi5B,KAAKE,SAAW39B,SAASC,mBAAmBuE,EAAOi5B,KAAKE,WAAa,GAC3FtD,EAAeuD,cAAgB,SAAW79B,KAAK29B,EAAW,IAAMC,GAGlE,IAAIE,EAAWZ,EAAcz4B,EAAO4C,QAAS5C,EAAOs3B,KAOpD,SAASgC,IACP,GAAKtrC,EAAL,CAIA,IAAIurC,EAAkB,0BAA2BvrC,EAAU0qC,EAAa1qC,EAAQwrC,yBAA2B,KAGvG3f,EAAW,CACbnvB,KAHkBmjC,GAAiC,SAAjBA,GAA6C,SAAjBA,EACvC7/B,EAAQ6rB,SAA/B7rB,EAAQyrC,aAGR3f,OAAQ9rB,EAAQ8rB,OAChB4f,WAAY1rC,EAAQ0rC,WACpBjgB,QAAS8f,EACTv5B,OAAQA,EACRhS,QAASA,GAGXsqC,GAAO,SAAkBrpC,GACvB3C,EAAQ2C,GACRkO,OACC,SAAiBtN,GAClBtD,EAAOsD,GACPsN,MACC0c,GAGH7rB,EAAU,MAoEZ,GAnGAA,EAAQ2rC,KAAK35B,EAAOouB,OAAOwL,cAAepB,EAASa,EAAUr5B,EAAOma,OAAQna,EAAOu3B,mBAAmB,GAGtGvpC,EAAQnB,QAAUmT,EAAOnT,QA+BrB,cAAemB,EAEjBA,EAAQsrC,UAAYA,EAGpBtrC,EAAQ6rC,mBAAqB,WACtB7rC,GAAkC,IAAvBA,EAAQ8rC,aAQD,IAAnB9rC,EAAQ8rB,QAAkB9rB,EAAQ+rC,aAAwD,IAAzC/rC,EAAQ+rC,YAAYvkC,QAAQ,WAKjFtH,WAAWorC,IAKftrC,EAAQgsC,QAAU,WACXhsC,IAILzB,EAAO,IAAImuB,EAAW,kBAAmBA,EAAWuf,aAAcj6B,EAAQhS,IAG1EA,EAAU,OAIZA,EAAQV,QAAU,WAGhBf,EAAO,IAAImuB,EAAW,gBAAiBA,EAAWwf,YAAal6B,EAAQhS,EAASA,IAGhFA,EAAU,MAIZA,EAAQmsC,UAAY,WAClB,IAAIC,EAAsBp6B,EAAOnT,QAAU,cAAgBmT,EAAOnT,QAAU,cAAgB,mBACxFigC,EAAe9sB,EAAO8sB,cAAgBL,EACtCzsB,EAAOo6B,sBACTA,EAAsBp6B,EAAOo6B,qBAE/B7tC,EAAO,IAAImuB,EACT0f,EACAtN,EAAa+K,oBAAsBnd,EAAW2f,UAAY3f,EAAWuf,aACrEj6B,EACAhS,IAGFA,EAAU,MAMRysB,EAAMlnB,uBAAwB,CAEhC,IAAI+mC,GAAat6B,EAAOu6B,iBAAmB5B,EAAgBU,KAAcr5B,EAAO+tB,eAC9EwK,EAAQiC,KAAKx6B,EAAO+tB,qBACpB9/B,EAEEqsC,IACFzE,EAAe71B,EAAOguB,gBAAkBsM,GAKxC,qBAAsBtsC,GACxBysB,EAAMpoB,QAAQwjC,GAAgB,SAA0BrkC,EAAKjC,QAChC,IAAhBupC,GAAqD,iBAAtBvpC,EAAI8B,qBAErCwkC,EAAetmC,GAGtBvB,EAAQysC,iBAAiBlrC,EAAKiC,MAM/BipB,EAAM/oB,YAAYsO,EAAOu6B,mBAC5BvsC,EAAQusC,kBAAoBv6B,EAAOu6B,iBAIjC1M,GAAiC,SAAjBA,IAClB7/B,EAAQ6/B,aAAe7tB,EAAO6tB,cAIS,mBAA9B7tB,EAAO06B,oBAChB1sC,EAAQg4B,iBAAiB,WAAYhmB,EAAO06B,oBAIP,mBAA5B16B,EAAO26B,kBAAmC3sC,EAAQ4sC,QAC3D5sC,EAAQ4sC,OAAO5U,iBAAiB,WAAYhmB,EAAO26B,mBAGjD36B,EAAO+4B,aAAe/4B,EAAOy2B,UAG/BoC,EAAa,SAAShS,GACf74B,IAGLzB,GAAQs6B,GAAWA,GAAUA,EAAOl5B,KAAQ,IAAI6tB,EAAkBqL,GAClE74B,EAAQuoC,QACRvoC,EAAU,OAGZgS,EAAO+4B,aAAe/4B,EAAO+4B,YAAY7iC,UAAU2iC,GAC/C74B,EAAOy2B,SACTz2B,EAAOy2B,OAAOC,QAAUmC,IAAe74B,EAAOy2B,OAAOzQ,iBAAiB,QAAS6S,KAI9EC,IACHA,EAAc,MAGhB,IAAI+B,EAAWjC,EAAcS,GAEzBwB,IAA+D,IAAnD,CAAE,OAAQ,QAAS,QAASrlC,QAAQqlC,GAClDtuC,EAAO,IAAImuB,EAAW,wBAA0BmgB,EAAW,IAAKngB,EAAWogB,gBAAiB96B,IAM9FhS,EAAQ+sC,KAAKjC,Q,6BCzNjB,IAAIkC,EAAgB,EAAQ,IACxBC,EAAc,EAAQ,IAW1BlvC,EAAOD,QAAU,SAAuB8W,EAASs4B,GAC/C,OAAIt4B,IAAYo4B,EAAcE,GACrBD,EAAYr4B,EAASs4B,GAEvBA,I,6BChBTnvC,EAAOD,QAAU,SAAkBmD,GACjC,SAAUA,IAASA,EAAMysB,c,6BCD3B,IAAIjB,EAAQ,EAAQ,GAUpB1uB,EAAOD,QAAU,SAAqBqvC,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIp7B,EAAS,GAEb,SAASq7B,EAAextC,EAAQuQ,GAC9B,OAAIqc,EAAM5oB,cAAchE,IAAW4sB,EAAM5oB,cAAcuM,GAC9Cqc,EAAM/mB,MAAM7F,EAAQuQ,GAClBqc,EAAM5oB,cAAcuM,GACtBqc,EAAM/mB,MAAM,GAAI0K,GACdqc,EAAMlpB,QAAQ6M,GAChBA,EAAOlO,QAETkO,EAIT,SAASk9B,EAAoBtmC,GAC3B,OAAKylB,EAAM/oB,YAAY0pC,EAAQpmC,IAEnBylB,EAAM/oB,YAAYypC,EAAQnmC,SAA/B,EACEqmC,OAAeptC,EAAWktC,EAAQnmC,IAFlCqmC,EAAeF,EAAQnmC,GAAOomC,EAAQpmC,IAOjD,SAASumC,EAAiBvmC,GACxB,IAAKylB,EAAM/oB,YAAY0pC,EAAQpmC,IAC7B,OAAOqmC,OAAeptC,EAAWmtC,EAAQpmC,IAK7C,SAASwmC,EAAiBxmC,GACxB,OAAKylB,EAAM/oB,YAAY0pC,EAAQpmC,IAEnBylB,EAAM/oB,YAAYypC,EAAQnmC,SAA/B,EACEqmC,OAAeptC,EAAWktC,EAAQnmC,IAFlCqmC,OAAeptC,EAAWmtC,EAAQpmC,IAO7C,SAASymC,EAAgBzmC,GACvB,OAAIA,KAAQomC,EACHC,EAAeF,EAAQnmC,GAAOomC,EAAQpmC,IACpCA,KAAQmmC,EACVE,OAAeptC,EAAWktC,EAAQnmC,SADpC,EAKT,IAAI0mC,EAAW,CACb,IAAOH,EACP,OAAUA,EACV,KAAQA,EACR,QAAWC,EACX,iBAAoBA,EACpB,kBAAqBA,EACrB,iBAAoBA,EACpB,QAAWA,EACX,eAAkBA,EAClB,gBAAmBA,EACnB,QAAWA,EACX,aAAgBA,EAChB,eAAkBA,EAClB,eAAkBA,EAClB,iBAAoBA,EACpB,mBAAsBA,EACtB,WAAcA,EACd,iBAAoBA,EACpB,cAAiBA,EACjB,eAAkBA,EAClB,UAAaA,EACb,UAAaA,EACb,WAAcA,EACd,YAAeA,EACf,WAAcA,EACd,iBAAoBA,EACpB,eAAkBC,GASpB,OANAhhB,EAAMpoB,QAAQnH,OAAOoP,KAAK6gC,GAASzhC,OAAOxO,OAAOoP,KAAK8gC,KAAW,SAA4BpmC,GAC3F,IAAItB,EAAQgoC,EAAS1mC,IAASsmC,EAC1BK,EAAcjoC,EAAMsB,GACvBylB,EAAM/oB,YAAYiqC,IAAgBjoC,IAAU+nC,IAAqBz7B,EAAOhL,GAAQ2mC,MAG5E37B,I,cClGTjU,EAAOD,QAAU,CACf,QAAW,W,gBCDbC,EAAOD,QAAU,EAAQ,K,eCAzB,IAAI8vC,EAGJA,EAAI,WACH,OAAO9lC,KADJ,GAIJ,IAEC8lC,EAAIA,GAAK,IAAIC,SAAS,cAAb,GACR,MAAO5vC,GAEc,iBAAX+D,SAAqB4rC,EAAI5rC,QAOrCjE,EAAOD,QAAU8vC,G,cClBjB,IAOIE,EACAC,EARAplC,EAAU5K,EAAOD,QAAU,GAU/B,SAASkwC,IACL,MAAM,IAAI5uC,MAAM,mCAEpB,SAAS6uC,IACL,MAAM,IAAI7uC,MAAM,qCAsBpB,SAAS8uC,EAAWC,GAChB,GAAIL,IAAqB5tC,WAErB,OAAOA,WAAWiuC,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqB5tC,WAEhE,OADA4tC,EAAmB5tC,WACZA,WAAWiuC,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMlwC,GACJ,IAEI,OAAO6vC,EAAiBzwC,KAAK,KAAM8wC,EAAK,GAC1C,MAAMlwC,GAEJ,OAAO6vC,EAAiBzwC,KAAKyK,KAAMqmC,EAAK,MAvCnD,WACG,IAEQL,EADsB,mBAAf5tC,WACYA,WAEA8tC,EAEzB,MAAO/vC,GACL6vC,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjBvuC,aACcA,aAEAyuC,EAE3B,MAAOhwC,GACL8vC,EAAqBE,GAjB7B,GAwEA,IAEIG,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAanxC,OACboxC,EAAQD,EAAa1iC,OAAO2iC,GAE5BE,GAAc,EAEdF,EAAMpxC,QACNwxC,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAIzvC,EAAUqvC,EAAWM,GACzBF,GAAW,EAGX,IADA,IAAI3+B,EAAM0+B,EAAMpxC,OACV0S,GAAK,CAGP,IAFAy+B,EAAeC,EACfA,EAAQ,KACCE,EAAa5+B,GACdy+B,GACAA,EAAaG,GAAYG,MAGjCH,GAAc,EACd5+B,EAAM0+B,EAAMpxC,OAEhBmxC,EAAe,KACfE,GAAW,EAnEf,SAAyBK,GACrB,GAAIZ,IAAuBvuC,aAEvB,OAAOA,aAAamvC,GAGxB,IAAKZ,IAAuBE,IAAwBF,IAAuBvuC,aAEvE,OADAuuC,EAAqBvuC,aACdA,aAAamvC,GAExB,IAEWZ,EAAmBY,GAC5B,MAAO1wC,GACL,IAEI,OAAO8vC,EAAmB1wC,KAAK,KAAMsxC,GACvC,MAAO1wC,GAGL,OAAO8vC,EAAmB1wC,KAAKyK,KAAM6mC,KAgD7CC,CAAgB/vC,IAiBpB,SAASgwC,EAAKV,EAAKpb,GACfjrB,KAAKqmC,IAAMA,EACXrmC,KAAKirB,MAAQA,EAYjB,SAAS+b,KA5BTnmC,EAAQomC,SAAW,SAAUZ,GACzB,IAAIxb,EAAO,IAAIlvB,MAAMoC,UAAU5I,OAAS,GACxC,GAAI4I,UAAU5I,OAAS,EACnB,IAAK,IAAIF,EAAI,EAAGA,EAAI8I,UAAU5I,OAAQF,IAClC41B,EAAK51B,EAAI,GAAK8I,UAAU9I,GAGhCsxC,EAAM9wC,KAAK,IAAIsxC,EAAKV,EAAKxb,IACJ,IAAjB0b,EAAMpxC,QAAiBqxC,GACvBJ,EAAWO,IASnBI,EAAK1xC,UAAUuxC,IAAM,WACjB5mC,KAAKqmC,IAAItb,MAAM,KAAM/qB,KAAKirB,QAE9BpqB,EAAQiK,MAAQ,UAChBjK,EAAQqmC,SAAU,EAClBrmC,EAAQy2B,IAAM,GACdz2B,EAAQsmC,KAAO,GACftmC,EAAQoB,QAAU,GAClBpB,EAAQumC,SAAW,GAInBvmC,EAAQwmC,GAAKL,EACbnmC,EAAQymC,YAAcN,EACtBnmC,EAAQ0mC,KAAOP,EACfnmC,EAAQ2mC,IAAMR,EACdnmC,EAAQ4mC,eAAiBT,EACzBnmC,EAAQ6mC,mBAAqBV,EAC7BnmC,EAAQ8mC,KAAOX,EACfnmC,EAAQ+mC,gBAAkBZ,EAC1BnmC,EAAQgnC,oBAAsBb,EAE9BnmC,EAAQP,UAAY,SAAUrI,GAAQ,MAAO,IAE7C4I,EAAQinC,QAAU,SAAU7vC,GACxB,MAAM,IAAIX,MAAM,qCAGpBuJ,EAAQknC,IAAM,WAAc,MAAO,KACnClnC,EAAQmnC,MAAQ,SAAUC,GACtB,MAAM,IAAI3wC,MAAM,mCAEpBuJ,EAAQqnC,MAAQ,WAAa,OAAO,I,6BCrLpC,IAAIvjB,EAAQ,EAAQ,GAChBjrB,EAAO,EAAQ,IACfyuC,EAAQ,EAAQ,IAChBC,EAAc,EAAQ,IA4B1B,IAAI1kB,EAnBJ,SAAS2kB,EAAeC,GACtB,IAAI55B,EAAU,IAAIy5B,EAAMG,GACpB7nB,EAAW/mB,EAAKyuC,EAAM9yC,UAAU6C,QAASwW,GAa7C,OAVAiW,EAAM3mB,OAAOyiB,EAAU0nB,EAAM9yC,UAAWqZ,GAGxCiW,EAAM3mB,OAAOyiB,EAAU/R,GAGvB+R,EAASjnB,OAAS,SAAgB+uC,GAChC,OAAOF,EAAeD,EAAYE,EAAeC,KAG5C9nB,EAIG4nB,CA3BG,EAAQ,KA8BvB3kB,EAAMykB,MAAQA,EAGdzkB,EAAMgC,cAAgB,EAAQ,IAC9BhC,EAAM8kB,YAAc,EAAQ,IAC5B9kB,EAAM+kB,SAAW,EAAQ,IACzB/kB,EAAMglB,QAAU,EAAQ,IAAczmC,QACtCyhB,EAAMkT,WAAa,EAAQ,IAG3BlT,EAAMkB,WAAa,EAAQ,IAG3BlB,EAAMilB,OAASjlB,EAAMgC,cAGrBhC,EAAMnrB,IAAM,SAAanC,GACvB,OAAOG,QAAQgC,IAAInC,IAErBstB,EAAMklB,OAAS,EAAQ,IAGvBllB,EAAMmlB,aAAe,EAAQ,IAE7B5yC,EAAOD,QAAU0tB,EAGjBztB,EAAOD,QAAQqT,QAAUqa,G,6BC7DzB,IAAIiB,EAAQ,EAAQ,GAChB+d,EAAW,EAAQ,IACnBoG,EAAqB,EAAQ,IAC7BC,EAAkB,EAAQ,IAC1BX,EAAc,EAAQ,IACtBzF,EAAgB,EAAQ,IACxBqG,EAAY,EAAQ,IAEpBC,EAAaD,EAAUC,WAM3B,SAASd,EAAMI,GACbvoC,KAAKykB,SAAW8jB,EAChBvoC,KAAKkpC,aAAe,CAClBhxC,QAAS,IAAI4wC,EACb/kB,SAAU,IAAI+kB,GASlBX,EAAM9yC,UAAU6C,QAAU,SAAiBixC,EAAaj/B,GAG3B,iBAAhBi/B,GACTj/B,EAASA,GAAU,IACZs3B,IAAM2H,EAEbj/B,EAASi/B,GAAe,IAG1Bj/B,EAASk+B,EAAYpoC,KAAKykB,SAAUva,IAGzBouB,OACTpuB,EAAOouB,OAASpuB,EAAOouB,OAAO/8B,cACrByE,KAAKykB,SAAS6T,OACvBpuB,EAAOouB,OAASt4B,KAAKykB,SAAS6T,OAAO/8B,cAErC2O,EAAOouB,OAAS,MAGlB,IAAItB,EAAe9sB,EAAO8sB,kBAEL7+B,IAAjB6+B,GACFgS,EAAUI,cAAcpS,EAAc,CACpCY,kBAAmBqR,EAAWjS,aAAaiS,EAAWI,SACtDxR,kBAAmBoR,EAAWjS,aAAaiS,EAAWI,SACtDtH,oBAAqBkH,EAAWjS,aAAaiS,EAAWI,WACvD,GAIL,IAAIC,EAA0B,GAC1BC,GAAiC,EACrCvpC,KAAKkpC,aAAahxC,QAAQqE,SAAQ,SAAoCitC,GACjC,mBAAxBA,EAAYC,UAA0D,IAAhCD,EAAYC,QAAQv/B,KAIrEq/B,EAAiCA,GAAkCC,EAAYE,YAE/EJ,EAAwBK,QAAQH,EAAYI,UAAWJ,EAAYK,cAGrE,IAKIvzC,EALAwzC,EAA2B,GAO/B,GANA9pC,KAAKkpC,aAAanlB,SAASxnB,SAAQ,SAAkCitC,GACnEM,EAAyBr0C,KAAK+zC,EAAYI,UAAWJ,EAAYK,cAK9DN,EAAgC,CACnC,IAAIQ,EAAQ,CAAChB,OAAiB5wC,GAM9B,IAJAwD,MAAMtG,UAAUs0C,QAAQ5e,MAAMgf,EAAOT,GACrCS,EAAQA,EAAMnmC,OAAOkmC,GAErBxzC,EAAUC,QAAQC,QAAQ0T,GACnB6/B,EAAM50C,QACXmB,EAAUA,EAAQkZ,KAAKu6B,EAAMn0C,QAASm0C,EAAMn0C,SAG9C,OAAOU,EAKT,IADA,IAAI0zC,EAAY9/B,EACTo/B,EAAwBn0C,QAAQ,CACrC,IAAI80C,EAAcX,EAAwB1zC,QACtCs0C,EAAaZ,EAAwB1zC,QACzC,IACEo0C,EAAYC,EAAYD,GACxB,MAAO3yC,GACP6yC,EAAW7yC,GACX,OAIJ,IACEf,EAAUyyC,EAAgBiB,GAC1B,MAAO3yC,GACP,OAAOd,QAAQE,OAAOY,GAGxB,KAAOyyC,EAAyB30C,QAC9BmB,EAAUA,EAAQkZ,KAAKs6B,EAAyBl0C,QAASk0C,EAAyBl0C,SAGpF,OAAOU,GAGT6xC,EAAM9yC,UAAU80C,OAAS,SAAgBjgC,GACvCA,EAASk+B,EAAYpoC,KAAKykB,SAAUva,GACpC,IAAIq5B,EAAWZ,EAAcz4B,EAAO4C,QAAS5C,EAAOs3B,KACpD,OAAOkB,EAASa,EAAUr5B,EAAOma,OAAQna,EAAOu3B,mBAIlD9c,EAAMpoB,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6B+7B,GAE/E6P,EAAM9yC,UAAUijC,GAAU,SAASkJ,EAAKt3B,GACtC,OAAOlK,KAAK9H,QAAQkwC,EAAYl+B,GAAU,GAAI,CAC5CouB,OAAQA,EACRkJ,IAAKA,EACL5sC,MAAOsV,GAAU,IAAItV,YAK3B+vB,EAAMpoB,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+B+7B,GAGrE,SAAS8R,EAAmBC,GAC1B,OAAO,SAAoB7I,EAAK5sC,EAAMsV,GACpC,OAAOlK,KAAK9H,QAAQkwC,EAAYl+B,GAAU,GAAI,CAC5CouB,OAAQA,EACR3U,QAAS0mB,EAAS,CAChB,eAAgB,uBACd,GACJ7I,IAAKA,EACL5sC,KAAMA,MAKZuzC,EAAM9yC,UAAUijC,GAAU8R,IAE1BjC,EAAM9yC,UAAUijC,EAAS,QAAU8R,GAAmB,MAGxDn0C,EAAOD,QAAUmyC,G,6BC7JjB,IAAIxjB,EAAQ,EAAQ,GAEpB,SAASmkB,IACP9oC,KAAKsqC,SAAW,GAWlBxB,EAAmBzzC,UAAUk1C,IAAM,SAAaX,EAAWC,EAAUxmC,GAOnE,OANArD,KAAKsqC,SAAS70C,KAAK,CACjBm0C,UAAWA,EACXC,SAAUA,EACVH,cAAarmC,GAAUA,EAAQqmC,YAC/BD,QAASpmC,EAAUA,EAAQomC,QAAU,OAEhCzpC,KAAKsqC,SAASn1C,OAAS,GAQhC2zC,EAAmBzzC,UAAUm1C,MAAQ,SAAe/mC,GAC9CzD,KAAKsqC,SAAS7mC,KAChBzD,KAAKsqC,SAAS7mC,GAAM,OAYxBqlC,EAAmBzzC,UAAUkH,QAAU,SAAiBE,GACtDkoB,EAAMpoB,QAAQyD,KAAKsqC,UAAU,SAAwBG,GACzC,OAANA,GACFhuC,EAAGguC,OAKTx0C,EAAOD,QAAU8yC,G,6BCnDjB,IAAInkB,EAAQ,EAAQ,GAChB+lB,EAAgB,EAAQ,IACxBjC,EAAW,EAAQ,IACnBhkB,EAAW,EAAQ,IACnBiB,EAAgB,EAAQ,IAK5B,SAASilB,EAA6BzgC,GAKpC,GAJIA,EAAO+4B,aACT/4B,EAAO+4B,YAAY2H,mBAGjB1gC,EAAOy2B,QAAUz2B,EAAOy2B,OAAOC,QACjC,MAAM,IAAIlb,EAUdzvB,EAAOD,QAAU,SAAyBkU,GA8BxC,OA7BAygC,EAA6BzgC,GAG7BA,EAAOyZ,QAAUzZ,EAAOyZ,SAAW,GAGnCzZ,EAAOtV,KAAO81C,EAAcn1C,KAC1B2U,EACAA,EAAOtV,KACPsV,EAAOyZ,QACPzZ,EAAOgtB,kBAIThtB,EAAOyZ,QAAUgB,EAAM/mB,MACrBsM,EAAOyZ,QAAQe,QAAU,GACzBxa,EAAOyZ,QAAQzZ,EAAOouB,SAAW,GACjCpuB,EAAOyZ,SAGTgB,EAAMpoB,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2B+7B,UAClBpuB,EAAOyZ,QAAQ2U,OAIZpuB,EAAO6sB,SAAWtS,EAASsS,SAE1B7sB,GAAQsF,MAAK,SAA6BuU,GAWvD,OAVA4mB,EAA6BzgC,GAG7B6Z,EAASnvB,KAAO81C,EAAcn1C,KAC5B2U,EACA6Z,EAASnvB,KACTmvB,EAASJ,QACTzZ,EAAOytB,mBAGF5T,KACN,SAA4B8mB,GAe7B,OAdKpC,EAASoC,KACZF,EAA6BzgC,GAGzB2gC,GAAUA,EAAO9mB,WACnB8mB,EAAO9mB,SAASnvB,KAAO81C,EAAcn1C,KACnC2U,EACA2gC,EAAO9mB,SAASnvB,KAChBi2C,EAAO9mB,SAASJ,QAChBzZ,EAAOytB,qBAKNphC,QAAQE,OAAOo0C,Q,6BClF1B,IAAIlmB,EAAQ,EAAQ,GAChBF,EAAW,EAAQ,IAUvBxuB,EAAOD,QAAU,SAAuBpB,EAAM+uB,EAASmnB,GACrD,IAAIp8B,EAAU1O,MAAQykB,EAMtB,OAJAE,EAAMpoB,QAAQuuC,GAAK,SAAmBruC,GACpC7H,EAAO6H,EAAGlH,KAAKmZ,EAAS9Z,EAAM+uB,MAGzB/uB,I,6BClBT,IAAI+vB,EAAQ,EAAQ,GAEpB1uB,EAAOD,QAAU,SAA6B2tB,EAASonB,GACrDpmB,EAAMpoB,QAAQonB,GAAS,SAAuBxqB,EAAOlB,GAC/CA,IAAS8yC,GAAkB9yC,EAAK6rC,gBAAkBiH,EAAejH,gBACnEngB,EAAQonB,GAAkB5xC,SACnBwqB,EAAQ1rB,S,8BCRrB;;;;;;;AAUA,IAAIgQ,EAAS,EAAQ,IACjB+iC,EAAU,EAAQ,IAClBvvC,EAAU,EAAQ,IAmDtB,SAASwvC,IACP,OAAO9I,EAAO+I,oBACV,WACA,WAGN,SAASC,EAAcC,EAAMj2C,GAC3B,GAAI81C,IAAe91C,EACjB,MAAM,IAAIk2C,WAAW,8BAcvB,OAZIlJ,EAAO+I,qBAETE,EAAO,IAAIxuC,WAAWzH,IACjBm2C,UAAYnJ,EAAO9sC,WAGX,OAAT+1C,IACFA,EAAO,IAAIjJ,EAAOhtC,IAEpBi2C,EAAKj2C,OAASA,GAGTi2C,EAaT,SAASjJ,EAAQoJ,EAAKC,EAAkBr2C,GACtC,KAAKgtC,EAAO+I,qBAAyBlrC,gBAAgBmiC,GACnD,OAAO,IAAIA,EAAOoJ,EAAKC,EAAkBr2C,GAI3C,GAAmB,iBAARo2C,EAAkB,CAC3B,GAAgC,iBAArBC,EACT,MAAM,IAAIl0C,MACR,qEAGJ,OAAOm0C,EAAYzrC,KAAMurC,GAE3B,OAAO9jC,EAAKzH,KAAMurC,EAAKC,EAAkBr2C,GAW3C,SAASsS,EAAM2jC,EAAMjyC,EAAOqyC,EAAkBr2C,GAC5C,GAAqB,iBAAVgE,EACT,MAAM,IAAIwO,UAAU,yCAGtB,MAA2B,oBAAhBzK,aAA+B/D,aAAiB+D,YA6H7D,SAA0BkuC,EAAMngB,EAAOygB,EAAYv2C,GAGjD,GAFA81B,EAAM0gB,WAEFD,EAAa,GAAKzgB,EAAM0gB,WAAaD,EACvC,MAAM,IAAIL,WAAW,6BAGvB,GAAIpgB,EAAM0gB,WAAaD,GAAcv2C,GAAU,GAC7C,MAAM,IAAIk2C,WAAW,6BAIrBpgB,OADiB9yB,IAAfuzC,QAAuCvzC,IAAXhD,EACtB,IAAIyH,WAAWquB,QACH9yB,IAAXhD,EACD,IAAIyH,WAAWquB,EAAOygB,GAEtB,IAAI9uC,WAAWquB,EAAOygB,EAAYv2C,GAGxCgtC,EAAO+I,qBAETE,EAAOngB,GACFqgB,UAAYnJ,EAAO9sC,UAGxB+1C,EAAOQ,EAAcR,EAAMngB,GAE7B,OAAOmgB,EAvJES,CAAgBT,EAAMjyC,EAAOqyC,EAAkBr2C,GAGnC,iBAAVgE,EAwFb,SAAqBiyC,EAAMU,EAAQC,GACT,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAK5J,EAAO6J,WAAWD,GACrB,MAAM,IAAIpkC,UAAU,8CAGtB,IAAIxS,EAAwC,EAA/Bw2C,EAAWG,EAAQC,GAG5BE,GAFJb,EAAOD,EAAaC,EAAMj2C,IAER+2C,MAAMJ,EAAQC,GAE5BE,IAAW92C,IAIbi2C,EAAOA,EAAKhxC,MAAM,EAAG6xC,IAGvB,OAAOb,EA5GEe,CAAWf,EAAMjyC,EAAOqyC,GAsJnC,SAAqBJ,EAAM5uC,GACzB,GAAI2lC,EAAOtlC,SAASL,GAAM,CACxB,IAAIqL,EAA4B,EAAtBukC,EAAQ5vC,EAAIrH,QAGtB,OAAoB,KAFpBi2C,EAAOD,EAAaC,EAAMvjC,IAEjB1S,QAITqH,EAAI6vC,KAAKjB,EAAM,EAAG,EAAGvjC,GAHZujC,EAOX,GAAI5uC,EAAK,CACP,GAA4B,oBAAhBU,aACRV,EAAIY,kBAAkBF,aAAgB,WAAYV,EACpD,MAA0B,iBAAfA,EAAIrH,SA+8CLuG,EA/8CkCc,EAAIrH,SAg9CrCuG,EA/8CFyvC,EAAaC,EAAM,GAErBQ,EAAcR,EAAM5uC,GAG7B,GAAiB,WAAbA,EAAI3E,MAAqB4D,EAAQe,EAAI5H,MACvC,OAAOg3C,EAAcR,EAAM5uC,EAAI5H,MAw8CrC,IAAgB8G,EAp8Cd,MAAM,IAAIiM,UAAU,sFA9Kb2kC,CAAWlB,EAAMjyC,GA4B1B,SAASozC,EAAYtiB,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAItiB,UAAU,oCACf,GAAIsiB,EAAO,EAChB,MAAM,IAAIohB,WAAW,wCA4BzB,SAASI,EAAaL,EAAMnhB,GAG1B,GAFAsiB,EAAWtiB,GACXmhB,EAAOD,EAAaC,EAAMnhB,EAAO,EAAI,EAAoB,EAAhBmiB,EAAQniB,KAC5CkY,EAAO+I,oBACV,IAAK,IAAIj2C,EAAI,EAAGA,EAAIg1B,IAAQh1B,EAC1Bm2C,EAAKn2C,GAAK,EAGd,OAAOm2C,EAwCT,SAASQ,EAAeR,EAAMngB,GAC5B,IAAI91B,EAAS81B,EAAM91B,OAAS,EAAI,EAA4B,EAAxBi3C,EAAQnhB,EAAM91B,QAClDi2C,EAAOD,EAAaC,EAAMj2C,GAC1B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,GAAK,EAC/Bm2C,EAAKn2C,GAAgB,IAAXg2B,EAAMh2B,GAElB,OAAOm2C,EA+DT,SAASgB,EAASj3C,GAGhB,GAAIA,GAAU81C,IACZ,MAAM,IAAII,WAAW,0DACaJ,IAAa9vC,SAAS,IAAM,UAEhE,OAAgB,EAAThG,EAsFT,SAASw2C,EAAYG,EAAQC,GAC3B,GAAI5J,EAAOtlC,SAASivC,GAClB,OAAOA,EAAO32C,OAEhB,GAA2B,oBAAhB+H,aAA6D,mBAAvBA,YAAYC,SACxDD,YAAYC,OAAO2uC,IAAWA,aAAkB5uC,aACnD,OAAO4uC,EAAOH,WAEM,iBAAXG,IACTA,EAAS,GAAKA,GAGhB,IAAIjkC,EAAMikC,EAAO32C,OACjB,GAAY,IAAR0S,EAAW,OAAO,EAItB,IADA,IAAI2kC,GAAc,IAEhB,OAAQT,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOlkC,EACT,IAAK,OACL,IAAK,QACL,UAAK1P,EACH,OAAOs0C,EAAYX,GAAQ32C,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAAN0S,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAO6kC,EAAcZ,GAAQ32C,OAC/B,QACE,GAAIq3C,EAAa,OAAOC,EAAYX,GAAQ32C,OAC5C42C,GAAY,GAAKA,GAAUxwC,cAC3BixC,GAAc,GAMtB,SAASG,EAAcZ,EAAUa,EAAOC,GACtC,IAAIL,GAAc,EAclB,SALcr0C,IAAVy0C,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQ5sC,KAAK7K,OACf,MAAO,GAOT,SAJYgD,IAAR00C,GAAqBA,EAAM7sC,KAAK7K,UAClC03C,EAAM7sC,KAAK7K,QAGT03C,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTD,KAAW,GAGT,MAAO,GAKT,IAFKb,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOe,EAAS9sC,KAAM4sC,EAAOC,GAE/B,IAAK,OACL,IAAK,QACH,OAAOE,EAAU/sC,KAAM4sC,EAAOC,GAEhC,IAAK,QACH,OAAOG,EAAWhtC,KAAM4sC,EAAOC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOI,EAAYjtC,KAAM4sC,EAAOC,GAElC,IAAK,SACH,OAAOK,EAAYltC,KAAM4sC,EAAOC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOM,EAAantC,KAAM4sC,EAAOC,GAEnC,QACE,GAAIL,EAAa,MAAM,IAAI7kC,UAAU,qBAAuBokC,GAC5DA,GAAYA,EAAW,IAAIxwC,cAC3BixC,GAAc,GAStB,SAASY,EAAMlvC,EAAGvE,EAAGnB,GACnB,IAAIvD,EAAIiJ,EAAEvE,GACVuE,EAAEvE,GAAKuE,EAAE1F,GACT0F,EAAE1F,GAAKvD,EAmIT,SAASo4C,EAAsBjwC,EAAQ1B,EAAKgwC,EAAYK,EAAU9D,GAEhE,GAAsB,IAAlB7qC,EAAOjI,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAfu2C,GACTK,EAAWL,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACV16B,MAAM06B,KAERA,EAAazD,EAAM,EAAK7qC,EAAOjI,OAAS,GAItCu2C,EAAa,IAAGA,EAAatuC,EAAOjI,OAASu2C,GAC7CA,GAActuC,EAAOjI,OAAQ,CAC/B,GAAI8yC,EAAK,OAAQ,EACZyD,EAAatuC,EAAOjI,OAAS,OAC7B,GAAIu2C,EAAa,EAAG,CACzB,IAAIzD,EACC,OAAQ,EADJyD,EAAa,EAUxB,GALmB,iBAARhwC,IACTA,EAAMymC,EAAO16B,KAAK/L,EAAKqwC,IAIrB5J,EAAOtlC,SAASnB,GAElB,OAAmB,IAAfA,EAAIvG,QACE,EAEHm4C,EAAalwC,EAAQ1B,EAAKgwC,EAAYK,EAAU9D,GAClD,GAAmB,iBAARvsC,EAEhB,OADAA,GAAY,IACRymC,EAAO+I,qBACiC,mBAAjCtuC,WAAWvH,UAAUqK,QAC1BuoC,EACKrrC,WAAWvH,UAAUqK,QAAQnK,KAAK6H,EAAQ1B,EAAKgwC,GAE/C9uC,WAAWvH,UAAUk4C,YAAYh4C,KAAK6H,EAAQ1B,EAAKgwC,GAGvD4B,EAAalwC,EAAQ,CAAE1B,GAAOgwC,EAAYK,EAAU9D,GAG7D,MAAM,IAAItgC,UAAU,wCAGtB,SAAS2lC,EAAc1tC,EAAKlE,EAAKgwC,EAAYK,EAAU9D,GACrD,IA0BIhzC,EA1BAu4C,EAAY,EACZC,EAAY7tC,EAAIzK,OAChBu4C,EAAYhyC,EAAIvG,OAEpB,QAAiBgD,IAAb4zC,IAEe,UADjBA,EAAWvsC,OAAOusC,GAAUxwC,gBACY,UAAbwwC,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAInsC,EAAIzK,OAAS,GAAKuG,EAAIvG,OAAS,EACjC,OAAQ,EAEVq4C,EAAY,EACZC,GAAa,EACbC,GAAa,EACbhC,GAAc,EAIlB,SAAShH,EAAMiJ,EAAK14C,GAClB,OAAkB,IAAdu4C,EACKG,EAAI14C,GAEJ04C,EAAIC,aAAa34C,EAAIu4C,GAKhC,GAAIvF,EAAK,CACP,IAAI4F,GAAc,EAClB,IAAK54C,EAAIy2C,EAAYz2C,EAAIw4C,EAAWx4C,IAClC,GAAIyvC,EAAK9kC,EAAK3K,KAAOyvC,EAAKhpC,GAAqB,IAAhBmyC,EAAoB,EAAI54C,EAAI44C,IAEzD,IADoB,IAAhBA,IAAmBA,EAAa54C,GAChCA,EAAI44C,EAAa,IAAMH,EAAW,OAAOG,EAAaL,OAEtC,IAAhBK,IAAmB54C,GAAKA,EAAI44C,GAChCA,GAAc,OAKlB,IADInC,EAAagC,EAAYD,IAAW/B,EAAa+B,EAAYC,GAC5Dz4C,EAAIy2C,EAAYz2C,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAI64C,GAAQ,EACHC,EAAI,EAAGA,EAAIL,EAAWK,IAC7B,GAAIrJ,EAAK9kC,EAAK3K,EAAI84C,KAAOrJ,EAAKhpC,EAAKqyC,GAAI,CACrCD,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAO74C,EAItB,OAAQ,EAeV,SAAS+4C,EAAUL,EAAK7B,EAAQmC,EAAQ94C,GACtC84C,EAASj0B,OAAOi0B,IAAW,EAC3B,IAAInjB,EAAY6iB,EAAIx4C,OAAS84C,EACxB94C,GAGHA,EAAS6kB,OAAO7kB,IACH21B,IACX31B,EAAS21B,GAJX31B,EAAS21B,EASX,IAAIojB,EAASpC,EAAO32C,OACpB,GAAI+4C,EAAS,GAAM,EAAG,MAAM,IAAIvmC,UAAU,sBAEtCxS,EAAS+4C,EAAS,IACpB/4C,EAAS+4C,EAAS,GAEpB,IAAK,IAAIj5C,EAAI,EAAGA,EAAIE,IAAUF,EAAG,CAC/B,IAAIk5C,EAASC,SAAStC,EAAOuC,OAAW,EAAJp5C,EAAO,GAAI,IAC/C,GAAI+b,MAAMm9B,GAAS,OAAOl5C,EAC1B04C,EAAIM,EAASh5C,GAAKk5C,EAEpB,OAAOl5C,EAGT,SAASq5C,EAAWX,EAAK7B,EAAQmC,EAAQ94C,GACvC,OAAOo5C,EAAW9B,EAAYX,EAAQ6B,EAAIx4C,OAAS84C,GAASN,EAAKM,EAAQ94C,GAG3E,SAASq5C,EAAYb,EAAK7B,EAAQmC,EAAQ94C,GACxC,OAAOo5C,EAq6BT,SAAuBjzC,GAErB,IADA,IAAImzC,EAAY,GACPx5C,EAAI,EAAGA,EAAIqG,EAAInG,SAAUF,EAEhCw5C,EAAUh5C,KAAyB,IAApB6F,EAAIkD,WAAWvJ,IAEhC,OAAOw5C,EA36BWC,CAAa5C,GAAS6B,EAAKM,EAAQ94C,GAGvD,SAASw5C,EAAahB,EAAK7B,EAAQmC,EAAQ94C,GACzC,OAAOq5C,EAAWb,EAAK7B,EAAQmC,EAAQ94C,GAGzC,SAASy5C,EAAajB,EAAK7B,EAAQmC,EAAQ94C,GACzC,OAAOo5C,EAAW7B,EAAcZ,GAAS6B,EAAKM,EAAQ94C,GAGxD,SAAS05C,EAAWlB,EAAK7B,EAAQmC,EAAQ94C,GACvC,OAAOo5C,EAk6BT,SAAyBjzC,EAAKwzC,GAG5B,IAFA,IAAIr2C,EAAGs2C,EAAIC,EACPP,EAAY,GACPx5C,EAAI,EAAGA,EAAIqG,EAAInG,WACjB25C,GAAS,GAAK,KADa75C,EAGhCwD,EAAI6C,EAAIkD,WAAWvJ,GACnB85C,EAAKt2C,GAAK,EACVu2C,EAAKv2C,EAAI,IACTg2C,EAAUh5C,KAAKu5C,GACfP,EAAUh5C,KAAKs5C,GAGjB,OAAON,EA/6BWQ,CAAenD,EAAQ6B,EAAIx4C,OAAS84C,GAASN,EAAKM,EAAQ94C,GAkF9E,SAAS+3C,EAAaS,EAAKf,EAAOC,GAChC,OAAc,IAAVD,GAAeC,IAAQc,EAAIx4C,OACtB8S,EAAOinC,cAAcvB,GAErB1lC,EAAOinC,cAAcvB,EAAIvzC,MAAMwyC,EAAOC,IAIjD,SAASE,EAAWY,EAAKf,EAAOC,GAC9BA,EAAMx+B,KAAKye,IAAI6gB,EAAIx4C,OAAQ03C,GAI3B,IAHA,IAAIsC,EAAM,GAENl6C,EAAI23C,EACD33C,EAAI43C,GAAK,CACd,IAQMuC,EAAYC,EAAWC,EAAYC,EARrCC,EAAY7B,EAAI14C,GAChBw6C,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EACpBA,EAAY,IAAQ,EACrB,EAEJ,GAAIv6C,EAAIy6C,GAAoB7C,EAG1B,OAAQ6C,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,MAAV,KADlBJ,EAAazB,EAAI14C,EAAI,OAEnBs6C,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAazB,EAAI14C,EAAI,GACrBo6C,EAAY1B,EAAI14C,EAAI,GACQ,MAAV,IAAbm6C,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAazB,EAAI14C,EAAI,GACrBo6C,EAAY1B,EAAI14C,EAAI,GACpBq6C,EAAa3B,EAAI14C,EAAI,GACO,MAAV,IAAbm6C,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbN,EAAI15C,KAAKg6C,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBN,EAAI15C,KAAKg6C,GACTx6C,GAAKy6C,EAGP,OAQF,SAAgCC,GAC9B,IAAI9nC,EAAM8nC,EAAWx6C,OACrB,GAAI0S,GAJqB,KAKvB,OAAOrI,OAAOowC,aAAa7kB,MAAMvrB,OAAQmwC,GAI3C,IAAIR,EAAM,GACNl6C,EAAI,EACR,KAAOA,EAAI4S,GACTsnC,GAAO3vC,OAAOowC,aAAa7kB,MACzBvrB,OACAmwC,EAAWv1C,MAAMnF,EAAGA,GAdC,OAiBzB,OAAOk6C,EAvBAU,CAAsBV,GA98B/Bn5C,EAAQmsC,OAASA,EACjBnsC,EAAQ85C,WAoTR,SAAqB36C,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOgtC,EAAO4N,OAAO56C,IAvTvBa,EAAQg6C,kBAAoB,GA0B5B7N,EAAO+I,yBAAqD/yC,IAA/B83C,EAAO/E,oBAChC+E,EAAO/E,oBAQX,WACE,IACE,IAAItrC,EAAM,IAAIhD,WAAW,GAEzB,OADAgD,EAAI0rC,UAAY,CAACA,UAAW1uC,WAAWvH,UAAW66C,IAAK,WAAc,OAAO,KACvD,KAAdtwC,EAAIswC,OACiB,mBAAjBtwC,EAAIuwC,UACuB,IAAlCvwC,EAAIuwC,SAAS,EAAG,GAAGxE,WACvB,MAAOx1C,GACP,OAAO,GAfPi6C,GAKJp6C,EAAQi1C,WAAaA,IAkErB9I,EAAOkO,SAAW,KAGlBlO,EAAOmO,SAAW,SAAU1wC,GAE1B,OADAA,EAAI0rC,UAAYnJ,EAAO9sC,UAChBuK,GA2BTuiC,EAAO16B,KAAO,SAAUtO,EAAOqyC,EAAkBr2C,GAC/C,OAAOsS,EAAK,KAAMtO,EAAOqyC,EAAkBr2C,IAGzCgtC,EAAO+I,sBACT/I,EAAO9sC,UAAUi2C,UAAY1uC,WAAWvH,UACxC8sC,EAAOmJ,UAAY1uC,WACG,oBAAX3D,QAA0BA,OAAO6f,SACxCqpB,EAAOlpC,OAAO6f,WAAaqpB,GAE7B/sC,OAAOyD,eAAespC,EAAQlpC,OAAO6f,QAAS,CAC5C3f,MAAO,KACPo3C,cAAc,KAiCpBpO,EAAO4N,MAAQ,SAAU9lB,EAAMumB,EAAMzE,GACnC,OArBF,SAAgBX,EAAMnhB,EAAMumB,EAAMzE,GAEhC,OADAQ,EAAWtiB,GACPA,GAAQ,EACHkhB,EAAaC,EAAMnhB,QAEf9xB,IAATq4C,EAIyB,iBAAbzE,EACVZ,EAAaC,EAAMnhB,GAAMumB,KAAKA,EAAMzE,GACpCZ,EAAaC,EAAMnhB,GAAMumB,KAAKA,GAE7BrF,EAAaC,EAAMnhB,GAQnB8lB,CAAM,KAAM9lB,EAAMumB,EAAMzE,IAiBjC5J,EAAOsJ,YAAc,SAAUxhB,GAC7B,OAAOwhB,EAAY,KAAMxhB,IAK3BkY,EAAOsO,gBAAkB,SAAUxmB,GACjC,OAAOwhB,EAAY,KAAMxhB,IAiH3BkY,EAAOtlC,SAAW,SAAmBqB,GACnC,QAAe,MAALA,IAAaA,EAAEwyC,YAG3BvO,EAAOwO,QAAU,SAAkB1yC,EAAGC,GACpC,IAAKikC,EAAOtlC,SAASoB,KAAOkkC,EAAOtlC,SAASqB,GAC1C,MAAM,IAAIyJ,UAAU,6BAGtB,GAAI1J,IAAMC,EAAG,OAAO,EAKpB,IAHA,IAAI4rB,EAAI7rB,EAAE9I,OACN40B,EAAI7rB,EAAE/I,OAEDF,EAAI,EAAG4S,EAAMwG,KAAKye,IAAIhD,EAAGC,GAAI90B,EAAI4S,IAAO5S,EAC/C,GAAIgJ,EAAEhJ,KAAOiJ,EAAEjJ,GAAI,CACjB60B,EAAI7rB,EAAEhJ,GACN80B,EAAI7rB,EAAEjJ,GACN,MAIJ,OAAI60B,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GAGTqY,EAAO6J,WAAa,SAAqBD,GACvC,OAAQvsC,OAAOusC,GAAUxwC,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIb4mC,EAAOv+B,OAAS,SAAiBR,EAAMjO,GACrC,IAAKsG,EAAQ2H,GACX,MAAM,IAAIuE,UAAU,+CAGtB,GAAoB,IAAhBvE,EAAKjO,OACP,OAAOgtC,EAAO4N,MAAM,GAGtB,IAAI96C,EACJ,QAAekD,IAAXhD,EAEF,IADAA,EAAS,EACJF,EAAI,EAAGA,EAAImO,EAAKjO,SAAUF,EAC7BE,GAAUiO,EAAKnO,GAAGE,OAItB,IAAIiI,EAAS+kC,EAAOsJ,YAAYt2C,GAC5By7C,EAAM,EACV,IAAK37C,EAAI,EAAGA,EAAImO,EAAKjO,SAAUF,EAAG,CAChC,IAAI04C,EAAMvqC,EAAKnO,GACf,IAAKktC,EAAOtlC,SAAS8wC,GACnB,MAAM,IAAIhmC,UAAU,+CAEtBgmC,EAAItB,KAAKjvC,EAAQwzC,GACjBA,GAAOjD,EAAIx4C,OAEb,OAAOiI,GA8CT+kC,EAAOwJ,WAAaA,EA0EpBxJ,EAAO9sC,UAAUq7C,WAAY,EAQ7BvO,EAAO9sC,UAAUw7C,OAAS,WACxB,IAAIhpC,EAAM7H,KAAK7K,OACf,GAAI0S,EAAM,GAAM,EACd,MAAM,IAAIwjC,WAAW,6CAEvB,IAAK,IAAIp2C,EAAI,EAAGA,EAAI4S,EAAK5S,GAAK,EAC5Bm4C,EAAKptC,KAAM/K,EAAGA,EAAI,GAEpB,OAAO+K,MAGTmiC,EAAO9sC,UAAUy7C,OAAS,WACxB,IAAIjpC,EAAM7H,KAAK7K,OACf,GAAI0S,EAAM,GAAM,EACd,MAAM,IAAIwjC,WAAW,6CAEvB,IAAK,IAAIp2C,EAAI,EAAGA,EAAI4S,EAAK5S,GAAK,EAC5Bm4C,EAAKptC,KAAM/K,EAAGA,EAAI,GAClBm4C,EAAKptC,KAAM/K,EAAI,EAAGA,EAAI,GAExB,OAAO+K,MAGTmiC,EAAO9sC,UAAU07C,OAAS,WACxB,IAAIlpC,EAAM7H,KAAK7K,OACf,GAAI0S,EAAM,GAAM,EACd,MAAM,IAAIwjC,WAAW,6CAEvB,IAAK,IAAIp2C,EAAI,EAAGA,EAAI4S,EAAK5S,GAAK,EAC5Bm4C,EAAKptC,KAAM/K,EAAGA,EAAI,GAClBm4C,EAAKptC,KAAM/K,EAAI,EAAGA,EAAI,GACtBm4C,EAAKptC,KAAM/K,EAAI,EAAGA,EAAI,GACtBm4C,EAAKptC,KAAM/K,EAAI,EAAGA,EAAI,GAExB,OAAO+K,MAGTmiC,EAAO9sC,UAAU8F,SAAW,WAC1B,IAAIhG,EAAuB,EAAd6K,KAAK7K,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArB4I,UAAU5I,OAAqB43C,EAAU/sC,KAAM,EAAG7K,GAC/Cw3C,EAAa5hB,MAAM/qB,KAAMjC,YAGlCokC,EAAO9sC,UAAU27C,OAAS,SAAiB9yC,GACzC,IAAKikC,EAAOtlC,SAASqB,GAAI,MAAM,IAAIyJ,UAAU,6BAC7C,OAAI3H,OAAS9B,GACsB,IAA5BikC,EAAOwO,QAAQ3wC,KAAM9B,IAG9BikC,EAAO9sC,UAAU47C,QAAU,WACzB,IAAI31C,EAAM,GACNuxB,EAAM72B,EAAQg6C,kBAKlB,OAJIhwC,KAAK7K,OAAS,IAChBmG,EAAM0E,KAAK7E,SAAS,MAAO,EAAG0xB,GAAKqkB,MAAM,SAASrsC,KAAK,KACnD7E,KAAK7K,OAAS03B,IAAKvxB,GAAO,UAEzB,WAAaA,EAAM,KAG5B6mC,EAAO9sC,UAAUs7C,QAAU,SAAkB54C,EAAQ60C,EAAOC,EAAKsE,EAAWC,GAC1E,IAAKjP,EAAOtlC,SAAS9E,GACnB,MAAM,IAAI4P,UAAU,6BAgBtB,QAbcxP,IAAVy0C,IACFA,EAAQ,QAEEz0C,IAAR00C,IACFA,EAAM90C,EAASA,EAAO5C,OAAS,QAEfgD,IAAdg5C,IACFA,EAAY,QAEEh5C,IAAZi5C,IACFA,EAAUpxC,KAAK7K,QAGby3C,EAAQ,GAAKC,EAAM90C,EAAO5C,QAAUg8C,EAAY,GAAKC,EAAUpxC,KAAK7K,OACtE,MAAM,IAAIk2C,WAAW,sBAGvB,GAAI8F,GAAaC,GAAWxE,GAASC,EACnC,OAAO,EAET,GAAIsE,GAAaC,EACf,OAAQ,EAEV,GAAIxE,GAASC,EACX,OAAO,EAQT,GAAI7sC,OAASjI,EAAQ,OAAO,EAS5B,IAPA,IAAI+xB,GAJJsnB,KAAa,IADbD,KAAe,GAMXpnB,GAPJ8iB,KAAS,IADTD,KAAW,GASP/kC,EAAMwG,KAAKye,IAAIhD,EAAGC,GAElBsnB,EAAWrxC,KAAK5F,MAAM+2C,EAAWC,GACjCE,EAAav5C,EAAOqC,MAAMwyC,EAAOC,GAE5B53C,EAAI,EAAGA,EAAI4S,IAAO5S,EACzB,GAAIo8C,EAASp8C,KAAOq8C,EAAWr8C,GAAI,CACjC60B,EAAIunB,EAASp8C,GACb80B,EAAIunB,EAAWr8C,GACf,MAIJ,OAAI60B,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GA6HTqY,EAAO9sC,UAAUwM,SAAW,SAAmBnG,EAAKgwC,EAAYK,GAC9D,OAAoD,IAA7C/rC,KAAKN,QAAQhE,EAAKgwC,EAAYK,IAGvC5J,EAAO9sC,UAAUqK,QAAU,SAAkBhE,EAAKgwC,EAAYK,GAC5D,OAAOsB,EAAqBrtC,KAAMtE,EAAKgwC,EAAYK,GAAU,IAG/D5J,EAAO9sC,UAAUk4C,YAAc,SAAsB7xC,EAAKgwC,EAAYK,GACpE,OAAOsB,EAAqBrtC,KAAMtE,EAAKgwC,EAAYK,GAAU,IAkD/D5J,EAAO9sC,UAAU62C,MAAQ,SAAgBJ,EAAQmC,EAAQ94C,EAAQ42C,GAE/D,QAAe5zC,IAAX81C,EACFlC,EAAW,OACX52C,EAAS6K,KAAK7K,OACd84C,EAAS,OAEJ,QAAe91C,IAAXhD,GAA0C,iBAAX84C,EACxClC,EAAWkC,EACX94C,EAAS6K,KAAK7K,OACd84C,EAAS,MAEJ,KAAIsD,SAAStD,GAWlB,MAAM,IAAI32C,MACR,2EAXF22C,GAAkB,EACdsD,SAASp8C,IACXA,GAAkB,OACDgD,IAAb4zC,IAAwBA,EAAW,UAEvCA,EAAW52C,EACXA,OAASgD,GASb,IAAI2yB,EAAY9qB,KAAK7K,OAAS84C,EAG9B,SAFe91C,IAAXhD,GAAwBA,EAAS21B,KAAW31B,EAAS21B,GAEpDghB,EAAO32C,OAAS,IAAMA,EAAS,GAAK84C,EAAS,IAAOA,EAASjuC,KAAK7K,OACrE,MAAM,IAAIk2C,WAAW,0CAGlBU,IAAUA,EAAW,QAG1B,IADA,IAAIS,GAAc,IAEhB,OAAQT,GACN,IAAK,MACH,OAAOiC,EAAShuC,KAAM8rC,EAAQmC,EAAQ94C,GAExC,IAAK,OACL,IAAK,QACH,OAAOm5C,EAAUtuC,KAAM8rC,EAAQmC,EAAQ94C,GAEzC,IAAK,QACH,OAAOq5C,EAAWxuC,KAAM8rC,EAAQmC,EAAQ94C,GAE1C,IAAK,SACL,IAAK,SACH,OAAOw5C,EAAY3uC,KAAM8rC,EAAQmC,EAAQ94C,GAE3C,IAAK,SAEH,OAAOy5C,EAAY5uC,KAAM8rC,EAAQmC,EAAQ94C,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO05C,EAAU7uC,KAAM8rC,EAAQmC,EAAQ94C,GAEzC,QACE,GAAIq3C,EAAa,MAAM,IAAI7kC,UAAU,qBAAuBokC,GAC5DA,GAAY,GAAKA,GAAUxwC,cAC3BixC,GAAc,IAKtBrK,EAAO9sC,UAAUwvB,OAAS,WACxB,MAAO,CACLhtB,KAAM,SACNjD,KAAM+G,MAAMtG,UAAU+E,MAAM7E,KAAKyK,KAAKiH,MAAQjH,KAAM,KA4GxD,SAASgtC,EAAYW,EAAKf,EAAOC,GAC/B,IAAI2E,EAAM,GACV3E,EAAMx+B,KAAKye,IAAI6gB,EAAIx4C,OAAQ03C,GAE3B,IAAK,IAAI53C,EAAI23C,EAAO33C,EAAI43C,IAAO53C,EAC7Bu8C,GAAOhyC,OAAOowC,aAAsB,IAATjC,EAAI14C,IAEjC,OAAOu8C,EAGT,SAASvE,EAAaU,EAAKf,EAAOC,GAChC,IAAI2E,EAAM,GACV3E,EAAMx+B,KAAKye,IAAI6gB,EAAIx4C,OAAQ03C,GAE3B,IAAK,IAAI53C,EAAI23C,EAAO33C,EAAI43C,IAAO53C,EAC7Bu8C,GAAOhyC,OAAOowC,aAAajC,EAAI14C,IAEjC,OAAOu8C,EAGT,SAAS1E,EAAUa,EAAKf,EAAOC,GAC7B,IAAIhlC,EAAM8lC,EAAIx4C,SAETy3C,GAASA,EAAQ,KAAGA,EAAQ,KAC5BC,GAAOA,EAAM,GAAKA,EAAMhlC,KAAKglC,EAAMhlC,GAGxC,IADA,IAAI4pC,EAAM,GACDx8C,EAAI23C,EAAO33C,EAAI43C,IAAO53C,EAC7Bw8C,GAAOC,EAAM/D,EAAI14C,IAEnB,OAAOw8C,EAGT,SAAStE,EAAcQ,EAAKf,EAAOC,GAGjC,IAFA,IAAI8E,EAAQhE,EAAIvzC,MAAMwyC,EAAOC,GACzBsC,EAAM,GACDl6C,EAAI,EAAGA,EAAI08C,EAAMx8C,OAAQF,GAAK,EACrCk6C,GAAO3vC,OAAOowC,aAAa+B,EAAM18C,GAAoB,IAAf08C,EAAM18C,EAAI,IAElD,OAAOk6C,EA0CT,SAASyC,EAAa3D,EAAQ4D,EAAK18C,GACjC,GAAK84C,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAI5C,WAAW,sBAC3D,GAAI4C,EAAS4D,EAAM18C,EAAQ,MAAM,IAAIk2C,WAAW,yCA+JlD,SAASyG,EAAUnE,EAAKx0C,EAAO80C,EAAQ4D,EAAKhlB,EAAKC,GAC/C,IAAKqV,EAAOtlC,SAAS8wC,GAAM,MAAM,IAAIhmC,UAAU,+CAC/C,GAAIxO,EAAQ0zB,GAAO1zB,EAAQ2zB,EAAK,MAAM,IAAIue,WAAW,qCACrD,GAAI4C,EAAS4D,EAAMlE,EAAIx4C,OAAQ,MAAM,IAAIk2C,WAAW,sBAkDtD,SAAS0G,EAAmBpE,EAAKx0C,EAAO80C,EAAQ+D,GAC1C74C,EAAQ,IAAGA,EAAQ,MAASA,EAAQ,GACxC,IAAK,IAAIlE,EAAI,EAAG84C,EAAI1/B,KAAKye,IAAI6gB,EAAIx4C,OAAS84C,EAAQ,GAAIh5C,EAAI84C,IAAK94C,EAC7D04C,EAAIM,EAASh5C,IAAMkE,EAAS,KAAS,GAAK64C,EAAe/8C,EAAI,EAAIA,MAClC,GAA5B+8C,EAAe/8C,EAAI,EAAIA,GA8B9B,SAASg9C,EAAmBtE,EAAKx0C,EAAO80C,EAAQ+D,GAC1C74C,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,IAAK,IAAIlE,EAAI,EAAG84C,EAAI1/B,KAAKye,IAAI6gB,EAAIx4C,OAAS84C,EAAQ,GAAIh5C,EAAI84C,IAAK94C,EAC7D04C,EAAIM,EAASh5C,GAAMkE,IAAuC,GAA5B64C,EAAe/8C,EAAI,EAAIA,GAAU,IAmJnE,SAASi9C,EAAcvE,EAAKx0C,EAAO80C,EAAQ4D,EAAKhlB,EAAKC,GACnD,GAAImhB,EAAS4D,EAAMlE,EAAIx4C,OAAQ,MAAM,IAAIk2C,WAAW,sBACpD,GAAI4C,EAAS,EAAG,MAAM,IAAI5C,WAAW,sBAGvC,SAAS8G,EAAYxE,EAAKx0C,EAAO80C,EAAQ+D,EAAcI,GAKrD,OAJKA,GACHF,EAAavE,EAAKx0C,EAAO80C,EAAQ,GAEnCjD,EAAQkB,MAAMyB,EAAKx0C,EAAO80C,EAAQ+D,EAAc,GAAI,GAC7C/D,EAAS,EAWlB,SAASoE,EAAa1E,EAAKx0C,EAAO80C,EAAQ+D,EAAcI,GAKtD,OAJKA,GACHF,EAAavE,EAAKx0C,EAAO80C,EAAQ,GAEnCjD,EAAQkB,MAAMyB,EAAKx0C,EAAO80C,EAAQ+D,EAAc,GAAI,GAC7C/D,EAAS,EA/clB9L,EAAO9sC,UAAU+E,MAAQ,SAAgBwyC,EAAOC,GAC9C,IAoBIyF,EApBAzqC,EAAM7H,KAAK7K,OAqBf,IApBAy3C,IAAUA,GAGE,GACVA,GAAS/kC,GACG,IAAG+kC,EAAQ,GACdA,EAAQ/kC,IACjB+kC,EAAQ/kC,IANVglC,OAAc10C,IAAR00C,EAAoBhlC,IAAQglC,GASxB,GACRA,GAAOhlC,GACG,IAAGglC,EAAM,GACVA,EAAMhlC,IACfglC,EAAMhlC,GAGJglC,EAAMD,IAAOC,EAAMD,GAGnBzK,EAAO+I,qBACToH,EAAStyC,KAAKmwC,SAASvD,EAAOC,IACvBvB,UAAYnJ,EAAO9sC,cACrB,CACL,IAAIk9C,EAAW1F,EAAMD,EACrB0F,EAAS,IAAInQ,EAAOoQ,OAAUp6C,GAC9B,IAAK,IAAIlD,EAAI,EAAGA,EAAIs9C,IAAYt9C,EAC9Bq9C,EAAOr9C,GAAK+K,KAAK/K,EAAI23C,GAIzB,OAAO0F,GAWTnQ,EAAO9sC,UAAUm9C,WAAa,SAAqBvE,EAAQtC,EAAYyG,GACrEnE,GAAkB,EAClBtC,GAA0B,EACrByG,GAAUR,EAAY3D,EAAQtC,EAAY3rC,KAAK7K,QAKpD,IAHA,IAAIuG,EAAMsE,KAAKiuC,GACXwE,EAAM,EACNx9C,EAAI,IACCA,EAAI02C,IAAe8G,GAAO,MACjC/2C,GAAOsE,KAAKiuC,EAASh5C,GAAKw9C,EAG5B,OAAO/2C,GAGTymC,EAAO9sC,UAAUq9C,WAAa,SAAqBzE,EAAQtC,EAAYyG,GACrEnE,GAAkB,EAClBtC,GAA0B,EACrByG,GACHR,EAAY3D,EAAQtC,EAAY3rC,KAAK7K,QAKvC,IAFA,IAAIuG,EAAMsE,KAAKiuC,IAAWtC,GACtB8G,EAAM,EACH9G,EAAa,IAAM8G,GAAO,MAC/B/2C,GAAOsE,KAAKiuC,IAAWtC,GAAc8G,EAGvC,OAAO/2C,GAGTymC,EAAO9sC,UAAUs9C,UAAY,SAAoB1E,EAAQmE,GAEvD,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC6K,KAAKiuC,IAGd9L,EAAO9sC,UAAUu9C,aAAe,SAAuB3E,EAAQmE,GAE7D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC6K,KAAKiuC,GAAWjuC,KAAKiuC,EAAS,IAAM,GAG7C9L,EAAO9sC,UAAUu4C,aAAe,SAAuBK,EAAQmE,GAE7D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACnC6K,KAAKiuC,IAAW,EAAKjuC,KAAKiuC,EAAS,IAG7C9L,EAAO9sC,UAAUw9C,aAAe,SAAuB5E,EAAQmE,GAG7D,OAFKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,SAElC6K,KAAKiuC,GACTjuC,KAAKiuC,EAAS,IAAM,EACpBjuC,KAAKiuC,EAAS,IAAM,IACD,SAAnBjuC,KAAKiuC,EAAS,IAGrB9L,EAAO9sC,UAAUy9C,aAAe,SAAuB7E,EAAQmE,GAG7D,OAFKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QAEpB,SAAf6K,KAAKiuC,IACTjuC,KAAKiuC,EAAS,IAAM,GACrBjuC,KAAKiuC,EAAS,IAAM,EACrBjuC,KAAKiuC,EAAS,KAGlB9L,EAAO9sC,UAAU09C,UAAY,SAAoB9E,EAAQtC,EAAYyG,GACnEnE,GAAkB,EAClBtC,GAA0B,EACrByG,GAAUR,EAAY3D,EAAQtC,EAAY3rC,KAAK7K,QAKpD,IAHA,IAAIuG,EAAMsE,KAAKiuC,GACXwE,EAAM,EACNx9C,EAAI,IACCA,EAAI02C,IAAe8G,GAAO,MACjC/2C,GAAOsE,KAAKiuC,EAASh5C,GAAKw9C,EAM5B,OAFI/2C,IAFJ+2C,GAAO,OAES/2C,GAAO2S,KAAK8V,IAAI,EAAG,EAAIwnB,IAEhCjwC,GAGTymC,EAAO9sC,UAAU29C,UAAY,SAAoB/E,EAAQtC,EAAYyG,GACnEnE,GAAkB,EAClBtC,GAA0B,EACrByG,GAAUR,EAAY3D,EAAQtC,EAAY3rC,KAAK7K,QAKpD,IAHA,IAAIF,EAAI02C,EACJ8G,EAAM,EACN/2C,EAAMsE,KAAKiuC,IAAWh5C,GACnBA,EAAI,IAAMw9C,GAAO,MACtB/2C,GAAOsE,KAAKiuC,IAAWh5C,GAAKw9C,EAM9B,OAFI/2C,IAFJ+2C,GAAO,OAES/2C,GAAO2S,KAAK8V,IAAI,EAAG,EAAIwnB,IAEhCjwC,GAGTymC,EAAO9sC,UAAU49C,SAAW,SAAmBhF,EAAQmE,GAErD,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACtB,IAAf6K,KAAKiuC,IAC0B,GAA5B,IAAOjuC,KAAKiuC,GAAU,GADKjuC,KAAKiuC,IAI3C9L,EAAO9sC,UAAU69C,YAAc,SAAsBjF,EAAQmE,GACtDA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QAC3C,IAAIuG,EAAMsE,KAAKiuC,GAAWjuC,KAAKiuC,EAAS,IAAM,EAC9C,OAAc,MAANvyC,EAAsB,WAANA,EAAmBA,GAG7CymC,EAAO9sC,UAAU89C,YAAc,SAAsBlF,EAAQmE,GACtDA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QAC3C,IAAIuG,EAAMsE,KAAKiuC,EAAS,GAAMjuC,KAAKiuC,IAAW,EAC9C,OAAc,MAANvyC,EAAsB,WAANA,EAAmBA,GAG7CymC,EAAO9sC,UAAU+9C,YAAc,SAAsBnF,EAAQmE,GAG3D,OAFKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QAEnC6K,KAAKiuC,GACVjuC,KAAKiuC,EAAS,IAAM,EACpBjuC,KAAKiuC,EAAS,IAAM,GACpBjuC,KAAKiuC,EAAS,IAAM,IAGzB9L,EAAO9sC,UAAUg+C,YAAc,SAAsBpF,EAAQmE,GAG3D,OAFKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QAEnC6K,KAAKiuC,IAAW,GACrBjuC,KAAKiuC,EAAS,IAAM,GACpBjuC,KAAKiuC,EAAS,IAAM,EACpBjuC,KAAKiuC,EAAS,IAGnB9L,EAAO9sC,UAAUi+C,YAAc,SAAsBrF,EAAQmE,GAE3D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC61C,EAAQtG,KAAK1kC,KAAMiuC,GAAQ,EAAM,GAAI,IAG9C9L,EAAO9sC,UAAUk+C,YAAc,SAAsBtF,EAAQmE,GAE3D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC61C,EAAQtG,KAAK1kC,KAAMiuC,GAAQ,EAAO,GAAI,IAG/C9L,EAAO9sC,UAAUm+C,aAAe,SAAuBvF,EAAQmE,GAE7D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC61C,EAAQtG,KAAK1kC,KAAMiuC,GAAQ,EAAM,GAAI,IAG9C9L,EAAO9sC,UAAUo+C,aAAe,SAAuBxF,EAAQmE,GAE7D,OADKA,GAAUR,EAAY3D,EAAQ,EAAGjuC,KAAK7K,QACpC61C,EAAQtG,KAAK1kC,KAAMiuC,GAAQ,EAAO,GAAI,IAS/C9L,EAAO9sC,UAAUq+C,YAAc,SAAsBv6C,EAAO80C,EAAQtC,EAAYyG,IAC9Ej5C,GAASA,EACT80C,GAAkB,EAClBtC,GAA0B,EACrByG,IAEHN,EAAS9xC,KAAM7G,EAAO80C,EAAQtC,EADft9B,KAAK8V,IAAI,EAAG,EAAIwnB,GAAc,EACO,GAGtD,IAAI8G,EAAM,EACNx9C,EAAI,EAER,IADA+K,KAAKiuC,GAAkB,IAAR90C,IACNlE,EAAI02C,IAAe8G,GAAO,MACjCzyC,KAAKiuC,EAASh5C,GAAMkE,EAAQs5C,EAAO,IAGrC,OAAOxE,EAAStC,GAGlBxJ,EAAO9sC,UAAUs+C,YAAc,SAAsBx6C,EAAO80C,EAAQtC,EAAYyG,IAC9Ej5C,GAASA,EACT80C,GAAkB,EAClBtC,GAA0B,EACrByG,IAEHN,EAAS9xC,KAAM7G,EAAO80C,EAAQtC,EADft9B,KAAK8V,IAAI,EAAG,EAAIwnB,GAAc,EACO,GAGtD,IAAI12C,EAAI02C,EAAa,EACjB8G,EAAM,EAEV,IADAzyC,KAAKiuC,EAASh5C,GAAa,IAARkE,IACVlE,GAAK,IAAMw9C,GAAO,MACzBzyC,KAAKiuC,EAASh5C,GAAMkE,EAAQs5C,EAAO,IAGrC,OAAOxE,EAAStC,GAGlBxJ,EAAO9sC,UAAUu+C,WAAa,SAAqBz6C,EAAO80C,EAAQmE,GAMhE,OALAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,IAAM,GACjD9L,EAAO+I,sBAAqB/xC,EAAQkV,KAAKC,MAAMnV,IACpD6G,KAAKiuC,GAAmB,IAAR90C,EACT80C,EAAS,GAWlB9L,EAAO9sC,UAAUw+C,cAAgB,SAAwB16C,EAAO80C,EAAQmE,GAUtE,OATAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,MAAQ,GACpD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAmB,IAAR90C,EAChB6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAE9B44C,EAAkB/xC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAUy+C,cAAgB,SAAwB36C,EAAO80C,EAAQmE,GAUtE,OATAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,MAAQ,GACpD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAW90C,IAAU,EAC1B6G,KAAKiuC,EAAS,GAAc,IAAR90C,GAEpB44C,EAAkB/xC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAUlB9L,EAAO9sC,UAAU0+C,cAAgB,SAAwB56C,EAAO80C,EAAQmE,GAYtE,OAXAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,WAAY,GACxD9L,EAAO+I,qBACTlrC,KAAKiuC,EAAS,GAAM90C,IAAU,GAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,EAC9B6G,KAAKiuC,GAAmB,IAAR90C,GAEhB84C,EAAkBjyC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAU2+C,cAAgB,SAAwB76C,EAAO80C,EAAQmE,GAYtE,OAXAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,WAAY,GACxD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAW90C,IAAU,GAC1B6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,EAC9B6G,KAAKiuC,EAAS,GAAc,IAAR90C,GAEpB84C,EAAkBjyC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAU4+C,WAAa,SAAqB96C,EAAO80C,EAAQtC,EAAYyG,GAG5E,GAFAj5C,GAASA,EACT80C,GAAkB,GACbmE,EAAU,CACb,IAAI8B,EAAQ7lC,KAAK8V,IAAI,EAAG,EAAIwnB,EAAa,GAEzCmG,EAAS9xC,KAAM7G,EAAO80C,EAAQtC,EAAYuI,EAAQ,GAAIA,GAGxD,IAAIj/C,EAAI,EACJw9C,EAAM,EACN0B,EAAM,EAEV,IADAn0C,KAAKiuC,GAAkB,IAAR90C,IACNlE,EAAI02C,IAAe8G,GAAO,MAC7Bt5C,EAAQ,GAAa,IAARg7C,GAAsC,IAAzBn0C,KAAKiuC,EAASh5C,EAAI,KAC9Ck/C,EAAM,GAERn0C,KAAKiuC,EAASh5C,IAAOkE,EAAQs5C,GAAQ,GAAK0B,EAAM,IAGlD,OAAOlG,EAAStC,GAGlBxJ,EAAO9sC,UAAU++C,WAAa,SAAqBj7C,EAAO80C,EAAQtC,EAAYyG,GAG5E,GAFAj5C,GAASA,EACT80C,GAAkB,GACbmE,EAAU,CACb,IAAI8B,EAAQ7lC,KAAK8V,IAAI,EAAG,EAAIwnB,EAAa,GAEzCmG,EAAS9xC,KAAM7G,EAAO80C,EAAQtC,EAAYuI,EAAQ,GAAIA,GAGxD,IAAIj/C,EAAI02C,EAAa,EACjB8G,EAAM,EACN0B,EAAM,EAEV,IADAn0C,KAAKiuC,EAASh5C,GAAa,IAARkE,IACVlE,GAAK,IAAMw9C,GAAO,MACrBt5C,EAAQ,GAAa,IAARg7C,GAAsC,IAAzBn0C,KAAKiuC,EAASh5C,EAAI,KAC9Ck/C,EAAM,GAERn0C,KAAKiuC,EAASh5C,IAAOkE,EAAQs5C,GAAQ,GAAK0B,EAAM,IAGlD,OAAOlG,EAAStC,GAGlBxJ,EAAO9sC,UAAUg/C,UAAY,SAAoBl7C,EAAO80C,EAAQmE,GAO9D,OANAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,KAAO,KAClD9L,EAAO+I,sBAAqB/xC,EAAQkV,KAAKC,MAAMnV,IAChDA,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtC6G,KAAKiuC,GAAmB,IAAR90C,EACT80C,EAAS,GAGlB9L,EAAO9sC,UAAUi/C,aAAe,SAAuBn7C,EAAO80C,EAAQmE,GAUpE,OATAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,OAAS,OACrD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAmB,IAAR90C,EAChB6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAE9B44C,EAAkB/xC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAUk/C,aAAe,SAAuBp7C,EAAO80C,EAAQmE,GAUpE,OATAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,OAAS,OACrD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAW90C,IAAU,EAC1B6G,KAAKiuC,EAAS,GAAc,IAAR90C,GAEpB44C,EAAkB/xC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAUm/C,aAAe,SAAuBr7C,EAAO80C,EAAQmE,GAYpE,OAXAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,YAAa,YACzD9L,EAAO+I,qBACTlrC,KAAKiuC,GAAmB,IAAR90C,EAChB6G,KAAKiuC,EAAS,GAAM90C,IAAU,EAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,IAE9B84C,EAAkBjyC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAGlB9L,EAAO9sC,UAAUo/C,aAAe,SAAuBt7C,EAAO80C,EAAQmE,GAapE,OAZAj5C,GAASA,EACT80C,GAAkB,EACbmE,GAAUN,EAAS9xC,KAAM7G,EAAO80C,EAAQ,EAAG,YAAa,YACzD90C,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GACxCgpC,EAAO+I,qBACTlrC,KAAKiuC,GAAW90C,IAAU,GAC1B6G,KAAKiuC,EAAS,GAAM90C,IAAU,GAC9B6G,KAAKiuC,EAAS,GAAM90C,IAAU,EAC9B6G,KAAKiuC,EAAS,GAAc,IAAR90C,GAEpB84C,EAAkBjyC,KAAM7G,EAAO80C,GAAQ,GAElCA,EAAS,GAgBlB9L,EAAO9sC,UAAUq/C,aAAe,SAAuBv7C,EAAO80C,EAAQmE,GACpE,OAAOD,EAAWnyC,KAAM7G,EAAO80C,GAAQ,EAAMmE,IAG/CjQ,EAAO9sC,UAAUs/C,aAAe,SAAuBx7C,EAAO80C,EAAQmE,GACpE,OAAOD,EAAWnyC,KAAM7G,EAAO80C,GAAQ,EAAOmE,IAWhDjQ,EAAO9sC,UAAUu/C,cAAgB,SAAwBz7C,EAAO80C,EAAQmE,GACtE,OAAOC,EAAYryC,KAAM7G,EAAO80C,GAAQ,EAAMmE,IAGhDjQ,EAAO9sC,UAAUw/C,cAAgB,SAAwB17C,EAAO80C,EAAQmE,GACtE,OAAOC,EAAYryC,KAAM7G,EAAO80C,GAAQ,EAAOmE,IAIjDjQ,EAAO9sC,UAAUg3C,KAAO,SAAet0C,EAAQ+8C,EAAalI,EAAOC,GAQjE,GAPKD,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAM7sC,KAAK7K,QAC9B2/C,GAAe/8C,EAAO5C,SAAQ2/C,EAAc/8C,EAAO5C,QAClD2/C,IAAaA,EAAc,GAC5BjI,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlB70C,EAAO5C,QAAgC,IAAhB6K,KAAK7K,OAAc,OAAO,EAGrD,GAAI2/C,EAAc,EAChB,MAAM,IAAIzJ,WAAW,6BAEvB,GAAIuB,EAAQ,GAAKA,GAAS5sC,KAAK7K,OAAQ,MAAM,IAAIk2C,WAAW,6BAC5D,GAAIwB,EAAM,EAAG,MAAM,IAAIxB,WAAW,2BAG9BwB,EAAM7sC,KAAK7K,SAAQ03C,EAAM7sC,KAAK7K,QAC9B4C,EAAO5C,OAAS2/C,EAAcjI,EAAMD,IACtCC,EAAM90C,EAAO5C,OAAS2/C,EAAclI,GAGtC,IACI33C,EADA4S,EAAMglC,EAAMD,EAGhB,GAAI5sC,OAASjI,GAAU60C,EAAQkI,GAAeA,EAAcjI,EAE1D,IAAK53C,EAAI4S,EAAM,EAAG5S,GAAK,IAAKA,EAC1B8C,EAAO9C,EAAI6/C,GAAe90C,KAAK/K,EAAI23C,QAEhC,GAAI/kC,EAAM,MAASs6B,EAAO+I,oBAE/B,IAAKj2C,EAAI,EAAGA,EAAI4S,IAAO5S,EACrB8C,EAAO9C,EAAI6/C,GAAe90C,KAAK/K,EAAI23C,QAGrChwC,WAAWvH,UAAU0U,IAAIxU,KACvBwC,EACAiI,KAAKmwC,SAASvD,EAAOA,EAAQ/kC,GAC7BitC,GAIJ,OAAOjtC,GAOTs6B,EAAO9sC,UAAUm7C,KAAO,SAAe90C,EAAKkxC,EAAOC,EAAKd,GAEtD,GAAmB,iBAARrwC,EAAkB,CAS3B,GARqB,iBAAVkxC,GACTb,EAAWa,EACXA,EAAQ,EACRC,EAAM7sC,KAAK7K,QACa,iBAAR03C,IAChBd,EAAWc,EACXA,EAAM7sC,KAAK7K,QAEM,IAAfuG,EAAIvG,OAAc,CACpB,IAAI8uB,EAAOvoB,EAAI8C,WAAW,GACtBylB,EAAO,MACTvoB,EAAMuoB,GAGV,QAAiB9rB,IAAb4zC,GAA8C,iBAAbA,EACnC,MAAM,IAAIpkC,UAAU,6BAEtB,GAAwB,iBAAbokC,IAA0B5J,EAAO6J,WAAWD,GACrD,MAAM,IAAIpkC,UAAU,qBAAuBokC,OAErB,iBAARrwC,IAChBA,GAAY,KAId,GAAIkxC,EAAQ,GAAK5sC,KAAK7K,OAASy3C,GAAS5sC,KAAK7K,OAAS03C,EACpD,MAAM,IAAIxB,WAAW,sBAGvB,GAAIwB,GAAOD,EACT,OAAO5sC,KAQT,IAAI/K,EACJ,GANA23C,KAAkB,EAClBC,OAAc10C,IAAR00C,EAAoB7sC,KAAK7K,OAAS03C,IAAQ,EAE3CnxC,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAKzG,EAAI23C,EAAO33C,EAAI43C,IAAO53C,EACzB+K,KAAK/K,GAAKyG,MAEP,CACL,IAAIi2C,EAAQxP,EAAOtlC,SAASnB,GACxBA,EACA+wC,EAAY,IAAItK,EAAOzmC,EAAKqwC,GAAU5wC,YACtC0M,EAAM8pC,EAAMx8C,OAChB,IAAKF,EAAI,EAAGA,EAAI43C,EAAMD,IAAS33C,EAC7B+K,KAAK/K,EAAI23C,GAAS+E,EAAM18C,EAAI4S,GAIhC,OAAO7H,MAMT,IAAI+0C,EAAoB,qBAmBxB,SAASrD,EAAO/3C,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEwB,SAAS,IAC7BxB,EAAEwB,SAAS,IAGpB,SAASsxC,EAAaX,EAAQgD,GAE5B,IAAIW,EADJX,EAAQA,GAASkG,IAMjB,IAJA,IAAI7/C,EAAS22C,EAAO32C,OAChB8/C,EAAgB,KAChBtD,EAAQ,GAEH18C,EAAI,EAAGA,EAAIE,IAAUF,EAAG,CAI/B,IAHAw6C,EAAY3D,EAAOttC,WAAWvJ,IAGd,OAAUw6C,EAAY,MAAQ,CAE5C,IAAKwF,EAAe,CAElB,GAAIxF,EAAY,MAAQ,EAEjBX,GAAS,IAAM,GAAG6C,EAAMl8C,KAAK,IAAM,IAAM,KAC9C,SACK,GAAIR,EAAI,IAAME,EAAQ,EAEtB25C,GAAS,IAAM,GAAG6C,EAAMl8C,KAAK,IAAM,IAAM,KAC9C,SAIFw/C,EAAgBxF,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjBX,GAAS,IAAM,GAAG6C,EAAMl8C,KAAK,IAAM,IAAM,KAC9Cw/C,EAAgBxF,EAChB,SAIFA,EAAkE,OAArDwF,EAAgB,OAAU,GAAKxF,EAAY,YAC/CwF,IAEJnG,GAAS,IAAM,GAAG6C,EAAMl8C,KAAK,IAAM,IAAM,KAMhD,GAHAw/C,EAAgB,KAGZxF,EAAY,IAAM,CACpB,IAAKX,GAAS,GAAK,EAAG,MACtB6C,EAAMl8C,KAAKg6C,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAKX,GAAS,GAAK,EAAG,MACtB6C,EAAMl8C,KACJg6C,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAKX,GAAS,GAAK,EAAG,MACtB6C,EAAMl8C,KACJg6C,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAIn4C,MAAM,sBARhB,IAAKw3C,GAAS,GAAK,EAAG,MACtB6C,EAAMl8C,KACJg6C,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAOkC,EA4BT,SAASjF,EAAepxC,GACtB,OAAO2M,EAAOitC,YAhIhB,SAAsB55C,GAIpB,IAFAA,EAUF,SAAqBA,GACnB,OAAIA,EAAI8C,KAAa9C,EAAI8C,OAClB9C,EAAI+C,QAAQ,aAAc,IAZ3B82C,CAAW75C,GAAK+C,QAAQ02C,EAAmB,KAEzC5/C,OAAS,EAAG,MAAO,GAE3B,KAAOmG,EAAInG,OAAS,GAAM,GACxBmG,GAAY,IAEd,OAAOA,EAuHmB85C,CAAY95C,IAGxC,SAASizC,EAAYr3C,EAAKm+C,EAAKpH,EAAQ94C,GACrC,IAAK,IAAIF,EAAI,EAAGA,EAAIE,KACbF,EAAIg5C,GAAUoH,EAAIlgD,QAAYF,GAAKiC,EAAI/B,UADhBF,EAE5BogD,EAAIpgD,EAAIg5C,GAAU/2C,EAAIjC,GAExB,OAAOA,K,+CCrvDTe,EAAQ21C,WAuCR,SAAqB2J,GACnB,IAAIC,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,GA1ClD1/C,EAAQk/C,YAiDR,SAAsBI,GACpB,IAAIK,EAcA1gD,EAbAsgD,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvB31C,EAAM,IAAIg2C,EAVhB,SAAsBN,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,EAS9BG,CAAYP,EAAKG,EAAUC,IAEzCI,EAAU,EAGVjuC,EAAM6tC,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAKxgD,EAAI,EAAGA,EAAI4S,EAAK5S,GAAK,EACxB0gD,EACGI,EAAUT,EAAI92C,WAAWvJ,KAAO,GAChC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,KAAO,GACpC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,KAAO,EACrC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,IAC/B2K,EAAIk2C,KAAcH,GAAO,GAAM,IAC/B/1C,EAAIk2C,KAAcH,GAAO,EAAK,IAC9B/1C,EAAIk2C,KAAmB,IAANH,EAGK,IAApBD,IACFC,EACGI,EAAUT,EAAI92C,WAAWvJ,KAAO,EAChC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,KAAO,EACvC2K,EAAIk2C,KAAmB,IAANH,GAGK,IAApBD,IACFC,EACGI,EAAUT,EAAI92C,WAAWvJ,KAAO,GAChC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,KAAO,EACpC8gD,EAAUT,EAAI92C,WAAWvJ,EAAI,KAAO,EACvC2K,EAAIk2C,KAAcH,GAAO,EAAK,IAC9B/1C,EAAIk2C,KAAmB,IAANH,GAGnB,OAAO/1C,GA3FT5J,EAAQk5C,cAkHR,SAAwB8G,GAQtB,IAPA,IAAIL,EACA9tC,EAAMmuC,EAAM7gD,OACZ8gD,EAAapuC,EAAM,EACnB85B,EAAQ,GAIH1sC,EAAI,EAAGihD,EAAOruC,EAAMouC,EAAYhhD,EAAIihD,EAAMjhD,GAH9B,MAInB0sC,EAAMlsC,KAAK0gD,EAAYH,EAAO/gD,EAAIA,EAJf,MAIqCihD,EAAOA,EAAQjhD,EAJpD,QAQF,IAAfghD,GACFN,EAAMK,EAAMnuC,EAAM,GAClB85B,EAAMlsC,KACJ2gD,EAAOT,GAAO,GACdS,EAAQT,GAAO,EAAK,IACpB,OAEsB,IAAfM,IACTN,GAAOK,EAAMnuC,EAAM,IAAM,GAAKmuC,EAAMnuC,EAAM,GAC1C85B,EAAMlsC,KACJ2gD,EAAOT,GAAO,IACdS,EAAQT,GAAO,EAAK,IACpBS,EAAQT,GAAO,EAAK,IACpB,MAIJ,OAAOhU,EAAM98B,KAAK,KAzIpB,IALA,IAAIuxC,EAAS,GACTL,EAAY,GACZH,EAA4B,oBAAfh5C,WAA6BA,WAAajB,MAEvDsoB,EAAO,mEACFhvB,EAAI,EAAG4S,EAAMoc,EAAK9uB,OAAQF,EAAI4S,IAAO5S,EAC5CmhD,EAAOnhD,GAAKgvB,EAAKhvB,GACjB8gD,EAAU9xB,EAAKzlB,WAAWvJ,IAAMA,EAQlC,SAASugD,EAASF,GAChB,IAAIztC,EAAMytC,EAAIngD,OAEd,GAAI0S,EAAM,EAAI,EACZ,MAAM,IAAIvQ,MAAM,kDAKlB,IAAIm+C,EAAWH,EAAI51C,QAAQ,KAO3B,OANkB,IAAd+1C,IAAiBA,EAAW5tC,GAMzB,CAAC4tC,EAJcA,IAAa5tC,EAC/B,EACA,EAAK4tC,EAAW,GAsEtB,SAASU,EAAaH,EAAOpJ,EAAOC,GAGlC,IAFA,IAAI8I,EARoBU,EASpBC,EAAS,GACJrhD,EAAI23C,EAAO33C,EAAI43C,EAAK53C,GAAK,EAChC0gD,GACIK,EAAM/gD,IAAM,GAAM,WAClB+gD,EAAM/gD,EAAI,IAAM,EAAK,QACP,IAAf+gD,EAAM/gD,EAAI,IACbqhD,EAAO7gD,KAdF2gD,GADiBC,EAeMV,IAdT,GAAK,IACxBS,EAAOC,GAAO,GAAK,IACnBD,EAAOC,GAAO,EAAI,IAClBD,EAAa,GAANC,IAaT,OAAOC,EAAOzxC,KAAK,IAjGrBkxC,EAAU,IAAIv3C,WAAW,IAAM,GAC/Bu3C,EAAU,IAAIv3C,WAAW,IAAM,I;;AClB/BxI,EAAQ0uC,KAAO,SAAUtnC,EAAQ6wC,EAAQsI,EAAMC,EAAMC,GACnD,IAAItgD,EAAGqC,EACHk+C,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACT5hD,EAAIshD,EAAQE,EAAS,EAAK,EAC1B/9C,EAAI69C,GAAQ,EAAI,EAChBl8C,EAAI+C,EAAO6wC,EAASh5C,GAOxB,IALAA,GAAKyD,EAELvC,EAAIkE,GAAM,IAAOw8C,GAAU,EAC3Bx8C,KAAQw8C,EACRA,GAASH,EACFG,EAAQ,EAAG1gD,EAAS,IAAJA,EAAWiH,EAAO6wC,EAASh5C,GAAIA,GAAKyD,EAAGm+C,GAAS,GAKvE,IAHAr+C,EAAIrC,GAAM,IAAO0gD,GAAU,EAC3B1gD,KAAQ0gD,EACRA,GAASL,EACFK,EAAQ,EAAGr+C,EAAS,IAAJA,EAAW4E,EAAO6wC,EAASh5C,GAAIA,GAAKyD,EAAGm+C,GAAS,GAEvE,GAAU,IAAN1gD,EACFA,EAAI,EAAIygD,MACH,IAAIzgD,IAAMwgD,EACf,OAAOn+C,EAAIs+C,IAAsB9B,KAAd36C,GAAK,EAAI,GAE5B7B,GAAQ6V,KAAK8V,IAAI,EAAGqyB,GACpBrgD,GAAQygD,EAEV,OAAQv8C,GAAK,EAAI,GAAK7B,EAAI6V,KAAK8V,IAAI,EAAGhuB,EAAIqgD,IAG5CxgD,EAAQk2C,MAAQ,SAAU9uC,EAAQjE,EAAO80C,EAAQsI,EAAMC,EAAMC,GAC3D,IAAItgD,EAAGqC,EAAGC,EACNi+C,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAe,KAATP,EAAcnoC,KAAK8V,IAAI,GAAI,IAAM9V,KAAK8V,IAAI,GAAI,IAAM,EAC1DlvB,EAAIshD,EAAO,EAAKE,EAAS,EACzB/9C,EAAI69C,EAAO,GAAK,EAChBl8C,EAAIlB,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQkV,KAAK0e,IAAI5zB,GAEb6X,MAAM7X,IAAUA,IAAU67C,KAC5Bx8C,EAAIwY,MAAM7X,GAAS,EAAI,EACvBhD,EAAIwgD,IAEJxgD,EAAIkY,KAAKC,MAAMD,KAAK+D,IAAIjZ,GAASkV,KAAK2oC,KAClC79C,GAASV,EAAI4V,KAAK8V,IAAI,GAAIhuB,IAAM,IAClCA,IACAsC,GAAK,IAGLU,GADEhD,EAAIygD,GAAS,EACNG,EAAKt+C,EAELs+C,EAAK1oC,KAAK8V,IAAI,EAAG,EAAIyyB,IAEpBn+C,GAAK,IACftC,IACAsC,GAAK,GAGHtC,EAAIygD,GAASD,GACfn+C,EAAI,EACJrC,EAAIwgD,GACKxgD,EAAIygD,GAAS,GACtBp+C,GAAMW,EAAQV,EAAK,GAAK4V,KAAK8V,IAAI,EAAGqyB,GACpCrgD,GAAQygD,IAERp+C,EAAIW,EAAQkV,KAAK8V,IAAI,EAAGyyB,EAAQ,GAAKvoC,KAAK8V,IAAI,EAAGqyB,GACjDrgD,EAAI,IAIDqgD,GAAQ,EAAGp5C,EAAO6wC,EAASh5C,GAAS,IAAJuD,EAAUvD,GAAKyD,EAAGF,GAAK,IAAKg+C,GAAQ,GAI3E,IAFArgD,EAAKA,GAAKqgD,EAAQh+C,EAClBk+C,GAAQF,EACDE,EAAO,EAAGt5C,EAAO6wC,EAASh5C,GAAS,IAAJkB,EAAUlB,GAAKyD,EAAGvC,GAAK,IAAKugD,GAAQ,GAE1Et5C,EAAO6wC,EAASh5C,EAAIyD,IAAU,IAAJ2B,I,cCnF5B,IAAIc,EAAW,GAAGA,SAElBlF,EAAOD,QAAU2F,MAAMF,SAAW,SAAUmE,GAC1C,MAA6B,kBAAtBzE,EAAS5F,KAAKqK,K,6BCDvB,IAAIglB,EAAa,EAAQ,IASzB3uB,EAAOD,QAAU,SAAgBQ,EAASC,EAAQstB,GAChD,IAAIsU,EAAiBtU,EAAS7Z,OAAOmuB,eAChCtU,EAASC,QAAWqU,IAAkBA,EAAetU,EAASC,QAGjEvtB,EAAO,IAAImuB,EACT,mCAAqCb,EAASC,OAC9C,CAACY,EAAWogB,gBAAiBpgB,EAAWoT,kBAAkB3pB,KAAKC,MAAMyV,EAASC,OAAS,KAAO,GAC9FD,EAAS7Z,OACT6Z,EAAS7rB,QACT6rB,IAPFvtB,EAAQutB,K,6BCZZ,IAAIY,EAAQ,EAAQ,GAEpB1uB,EAAOD,QACL2uB,EAAMlnB,uBAIK,CACLyuC,MAAO,SAAej0C,EAAMkB,EAAO89C,EAASC,EAAM91C,EAAQ+1C,GACxD,IAAIC,EAAS,GACbA,EAAO3hD,KAAKwC,EAAO,IAAM0N,mBAAmBxM,IAExCwrB,EAAMrnB,SAAS25C,IACjBG,EAAO3hD,KAAK,WAAa,IAAIsb,KAAKkmC,GAASI,eAGzC1yB,EAAMtnB,SAAS65C,IACjBE,EAAO3hD,KAAK,QAAUyhD,GAGpBvyB,EAAMtnB,SAAS+D,IACjBg2C,EAAO3hD,KAAK,UAAY2L,IAGX,IAAX+1C,GACFC,EAAO3hD,KAAK,UAGdmB,SAASwgD,OAASA,EAAOvyC,KAAK,OAGhC6/B,KAAM,SAAczsC,GAClB,IAAIi5C,EAAQt6C,SAASwgD,OAAOlG,MAAM,IAAIoG,OAAO,aAAer/C,EAAO,cACnE,OAAQi5C,EAAQqG,mBAAmBrG,EAAM,IAAM,MAGjDnsC,OAAQ,SAAgB9M,GACtB+H,KAAKksC,MAAMj0C,EAAM,GAAI8Y,KAAKoF,MAAQ,SAO/B,CACL+1B,MAAO,aACPxH,KAAM,WAAkB,OAAO,MAC/B3/B,OAAQ,e,6BCzChB9O,EAAOD,QAAU,SAAuBwrC,GAItC,MAAO,8BAA8BngC,KAAKmgC,K,6BCH5CvrC,EAAOD,QAAU,SAAqB8W,EAAS0qC,GAC7C,OAAOA,EACH1qC,EAAQzO,QAAQ,OAAQ,IAAM,IAAMm5C,EAAYn5C,QAAQ,OAAQ,IAChEyO,I,6BCVN,IAAI6X,EAAQ,EAAQ,GAIhB8yB,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5BxhD,EAAOD,QAAU,SAAsB2tB,GACrC,IACIlqB,EACAiC,EACAzG,EAHAk5C,EAAS,GAKb,OAAKxqB,GAELgB,EAAMpoB,QAAQonB,EAAQ+zB,MAAM,OAAO,SAAgBC,GAKjD,GAJA1iD,EAAI0iD,EAAKj4C,QAAQ,KACjBjG,EAAMkrB,EAAMvmB,KAAKu5C,EAAKtJ,OAAO,EAAGp5C,IAAIsG,cACpCG,EAAMipB,EAAMvmB,KAAKu5C,EAAKtJ,OAAOp5C,EAAI,IAE7BwE,EAAK,CACP,GAAI00C,EAAO10C,IAAQg+C,EAAkB/3C,QAAQjG,IAAQ,EACnD,OAGA00C,EAAO10C,GADG,eAARA,GACa00C,EAAO10C,GAAO00C,EAAO10C,GAAO,IAAImK,OAAO,CAAClI,IAEzCyyC,EAAO10C,GAAO00C,EAAO10C,GAAO,KAAOiC,EAAMA,MAKtDyyC,GAnBgBA,I,6BC9BzB,IAAIxpB,EAAQ,EAAQ,GAEpB1uB,EAAOD,QACL2uB,EAAMlnB,uBAIJ,WACE,IAEIm6C,EAFAC,EAAO,kBAAkBx2C,KAAK3D,UAAU0d,WACxC08B,EAAiBlhD,SAASC,cAAc,KAS5C,SAASkhD,EAAWvW,GAClB,IAAIjgC,EAAOigC,EAWX,OATIqW,IAEFC,EAAe7gD,aAAa,OAAQsK,GACpCA,EAAOu2C,EAAev2C,MAGxBu2C,EAAe7gD,aAAa,OAAQsK,GAG7B,CACLA,KAAMu2C,EAAev2C,KACrBwjC,SAAU+S,EAAe/S,SAAW+S,EAAe/S,SAAS1mC,QAAQ,KAAM,IAAM,GAChF25C,KAAMF,EAAeE,KACrBC,OAAQH,EAAeG,OAASH,EAAeG,OAAO55C,QAAQ,MAAO,IAAM,GAC3E65C,KAAMJ,EAAeI,KAAOJ,EAAeI,KAAK75C,QAAQ,KAAM,IAAM,GACpE85C,SAAUL,EAAeK,SACzBC,KAAMN,EAAeM,KACrBC,SAAiD,MAAtCP,EAAeO,SAASC,OAAO,GACxCR,EAAeO,SACf,IAAMP,EAAeO,UAY3B,OARAT,EAAYG,EAAW79C,OAAOoH,SAASC,MAQhC,SAAyBg3C,GAC9B,IAAIpK,EAAUxpB,EAAMtnB,SAASk7C,GAAeR,EAAWQ,GAAcA,EACrE,OAAQpK,EAAOpJ,WAAa6S,EAAU7S,UAClCoJ,EAAO6J,OAASJ,EAAUI,MAhDlC,GAsDS,WACL,OAAO,I,6BC9Df/hD,EAAOD,QAAU,SAAuBwrC,GACtC,IAAI0P,EAAQ,4BAA4BsH,KAAKhX,GAC7C,OAAO0P,GAASA,EAAM,IAAM,K,cCH9Bj7C,EAAOD,QAAU,M,6BCCjB,IAAI0yC,EAAU,EAAQ,IAAezmC,QACjC2iB,EAAa,EAAQ,IAErBqkB,EAAa,GAGjB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAU1sC,SAAQ,SAAS1E,EAAM5C,GACrFg0C,EAAWpxC,GAAQ,SAAmBwD,GACpC,cAAcA,IAAUxD,GAAQ,KAAO5C,EAAI,EAAI,KAAO,KAAO4C,MAIjE,IAAI4gD,EAAqB,GASzBxP,EAAWjS,aAAe,SAAsBgS,EAAW/mC,EAASjK,GAClE,SAAS0gD,EAAcC,EAAKC,GAC1B,MAAO,WAAalQ,EAAU,0BAA6BiQ,EAAM,IAAOC,GAAQ5gD,EAAU,KAAOA,EAAU,IAI7G,OAAO,SAASmB,EAAOw/C,EAAKE,GAC1B,IAAkB,IAAd7P,EACF,MAAM,IAAIpkB,EACR8zB,EAAcC,EAAK,qBAAuB12C,EAAU,OAASA,EAAU,KACvE2iB,EAAWk0B,gBAef,OAXI72C,IAAYw2C,EAAmBE,KACjCF,EAAmBE,IAAO,EAE1B3+C,QAAQ4V,KACN8oC,EACEC,EACA,+BAAiC12C,EAAU,8CAK1C+mC,GAAYA,EAAU7vC,EAAOw/C,EAAKE,KAkC7C5iD,EAAOD,QAAU,CACfozC,cAxBF,SAAuB/lC,EAAS01C,EAAQC,GACtC,GAAuB,iBAAZ31C,EACT,MAAM,IAAIuhB,EAAW,4BAA6BA,EAAWq0B,sBAI/D,IAFA,IAAIz0C,EAAOpP,OAAOoP,KAAKnB,GACnBpO,EAAIuP,EAAKrP,OACNF,KAAM,GAAG,CACd,IAAI0jD,EAAMn0C,EAAKvP,GACX+zC,EAAY+P,EAAOJ,GACvB,GAAI3P,EAAJ,CACE,IAAI7vC,EAAQkK,EAAQs1C,GAChB96C,OAAmB1F,IAAVgB,GAAuB6vC,EAAU7vC,EAAOw/C,EAAKt1C,GAC1D,IAAe,IAAXxF,EACF,MAAM,IAAI+mB,EAAW,UAAY+zB,EAAM,YAAc96C,EAAQ+mB,EAAWq0B,2BAI5E,IAAqB,IAAjBD,EACF,MAAM,IAAIp0B,EAAW,kBAAoB+zB,EAAK/zB,EAAWs0B,kBAO7DjQ,WAAYA,I,6BClFd,IAAIvjB,EAAgB,EAAQ,IAQ5B,SAAS8iB,EAAY2Q,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAIxxC,UAAU,gCAGtB,IAAIyxC,EAEJp5C,KAAK1J,QAAU,IAAIC,SAAQ,SAAyBC,GAClD4iD,EAAiB5iD,KAGnB,IAAI+tB,EAAQvkB,KAGZA,KAAK1J,QAAQkZ,MAAK,SAASuhB,GACzB,GAAKxM,EAAM80B,WAAX,CAEA,IAAIpkD,EACAiB,EAAIquB,EAAM80B,WAAWlkD,OAEzB,IAAKF,EAAI,EAAGA,EAAIiB,EAAGjB,IACjBsvB,EAAM80B,WAAWpkD,GAAG87B,GAEtBxM,EAAM80B,WAAa,SAIrBr5C,KAAK1J,QAAQkZ,KAAO,SAAS8pC,GAC3B,IAAIC,EAEAjjD,EAAU,IAAIC,SAAQ,SAASC,GACjC+tB,EAAMnkB,UAAU5J,GAChB+iD,EAAW/iD,KACVgZ,KAAK8pC,GAMR,OAJAhjD,EAAQy6B,OAAS,WACfxM,EAAM2e,YAAYqW,IAGbjjD,GAGT6iD,GAAS,SAAgBnhD,GACnBusB,EAAMsmB,SAKVtmB,EAAMsmB,OAAS,IAAInlB,EAAc1tB,GACjCohD,EAAe70B,EAAMsmB,YAOzBrC,EAAYnzC,UAAUu1C,iBAAmB,WACvC,GAAI5qC,KAAK6qC,OACP,MAAM7qC,KAAK6qC,QAQfrC,EAAYnzC,UAAU+K,UAAY,SAAmBC,GAC/CL,KAAK6qC,OACPxqC,EAASL,KAAK6qC,QAIZ7qC,KAAKq5C,WACPr5C,KAAKq5C,WAAW5jD,KAAK4K,GAErBL,KAAKq5C,WAAa,CAACh5C,IAQvBmoC,EAAYnzC,UAAU6tC,YAAc,SAAqB7iC,GACvD,GAAKL,KAAKq5C,WAAV,CAGA,IAAIx1C,EAAQ7D,KAAKq5C,WAAW35C,QAAQW,IACrB,IAAXwD,GACF7D,KAAKq5C,WAAW1yC,OAAO9C,EAAO,KAQlC2kC,EAAYlgC,OAAS,WACnB,IAAIyoB,EAIJ,MAAO,CACLxM,MAJU,IAAIikB,GAAY,SAAkB/vC,GAC5Cs4B,EAASt4B,KAITs4B,OAAQA,IAIZ96B,EAAOD,QAAUwyC,G,6BChGjBvyC,EAAOD,QAAU,SAAgBkyB,GAC/B,OAAO,SAActoB,GACnB,OAAOsoB,EAAS6C,MAAM,KAAMnrB,M,6BCtBhC,IAAI+kB,EAAQ,EAAQ,GAQpB1uB,EAAOD,QAAU,SAAsB4f,GACrC,OAAO+O,EAAM7oB,SAAS8Z,KAAsC,IAAzBA,EAAQizB,e,6BCF7C,IAAI2Q,EAAuB,EAAQ,IAEnC,SAASC,KACT,SAASC,KACTA,EAAuBC,kBAAoBF,EAE3CxjD,EAAOD,QAAU,WACf,SAAS4jD,EAAKj7C,EAAOk7C,EAAUC,EAAex4C,EAAUy4C,EAAcC,GACpE,GAAIA,IAAWR,EAAf,CAIA,IAAIz/C,EAAM,IAAIzC,MACZ,mLAKF,MADAyC,EAAI9B,KAAO,sBACL8B,GAGR,SAASkgD,IACP,OAAOL,EAFTA,EAAKM,WAAaN,EAMlB,IAAIO,EAAiB,CACnBlvB,MAAO2uB,EACPQ,OAAQR,EACRS,KAAMT,EACNlvB,KAAMkvB,EACN70B,OAAQ60B,EACRhgD,OAAQggD,EACR9N,OAAQ8N,EACRU,OAAQV,EAERW,IAAKX,EACLY,QAASP,EACT5oB,QAASuoB,EACTa,YAAab,EACbc,WAAYT,EACZ3yB,KAAMsyB,EACNe,SAAUV,EACVW,MAAOX,EACPY,UAAWZ,EACXa,MAAOb,EACPc,MAAOd,EAEPe,eAAgBtB,EAChBC,kBAAmBF,GAKrB,OAFAU,EAAec,UAAYd,EAEpBA,I,6BCpDTlkD,EAAOD,QAFoB,gD,sFCNvBqN,EAAU,CAEd,OAAiB,OACjB,WAAoB,G,GAEP,IAAI,IAASA,GAIX,IAAQ41B,O,uBCTnB,EAAU,CAEd,OAAiB,OACjB,WAAoB,G,GAEP,IAAI,IAAS,GAIX,IAAQA,O,OCKvB,MAAMiiB,UAAuB1xC,IAAMk0B,UAGjCn0B,SACE,MAAM,SAAEo0B,EAAQ,OAAEwd,EAAM,SAAExxC,EAAQ,QAAEyxC,EAAO,MAAErgC,GAAU/a,KAAKrB,MAC5D,OACE6K,IAAA3S,cAAA,OACEmiC,UAAW,CACT,6BACA,MACAmiB,EAAS,0BAA4B,IACrCt2C,KAAK,KACPw2C,eAAcD,EACd/2C,MAAO,CACL0W,UAGFvR,IAAA3S,cAACknC,IAAU,KACTv0B,IAAA3S,cAAC4mC,IAAI,CAACE,SAAUA,EAAU9iB,OAAQ,GAAIE,MAAO,MAE/CvR,IAAA3S,cAAA,OAAKmiC,UAAU,6BAA6BrvB,K,EApB9CuxC,E,EACiB,kB,sUADH,kB,wFA0BLI,ICzCAJ,EDyCAI,cAAqCJ,G,QExChD,EAAU,CAEd,OAAiB,OACjB,WAAoB,G,GAEP,IAAI,IAAS,GAIX,IAAQjiB,O,mcCUvB,MAAMsiB,UAA8B/xC,IAAMk0B,UAMvC5gC,eAAA+tB,GAAA,SAAAA,GAAA9qB,EAAA,wBACkB,CAACrH,EAAc8iD,KACtB,SAAN9iD,GAAqC,IAArBsH,KAAKrB,MAAMkF,MAK3B7D,KAAKrB,MAAMiyB,cACb5wB,KAAKrB,MAAMiyB,aAAal4B,GALxByR,UAAI2T,2BAA2B5I,iBASnC3L,SACE,MAAM,KAAE/F,EAAI,MAAEK,EAAK,MAAEkX,GAAU/a,KAAKrB,MACpC,OACE6K,IAAA3S,cAACqkD,EAAc,CACbvd,SAAUn6B,EAAKm6B,SACflkC,IAAK+J,EAAKsH,MACVjH,MAAOA,EACP43C,gBAAiBz7C,KAAKrB,MAAM88C,gBAAgB53C,GAC5Cs3C,OAAQ33C,EAAK23C,OACb1qC,SAAU,oBAAoB5M,EAC9B+sB,aAAc5wB,KAAK07C,iBACnBnyB,eAAe,mBACfxO,MAAOA,GAENvX,EAAKsH,QAMd,MAAM6wC,UAAwBnyC,IAAMk0B,UAAgC5gC,eAAA+tB,GAAA,SAAAA,GAAA9qB,EAAA,2BAC3C8D,GAAkB,KACnC7D,KAAKrB,MAAMi9C,MAAM/3C,IACnB7D,KAAKrB,MAAMi9C,MAAM/3C,GAAOg4C,YAI5BtyC,SACE,MAAMuyC,EAAa97C,KAAKrB,MAAMi9C,MAAMzmD,OACpC,GAAmB,IAAf2mD,EACF,OAAO,KAET,MACMC,EAAc,gBArDF,IAoDGD,EAAa,WACsBA,KAExD,OACEtyC,IAAA3S,cAACmlD,EAAgB,CAACvrC,SAAS,oBACxBzQ,KAAKrB,MAAMi9C,MAAMvzC,IAAI,CAAC7E,EAAMK,IAC3B2F,IAAA3S,cAAC0kD,EAAqB,CACpBE,gBAAiBz7C,KAAKi8C,oBACtBxiD,IAAK+J,EAAKsH,MACVtH,KAAMA,EACNK,MAAOA,EACPkX,MAAOghC,OAQnB,MAAMG,UAAgB1yC,IAAMk0B,UAC1Bn0B,SACE,OAAOC,IAAA3S,cAAA,OAAKmiC,UAAU,oBAAoBh5B,KAAKrB,MAAMgL,WAIzD,MAAMqyC,EAAmBV,YAAc,CAAE/nB,eAAe,GAA/B+nB,CAAuCY,GAEjDP,ICjGAA,EDiGAA,E,6bE3Ff,MAAMQ,EAAe5gB,eAAK,IACxB,+BAEI6gB,EAAW7gB,eAAK,IAAM,+BACtB8gB,EAAY9gB,eAAK,IAAM,+BACvB+gB,EAAc/gB,eAAK,IAAM,+BACzBghB,EAAWhhB,eAAK,IAAM,+BACtBihB,EAAiBjhB,eAAK,IAAM,+BAC5BkhB,EAAclhB,eAAK,IAAM,+BAYzBmhB,EAAeA,IAAMlzC,IAAA3S,cAAA,OAAKmiC,UAAU,uBAEpC2jB,EAAuE,CAC3EhrC,aAAcwqC,EACdzqC,QAAS0qC,EACT3qC,UAAW4qC,EACXzqC,YAAa0qC,EACbzqC,SAAU0qC,EACVrqC,WAAYsqC,EACZzqC,YApBkBwpB,eAAK,IACvB,gCAoBAvpB,aAlBmBupB,eAAK,IACxB,gCAkBAtpB,SAhBmBspB,eAAK,IACxB,gCAgBAzpB,kBAAmB2qC,GAQrB,MAAMnzC,UAAqBE,IAAMk0B,UAK/B5gC,YAAY6B,GACVqQ,MAAMrQ,GAAOoB,EAAA,mBAL4B,MAAIA,EAAA,yBACE,MAAIA,EAAA,yBAKnDC,KAAKmS,UAAYhI,UAAI2T,2BAA2B3O,sBAEhDnP,KAAK48C,MAAQ,CACXC,YAAa78C,KAAKmS,UAAUpG,aAC5B+wC,cAAe98C,KAAKmS,UAAU4qC,iBAAiB5jD,OAInD6jD,oBAEEh9C,KAAKkjC,YAAcljC,KAAKmS,UAAU8qC,uBAAuB78C,UAAU,KACjEJ,KAAKk9C,SAAS,CAAEL,YAAa78C,KAAKmS,UAAUpG,iBAI9C/L,KAAKm9C,kBAAoBn9C,KAAKmS,UAAU4qC,iBAAiB38C,UACtDiK,IACCrK,KAAKk9C,SAAS,CAAEJ,cAAezyC,MAKrC+yC,uBACMp9C,KAAKkjC,cACPljC,KAAKkjC,cACLljC,KAAKkjC,YAAc,MAEjBljC,KAAKm9C,oBACPn9C,KAAKm9C,oBACLn9C,KAAKm9C,kBAAoB,MAI7BE,UAAU3yC,GACR,MAAO,KACD1K,KAAKmS,UAAUpG,eAAiBrB,IAGpC1K,KAAKmS,UAAUpG,aAAerB,IAIlCnB,SACE,MAAM,YAAEszC,EAAW,cAAEC,GAAkB98C,KAAK48C,MAGtCU,EAKAR,EAAcz0C,IAAKqC,IAAK,CAC5BizB,SAAUjzB,EAAM7S,KAChBgkD,QAAS77C,KAAKq9C,UAAU3yC,EAAM7S,MAC9BiT,MAAOJ,EAAMI,MACbqwC,OAAQ0B,IAAgBnyC,EAAM7S,QAG1B0lD,EAAuBV,EAAcF,EAAWE,GAAe,KAErE,OACErzC,IAAA3S,cAAA,OAAKmiC,UAAU,sBACbxvB,IAAA3S,cAAC8kD,EAAe,CAACC,MAAO0B,IACvBC,GACC/zC,IAAA3S,cAAA,OAAKmiC,UAAU,sBACbxvB,IAAA3S,cAACgnC,WAAQ,CAACC,SAAUt0B,IAAA3S,cAAC6lD,EAAY,OAC/BlzC,IAAA3S,cAAC0mD,EAAoB,UASpBj0C,QChIAA,a,wDCyDR,MClDMk0C,EAAqB,CAChCtkC,IAAK,2BACLukC,OAAQ,CACNC,aDgDO,UC/CPC,mBDwDS,aCtDXC,OAAQ,CAENC,cAAe,UAGfC,gBAAiB,UAGjBC,eAAgB,UAGhBC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UAGVC,iBAAkB,UAClBC,mBAAoB,UACpBC,kBAAmB,UAGnBC,kBAAmB,UACnBC,aAAc,UACdC,WAAY,UAGZC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,WAEXC,QAAS,2BACThnD,KAAM,YACNJ,KDwBS,UCvBTwB,KD6BM,OC5BN6lD,MAAO,2BACPC,WAAY,CACVj2B,KAjDgB,oBAkDhBk2B,SAlDgB,sB,4BCJhB/7C,EAAU,CAEd,OAAiB,OACjB,WAAoB,G,GAEP,IAAI,IAASA,GAIX,IAAQ41B,O,MCHvB,MAAMomB,EAA8C,CAClDn2B,KAAM,aACNk2B,SAAU,iBACVt0C,MAAO,oBAGT,MAAM1B,UAAYI,IAAMk0B,UACtB,aAAa,IAAA4hB,EACX,MAAMp1C,EAASC,UAAIC,gBACnB,OAAOF,SAAa,QAAPo1C,EAANp1C,EAAQq1C,aAAK,IAAAD,OAAP,EAANA,EAAe1B,SAAUJ,EAAWI,OAG7CZ,oBACE5nD,OAAOoP,KAAKxE,KAAK49C,QAAQrhD,QAAS9C,IAChC7C,SAAS4oD,gBAAgBn7C,MAAMo7C,YAC7B,SAAShmD,EACTuG,KAAK49C,OAAOnkD,MAIhBrE,OAAOoP,KAAK66C,GAAiB9iD,QAAS9C,IACpC7C,SAAS4oD,gBAAgBn7C,MAAMo7C,YAC7B,cAAchmD,EACd4lD,EAAgB5lD,MAKtB2jD,uBACEhoD,OAAOoP,KAAKxE,KAAK49C,QAAQrhD,QAAS9C,IAChC7C,SAAS4oD,gBAAgBn7C,MAAMq7C,eAAe,SAASjmD,KAGzDrE,OAAOoP,KAAK66C,GAAiB9iD,QAAS9C,IACpC7C,SAAS4oD,gBAAgBn7C,MAAMq7C,eAAe,cAAcjmD,KAIhE8P,SACE,OAAOC,IAAA3S,cAAA,OAAKmiC,UAAU,eAAeh5B,KAAKrB,MAAMgL,WAIrCP,QClDAA,a,miBCkDf,MAGM49B,EAAOA,OAuNEsU,IA5MOA,EACpB7nB,uBAAwBksB,GAA+B,EACvDpsB,cAAeqsB,GAAsB,EACrCzrB,iBAAkB0rB,EAClBzrB,mBAAoB0rB,GAA2B,GACxB,KACfC,IAAkE,IAAAC,EACxE,OAAAA,EAAO,cAA4BtiB,YAGjC5gC,eAAA+tB,GAxBY5E,MAwBZ,SAAA4E,GAAA9qB,EAAA,aAS4B,CAC1BkgD,aAAcjgD,KAAKrB,MAAM8R,WAlCfwV,EAkCoC,qBAjCpD,GAAGA,IAAS5X,KAAKE,SAASpT,SAAS,IAAIkzC,OAAO,EAAG,MAkC3C+M,SAAS,EACT8E,iBAAiB,EACjB32B,eAAgBvpB,KAAKrB,MAAM4qB,gBAAkBY,MAC9CpqB,EAAA,kBACYoK,UAAI2T,2BAA2B1O,YAAUrP,EAAA,gBAQ1C0Q,IACLzQ,KAAKoP,WAAWonB,gBACnBx2B,KAAKoP,WAAW4f,SAASve,KAE5B1Q,EAAA,2BAEqBC,KAAKoP,WAAW8f,qBAAmBnvB,EAAA,kBAE5C,KACXC,KAAKoP,WAAW4f,SAAShvB,KAAK48C,MAAMqD,gBACrClgD,EAAA,qBAEgBq7C,IACfp7C,KAAKk9C,SAAS,CAAE9B,cACjBr7C,EAAA,+BAE0BmgD,IACzBlgD,KAAKk9C,SAAS,CAAEgD,sBACjBngD,EAAA,2BAEsBwwB,IACrB,MAAM,aAAEE,EAAeuW,KAAS7T,GAASnzB,KAAKrB,MAC9C8xB,EAAa0C,EAAM5C,KACpBxwB,EAAA,2BAEsBwwB,IACrB,MAAM,aAAEY,EAAe6V,KAAS7T,GAASnzB,KAAKrB,MAC9CwyB,EAAagC,EAAM5C,KACpBxwB,EAAA,6BAEuB,KACtB,MAAM,eAAEixB,EAAiBgW,KAAS7T,GAASnzB,KAAKrB,MAChDqyB,EAAemC,KAChBpzB,EAAA,0BAEqBwwB,IACpB,MAAM,YAAEG,EAAcsW,KAAS7T,GAASnzB,KAAKrB,MAC7C+xB,EAAYyC,EAAM5C,KACnBxwB,EAAA,2BAEqB,CAACisB,EAAsBuE,KAC3C,MAAM,aAAEK,EAAeoW,KAAS7T,GAASnzB,KAAKrB,MAC9C,OAAOiyB,EAAa5E,EAAWmH,EAAM5C,KACtCxwB,EAAA,8BAEwB,CAACupB,EAAgBiH,KACxC,MAAM,gBAAEkrB,EAAkBzU,KAAS7T,GAASnzB,KAAKrB,MACjD88C,EAAgBnyB,EAAQ6J,EAAM5C,KAC/BxwB,EAAA,8BAEwB,CAACupB,EAAgBiH,KACxC,MAAM,gBAAE4vB,EAAkBnZ,KAAS7T,GAASnzB,KAAKrB,MACjDwhD,EAAgB72B,EAAQ6J,EAAM5C,KA1DhC6vB,kBACE,MAAO,CACL72B,eAAgBvpB,KAAK48C,MAAMqD,cA2D/BjD,oBACE,MAAQiD,aAAcxvC,EAAQ,eAAE8Y,GAAmBvpB,KAAK48C,OAElD,uBACJppB,EAAsB,uBACtBC,GAAyB,EAAK,cAC9BF,EAAa,UACbjC,GAAY,EAAI,iBAChB6C,GAAmB,EAAI,mBACvBC,GAAqB,GACnBp0B,KAAKrB,MAET,IAAI2oB,EACJ,GAAItnB,KAAKoP,WAAWonB,eAClBlP,EAAO1wB,SAASC,cAAc,WACzB,CACL,MAAMwpD,EAAUC,sBAAYtgD,MAC5B,IAAKqgD,EACH,MAAM,IAAI/oD,MAAM,2BAElBgwB,EAAO+4B,EAGTrgD,KAAKoP,WAAW0kB,aAAa,CAC3BrjB,WACA6W,OACAiC,iBACAiK,yBACA7B,oBAAqB3xB,KAAK2xB,oBAC1BF,oBAAqBzxB,KAAKyxB,oBAC1BM,sBAAuB/xB,KAAK+xB,sBAC5BF,mBAAoB7xB,KAAK6xB,mBACzBI,oBAAqBjyB,KAAKiyB,oBAC1B8B,uBAAwB/zB,KAAK+zB,uBAC7BC,uBAAwBh0B,KAAKg0B,uBAC7BC,cAAej0B,KAAKi0B,cACpBC,wBAAyBl0B,KAAKk0B,wBAC9BT,uBACEksB,GAAgClsB,EAClCF,cAAeqsB,GAAuBrsB,EACtCa,mBAAoB0rB,GAA4B1rB,EAChDD,sBAC6Bh8B,IAA3B0nD,EACIA,EACA1rB,EACN7C,cAIJivB,qBACE,MAAQN,aAAcxvC,GAAazQ,KAAK48C,OAElC,uBACJppB,EAAsB,UACtBlC,GAAY,EAAI,mBAChB8C,GAAqB,GACnBp0B,KAAKrB,MAET,IAAI2oB,EACJ,GAAItnB,KAAKoP,WAAWonB,eAClBlP,EAAO1wB,SAASC,cAAc,WACzB,CACL,MAAMwpD,EAAUC,sBAAYtgD,MAC5B,IAAKqgD,EACH,MAAM,IAAI/oD,MAAM,2BAElBgwB,EAAO+4B,EAGTrgD,KAAKoP,WAAWmnB,gBAAgB9lB,EAAU,CACxC6W,OACAkM,yBACAlC,YACA8C,mBAAoB0rB,GAA4B1rB,IAIpDgpB,uBACE,MAAQ6C,aAAcxvC,GAAazQ,KAAK48C,MACxC58C,KAAKoP,WAAWilB,gBAAgB,CAAE5jB,aAGpClH,SACE,MAUMi3C,EA9LDC,EACXjkD,EACAgI,KAEA,MAAM3G,EAAS,IAAKrB,GAEpB,OADAgI,EAAKjI,QAAS9C,UAAeoE,EAAOpE,IAC7BoE,GAwLqB4iD,CAVR,IACTzgD,KAAKrB,SACLqB,KAAK48C,MACR5tB,SAAUhvB,KAAKgvB,SACfE,oBAAqBlvB,KAAKkvB,oBAC1BwxB,WAAY1gD,KAAK0gD,WACjBzsB,cAAej0B,KAAKi0B,cACpBC,wBAAyBl0B,KAAKk0B,yBAGE,CAChC,yBACA,yBACA,sBACA,sBACA,wBACA,sBACA,gBACA,0BACA,yBACA,gBACA,qBAGF,OAAOr9B,wBACLkpD,EACAS,KAGLzgD,EAAAigD,EAAA,eA7LuB,CACpBz2B,eAAgB0xB,IAAUnP,SAC3B/rC,EAAAigD,EAAA,oBAE0B,CACzBz2B,eAAgB0xB,IAAUnP,SAC3BkU","file":"maestro-web-sdk.esm.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({}[chunkId]||chunkId) + \".maestro-web-sdk.esm.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","module.exports = require(\"react\");","export const MaestroPanelType = {\n ESPN_KEY_PLAYS: 'espnKeyPlays',\n ESPN_STATS: 'espnStats',\n ESPN_BETS: 'espnBet',\n ESPN_FANTASY: 'espnFantasy',\n ESPN_SHOP: 'espnShop',\n HELLO_WORLD: 'helloWorld',\n FOX_KEY_PLAYS: 'foxKeyPlays',\n FOX_MULTI_VIEW: 'foxMultiview',\n FOX_STATS: 'foxStats',\n BUILDER_BLOCK_PANEL: 'builderBlockPanel',\n} as const;\n\nexport type MaestroPanelType = typeof MaestroPanelType[keyof typeof MaestroPanelType];\n\nexport interface PanelTypeInfo {\n id: MaestroPanelType;\n name: string;\n imageNamePrefix: string;\n iconName: string;\n}\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","/**\n * Basic observable implementation for view models\n */\nexport class Observable<T> {\n private listeners: ((value: T) => void)[] = [];\n private _value: T;\n\n constructor(initialValue: T) {\n this._value = initialValue;\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(newValue: T) {\n this._value = newValue;\n this.notify();\n }\n\n subscribe(listener: (value: T) => void): () => void {\n this.listeners.push(listener);\n\n // Return unsubscribe function\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener);\n };\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener(this._value));\n }\n}\n","import pkg from '../package.json';\n\nconst DEV_DOMAINS = [/bbd-web-sdk\\.us-central1-dev\\.gcp\\.maestro\\.io/];\n\n// BrowserClient type is inferred from dynamic import\nlet sentryClient: any = null;\nlet pendingErrors: Array<{ error: unknown; extra?: any }> = [];\nlet isInitializing = false;\n\nconst initSentry = async () => {\n if (sentryClient || isInitializing) return;\n if (process.env.NODE_ENV === 'test') return;\n\n isInitializing = true;\n\n try {\n const {\n BrowserClient,\n defaultStackParser,\n defaultIntegrations,\n makeFetchTransport,\n } = await import('@sentry/browser');\n\n const isDev =\n DEV_DOMAINS.find((domain) => domain.test(window.location.href)) !== null;\n\n sentryClient = new BrowserClient({\n dsn:\n 'https://91444a71cbaefc62e8dc813f22bad3bf@o4506894189330432.ingest.us.sentry.io/4509946717470720',\n transport: makeFetchTransport,\n stackParser: defaultStackParser,\n integrations: defaultIntegrations.filter((integration) => {\n // filter integrations that use the global variable\n return !['BrowserApiErrors', 'Breadcrumbs', 'GlobalHandlers'].includes(\n integration.name\n );\n }),\n tracesSampleRate: isDev ? 1 : 0.1,\n release: pkg.version,\n environment: isDev ? 'development' : 'production',\n enabled: !/localhost/.test(window.location.href),\n });\n\n // Flush pending errors\n pendingErrors.forEach(({ error, extra }) => {\n sentryClient?.captureException(error, extra);\n });\n pendingErrors = [];\n } catch (e) {\n console.error('[maestro-web-sdk] Failed to load Sentry:', e);\n } finally {\n isInitializing = false;\n }\n};\n\nexport const captureException = (error: unknown, extra?: any) => {\n if (sentryClient) {\n sentryClient.captureException(error, extra);\n } else {\n pendingErrors.push({ error, extra });\n initSentry(); // Trigger lazy init\n }\n};\n\nexport default initSentry;\n","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","import { IRenderer } from './ports/renderer';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\ntype Renderer = {\n render: (children: React.ReactNode) => void;\n unmount: () => void;\n};\n\nclass ReactRenderer implements IRenderer {\n private renderersMap: Map<string, Renderer> = new Map();\n\n /**\n * Renders the panel manager\n * @param id The element ID to render in\n * @param options Options for rendering including height and width\n */\n async renderPanel(id: string) {\n // Check if there's already a renderer for this ID and clean it up first\n if (this.renderersMap.has(id)) {\n const existingRenderer = this.renderersMap.get(id)!;\n existingRenderer.unmount();\n this.renderersMap.delete(id);\n }\n\n const renderer = await this.getRenderer(id);\n const App = require('../components/core/App').default;\n const PanelManager = require('../components/core/PanelManager').default;\n\n renderer.render(\n <App>\n <PanelManager />\n </App>\n );\n\n return () => {\n // Only unmount if this renderer is still in the map (hasn't been replaced)\n if (this.renderersMap.has(id) && this.renderersMap.get(id) === renderer) {\n renderer.unmount();\n this.renderersMap.delete(id);\n }\n };\n }\n\n /**\n * @description Get the render function and renderer for the MaestroWebSDK. Useful to configure the renderer and fonts before rendering the component.\n * @param {string} id - The id of the element to render the component in.\n * @param {{ height: number; width: number }} options - The height and width of the component.\n */\n private async getRenderer(id: string): Promise<Renderer> {\n if (this.renderersMap.has(id)) {\n return this.renderersMap.get(id)!;\n }\n\n const el = document.getElementById(id);\n if (!el) {\n throw new Error(`Element with id ${id} not found`);\n }\n\n const renderer: Renderer = {\n render: (children) => {\n ReactDOM.render(children as any, el);\n },\n unmount: () => {\n // Use the captured element reference so unmount still works even if\n // the node was detached from the DOM.\n ReactDOM.unmountComponentAtNode(el);\n // Defensive cleanup in case any nodes remain.\n el.innerHTML = '';\n },\n };\n\n this.renderersMap.set(id, renderer);\n return renderer;\n }\n}\n\nexport default ReactRenderer;\n","import { Observable } from '../helpers/Observable';\nimport { MaestroPanelType } from '../models/IPanel';\nimport { UserSettingsManager } from '../services/UserSettingsManager';\nimport SDK from '../index';\n\nexport type PanelInfo = {\n type: MaestroPanelType;\n title: string;\n};\n\nexport class PanelManagerViewModel {\n private _panels = new Observable<PanelInfo[]>([]);\n private _currentPanel = new Observable<MaestroPanelType | null>(null);\n private settingsManager: UserSettingsManager;\n private settingsUnsubscribe: (() => void) | null = null;\n private getAvailablePanelsFromConfig(): PanelInfo[] {\n const config = SDK.getPageConfig();\n if (config && Array.isArray(config.panels) && config.panels.length > 0) {\n // Map config.panel types to MaestroPanelType, filter out unknowns\n return config.panels\n .filter((p) => p.renderer?.supported_platforms?.bbd !== false)\n .map((panel) => {\n const panelType = panel.panel_type as MaestroPanelType;\n if (\n !panelType ||\n !Object.values(MaestroPanelType).includes(panelType)\n ) {\n return null;\n }\n\n return {\n type: panelType,\n title: panel.panel_name || '',\n };\n })\n .filter((panelType): panelType is PanelInfo => panelType !== null);\n }\n\n return [];\n }\n\n constructor() {\n this.settingsManager = UserSettingsManager.getInstance();\n this.initializePanels();\n this.subscribeToSettingsChanges();\n }\n\n /**\n * Initialize panels based on current settings\n */\n private initializePanels(): void {\n const filteredPanels = this.filterPanels();\n const isProdEnv = SDK.getIsProdEnv();\n\n if (!filteredPanels.length && !isProdEnv) {\n this._panels.value = [\n {\n type: 'helloWorld',\n title: 'HELLO WORLD',\n },\n ];\n } else {\n this._panels.value = filteredPanels;\n }\n\n this.updateActivePanel();\n }\n\n /**\n * Subscribe to settings changes to update panels dynamically\n */\n private subscribeToSettingsChanges(): void {\n this.settingsUnsubscribe = this.settingsManager.settings.subscribe(() => {\n this.updatePanelsBasedOnSettings();\n });\n }\n\n /**\n * Filter panels based on user settings and page config\n */\n private filterPanels(): PanelInfo[] {\n const availablePanels = this.getAvailablePanelsFromConfig();\n return availablePanels.filter((panel) => {\n return !this.settingsManager.isPanelHidden(panel.type);\n });\n }\n\n private updateActivePanel() {\n if (!this.currentPanel && this.panels[0]) {\n this.currentPanel = this.panels[0].type;\n }\n\n // If current panel is now hidden, switch to first visible panel\n if (\n this.panels.length > 0 &&\n this._currentPanel.value &&\n !this.panels.find((p) => p.type === this._currentPanel.value)\n ) {\n this._currentPanel.value = this.panels[0].type;\n }\n }\n\n /**\n * Update panels when settings change\n */\n private updatePanelsBasedOnSettings(): void {\n const filteredPanels = this.filterPanels();\n this._panels.value = filteredPanels;\n\n this.updateActivePanel();\n }\n\n /**\n * Cleanup subscriptions\n */\n public cleanup(): void {\n if (this.settingsUnsubscribe) {\n this.settingsUnsubscribe();\n this.settingsUnsubscribe = null;\n }\n }\n\n // Getter for panels\n get panels(): PanelInfo[] {\n return this._panels.value;\n }\n\n // Getter for panels observable\n get panelsObservable(): Observable<PanelInfo[]> {\n return this._panels;\n }\n\n // Getter for currentPanel\n get currentPanel(): MaestroPanelType | null {\n return this._currentPanel.value;\n }\n\n // Setter for currentPanel\n set currentPanel(value: MaestroPanelType | null) {\n this._currentPanel.value = value;\n }\n\n // Getter for currentPanel as Observable\n get currentPanelObservable(): Observable<MaestroPanelType | null> {\n return this._currentPanel;\n }\n\n setActivePanel(panelType: MaestroPanelType) {\n if (\n panelType === this.currentPanel ||\n this.panels.find((p) => p.type === panelType) === undefined\n ) {\n return;\n }\n this.currentPanel = panelType;\n this.updateActivePanel();\n }\n\n // Get the index of a specific panel type\n getIndex(forPanelType: MaestroPanelType): number | null {\n const index = this.panels.findIndex((p) => p.type === forPanelType);\n return index !== -1 ? index : null;\n }\n\n // Get the panel type at a specific index\n getPanelType(atIndex: number): MaestroPanelType | null {\n return this.panels[atIndex]?.type || null;\n }\n\n // Computed property for panel to the left\n get panelTypeToLeft(): MaestroPanelType | null {\n if (!this.currentPanel) return null;\n const currentIndex = this.getIndex(this.currentPanel);\n if (currentIndex === null || currentIndex === 0) return null;\n return this.getPanelType(currentIndex - 1);\n }\n\n // Computed property for panel to the right\n get panelTypeToRight(): MaestroPanelType | null {\n if (!this.currentPanel) return null;\n const currentIndex = this.getIndex(this.currentPanel);\n if (currentIndex === null || currentIndex === this.panels.length - 1)\n return null;\n return this.getPanelType(currentIndex + 1);\n }\n\n /**\n * @returns Array of PanelInfo for panels defined in config but not listed in MaestroPanelType\n */\n getUnlistedPanels(): PanelInfo[] {\n const config = SDK.getPageConfig();\n if (!config || !Array.isArray(config.panels)) {\n return [];\n }\n\n return config.panels\n .filter((panel) => {\n return (\n !!panel.panel_type &&\n !Object.values(MaestroPanelType).includes(panel.panel_type)\n );\n })\n .map(\n (panel): PanelInfo => {\n return {\n type: panel.panel_type!,\n title: panel.panel_name || '',\n };\n }\n );\n }\n}\n","import { Observable } from '../../helpers/Observable';\nimport { GlobalConfig, PageConfig } from './types';\nimport AxiosNetworkClient from '@/external/AxiosNetworkClient';\nimport { captureException } from '@/sentry';\nimport NetworkManager from '../NetworkManager/NetworkManager';\n\nconst SITE_ID_STATIC_BASE_URL_MAP: Record<string, string> = {\n '664b9c57d59a7a431542d814':\n 'https://static-prod.us-central1-espn-prod.gcp.maestro.io',\n};\n\ntype FetchPageConfigParams = {\n siteId: string;\n metadataValue?: string;\n pageId?: string;\n};\nexport default class StaticService {\n public configObservable = new Observable<PageConfig | null>(null);\n private client: NetworkManager;\n\n constructor(siteId: string) {\n const baseURL =\n SITE_ID_STATIC_BASE_URL_MAP[siteId] || 'https://static.gcp.maestro.io';\n this.client = new NetworkManager({\n externalNetworkClient: new AxiosNetworkClient({\n backoff: 2,\n baseURL,\n delay: 1000,\n retries: 5,\n }),\n });\n }\n\n private async fetchPageConfigByMetadata(\n siteId: string,\n metadataValue: string\n ): Promise<PageConfig | null> {\n try {\n return await this.client.externalApiRequest<PageConfig>({\n endpoint: `/pages/sites/${siteId}/metadata/${metadataValue}.json`,\n });\n } catch (err) {\n captureException(err, { siteId, metadataValue });\n console.error(\n `Failed to fetch page configuration for site ${siteId} and metadata value: ${metadataValue}:`,\n err instanceof Error ? err.message : String(err)\n );\n\n return Promise.resolve(null);\n }\n }\n\n fetchPageConfig({ siteId, metadataValue, pageId }: FetchPageConfigParams) {\n if (pageId) {\n return this.fetchPageConfigById(siteId, pageId);\n } else if (metadataValue) {\n return this.fetchPageConfigByMetadata(siteId, metadataValue);\n }\n\n return Promise.resolve(null);\n }\n\n private async fetchPageConfigById(\n siteId: string,\n pageId: string\n ): Promise<PageConfig | null> {\n try {\n return await this.client.externalApiRequest<PageConfig>({\n endpoint: `/pages/sites/${siteId}/pages/${pageId}.json`,\n });\n } catch (err) {\n captureException(err, { siteId, pageId });\n console.error(\n `Failed to fetch page configuration for site ${siteId} and page ID: ${pageId}:`,\n err instanceof Error ? err.message : String(err)\n );\n\n return Promise.resolve(null);\n }\n }\n\n static isPanelAvailable(pageConfig: PageConfig | null, panelType: string) {\n return pageConfig?.panels?.some(\n (panel) =>\n panel.panel_type === panelType &&\n panel.renderer?.supported_platforms?.bbd !== false\n );\n }\n\n pollGlobalConfig(onData: (data: GlobalConfig) => void): { stop: () => void } {\n // random interval from 4 - 6 minutes\n const interval = 240000 + Math.floor(Math.random() * 120000);\n return this.client.pollExternalApiRequest<GlobalConfig>({\n endpoint: `/config/global.json`,\n interval,\n onData,\n onError: (err) => {\n captureException(err, {\n context: 'StaticService.pollGlobalConfig',\n });\n console.error(\n `Failed to poll global configuration`,\n err instanceof Error ? err.message : String(err)\n );\n },\n });\n }\n}\n","import StaticService from './StaticService';\n\nexport default StaticService;\n","import IMaestroEventDelegate from '../interfaces/IMaestroEventDelegate';\nimport IMaestroEvent from '../interfaces/IMaestroEvent';\nimport { Observable } from '../helpers/Observable';\nimport { ViewModel } from './ViewModel';\nimport SpatialNavigation from '@/external/spatial-navigation/spatialNavigation';\nimport IMaestroKeyPlaysResponse from '../modules/espn/key-plays/interfaces/IKeyPlaysResponse';\nimport { MaestroPanelType } from '@/models/IPanel';\nimport { IUserSettings } from '../interfaces/IUserSettings';\nimport { UserSettingsManager } from '../services/UserSettingsManager';\nimport { PanelManagerViewModel } from './PanelManagerViewModel';\nimport SDK from '..';\nimport StaticService from '@/services/StaticService';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport { IKeyPlaysViewModel } from '../modules/espn/key-plays/interfaces/IKeyPlaysViewModel';\nimport { IBetsViewModel } from '../modules/espn/bets/interfaces/IBetsViewModel';\nimport { IStatsViewModel } from '../modules/espn/stats/interfaces/IStatsViewModel';\nimport { IFantasyViewModel } from '@/modules/espn/fantasy/types';\nimport { IShopViewModel } from '@/modules/espn/shop/types';\nimport { BuilderPanelViewModel } from '@/modules/maestro/builder/view-model/BuilderPanelViewModel';\n\nexport class MaestroEventViewModel extends ViewModel implements IMaestroEvent {\n private _eventId = new Observable('');\n private _pageId = new Observable('');\n private _title = new Observable('');\n private _isLive = new Observable<boolean>(false);\n private _isShowingPanel = new Observable(false);\n private playerTimeCode: number | null = null;\n private analyticsService: AnalyticsService;\n delegate: IMaestroEventDelegate;\n keyPlaysViewModel: IKeyPlaysViewModel | null = null;\n fantasyViewModel: IFantasyViewModel | null = null;\n betsViewModel: IBetsViewModel | null = null;\n statsViewModel: IStatsViewModel | null = null;\n shopViewModel: IShopViewModel | null = null;\n builderPanelViewModel: BuilderPanelViewModel | null = null;\n panelManagerViewModel: PanelManagerViewModel;\n navigation: SpatialNavigation;\n\n constructor(\n eventId: string = '',\n pageId: string = '',\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService\n ) {\n super();\n this._pageId.value = pageId;\n this._eventId.value = eventId;\n this.delegate = delegate;\n this.analyticsService = analyticsService;\n\n this.panelManagerViewModel = new PanelManagerViewModel();\n this.navigation = new SpatialNavigation();\n }\n\n /**\n * Initializes view models for enabled panels using dynamic imports (code splitting).\n *\n * This method lazily loads view model modules based on the page configuration,\n * reducing initial bundle size by only loading modules for panels that are enabled.\n *\n * @remarks\n * - Must be called after SDK configuration and before interacting with any view models\n * - Typically invoked during `userDidStartWatchingEvent()` flow\n * - Each view model is loaded in parallel for optimal performance\n *\n * @remarks Error Handling\n * - Individual view model loading failures are caught and logged as warnings\n * - Failed view models remain `null`, allowing other panels to function normally\n * - The method resolves successfully even if some view models fail to load\n * - Callers should check for `null` before using any view model property\n *\n * @example\n * ```typescript\n * await maestroEventViewModel.initViewModels();\n * // Check if view model loaded before use\n * if (maestroEventViewModel.betsViewModel) {\n * maestroEventViewModel.betsViewModel.startPolling();\n * }\n * ```\n *\n * @returns Promise that resolves when all view model loading attempts complete\n */\n async initViewModels(): Promise<void> {\n const pageConfig = SDK.getPageConfig();\n const loadPromises: Promise<void>[] = [];\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnKeyPlays')) {\n loadPromises.push(\n import('../modules/espn/key-plays/view-model/KeyPlaysViewModel')\n .then(({ default: KeyPlaysViewModel }) => {\n this.keyPlaysViewModel = new KeyPlaysViewModel(\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load KeyPlaysViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnBet')) {\n loadPromises.push(\n import('../modules/espn/bets/view-model/BetsViewModel')\n .then(({ default: BetsViewModel }) => {\n this.betsViewModel = new BetsViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load BetsViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnStats')) {\n loadPromises.push(\n import('../modules/espn/stats/view-model/StatsViewModel')\n .then(({ default: StatsViewModel }) => {\n this.statsViewModel = new StatsViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load StatsViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnFantasy')) {\n loadPromises.push(\n import('@/modules/espn/fantasy/view-model/FantasyViewModel')\n .then(({ default: FantasyViewModel }) => {\n this.fantasyViewModel = new FantasyViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load FantasyViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnShop')) {\n loadPromises.push(\n import('@/modules/espn/shop/view-model/ShopViewModel')\n .then(({ default: ShopViewModel }) => {\n this.shopViewModel = new ShopViewModel(\n this._eventId.value,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load ShopViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'builderBlockPanel')) {\n const builderPanel = pageConfig?.panels?.find(\n (p) => p.panel_type === 'builderBlockPanel'\n );\n if (builderPanel) {\n loadPromises.push(\n import('@/modules/maestro/builder/view-model/BuilderPanelViewModel')\n .then(({ BuilderPanelViewModel }) => {\n this.builderPanelViewModel = new BuilderPanelViewModel(\n builderPanel as any,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load BuilderPanelViewModel:', err);\n })\n );\n }\n }\n\n await Promise.all(loadPromises);\n }\n\n setActivePanel(panelType: MaestroPanelType): void {\n const index = this.panelManagerViewModel.getIndex(panelType);\n if (index === null) {\n console.warn(`Panel type \"${panelType}\" not found.`);\n return;\n }\n\n if (!this.navigation.paused) {\n console.warn(\n 'Cannot set active panel while navigation is not paused. Doing so will cause focus issues.'\n );\n return;\n }\n\n this.panelManagerViewModel.setActivePanel(panelType);\n this.navigation.focusKey = `PANEL_NAV_BUTTON_${index}`;\n }\n\n updatePlayerTimeCode(timestamp: number): void {\n const timestampDate = new Date(timestamp);\n if (isNaN(timestampDate.getTime())) {\n console.warn('Invalid timestamp provided:', timestamp);\n console.warn(\n 'Make sure the timestamp is a valid number. \\nhttps://developers.maestro.io/sdk/web/maestro-event-interface/state/updatePlayerTimeCode'\n );\n return;\n }\n\n this.playerTimeCode = timestamp;\n this.keyPlaysViewModel?.onUpdatePlayerTimeCode(this.playerTimeCode);\n this.statsViewModel?.onUpdatePlayerTimeCode(this.playerTimeCode);\n }\n\n getPlayerTimeCode(): number | null {\n return this.playerTimeCode;\n }\n\n setDataToPanel(panelData: Record<string, any>): void {\n const panelTypes = Object.keys(panelData);\n\n // Map panel types to view model instances\n const viewModels: Record<MaestroPanelType, any> = {\n espnStats: this.statsViewModel,\n espnBet: this.betsViewModel,\n espnKeyPlays: this.keyPlaysViewModel,\n espnFantasy: this.fantasyViewModel,\n espnShop: this.shopViewModel,\n builderBlockPanel: this.builderPanelViewModel,\n foxKeyPlays: null,\n foxMultiview: null,\n foxStats: null,\n helloWorld: null,\n };\n\n for (const panelType of panelTypes) {\n const data = panelData[panelType];\n if (!data) continue;\n\n const viewModel = viewModels[panelType as MaestroPanelType];\n\n if (!viewModel) {\n // Panel is not initialized, so we ignore the data\n console.log(\n `[setDataToPanel] Panel '${panelType}' not initialized/supported. Data ignored.`\n );\n } else {\n // Panel exists, call its setDataToPanel method\n if (viewModel.setDataToPanel) {\n viewModel.setDataToPanel(data);\n }\n }\n }\n }\n\n async deinit() {\n this.betsViewModel?.cleanup();\n this.statsViewModel?.cleanup();\n this.fantasyViewModel?.cleanup();\n this.shopViewModel?.cleanup();\n this.builderPanelViewModel?.cleanup();\n this.navigation.destroy();\n try {\n await this.didHidePanel();\n } catch (error) {\n console.error('Error during didHidePanel in deinit:', error);\n }\n }\n\n updateKeyPlaysData(data: IMaestroKeyPlaysResponse | null): Promise<void> {\n if (!this.keyPlaysViewModel) {\n return Promise.resolve();\n }\n return this.keyPlaysViewModel.setKeyPlays(data, this.playerTimeCode);\n }\n\n updateUserSettings(settings: IUserSettings): Promise<void> {\n return new Promise((resolve) => {\n UserSettingsManager.getInstance().updateSettings(settings);\n resolve();\n });\n }\n\n startFocusManagement(): Promise<void> {\n this.navigation.setCurrentFocusedKey(\n this.navigation.focusKey || 'PANEL_NAV_BUTTON_0'\n );\n setTimeout(() => {\n this.navigation.resume();\n }, 0);\n\n return Promise.resolve();\n }\n\n didStartPlayingClip(index: number) {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.lastPlayedClipIndex.value = index;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = 0;\n this.keyPlaysViewModel.currentlyPlayingClipIndex.value = index;\n this.keyPlaysViewModel.clearLoadFailureStatus(index);\n }\n\n didStopPlayingClip(index: number): void {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.lastPlayedClipIndex.value = index;\n this.keyPlaysViewModel.currentlyPlayingClipIndex.value = null;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = null;\n }\n\n didFailToPlayClip(index: number): void {\n this.keyPlaysViewModel?.handleKeyPlayLoadFailure(index);\n }\n\n didUpdatePlaybackProgressOfClip(index: number, to: number): void {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = to;\n this.keyPlaysViewModel.clearLoadFailureStatus(index);\n }\n\n async didShowPanel(): Promise<void> {\n this.isShowingPanel = true;\n }\n\n async didHidePanel(): Promise<void> {\n this.isShowingPanel = false;\n this.navigation.focusKey = null;\n }\n\n currentEventDoesNotSupportKeyPlays(): void {\n if (this.keyPlaysViewModel) {\n this.keyPlaysViewModel.errorState.value = 'unsupportedEvent';\n }\n }\n\n getCurrentEventID() {\n return this.eventId.value;\n }\n\n getCurrentlyPlayingClipIndex() {\n return this.keyPlaysViewModel?.currentlyPlayingClipIndex.value ?? null;\n }\n\n getLastPlayedClipIndex() {\n return this.keyPlaysViewModel?.lastPlayedClipIndex.value ?? null;\n }\n\n getCurrentClipPlaybackProgress() {\n return this.keyPlaysViewModel?.currentClipPlaybackProgress.value ?? null;\n }\n\n getKeyPlaysCount() {\n return this.keyPlaysViewModel?.allItems.length ?? 0;\n }\n\n get eventId(): Observable<string> {\n return this._eventId;\n }\n\n get title(): Observable<string> {\n return this._title;\n }\n\n get isLive(): Observable<boolean> {\n return this._isLive;\n }\n\n get isShowingPanel(): boolean {\n return this._isShowingPanel.value;\n }\n\n set isShowingPanel(value: boolean) {\n this._isShowingPanel.value = value;\n }\n\n /**\n * This method is called when the user navigates to the MaestroEventViewModel.\n * It will pause navigation and start focus management.\n */\n deliverFocus() {\n this.navigation.pause();\n this.delegate.startFocusManagement();\n }\n}\n","import AxiosNetworkClient from '@/external/AxiosNetworkClient';\nimport { INetworkClient } from '@/external/ports/networkClient';\nimport { captureException } from '@/sentry';\nimport SDK from '@/index';\n\nconst INSIGHTS_BASE_URL = 'https://insights.maestro.io';\n\nexport default class InsightsService {\n private client: INetworkClient;\n\n constructor() {\n this.client = new AxiosNetworkClient({\n baseURL: INSIGHTS_BASE_URL,\n backoff: 2,\n delay: 1000,\n retries: 1,\n });\n }\n\n private isEnabled() {\n const globalConfig = SDK.getGlobalConfig();\n const analyticsEnabled = globalConfig?.bbd?.analytics?.enabled ?? true;\n\n return analyticsEnabled;\n }\n\n async action(payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n console.warn('InsightsService: Analytics is disabled in global config');\n return;\n }\n\n try {\n // do like qs.stringify with my payload and send as formData\n const parsedData = new URLSearchParams();\n for (const [key, value] of Object.entries(payload)) {\n if (value !== undefined && value !== null) {\n parsedData.append(key, value.toString());\n }\n }\n await this.client.post('/action', parsedData, undefined, {\n 'Content-Type': 'application/x-www-form-urlencoded',\n });\n } catch (err) {\n captureException(err, { payload });\n console.error('Failed to send insights action:', err);\n }\n }\n\n async getServerTime() {\n if (!this.isEnabled()) {\n return {\n time: Date.now(),\n diff: 0,\n };\n }\n const responseStart = Date.now();\n\n try {\n return await this.client.get<{ time: number; diff: number }>('/time', {\n _: `${Date.now()}-${this.randomId()}`, // to prevent caching\n client_time: responseStart,\n });\n } catch (err) {\n captureException(err);\n console.error('Failed to get server time:', err);\n return {\n time: Date.now(),\n diff: 0,\n };\n }\n }\n\n private randomId() {\n return (\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n );\n }\n}\n","import { ICacheManager } from '@/external/ports/cacheManager';\nimport InsightsService from './InsightsService';\nimport LocalStorageCacheManager from '@/external/LocalStorageCacheManager';\nimport { PageConfig } from '../StaticService/types';\nimport SDK from '@/index';\n\ntype EventData = {\n metadata?: Record<string, unknown>;\n ontology: {\n kingdom: string;\n phylum: string;\n class?: string;\n order?: string;\n family?: string;\n genus?: string;\n species?: string;\n };\n};\n\nexport default class InsightsPayloadBuilder {\n currentTime = 0;\n serverOffsetTime = 0;\n insightsService: InsightsService;\n cacheManager: ICacheManager;\n pageConfig: PageConfig | null = null;\n\n constructor() {\n this.insightsService = new InsightsService();\n this.cacheManager = new LocalStorageCacheManager();\n }\n\n async getPayload(event: EventData) {\n this.currentTime = Date.now();\n this.serverOffsetTime = await this.getDeviceOffset();\n this.pageConfig = SDK.getPageConfig();\n\n return {\n ...this.getPageInsights(),\n ...this.getDeviceInsights(),\n ...this.getInsightsInsights(),\n ...this.getMetadataInsights(),\n ...this.getReferrerInsights(),\n ...this.getSessionInsights(),\n ...this.getSiteInsights(),\n ...this.getUserInsights(),\n ...this.getEventInsights(event),\n };\n }\n\n private getEventInsights(eventData: EventData) {\n const ontology = eventData.ontology;\n\n return {\n /**\n * @description Event Domain. NAMESPACE env var.\n * @example maestro\n */\n e_d: 'maestro',\n /**\n * @description Event stringified metadata. defaults to null.\n * @example \"{\\\"key\\\":\\\"value\\\"}\"\n */\n e_m:\n Object.values(eventData.metadata || {}).length > 0\n ? JSON.stringify(eventData.metadata)\n : null,\n /**\n * @description Event time accounting for offset.\n */\n e_t: this.currentTime + this.serverOffsetTime,\n /**\n * @description Event URL. defaults to undefined.\n */\n e_u: window.location.href,\n /**\n * @description Event ontology kingdom. This is the highest level of the ontology and can be used to identify the event type.\n * @example 'panel', 'engage', 'espn_key_plays'\n */\n e0: ontology.kingdom,\n /**\n * @description Event phylum.\n * @example 'view', 'click', 'play clip'\n */\n e1: ontology.phylum,\n /**\n * @description Event class.\n * @example 'panel_type'\n */\n e2: ontology.class,\n /**\n * @description Event order.\n * @example 'panel_id'\n */\n e3: ontology.order,\n /**\n * @description Event family.\n * @example 'panel_name'\n */\n e4: ontology.family,\n /**\n * @description Event genus. This is a more specific level of the ontology and can be used to identify the event type.\n */\n e5: ontology.genus,\n /**\n * @description Event species. This is the most specific level of the ontology and can be used to identify the event type.\n */\n e6: ontology.species,\n /**\n * @description Current timestamp.\n */\n t: this.currentTime,\n };\n }\n\n private getPageInsights() {\n const config = SDK.getPageConfig();\n return {\n /**\n * @description MongoDB page collection name (e.g. 'pages')\n * @example object.collection\n */\n p_c: 'pages',\n /**\n * @description MongoDB page document ID (e.g. 'pageId')\n * @example object._id\n */\n p_id: config?.page._id,\n /**\n * @description MongoDB page name (e.g. 'Home', 'Product Page')\n * @example object.data.name || object.seo.title\n */\n p_n: config?.page.name,\n /**\n * @description MongoDB page slug (e.g. 'home', 'product-page')\n * @example object.slug\n */\n p_s: config?.page.slug,\n /**\n * @description MongoDB page type (e.g. 'landing', 'channel')\n * @example object.type\n */\n p_t: config?.page.type,\n };\n }\n\n getDevicePermanentID() {\n const devicePermanentId = localStorage.getItem('mio:device:permanentId');\n if (devicePermanentId) {\n return devicePermanentId;\n }\n const newDevicePermanentId = this.randomId();\n localStorage.setItem('mio:device:permanentId', newDevicePermanentId);\n return newDevicePermanentId;\n }\n\n private getDeviceCreated() {\n const deviceCreated = this.cacheManager.getCache('mio:device:created');\n if (deviceCreated) {\n return Number(deviceCreated);\n }\n const now = new Date().getTime();\n this.cacheManager.setCache('mio:device:created', now.toString());\n return now;\n }\n\n private getTabID() {\n const tabId = sessionStorage.getItem('mio:device:tabId');\n if (tabId) {\n return tabId;\n }\n\n const newTabId = this.randomId();\n sessionStorage.setItem('mio:device:tabId', newTabId);\n return newTabId;\n }\n\n private getDeviceInsights() {\n return {\n /**\n * @description Device created timestamp. You might wanna keep this fixed for the device you're in using a local storage or something related\n * @example new Date().getTime()\n */\n d_ct: this.getDeviceCreated(),\n /**\n * @description New device or not. If you want to keep track of new devices, you can use a local storage or something related\n * @example localStorage.getItem('isNewDevice') === 'true'\n */\n d_nd: false,\n /**\n * @description Navigator Platform (more Web API specific).\n * @example 'MacIntel', 'Win32', 'Linux x86_64'\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n */\n d_np: window.navigator.platform,\n /**\n * @description A unique identifier for the device, which can be used to track the device across sessions. You might wanna save this into a local storage or something related.\n * @example localStorage.getItem('devicePermanentId') || generateUniqueId()\n */\n d_pid: this.getDevicePermanentID(),\n /**\n * @description Device screen height in pixels.\n * @example window.screen.height\n */\n d_sh: window.screen.height,\n /**\n * @description Device screen width in pixels.\n * @example window.screen.width\n */\n d_sw: window.screen.width,\n /**\n * @description Device tab ID, which can be used to track the device across tabs.\n */\n d_tid: this.getTabID(),\n /**\n * @description Device time in milliseconds since epoch.\n */\n d_tim: this.currentTime,\n /**\n * @description Device time offset in milliseconds. You might wanna keep this fixed for the device you're in using a local storage or something related.\n */\n d_tof: this.serverOffsetTime,\n /**\n * @description Device user agent string.\n * @example navigator.userAgent ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent\n */\n d_ua: window.navigator.userAgent,\n };\n }\n\n private randomId() {\n return (\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n );\n }\n\n private async getDeviceOffset() {\n const responseStart = Date.now();\n const {\n diff: serverOffset,\n time: serverTime,\n } = await this.insightsService.getServerTime();\n\n const responseEnd = Date.now();\n\n const queryTime = responseEnd - responseStart;\n const clientOffset = responseEnd - serverTime;\n\n // from NTP algo: https://en.wikipedia.org/wiki/Network_Time_Protocol\n // JS example: https://stackoverflow.com/questions/1638337\n // /the-best-way-to-synchronize-client-side-javascript-clock-with-server-date\n // will account for latent response times back to client\n return (serverOffset - queryTime - clientOffset) / 2;\n }\n\n private getInsightsInsights() {\n return {\n /**\n * @description Unique identifier for the insights ID. Stored in site's document.\n * @example site.settings.services.insights_id\n */\n i_id: this.pageConfig?.insights._id,\n };\n }\n private getMetadataInsights() {\n return {\n /**\n * @description Metadata version, used to track changes in the metadata structure.\n * @example '1.00.0'\n */\n m_iv: '1.00.0',\n };\n }\n private getReferrerInsights() {\n return {\n /**\n * @description Referrer domain, which can be used to track the domain from which the user came. Defaults to \"$direct\"\n * @example 'example.com'.\n */\n r_d: '$direct',\n /**\n * @description Referrer source, which can be used to track the source from which the user came (queryParam.r). Defaults to null\n * @example const urlParams = new URLSearchParams(window.location.search);\n * urlParams.get('r') || null\n */\n r_s: null,\n /**\n * @description Referrer URL, which can be used to track the full URL from which the user came. Defaults to \"$direct\"\n * @example document.referrer\n */\n r_u: '$direct',\n };\n }\n\n private getSessionID() {\n const sessionId = sessionStorage.getItem('mio:session:id');\n if (sessionId) {\n return sessionId;\n }\n\n const newSessionId = this.randomId();\n sessionStorage.setItem('mio:session:id', newSessionId);\n return newSessionId;\n }\n\n private getSessionInsights() {\n return {\n /**\n * @description Session ID, which can be used to track the session across requests. You might wanna keep this fixed for the session you're in using a local storage or something related.\n */\n se_id: this.getSessionID(),\n /**\n * @description Session created timestamp. Usually set when the first event is fired\n * @example new Date().getTime()\n */\n se_s: this.currentTime,\n };\n }\n private getSiteInsights() {\n return {\n /**\n * @description Site domain.\n * @example site.settings.domain.url. 'maestro.tv/site_slug'\n */\n si_d: this.pageConfig?.site.domainUrl,\n /**\n * @description Site ID.\n * @example site._id\n */\n si_id: this.pageConfig?.site._id,\n /**\n * @description Site package ID.\n * @example `${site.package.id}-sapphire`\n */\n si_pid: `${this.pageConfig?.site.package.id}-sapphire`,\n /**\n * @description Site package version.\n * @example `${site.package.version}-sapphire`\n */\n si_pv: `${this.pageConfig?.site.package.version}-sapphire`,\n /**\n * @description Site slug.\n * @example site.slug\n */\n si_s: this.pageConfig?.site.slug,\n };\n }\n private getUserInsights() {\n return {\n /**\n * @description User avatar URL. Stored in user profile. defaults to null\n * @example GET 'https://api.maestro.io/userprofile/v1'\n */\n u_a: null,\n /**\n * @description User account created date in milliseconds since epoch. defaults to null\n * @example account.created\n */\n u_c: null,\n /**\n * @description Logged User email. defaults to null\n * @example account.email\n */\n u_e: null,\n /**\n * @description Logged User ID. defaults to null\n * @example account._id\n */\n u_id: null,\n /**\n * @description Logged User is logged in or not. defaults to false\n */\n u_li: false,\n /**\n * @description Logged User name. defaults to null\n * @example account.name\n */\n u_n: null,\n /**\n * @description Logged User new user or not. Usually we compare server time and account.created. If it was created less than 1 day ago it's a new user. defaults to false\n * @example Math.abs((serverTime || Date.now()) - account.created) < msIn.day\n */\n u_nu: false,\n /**\n * @description Logged User service. defaults to null\n * @example account.service\n */\n u_s: null,\n /**\n * @description Logged User UID. defaults to null\n * @example account.uid\n */\n u_u: null,\n /**\n * @description Logged User name. defaults to null\n * @example account.name\n */\n u_un: null,\n };\n }\n}\n","import InsightsPayloadBuilder from '../InsightsService/InsightsPayloadBuilder';\nimport SDK from '../..';\nimport InsightsService from '../InsightsService/InsightsService';\nimport { PageConfig } from '../StaticService/types';\nimport { ActionTrackEvent, BaseMetadata, ImpressionTrackEvent } from './types';\nimport { version } from '../../../package.json';\nimport { captureException } from '@/sentry';\nimport { MaestroPanelType } from '@/models/IPanel';\n\ntype KeyPlaysClickedAction = {\n type: 'espnKeyPlays';\n name: 'key_play_clicked';\n metadata: {\n action: string;\n clip: string;\n key_play: string;\n };\n};\n\ntype BetsItemClickedAction = {\n type: 'espnBet';\n name: 'bets_item_clicked';\n metadata: {\n card: string;\n bet_type: string | null;\n in_game_bets: number;\n total_bets: number;\n };\n};\n\ntype StatsItemClickedAction = {\n type: 'espnStats';\n name: 'stats_item_clicked';\n metadata: {\n card: string[];\n game_state: string[];\n };\n};\n\ntype FantasyItemClickedAction = {\n type: 'espnFantasy';\n name: 'fantasy_item_clicked';\n metadata: {\n card: string;\n };\n};\n\ntype ShopItemClickedAction = {\n type: 'espnShop';\n name: 'shop_item_clicked';\n metadata: {\n card: string[];\n game_state: string[];\n product: string | null;\n entity_type: string[];\n entity_name: string[];\n price: string | null;\n sale: string[];\n };\n};\n\ntype PanelClickPayload =\n | KeyPlaysClickedAction\n | BetsItemClickedAction\n | StatsItemClickedAction\n | FantasyItemClickedAction\n | ShopItemClickedAction;\n\ntype PanelData = {\n panel_type: string;\n panel_id: string;\n panel_name: string;\n};\n\nconst SESSION_BEACON_SECONDS = 240;\n\nclass AnalyticsService {\n insightsService: InsightsService;\n insightsPayloadBuilder: InsightsPayloadBuilder;\n private SDKSessionId: string = '';\n private pageSessionId: string = '';\n private pinchBackSessionId: string = '';\n private pageSessionBeaconTimeoutId: NodeJS.Timeout | null = null;\n private isPageSessionBeaconRunning: boolean = false;\n private isPageSessionActive: boolean = false;\n\n constructor() {\n this.insightsService = new InsightsService();\n this.insightsPayloadBuilder = new InsightsPayloadBuilder();\n }\n\n private async trackAction(event: ActionTrackEvent) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n SDK.getMaestroEventViewModel().delegate.trackAction(event);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n class: event.e2_class,\n family: event.e4_family,\n order: event.e3_order,\n kingdom: event.e0_kingdom,\n phylum: event.e1_phylum,\n genus: event.e5_genus,\n species: event.e6_species,\n },\n metadata: event.metadata,\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n\n private async trackImpression(event: ImpressionTrackEvent) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n SDK.getMaestroEventViewModel().delegate.trackImpression(event);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: event.e0_kingdom,\n phylum: event.e1_phylum,\n class: event.e2_class,\n order: event.e3_order,\n family: event.e4_family,\n genus: event.e5_genus,\n species: event.e6_species,\n },\n metadata: event.metadata,\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n\n async panelView(panelType: MaestroPanelType, metadata?: Record<string, any>) {\n const config = SDK.getPageConfig();\n const panelData = this.getPanelDataFromPageConfig(panelType, config);\n await this.trackImpression({\n name: 'panel_selected',\n e0_kingdom: 'panel',\n e1_phylum: 'view',\n e2_class: panelData.panel_type,\n e3_order: panelData.panel_id,\n e4_family: panelData.panel_name,\n metadata: {\n ...(metadata || {}),\n ...this.getBaseMetadataFromPageConfig(config),\n },\n });\n }\n\n async panelClick({ type, metadata, name }: PanelClickPayload) {\n const config = SDK.getPageConfig();\n const panelData = this.getPanelDataFromPageConfig(type, config);\n await this.trackAction({\n name,\n e0_kingdom: 'panel',\n e1_phylum: 'engage',\n e2_class: panelData.panel_type,\n e3_order: panelData.panel_id,\n e4_family: panelData.panel_name,\n metadata: {\n ...this.getBaseMetadataFromPageConfig(config),\n ...metadata,\n },\n });\n }\n\n getBaseMetadataFromPageConfig(pageConfig: PageConfig | null): BaseMetadata {\n if (!pageConfig) {\n console.warn('Page Config not found. Could not extract metadata.');\n return {\n league: '',\n airing: '',\n event: '',\n sport: '',\n };\n }\n\n const metadata = pageConfig.page.metadata;\n const airing =\n metadata?.external_field_4 === 'airing'\n ? metadata.external_field_1 || ''\n : '';\n const event =\n metadata?.external_field_4 === 'event'\n ? metadata.external_field_1 || 'unknown'\n : 'unknown';\n const sport = metadata?.external_field_2 || '';\n const league = metadata?.external_field_3 || '';\n\n return {\n league,\n airing,\n event,\n sport,\n };\n }\n\n getPanelDataFromPageConfig(\n type: MaestroPanelType,\n pageConfig: PageConfig | null\n ): PanelData {\n if (!pageConfig) {\n console.warn('Page Config not found. Could not extract panel data.');\n return {\n panel_id: '',\n panel_name: '',\n panel_type: '',\n };\n }\n\n const panel = pageConfig.panels.find((p) => p.panel_type === type);\n if (!panel) {\n console.warn(`Panel of type ${type} not found in Page Config.`);\n return {\n panel_id: '',\n panel_name: '',\n panel_type: '',\n };\n }\n\n return {\n panel_id: panel._id,\n panel_name: panel.panel_name || '',\n panel_type: panel.panel_type || '',\n };\n }\n\n async SDKSessionStart() {\n try {\n this.SDKSessionId = Math.random().toString(36).substring(2, 15);\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'sdk',\n },\n metadata: {\n version,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to start SDK session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.SDKSessionStart',\n });\n }\n }\n\n async pageSessionStart() {\n try {\n this.pageSessionId = Math.random().toString(36).substring(2, 15);\n this.isPageSessionActive = true;\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'page',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n\n // Start the beacon cycle with recursive setTimeout\n this.scheduleNextBeacon();\n } catch (err) {\n console.error(`Failed to start page session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pageSessionStart',\n });\n }\n }\n\n async pageSessionEnd() {\n try {\n this.isPageSessionActive = false;\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'page',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n },\n });\n\n console.log('AnalyticsService: pageSessionEnd', eventInsightsData);\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end page session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pageSessionEnd',\n });\n } finally {\n // Clear any pending beacon timeouts\n if (this.pageSessionBeaconTimeoutId) {\n clearTimeout(this.pageSessionBeaconTimeoutId);\n this.pageSessionBeaconTimeoutId = null;\n }\n this.pageSessionId = '';\n }\n }\n\n async pinchBackSessionStart() {\n try {\n this.pinchBackSessionId = Math.random().toString(36).substring(2, 15);\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'pinchback',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to start pinchback session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pinchBackSessionStart',\n });\n }\n }\n\n async pinchBackSessionEnd() {\n try {\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'pinchback',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n console.log('AnalyticsService: pinchBackSessionEnd', eventInsightsData);\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end pinchback session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pinchBackSessionEnd',\n });\n } finally {\n this.pinchBackSessionId = '';\n }\n }\n\n async SDKSessionEnd() {\n try {\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'sdk',\n },\n metadata: {\n version,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end SDK session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.SDKSessionEnd',\n });\n } finally {\n this.SDKSessionId = '';\n }\n }\n\n private scheduleNextBeacon() {\n // Only schedule if page session is still active\n if (!this.isPageSessionActive) {\n return;\n }\n\n const globalConfig = SDK.getGlobalConfig();\n const beaconInterval =\n globalConfig?.bbd?.analytics?.beacon_interval || SESSION_BEACON_SECONDS;\n this.pageSessionBeaconTimeoutId = setTimeout(async () => {\n await this.sendSessionBeacon();\n }, beaconInterval * 1000);\n }\n\n private async sendSessionBeacon() {\n // Prevent overlapping beacon calls\n if (this.isPageSessionBeaconRunning || !this.isPageSessionActive) {\n return;\n }\n\n this.isPageSessionBeaconRunning = true;\n\n try {\n await this.sessionBeacon();\n } catch (err) {\n console.error(`Failed to send session beacon: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.sendSessionBeacon',\n SDKSessionId: this.SDKSessionId,\n pageSessionId: this.pageSessionId,\n });\n } finally {\n this.isPageSessionBeaconRunning = false;\n\n // Schedule next beacon only after current one completes\n if (this.isPageSessionActive) {\n this.scheduleNextBeacon();\n }\n }\n }\n\n private async sessionBeacon() {\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'beacon',\n class: 'frequent',\n },\n metadata: {\n paywall_gated: false,\n viewer_id: this.insightsPayloadBuilder.getDevicePermanentID(),\n is_billable: false,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n}\n\nexport default AnalyticsService;\n","import ReactRenderer from './external/ReactRenderer';\nimport { IRenderer } from './external/ports/renderer';\nimport IMaestroEventDelegate, {\n PanelEvent,\n} from './interfaces/IMaestroEventDelegate';\nimport IMaestroManager, {\n SDKConfigParams,\n SDKEventConfigParams,\n SDKStopEventParams,\n} from './interfaces/IMaestroManager';\nimport IMaestroEvent from './interfaces/IMaestroEvent';\nimport { MaestroEventViewModel } from './view-models/MaestroEventViewModel';\nimport IMaestroKeyPlaysResponse from './modules/espn/key-plays/interfaces/IKeyPlaysResponse';\nimport { UserSettingsManager } from './services/UserSettingsManager';\nimport StaticService from './services/StaticService';\nimport { GlobalConfig, PageConfig } from './services/StaticService/types';\nimport { MaestroPanelType } from './models/IPanel';\nimport AnalyticsService from './services/AnalyticsService/AnalyticsService';\n\nexport {\n ActionTrackEvent,\n ImpressionTrackEvent,\n Metadata,\n PanelClickAction,\n PanelViewAction,\n} from './services/AnalyticsService/types';\n\nexport {\n PanelEvent,\n IMaestroEventDelegate,\n IMaestroEvent,\n IMaestroKeyPlaysResponse,\n MaestroPanelType,\n SDKEventConfigParams,\n SDKStopEventParams,\n};\nexport {\n IUserSettings,\n DEFAULT_USER_SETTINGS,\n} from './interfaces/IUserSettings';\n\n/**\n * Main SDK class that serves as the entry point for the Maestro TV SDK\n * Follows a singleton pattern similar to the Swift implementation\n */\nclass MaestroWebSDK implements IMaestroManager {\n private static instance: MaestroWebSDK;\n private renderer: IRenderer;\n private siteID: string = '';\n private maestroEventViewModel: MaestroEventViewModel | null = null;\n private pageConfig: PageConfig | null = null;\n private globalConfig: GlobalConfig | null = null;\n private globalConfigPoller: { stop: () => void } | null = null;\n private _analyticsService: AnalyticsService | null = null;\n private isProdEnv: boolean = true;\n private activePanelUnmountFn: (() => Promise<void>) | null = null;\n\n private constructor(renderer: IRenderer) {\n this.renderer = renderer;\n }\n\n private get analyticsService(): AnalyticsService {\n if (!this._analyticsService) {\n this._analyticsService = new AnalyticsService();\n }\n return this._analyticsService;\n }\n\n /**\n * @description Returns the MaestroWebSDK instance\n * @returns {MaestroWebSDK} - The MaestroWebSDK instance\n */\n public static getInstance() {\n if (!MaestroWebSDK.instance) {\n const renderer = new ReactRenderer();\n MaestroWebSDK.instance = new MaestroWebSDK(renderer);\n }\n return MaestroWebSDK.instance;\n }\n\n async userDidStartWatchingEvent({\n eventId,\n pageId,\n userSettings,\n delegate,\n useProdEnv = true,\n }: SDKEventConfigParams): Promise<IMaestroEvent> {\n this.isProdEnv = useProdEnv;\n\n // Fetch page config before initializing view models\n const siteId = this.getSiteID();\n if (!siteId || siteId.trim() === '') {\n throw new Error(\n 'siteID must be set before calling userDidStartWatchingEvent.'\n );\n }\n\n if (!eventId && !pageId) {\n throw new Error(\n 'Either eventId or pageId must be provided to load the page configuration.'\n );\n }\n\n const staticService = new StaticService(siteId);\n this.pageConfig = await staticService.fetchPageConfig({\n siteId,\n metadataValue: eventId,\n pageId,\n });\n if (!this.pageConfig) {\n throw new Error(\n `Could not determine page configuration for siteId: ${siteId}, pageId: ${pageId} and eventId: ${eventId}.`\n );\n }\n\n this.globalConfigPoller = staticService.pollGlobalConfig((data) => {\n this.globalConfig = data;\n });\n\n // Initialize user settings if provided\n if (userSettings) {\n UserSettingsManager.getInstance().updateSettings(userSettings);\n }\n\n await this.analyticsService.SDKSessionStart();\n this.maestroEventViewModel = new MaestroEventViewModel(\n eventId,\n pageId,\n delegate,\n this.analyticsService\n );\n await this.maestroEventViewModel.initViewModels();\n await this.analyticsService.pageSessionStart();\n\n return this.maestroEventViewModel;\n }\n\n async userDidStopWatchingEvent(_config: SDKStopEventParams): Promise<void> {\n if (this.activePanelUnmountFn) {\n await this.activePanelUnmountFn();\n }\n\n await this.analyticsService.pageSessionEnd();\n\n if (this.maestroEventViewModel) {\n await this.maestroEventViewModel.deinit();\n this.maestroEventViewModel = null;\n }\n\n await this.analyticsService.SDKSessionEnd();\n\n if (this.globalConfigPoller) {\n this.globalConfigPoller.stop();\n this.globalConfigPoller = null;\n }\n }\n\n configure(configParams: SDKConfigParams) {\n this.setSiteID(configParams.siteID);\n\n // Configure user settings if provided\n if (configParams.userSettings) {\n UserSettingsManager.getInstance().updateSettings(\n configParams.userSettings\n );\n }\n\n console.info('MaestroWebSDK configured', configParams);\n }\n\n /**\n * Sets the site ID for the SDK\n * @param siteID The site ID to set\n */\n public setSiteID(siteID: string) {\n if (!siteID || siteID.trim() === '') {\n throw new Error('Site ID must be provided');\n }\n this.siteID = siteID;\n }\n\n public getSiteID() {\n return this.siteID;\n }\n\n public getIsProdEnv() {\n return this.isProdEnv;\n }\n\n /**\n * Gets the event view model\n * @returns The current event view model\n */\n public getMaestroEventViewModel(): MaestroEventViewModel {\n if (!this.maestroEventViewModel) {\n throw new Error('No Maestro Event View Model set');\n }\n\n return this.maestroEventViewModel;\n }\n\n async renderPanel(id: string): Promise<() => Promise<void>> {\n await this.analyticsService.pinchBackSessionStart();\n\n const panelUnmountFn = await this.renderer.renderPanel(id);\n let isCleanedUp = false;\n\n const cleanupFn = async () => {\n if (isCleanedUp) {\n return;\n }\n isCleanedUp = true;\n\n // Unmount first so the UI is torn down immediately and any portals/handlers\n // are cleaned up even if the caller doesn't await this async function.\n panelUnmountFn();\n await this.analyticsService.pinchBackSessionEnd();\n\n if (this.activePanelUnmountFn === cleanupFn) {\n this.activePanelUnmountFn = null;\n }\n };\n\n this.activePanelUnmountFn = cleanupFn;\n return cleanupFn;\n }\n\n public getPageConfig(): PageConfig | null {\n return this.pageConfig;\n }\n\n public getGlobalConfig(): GlobalConfig | null {\n return this.globalConfig;\n }\n}\n\nconst SDK = MaestroWebSDK.getInstance();\nexport default SDK;\n","import { Observable } from '@/helpers/Observable';\nimport {\n IUserSettings,\n DEFAULT_USER_SETTINGS,\n PanelSettings,\n} from '@/interfaces/IUserSettings';\nimport { MaestroPanelType } from '@/models/IPanel';\n\ntype PanelTypeWithSettings =\n | typeof MaestroPanelType.ESPN_BETS\n | typeof MaestroPanelType.ESPN_STATS\n | typeof MaestroPanelType.ESPN_KEY_PLAYS\n | typeof MaestroPanelType.ESPN_FANTASY\n | typeof MaestroPanelType.ESPN_SHOP;\n\nconst PANEL_TYPE_SETTINGS_KEY_MAP: Record<\n PanelTypeWithSettings,\n keyof NonNullable<IUserSettings['panels']>\n> = {\n [MaestroPanelType.ESPN_BETS]: 'bets',\n [MaestroPanelType.ESPN_STATS]: 'stats',\n [MaestroPanelType.ESPN_KEY_PLAYS]: 'keyPlays',\n [MaestroPanelType.ESPN_FANTASY]: 'fantasy',\n [MaestroPanelType.ESPN_SHOP]: 'shop',\n};\n\n/**\n * UserSettingsManager - Singleton service for managing user settings\n * Uses Observable pattern for reactive updates across the SDK\n */\nexport class UserSettingsManager {\n private static instance: UserSettingsManager;\n private _settings: Observable<IUserSettings>;\n\n private constructor() {\n this._settings = new Observable<IUserSettings>(DEFAULT_USER_SETTINGS);\n }\n\n /**\n * Get the singleton instance of UserSettingsManager\n */\n static getInstance(): UserSettingsManager {\n if (!UserSettingsManager.instance) {\n UserSettingsManager.instance = new UserSettingsManager();\n }\n return UserSettingsManager.instance;\n }\n\n /**\n * Get the current settings as an Observable\n */\n get settings(): Observable<IUserSettings> {\n return this._settings;\n }\n\n /**\n * Get the current settings value (snapshot)\n */\n getCurrentSettings(): IUserSettings {\n return this._settings.value;\n }\n\n /**\n * Update user settings with validation and merge logic\n * @param userSettings - New settings to apply\n */\n updateSettings(userSettings: IUserSettings): void {\n if (!this.validateSettings(userSettings)) {\n console.warn('Invalid user settings provided, using default setting');\n return;\n }\n\n const mergedSettings = this.mergeSettings(\n this._settings.value,\n userSettings\n );\n this._settings.value = mergedSettings;\n }\n\n /**\n * Get settings for a specific panel type\n * @param panelType - Panel type to get settings for\n */\n getPanelSettings<T extends keyof NonNullable<IUserSettings['panels']>>(\n panelType: T\n ): PanelSettings<T> | undefined {\n return this._settings.value.panels?.[panelType];\n }\n\n /**\n * Check if a panel should be hidden\n * @param panelType - Panel type to check\n */\n isPanelHidden(panelType: MaestroPanelType): boolean {\n const panelKey = this.mapPanelTypeToSettingsKey(panelType);\n if (!panelKey) return false;\n\n const panelSettings = this.getPanelSettings(panelKey);\n return (panelSettings as any)?.hidePanel === true;\n }\n\n /**\n * Check if wagers should be hidden for betting panel\n */\n shouldHideWagers(): boolean {\n const betsSettings = this.getPanelSettings('bets');\n return betsSettings?.hideWagers === true;\n }\n\n /**\n * Reset settings to defaults\n */\n resetToDefaults(): void {\n this._settings.value = DEFAULT_USER_SETTINGS;\n }\n\n /**\n * Validate settings structure and values\n * @param settings - Settings to validate\n */\n private validateSettings(settings: IUserSettings): boolean {\n if (!settings || typeof settings !== 'object') {\n return false;\n }\n\n // Validate panels object if present\n if (settings.panels && typeof settings.panels !== 'object') {\n return false;\n }\n\n // Validate individual panel settings\n if (settings.panels) {\n for (const [panelKey, panelSettings] of Object.entries(settings.panels)) {\n if (panelSettings && typeof panelSettings !== 'object') {\n return false;\n }\n\n // Validate boolean properties\n if (panelSettings) {\n for (const [key, value] of Object.entries(panelSettings)) {\n if (value !== undefined && typeof value !== 'boolean') {\n console.warn(\n `Invalid setting value for ${panelKey}.${key}: expected boolean, got ${typeof value}`\n );\n return false;\n }\n }\n }\n }\n }\n\n return true;\n }\n\n /**\n * Merge user settings with current settings (deep merge)\n * @param currentSettings - Current settings\n * @param userSettings - New settings to merge\n */\n private mergeSettings(\n currentSettings: IUserSettings,\n userSettings: IUserSettings\n ): IUserSettings {\n const merged: IUserSettings = {\n panels: {\n ...currentSettings.panels,\n },\n };\n\n if (userSettings.panels) {\n for (const [panelKey, panelSettings] of Object.entries(\n userSettings.panels\n )) {\n if (panelSettings) {\n const currentPanelSettings = merged.panels![\n panelKey as keyof NonNullable<IUserSettings['panels']>\n ];\n const mergedPanelSettings = { ...currentPanelSettings };\n\n // Filter out undefined values and only merge defined ones\n for (const [settingKey, settingValue] of Object.entries(\n panelSettings\n )) {\n if (settingValue !== undefined) {\n (mergedPanelSettings as any)[settingKey] = settingValue;\n }\n }\n\n merged.panels![\n panelKey as keyof NonNullable<IUserSettings['panels']>\n ] = mergedPanelSettings;\n }\n }\n }\n\n return merged;\n }\n\n /**\n * Map MaestroPanelType to settings key\n * @param panelType - Panel type from MaestroPanelType enum\n */\n private mapPanelTypeToSettingsKey(\n panelType: MaestroPanelType\n ): keyof NonNullable<IUserSettings['panels']> | null {\n if (panelType in PANEL_TYPE_SETTINGS_KEY_MAP) {\n return PANEL_TYPE_SETTINGS_KEY_MAP[panelType as PanelTypeWithSettings];\n }\n return null;\n }\n}\n","import axios, { AxiosError, AxiosInstance } from 'axios';\nimport { INetworkClient } from './ports/networkClient';\n\nconst REQUEST_TIMEOUT = 5000;\n\nclass AxiosNetworkClient implements INetworkClient {\n private client: AxiosInstance;\n private retries: number;\n private delay: number;\n private backoff: number;\n\n constructor({\n baseURL,\n retries,\n delay,\n backoff,\n axiosInstance,\n }: {\n baseURL: string;\n retries: number;\n delay: number;\n backoff: number;\n axiosInstance?: AxiosInstance;\n }) {\n this.retries = retries;\n this.delay = delay;\n this.backoff = backoff;\n\n this.client =\n axiosInstance ||\n axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n timeout: REQUEST_TIMEOUT,\n });\n }\n\n private async retry<T>(\n operation: () => Promise<T>,\n attempt: number = 0\n ): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n const axiosError = error as AxiosError;\n\n // Check if we should retry\n const shouldRetry =\n attempt < this.retries &&\n ((axiosError.response && axiosError.response.status === 429) ||\n axiosError.code === 'ECONNABORTED');\n\n if (shouldRetry) {\n const delayTime = this.delay * Math.pow(this.backoff, attempt);\n console.log(\n `Retrying request in ${delayTime}ms due to: ${axiosError.message}`\n );\n\n await new Promise((resolve) => setTimeout(resolve, delayTime));\n return this.retry(operation, attempt + 1);\n }\n\n throw error;\n }\n }\n\n async get<TResponseData = any>(\n endpoint: string,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<TResponseData> {\n return this.retry(async () => {\n const response = await this.client.get<TResponseData>(endpoint, {\n params,\n headers,\n });\n return response.data;\n });\n }\n\n async getWithHeaders<TResponseData = any>(\n endpoint: string,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<{ data: TResponseData; headers: Record<string, string> }> {\n return this.retry(async () => {\n const response = await this.client.get<TResponseData>(endpoint, {\n params,\n headers,\n });\n return {\n data: response.data,\n headers: response.headers as Record<string, string>,\n };\n });\n }\n\n async post<TRequestData = any, TResponseData = any>(\n endpoint: string,\n data: TRequestData,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<TResponseData> {\n return this.retry(async () => {\n const response = await this.client.post<TResponseData>(endpoint, data, {\n params,\n headers,\n });\n return response.data;\n });\n }\n\n async postWithHeaders<TRequestData = any, TResponseData = any>(\n endpoint: string,\n data: TRequestData,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<{ data: TResponseData; headers: Record<string, string> }> {\n return this.retry(async () => {\n const response = await this.client.post<TResponseData>(endpoint, data, {\n params,\n headers,\n });\n return {\n data: response.data,\n headers: response.headers as Record<string, string>,\n };\n });\n }\n\n setAuthentication(token: string | null, apiKey: string | null): void {\n this.client.defaults.headers.common['Authorization'] = token\n ? `Bearer ${token}`\n : '';\n this.client.defaults.headers.common['x-maestro-api-key'] = apiKey || '';\n }\n}\n\nexport default AxiosNetworkClient;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","/**\n * User settings interface for customizing Maestro Web SDK behavior\n * Supports panel-level and feature-level customizations\n */\nexport interface IUserSettings {\n panels?: {\n bets?: {\n /** Hide the entire bets panel from panel selection */\n hidePanel?: boolean;\n /** Hide wager values (dollar amounts) in betting cards */\n hideWagers?: boolean;\n };\n stats?: {\n /** Hide the entire stats panel from panel selection */\n hidePanel?: boolean;\n };\n keyPlays?: {\n /** Hide the entire key plays panel from panel selection */\n hidePanel?: boolean;\n };\n fantasy?: {\n /** Hide the entire fantasy panel from panel selection */\n hidePanel?: boolean;\n };\n shop?: {\n /** Hide the entire shop panel from panel selection */\n hidePanel?: boolean;\n };\n };\n}\n\n/**\n * Default user settings - all features enabled by default\n */\nexport const DEFAULT_USER_SETTINGS: IUserSettings = {\n panels: {\n bets: {\n hidePanel: false,\n hideWagers: false,\n },\n stats: {\n hidePanel: false,\n },\n keyPlays: {\n hidePanel: false,\n },\n fantasy: {\n hidePanel: false,\n },\n },\n};\n\n/**\n * Panel-specific settings type helpers\n */\nexport type BetsSettings = NonNullable<IUserSettings['panels']>['bets'];\nexport type StatsSettings = NonNullable<IUserSettings['panels']>['stats'];\nexport type KeyPlaysSettings = NonNullable<IUserSettings['panels']>['keyPlays'];\n\n/**\n * Utility type for getting panel settings by panel type\n */\nexport type PanelSettings<\n T extends keyof NonNullable<IUserSettings['panels']>\n> = NonNullable<IUserSettings['panels']>[T];\n","module.exports = require(\"react-dom\");","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","import { ICacheManager } from './ports/cacheManager';\n\n/**\n * Manages caching using localStorage with support for TTL, size limits, and versioning.\n * This class implements the ICacheManager interface and provides methods for setting, getting,\n * and clearing cache entries.\n */\nexport default class LocalStorageCacheManager implements ICacheManager {\n private readonly prefix: string = 'maestro-cache-';\n private readonly cacheDuration: number;\n private readonly maxSize: number;\n private readonly version: string;\n private readonly accessLog: Map<string, number>;\n\n /**\n * Creates a new LocalStorageCacheManager instance.\n * @param cacheDuration - The time-to-live (TTL) for cache entries in milliseconds.\n * @param maxSize - The maximum size of the cache in bytes.\n * @param version - The version of the cache. Used to invalidate cache entries when the version changes.\n */\n constructor(\n cacheDuration: number = 3600000,\n maxSize: number = 5 * 1024 * 1024,\n version: string = '1.0'\n ) {\n this.cacheDuration = cacheDuration;\n this.maxSize = maxSize;\n this.version = version;\n this.accessLog = new Map();\n }\n\n /**\n * Produces a cache key by combining the prefix, version, and the provided key.\n * @param key - The key to be used in the cache.\n * @returns The generated cache key.\n */\n public produceCacheKey(key: string): string {\n return `${this.prefix}${this.version}:${key}`;\n }\n\n /**\n * Calculates the current size of the cache in bytes.\n * @returns The total size of the cache in bytes.\n */\n private getCurrentSize(): number {\n let totalSize = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n const value = localStorage.getItem(key);\n if (value) {\n totalSize += key.length + value.length;\n }\n }\n }\n return totalSize;\n }\n\n /**\n * Cleans up old cache entries based on their TTL.\n */\n private cleanupOldEntries(): void {\n const now = Date.now();\n // Collect keys to remove first\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n const value = localStorage.getItem(key);\n if (value) {\n try {\n const { timestamp } = JSON.parse(value);\n if (now - timestamp > this.cacheDuration) {\n keysToRemove.push(key);\n }\n } catch (err) {\n keysToRemove.push(key);\n }\n }\n }\n }\n keysToRemove.forEach((key) => {\n localStorage.removeItem(key);\n // Remove from accessLog\n const logicalKey = key.replace(this.prefix + this.version + ':', '');\n this.accessLog.delete(logicalKey);\n });\n }\n\n /**\n * Cleans up least recently used cache entries when the cache is full.\n */\n private cleanupLRUEntries(newItemSize: number): void {\n // Remove oldest entries until we're under the size limit\n const entries = Array.from(this.accessLog.entries()).sort(\n ([, a], [, b]) => a - b\n );\n while (\n this.getCurrentSize() + newItemSize > this.maxSize &&\n entries.length > 0\n ) {\n const [key] = entries.shift()!;\n localStorage.removeItem(this.produceCacheKey(key));\n this.accessLog.delete(key);\n }\n }\n\n /**\n * Sets a value in the cache with the specified key.\n * @param key - The key to store the value under.\n * @param data - The value to be stored in the cache.\n */\n setCache(key: string, data: any): void {\n this.cleanupOldEntries();\n const cacheKey = this.produceCacheKey(key);\n const cacheData = {\n data,\n timestamp: Date.now(),\n };\n const newItemSize = cacheKey.length + JSON.stringify(cacheData).length;\n this.cleanupLRUEntries(newItemSize);\n // After cleanup, check if it fits\n if (this.getCurrentSize() + newItemSize > this.maxSize) {\n // Still doesn't fit, don't add\n return;\n }\n localStorage.setItem(cacheKey, JSON.stringify(cacheData));\n this.accessLog.set(key, Date.now());\n }\n\n /**\n * Retrieves a value from the cache by its key.\n * @param key - The key to retrieve the value for.\n * @returns The cached value, or null if the key is not found or the entry has expired.\n */\n getCache(key: string): any {\n this.cleanupOldEntries();\n const cacheKey = this.produceCacheKey(key);\n const cachedData = localStorage.getItem(cacheKey);\n if (!cachedData) {\n return null;\n }\n try {\n const { data, timestamp } = JSON.parse(cachedData);\n const now = Date.now();\n if (now - timestamp > this.cacheDuration) {\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n return null;\n }\n // Update last access time\n this.accessLog.set(key, now);\n return data;\n } catch (err) {\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n return null;\n }\n }\n\n /**\n * Clears a specific cache entry by its key.\n * @param key - The key of the cache entry to clear.\n */\n clearCache(key: string): void {\n const cacheKey = this.produceCacheKey(key);\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n }\n\n /**\n * Clears all cache entries that match the specified pattern.\n * @param pattern - The pattern to match against cache keys.\n */\n clearCacheByPattern(pattern: string): void {\n // Collect all matching keys first\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix) && key.includes(pattern)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => {\n localStorage.removeItem(key);\n // Remove from accessLog\n const logicalKey = key.replace(this.prefix + this.version + ':', '');\n this.accessLog.delete(logicalKey);\n });\n }\n\n /**\n * Clears all cache entries.\n */\n clearAllCache(): void {\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n this.accessLog.clear();\n }\n}\n","const ELEMENT_NODE = 1;\n\nconst getRect = (node: any) => {\n let { offsetParent } = node;\n const height = node.offsetHeight;\n const width = node.offsetWidth;\n let left = node.offsetLeft;\n let top = node.offsetTop;\n\n while (offsetParent && offsetParent.nodeType === ELEMENT_NODE) {\n left += offsetParent.offsetLeft - offsetParent.scrollLeft;\n top += offsetParent.offsetTop - offsetParent.scrollTop;\n ({ offsetParent } = offsetParent);\n }\n\n return {\n height,\n left,\n top,\n width,\n };\n};\n\nconst measureLayout = (\n node: any,\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => void\n) => {\n const relativeNode = node && node.parentNode;\n\n if (relativeNode) {\n const relativeRect = getRect(relativeNode);\n const { height, left, top, width } = getRect(node);\n const x = left - relativeRect.left;\n const y = top - relativeRect.top;\n\n callback(x, y, width, height, left, top);\n }\n};\n\nexport default measureLayout;\n","// We'll make VisualDebugger no-op for any environments lacking a DOM (e.g. SSR and React Native non-web platforms).\nconst hasDOM = typeof window !== 'undefined' && window.document;\n\nconst WIDTH = hasDOM ? window.innerWidth : 0;\nconst HEIGHT = hasDOM ? window.innerHeight : 0;\n\ninterface Layout {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nclass VisualDebugger {\n private debugCtx: CanvasRenderingContext2D | null;\n private layoutsCtx: CanvasRenderingContext2D | null;\n\n constructor() {\n if (hasDOM) {\n this.debugCtx = VisualDebugger.createCanvas('sn-debug', 1010);\n this.layoutsCtx = VisualDebugger.createCanvas('sn-layouts', 1000);\n } else {\n this.debugCtx = null;\n this.layoutsCtx = null;\n }\n }\n\n static createCanvas(id: string, zIndex: number): CanvasRenderingContext2D {\n const canvas = (document.querySelector(`#${id}`) ||\n document.createElement('canvas')) as HTMLCanvasElement;\n\n canvas.setAttribute('id', id);\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Could not get 2d context from canvas');\n }\n\n canvas.style.cssText = `position: fixed; top: 0; left: 0; z-index: ${zIndex}`;\n\n document.body.appendChild(canvas);\n\n canvas.width = WIDTH;\n canvas.height = HEIGHT;\n\n return ctx;\n }\n\n clear(): void {\n if (!hasDOM || !this.debugCtx) {\n return;\n }\n this.debugCtx.clearRect(0, 0, WIDTH, HEIGHT);\n }\n\n clearLayouts(): void {\n if (!hasDOM || !this.layoutsCtx) {\n return;\n }\n this.layoutsCtx.clearRect(0, 0, WIDTH, HEIGHT);\n }\n\n drawLayout(layout: Layout, focusKey: string, parentFocusKey: string): void {\n if (!hasDOM || !this.layoutsCtx) {\n return;\n }\n this.layoutsCtx.strokeStyle = 'green';\n this.layoutsCtx.strokeRect(\n layout.left,\n layout.top,\n layout.width,\n layout.height\n );\n this.layoutsCtx.font = '8px monospace';\n this.layoutsCtx.fillStyle = 'red';\n this.layoutsCtx.fillText(focusKey, layout.left, layout.top + 10);\n this.layoutsCtx.fillText(parentFocusKey, layout.left, layout.top + 25);\n this.layoutsCtx.fillText(\n `left: ${layout.left}`,\n layout.left,\n layout.top + 40\n );\n this.layoutsCtx.fillText(\n `top: ${layout.top}`,\n layout.left,\n layout.top + 55\n );\n }\n\n drawPoint(\n x: number,\n y: number,\n color: string = 'blue',\n size: number = 10\n ): void {\n if (!hasDOM || !this.debugCtx) {\n return;\n }\n this.debugCtx.strokeStyle = color;\n this.debugCtx.lineWidth = 3;\n this.debugCtx.strokeRect(x - size / 2, y - size / 2, size, size);\n }\n}\n\nexport default VisualDebugger;\n","import measureLayout from './measureLayout';\nimport { Details, Direction, KEY_BACK, Layout } from './utils';\nimport { DIRECTION_DOWN, KEY_ENTER } from './utils';\nimport { DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP } from './utils';\nimport VisualDebugger from './visualDebugger';\n\nexport const ROOT_FOCUS_KEY = 'SN:ROOT';\n\nconst ADJACENT_SLICE_THRESHOLD = 0.2;\n\n/**\n * Adjacent slice is 5 times more important than diagonal\n */\nconst ADJACENT_SLICE_WEIGHT = 5;\nconst DIAGONAL_SLICE_WEIGHT = 1;\n\n/**\n * Main coordinate distance is 5 times more important\n */\nconst MAIN_COORDINATE_WEIGHT = 5;\n\nexport type KeyType = Direction | typeof KEY_ENTER | typeof KEY_BACK;\n\nexport interface KeyMap {\n [key: string]: number[];\n}\n\nconst DEFAULT_KEY_MAP: KeyMap = {\n [DIRECTION_LEFT]: [37],\n [DIRECTION_UP]: [38],\n [DIRECTION_RIGHT]: [39],\n [DIRECTION_DOWN]: [40],\n [KEY_ENTER]: [13],\n [KEY_BACK]: [8, 10009, 461],\n};\n\nconst DEBUG_FN_COLORS = ['#0FF', '#FF0', '#F0F'];\n\nconst THROTTLE_OPTIONS = {\n leading: true,\n trailing: false,\n};\n\ninterface FocusableComponent {\n focusKey: string;\n node: HTMLElement;\n parentFocusKey: string | null;\n onEnterPressHandler?: (details: Details) => void;\n onBackPressHandler?: (details: Details) => void;\n onClickPressHandler?: (details: Details) => void;\n onEnterReleaseHandler?: () => void;\n onArrowPressHandler?: (\n direction: Direction,\n details: Details\n ) => boolean | void;\n onBecameFocusedHandler?: (layout: Layout, details: any) => void;\n onBecameBlurredHandler?: (layout: Layout, details: any) => void;\n onUpdateFocus?: (isFocused: boolean) => void;\n onUpdateHasFocusedChild?: (hasFocusedChild: boolean) => void;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n lastFocusedChildKey: string | null;\n preferredChildFocusKey?: string;\n focusable: boolean;\n blockNavigationOut?: boolean;\n autoRestoreFocus?: boolean;\n layout: Layout;\n layoutUpdated: boolean;\n}\n\ninterface Corner {\n x: number;\n y: number;\n}\n\ninterface RefCorners {\n a: Corner;\n b: Corner;\n}\n\nexport interface InitOptions {\n debug?: boolean;\n visualDebug?: boolean;\n nativeMode?: boolean;\n throttle?: number;\n throttleKeypresses?: boolean;\n}\n\ninterface AddFocusableOptions {\n focusKey: string;\n node: HTMLElement;\n parentFocusKey: string | null;\n onEnterPressHandler?: (details: Details) => void;\n onClickPressHandler?: (details: Details) => void;\n onEnterReleaseHandler?: () => void;\n onBackPressHandler?: (details: Details) => void;\n onArrowPressHandler?: (\n direction: Direction,\n details: Details\n ) => boolean | void;\n onBecameFocusedHandler?: (layout: Layout, details: any) => void;\n onBecameBlurredHandler?: (layout: Layout, details: any) => void;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n onUpdateFocus?: (isFocused: boolean) => void;\n onUpdateHasFocusedChild?: (hasFocusedChild: boolean) => void;\n preferredChildFocusKey?: string;\n autoRestoreFocus?: boolean;\n focusable?: boolean;\n blockNavigationOut?: boolean;\n}\n\ninterface UpdateFocusableOptions {\n node?: HTMLElement;\n preferredChildFocusKey?: string;\n focusable?: boolean;\n blockNavigationOut?: boolean;\n}\n\nexport const getChildClosestToOrigin = (\n children: FocusableComponent[]\n): FocusableComponent => {\n const childrenClosestToOrigin = sortBy(\n children,\n ({ layout }) => Math.abs(layout.left) + Math.abs(layout.top)\n );\n\n return first(childrenClosestToOrigin) as FocusableComponent;\n};\n\nconst throttle = <T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n options: { leading?: boolean; trailing?: boolean } = {}\n): T => {\n let timeout: number | null = null;\n let previous = 0;\n const { leading = true, trailing = true } = options;\n\n return function (this: any, ...args: Parameters<T>) {\n const now = Date.now();\n if (!previous && !leading) previous = now;\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(this, args);\n } else if (!timeout && trailing) {\n timeout = window.setTimeout(() => {\n previous = leading ? Date.now() : 0;\n timeout = null;\n func.apply(this, args);\n }, remaining);\n }\n } as T;\n};\n\nconst sortBy = <T>(array: T[], iteratee: (item: T) => number | string): T[] =>\n [...array].sort((a, b) => {\n const aValue = iteratee(a);\n const bValue = iteratee(b);\n return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;\n });\n\nconst first = <T>(array: T[]): T | undefined => array[0];\n\nconst difference = <T>(array: T[], values: T[]): T[] =>\n array.filter((x) => !values.includes(x));\n\nconst forEach = <T>(\n array: T[],\n iteratee: (item: T, index: number) => void\n): void => array.forEach(iteratee);\n\n/* eslint-disable no-nested-ternary */\nclass SpatialNavigation {\n private focusableComponents: Record<string, FocusableComponent>;\n focusKey: string | null;\n private parentsHavingFocusedChild: string[];\n private nativeMode: boolean;\n private throttle: number;\n private throttleKeypresses: boolean;\n private pressedKeys: Record<string, number>;\n paused: boolean;\n private keyDownEventListener: ((event: KeyboardEvent) => void) | null;\n private clickEventListener: ((event: MouseEvent) => void) | null;\n private keyUpEventListener: ((event: KeyboardEvent) => void) | null;\n private keyMap: KeyMap;\n private debug: boolean;\n private visualDebugger: VisualDebugger | null;\n private logIndex: number;\n\n /**\n * Used to determine the coordinate that will be used to filter items that are over the \"edge\"\n */\n static getCutoffCoordinate(\n isVertical: boolean,\n isIncremental: boolean,\n isSibling: boolean,\n layout: Layout\n ): number {\n const itemX = layout.left;\n const itemY = layout.top;\n const itemWidth = layout.width;\n const itemHeight = layout.height;\n\n const coordinate = isVertical ? itemY : itemX;\n const itemSize = isVertical ? itemHeight : itemWidth;\n\n return isIncremental\n ? isSibling\n ? coordinate\n : coordinate + itemSize\n : isSibling\n ? coordinate + itemSize\n : coordinate;\n }\n\n /**\n * Returns two corners (a and b) coordinates that are used as a reference points\n * Where \"a\" is always leftmost and topmost corner, and \"b\" is rightmost bottommost corner\n */\n static getRefCorners(\n direction: Direction,\n isSibling: boolean,\n layout: Layout\n ): RefCorners {\n const itemX = layout.left;\n const itemY = layout.top;\n const itemWidth = layout.width;\n const itemHeight = layout.height;\n\n const result: RefCorners = {\n a: {\n x: 0,\n y: 0,\n },\n b: {\n x: 0,\n y: 0,\n },\n };\n\n switch (direction) {\n case DIRECTION_UP: {\n const y = isSibling ? itemY + itemHeight : itemY;\n\n result.a = {\n x: itemX,\n y,\n };\n\n result.b = {\n x: itemX + itemWidth,\n y,\n };\n\n break;\n }\n\n case DIRECTION_DOWN: {\n const y = isSibling ? itemY : itemY + itemHeight;\n\n result.a = {\n x: itemX,\n y,\n };\n\n result.b = {\n x: itemX + itemWidth,\n y,\n };\n\n break;\n }\n\n case DIRECTION_LEFT: {\n const x = isSibling ? itemX + itemWidth : itemX;\n\n result.a = {\n x,\n y: itemY,\n };\n\n result.b = {\n x,\n y: itemY + itemHeight,\n };\n\n break;\n }\n\n case DIRECTION_RIGHT: {\n const x = isSibling ? itemX : itemX + itemWidth;\n\n result.a = {\n x,\n y: itemY,\n };\n\n result.b = {\n x,\n y: itemY + itemHeight,\n };\n\n break;\n }\n\n default:\n break;\n }\n\n return result;\n }\n\n /**\n * Calculates if the sibling node is intersecting enough with the ref node by the secondary coordinate\n */\n static isAdjacentSlice(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): boolean {\n const { a: refA, b: refB } = refCorners;\n const { a: siblingA, b: siblingB } = siblingCorners;\n const coordinate = isVerticalDirection ? 'x' : 'y';\n\n const refCoordinateA = refA[coordinate];\n const refCoordinateB = refB[coordinate];\n const siblingCoordinateA = siblingA[coordinate];\n const siblingCoordinateB = siblingB[coordinate];\n\n const thresholdDistance =\n (refCoordinateB - refCoordinateA) * ADJACENT_SLICE_THRESHOLD;\n\n const intersectionLength = Math.max(\n 0,\n Math.min(refCoordinateB, siblingCoordinateB) -\n Math.max(refCoordinateA, siblingCoordinateA)\n );\n\n return intersectionLength >= thresholdDistance;\n }\n\n static getPrimaryAxisDistance(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): number {\n const { a: refA } = refCorners;\n const { a: siblingA } = siblingCorners;\n const coordinate = isVerticalDirection ? 'y' : 'x';\n\n return Math.abs(siblingA[coordinate] - refA[coordinate]);\n }\n\n static getSecondaryAxisDistance(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): number {\n const { a: refA, b: refB } = refCorners;\n const { a: siblingA, b: siblingB } = siblingCorners;\n const coordinate = isVerticalDirection ? 'x' : 'y';\n\n const refCoordinateA = refA[coordinate];\n const refCoordinateB = refB[coordinate];\n const siblingCoordinateA = siblingA[coordinate];\n const siblingCoordinateB = siblingB[coordinate];\n\n const distancesToCompare = [];\n\n distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateA));\n distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateB));\n distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateA));\n distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateB));\n\n return Math.min(...distancesToCompare);\n }\n\n /**\n * Inspired by: https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS_for_TV/TV_remote_control_navigation#Algorithm_design\n * Ref Corners are the 2 corners of the current component in the direction of navigation\n * They used as a base to measure adjacent slices\n */\n sortSiblingsByPriority(\n siblings: FocusableComponent[],\n currentLayout: Layout,\n direction: Direction,\n _focusKey: string\n ): FocusableComponent[] {\n const isVerticalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_UP;\n\n const refCorners = SpatialNavigation.getRefCorners(\n direction,\n false,\n currentLayout\n );\n\n return [...siblings].sort(\n (a: FocusableComponent, b: FocusableComponent) => {\n const aCorners = SpatialNavigation.getRefCorners(\n direction,\n true,\n a.layout\n );\n const bCorners = SpatialNavigation.getRefCorners(\n direction,\n true,\n b.layout\n );\n\n const aIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aPrimaryAxisFunction = aIsAdjacentSlice\n ? SpatialNavigation.getPrimaryAxisDistance\n : SpatialNavigation.getSecondaryAxisDistance;\n const bPrimaryAxisFunction = bIsAdjacentSlice\n ? SpatialNavigation.getPrimaryAxisDistance\n : SpatialNavigation.getSecondaryAxisDistance;\n\n const aSecondaryAxisFunction = aIsAdjacentSlice\n ? SpatialNavigation.getSecondaryAxisDistance\n : SpatialNavigation.getPrimaryAxisDistance;\n const bSecondaryAxisFunction = bIsAdjacentSlice\n ? SpatialNavigation.getSecondaryAxisDistance\n : SpatialNavigation.getPrimaryAxisDistance;\n\n const aPrimaryAxisDistance = aPrimaryAxisFunction(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bPrimaryAxisDistance = bPrimaryAxisFunction(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aSecondaryAxisDistance = aSecondaryAxisFunction(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bSecondaryAxisDistance = bSecondaryAxisFunction(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aTotalDistancePoints =\n aPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +\n aSecondaryAxisDistance;\n const bTotalDistancePoints =\n bPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +\n bSecondaryAxisDistance;\n\n const aPriority =\n (aTotalDistancePoints + 1) /\n (aIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);\n const bPriority =\n (bTotalDistancePoints + 1) /\n (bIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);\n\n return aPriority - bPriority;\n }\n );\n }\n\n constructor(options: InitOptions = {}) {\n this.focusableComponents = {};\n this.focusKey = null;\n this.parentsHavingFocusedChild = [];\n this.nativeMode = false;\n this.throttle = 0;\n this.throttleKeypresses = false;\n this.pressedKeys = {};\n this.paused = true;\n this.keyDownEventListener = null;\n this.clickEventListener = null;\n this.keyUpEventListener = null;\n this.keyMap = DEFAULT_KEY_MAP;\n this.debug = false;\n this.visualDebugger = null;\n this.logIndex = 0;\n\n this.onKeyEvent = this.onKeyEvent.bind(this);\n this.pause = this.pause.bind(this);\n this.resume = this.resume.bind(this);\n this.setFocus = this.setFocus.bind(this);\n this.updateAllLayouts = this.updateAllLayouts.bind(this);\n this.navigateByDirection = this.navigateByDirection.bind(this);\n this.init = this.init.bind(this);\n this.setKeyMap = this.setKeyMap.bind(this);\n\n this.init(options);\n }\n\n init({\n debug = false,\n visualDebug = false,\n nativeMode = false,\n throttle = 0,\n throttleKeypresses = false,\n }: InitOptions = {}) {\n this.nativeMode = nativeMode;\n this.throttleKeypresses = throttleKeypresses;\n this.debug = debug;\n\n if (!this.nativeMode) {\n if (Number.isInteger(throttle) && throttle > 0) {\n this.throttle = throttle;\n }\n this.bindEventHandlers();\n if (visualDebug) {\n this.visualDebugger = new VisualDebugger();\n this.startDrawLayouts();\n }\n }\n }\n\n startDrawLayouts(): void {\n const draw = () => {\n requestAnimationFrame(() => {\n this.visualDebugger?.clearLayouts();\n Object.entries(this.focusableComponents).forEach(\n ([focusKey, component]) => {\n this.visualDebugger?.drawLayout(\n component.layout,\n focusKey,\n component.parentFocusKey!\n );\n }\n );\n draw();\n });\n };\n\n draw();\n }\n\n destroy(): void {\n this.unbindEventHandlers();\n }\n\n getEventType(keyCode: number): KeyType | undefined {\n return Object.keys(this.getKeyMap()).find((key) =>\n this.getKeyMap()[key].includes(keyCode)\n ) as KeyType | undefined;\n }\n\n bindEventHandlers(): void {\n if (typeof window !== 'undefined' && window.addEventListener) {\n const keyDownHandler = (event: KeyboardEvent) => {\n if (this.paused === true) {\n return;\n }\n\n if (this.debug) {\n this.logIndex += 1;\n }\n\n const eventType = this.getEventType(event.keyCode);\n\n if (!eventType) {\n return;\n }\n\n this.pressedKeys[eventType] = this.pressedKeys[eventType]\n ? this.pressedKeys[eventType] + 1\n : 1;\n\n event.preventDefault();\n event.stopPropagation();\n\n const details: Details = {\n pressedKeys: this.pressedKeys,\n };\n\n if (this.focusKey && this.getNodeLayoutByFocusKey(this.focusKey)) {\n details.layout = this.getNodeLayoutByFocusKey(this.focusKey)!;\n }\n\n if (eventType === KEY_ENTER && this.focusKey) {\n this.onEnterPress(details);\n return;\n }\n\n if (eventType === KEY_BACK && this.focusKey) {\n this.onBackPress(details);\n return;\n }\n\n const preventDefaultNavigation =\n this.onArrowPress(eventType as Direction, details) === false;\n\n if (preventDefaultNavigation) {\n this.log('keyDownEventListener', 'default navigation prevented');\n this.visualDebugger?.clear();\n } else {\n this.onKeyEvent(event);\n }\n };\n\n this.keyDownEventListener = this.throttle\n ? throttle(keyDownHandler, this.throttle, THROTTLE_OPTIONS)\n : keyDownHandler;\n\n this.keyUpEventListener = (event: KeyboardEvent) => {\n const eventType = this.getEventType(event.keyCode);\n\n if (eventType) {\n delete this.pressedKeys[eventType];\n }\n\n if (this.throttle && !this.throttleKeypresses) {\n // @ts-ignore\n this.keyDownEventListener?.cancel?.();\n }\n\n if (eventType === KEY_ENTER && this.focusKey) {\n this.onEnterRelease();\n }\n };\n\n // Click handler for mouse/touch support\n this.clickEventListener = (event: MouseEvent) => {\n if (this.paused === true) {\n return;\n }\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n // Find the focusable component that contains the clicked element\n const focusKey = this.findFocusKeyForElement(target);\n if (!focusKey) {\n return;\n }\n\n const details: Details = {\n pressedKeys: {},\n event,\n mouseClick: true,\n };\n\n const layout = this.getNodeLayoutByFocusKey(focusKey);\n if (layout) {\n details.layout = layout;\n }\n\n const isAlreadyFocused = this.focusKey === focusKey;\n if (!isAlreadyFocused) {\n this.setFocus(focusKey, details);\n }\n\n this.onClickPress(details);\n };\n\n window.addEventListener('keyup', this.keyUpEventListener);\n window.addEventListener('keydown', this.keyDownEventListener);\n window.addEventListener('click', this.clickEventListener);\n }\n }\n\n unbindEventHandlers(): void {\n if (typeof window !== 'undefined' && window.removeEventListener) {\n window.removeEventListener('keydown', this.keyDownEventListener!);\n window.removeEventListener('click', this.clickEventListener!);\n this.keyDownEventListener = null;\n this.clickEventListener = null;\n\n if (this.throttle) {\n window.removeEventListener('keyup', this.keyUpEventListener!);\n this.keyUpEventListener = null;\n }\n }\n }\n\n findFocusKeyForElement(element: HTMLElement): string | null {\n for (const focusKey of Object.keys(this.focusableComponents)) {\n const component = this.focusableComponents[focusKey];\n if (component && component.node && component.focusable) {\n if (component.node === element || component.node.contains(element)) {\n return focusKey;\n }\n }\n }\n return null;\n }\n\n onClickPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onClickPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onClickPress', 'componentNotFocusable');\n return;\n }\n\n component.onClickPressHandler?.(details);\n }\n\n onEnterPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onEnterPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onEnterPress', 'componentNotFocusable');\n return;\n }\n\n component.onEnterPressHandler?.(details);\n }\n\n onBackPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onBackPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onBackPress', 'componentNotFocusable');\n return;\n }\n\n component.onBackPressHandler?.(details);\n }\n\n onEnterRelease(): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onEnterRelease', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onEnterRelease', 'componentNotFocusable');\n return;\n }\n\n component.onEnterReleaseHandler?.();\n }\n\n onArrowPress(direction: Direction, details: Details): boolean | void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onArrowPress', 'noComponent');\n return undefined;\n }\n\n return component.onArrowPressHandler?.(direction, details);\n }\n\n navigateByDirection(\n direction: Direction,\n details: Details = { pressedKeys: {} }\n ): void {\n if (this.paused === true) {\n return;\n }\n\n const validDirections = [\n DIRECTION_DOWN,\n DIRECTION_UP,\n DIRECTION_LEFT,\n DIRECTION_RIGHT,\n ];\n\n if (validDirections.includes(direction)) {\n this.log('navigateByDirection', 'direction', direction);\n this.smartNavigate(direction, null, details);\n } else {\n this.log(\n 'navigateByDirection',\n `Invalid direction. You passed: \\`${direction}\\`, but you can use only these: `,\n validDirections\n );\n }\n }\n\n onKeyEvent(event: KeyboardEvent): void {\n this.visualDebugger?.clear();\n\n const direction = Object.keys(this.getKeyMap()).find((key) =>\n this.getKeyMap()[key].includes(event.keyCode)\n ) as KeyType | undefined;\n\n if (direction) {\n this.smartNavigate(direction as Direction, null, {\n pressedKeys: {},\n event,\n });\n }\n }\n\n smartNavigate(\n direction: Direction,\n fromParentFocusKey: string | null,\n details: Details\n ): void {\n this.log('smartNavigate', 'direction', direction);\n this.log('smartNavigate', 'fromParentFocusKey', fromParentFocusKey);\n this.log('smartNavigate', 'this.focusKey', this.focusKey);\n\n if (!this.nativeMode && !fromParentFocusKey) {\n Object.values(this.focusableComponents).forEach((component) => {\n component.layoutUpdated = false;\n });\n }\n\n const currentComponent = this.focusableComponents[\n fromParentFocusKey || this.focusKey!\n ];\n\n this.log(\n 'smartNavigate',\n 'currentComponent',\n currentComponent ? currentComponent.focusKey : undefined,\n currentComponent ? currentComponent.node : undefined\n );\n\n if (currentComponent) {\n this.updateLayout(currentComponent.focusKey);\n const { parentFocusKey, focusKey, layout } = currentComponent;\n\n const isVerticalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_UP;\n const isIncrementalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_RIGHT;\n\n const currentCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(\n isVerticalDirection,\n isIncrementalDirection,\n false,\n layout\n );\n\n /**\n * Get only the siblings with the coords on the way of our moving direction\n */\n const siblings = Object.values(this.focusableComponents).filter(\n (component) => {\n if (\n component.parentFocusKey === parentFocusKey &&\n component.focusable\n ) {\n this.updateLayout(component.focusKey);\n const siblingCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(\n isVerticalDirection,\n isIncrementalDirection,\n true,\n component.layout\n );\n\n return isIncrementalDirection\n ? siblingCutoffCoordinate >= currentCutoffCoordinate\n : siblingCutoffCoordinate <= currentCutoffCoordinate;\n }\n\n return false;\n }\n ) as FocusableComponent[];\n\n if (this.debug) {\n this.log('smartNavigate', 'siblings', siblings);\n }\n\n if (siblings.length > 0) {\n const sortedSiblings = this.sortSiblingsByPriority(\n siblings,\n layout,\n direction,\n focusKey\n );\n\n if (this.debug) {\n this.log('smartNavigate', 'sortedSiblings', sortedSiblings);\n }\n\n const nextComponent = sortedSiblings[0];\n\n if (nextComponent) {\n this.setFocus(nextComponent.focusKey, details);\n }\n } else {\n this.log('smartNavigate', 'noSiblings');\n\n if (parentFocusKey) {\n this.smartNavigate(direction, parentFocusKey, details);\n }\n }\n }\n }\n\n saveLastFocusedChildKey(\n component: FocusableComponent | undefined,\n focusKey: string\n ): void {\n if (component) {\n this.log(\n 'saveLastFocusedChildKey',\n `${component.focusKey} lastFocusedChildKey set`,\n focusKey\n );\n component.lastFocusedChildKey = focusKey;\n }\n }\n\n log(functionName: string, debugString: string, ...rest: any[]): void {\n if (this.debug) {\n console.log(\n `%c${functionName}%c${debugString}`,\n `background: ${\n DEBUG_FN_COLORS[this.logIndex % DEBUG_FN_COLORS.length]\n }; color: black; padding: 1px 5px;`,\n 'background: #333; color: #BADA55; padding: 1px 5px;',\n ...rest\n );\n }\n }\n\n getNextFocusKey(targetFocusKey: string): string {\n this.log('getNextFocusKey', 'targetFocusKey', targetFocusKey);\n\n const targetComponent = this.focusableComponents[targetFocusKey];\n\n if (!targetComponent) {\n return targetFocusKey;\n }\n\n const { trackChildren } = targetComponent;\n\n if (!trackChildren) {\n return targetFocusKey;\n }\n\n const children = Object.values(this.focusableComponents).filter(\n (component) =>\n component.parentFocusKey === targetFocusKey && component.focusable\n ) as FocusableComponent[];\n\n if (children.length === 0) {\n return targetFocusKey;\n }\n\n const { lastFocusedChildKey, preferredChildFocusKey } = targetComponent;\n\n /**\n * First of all trying to focus last focused child\n */\n if (\n lastFocusedChildKey &&\n !targetComponent.forgetLastFocusedChild &&\n this.isParticipatingFocusableComponent(lastFocusedChildKey)\n ) {\n this.log(\n 'getNextFocusKey',\n 'lastFocusedChildKey will be focused',\n lastFocusedChildKey\n );\n\n return this.getNextFocusKey(lastFocusedChildKey);\n }\n\n /**\n * If there is no lastFocusedChild, trying to focus the preferred focused key\n */\n if (\n preferredChildFocusKey &&\n this.isParticipatingFocusableComponent(preferredChildFocusKey)\n ) {\n this.log(\n 'getNextFocusKey',\n 'preferredChildFocusKey will be focused',\n preferredChildFocusKey\n );\n\n return this.getNextFocusKey(preferredChildFocusKey);\n }\n\n /**\n * Otherwise, trying to focus something by coordinates\n */\n children.forEach((component) => this.updateLayout(component.focusKey));\n const { focusKey: childKey } = getChildClosestToOrigin(children);\n\n this.log('getNextFocusKey', 'childKey will be focused', childKey);\n\n return this.getNextFocusKey(childKey);\n }\n\n addFocusable({\n focusKey,\n node,\n parentFocusKey,\n onEnterPressHandler,\n onEnterReleaseHandler,\n onBackPressHandler,\n onArrowPressHandler,\n onBecameFocusedHandler,\n onBecameBlurredHandler,\n forgetLastFocusedChild,\n trackChildren,\n onUpdateFocus,\n onUpdateHasFocusedChild,\n preferredChildFocusKey,\n onClickPressHandler,\n autoRestoreFocus,\n focusable = true,\n blockNavigationOut,\n }: AddFocusableOptions): void {\n this.focusableComponents[focusKey] = {\n focusKey,\n node,\n parentFocusKey,\n onClickPressHandler,\n onEnterPressHandler,\n onEnterReleaseHandler,\n onBackPressHandler,\n onArrowPressHandler,\n onBecameFocusedHandler,\n onBecameBlurredHandler,\n onUpdateFocus,\n onUpdateHasFocusedChild,\n forgetLastFocusedChild,\n trackChildren,\n lastFocusedChildKey: null,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut,\n autoRestoreFocus,\n layout: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n node,\n },\n layoutUpdated: false,\n };\n\n if (this.nativeMode) {\n return;\n }\n\n this.updateLayout(focusKey);\n\n /**\n * If for some reason this component was already focused before it was added, call the update\n */\n if (focusKey === this.focusKey) {\n this.setFocus(focusKey);\n }\n }\n\n removeFocusable({ focusKey }: { focusKey: string }): void {\n const componentToRemove = this.focusableComponents[focusKey];\n\n if (componentToRemove) {\n const { parentFocusKey } = componentToRemove;\n\n Reflect.deleteProperty(this.focusableComponents, focusKey);\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n const wasFocused = focusKey === this.focusKey;\n\n // If a component was unmounted and it was focused, we need to clear focusKey if the focus is in the Client App so the focus don't get lost.\n if (wasFocused) {\n if (this.paused) {\n this.focusKey = null;\n } else {\n // if its not paused, we need to focus on a component that is visible so we don't lose focus\n this.setFocus('PANEL_NAVIGATION');\n }\n }\n\n /**\n * If the component was stored as lastFocusedChild, clear lastFocusedChildKey from parent\n */\n parentComponent &&\n parentComponent.lastFocusedChildKey === focusKey &&\n (parentComponent.lastFocusedChildKey = null);\n\n if (this.nativeMode) {\n return;\n }\n\n /**\n * If the component was also focused at this time, focus another one\n */\n if (\n wasFocused &&\n parentComponent &&\n parentComponent.autoRestoreFocus &&\n !this.paused\n ) {\n this.setFocus(parentFocusKey!);\n }\n }\n }\n\n getNodeLayoutByFocusKey(focusKey: string): Layout | null {\n const component = this.focusableComponents[focusKey];\n\n if (component) {\n this.updateLayout(component.focusKey);\n\n return component.layout;\n }\n\n return null;\n }\n\n setCurrentFocusedKey(\n newFocusKey: string,\n details: Details = { pressedKeys: {} }\n ): void {\n if (\n this.isFocusableComponent(this.focusKey!) &&\n newFocusKey !== this.focusKey\n ) {\n const oldComponent = this.focusableComponents[this.focusKey!];\n const parentComponent = this.focusableComponents[\n oldComponent.parentFocusKey!\n ];\n\n this.saveLastFocusedChildKey(parentComponent, this.focusKey!);\n\n oldComponent.onUpdateFocus?.(false);\n oldComponent.onBecameBlurredHandler?.(\n this.getNodeLayoutByFocusKey(this.focusKey!)!,\n details\n );\n }\n\n this.focusKey = newFocusKey;\n\n if (this.isFocusableComponent(this.focusKey)) {\n const newComponent = this.focusableComponents[this.focusKey];\n\n newComponent.onUpdateFocus?.(true);\n this.updateParentsHasFocusedChild(this.focusKey, details);\n newComponent.onBecameFocusedHandler?.(\n this.getNodeLayoutByFocusKey(this.focusKey)!,\n details\n );\n }\n }\n\n updateParentsHasFocusedChild(focusKey: string, details: Details): void {\n const parents: string[] = [];\n\n let currentComponent = this.focusableComponents[focusKey];\n\n /**\n * Recursively iterate the tree up and find all the parents' focus keys\n */\n while (currentComponent) {\n const { parentFocusKey } = currentComponent;\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n\n if (parentComponent) {\n const { focusKey: currentParentFocusKey } = parentComponent;\n\n parents.push(currentParentFocusKey);\n }\n\n currentComponent = parentComponent;\n }\n\n const parentsToRemoveFlag = difference(\n this.parentsHavingFocusedChild,\n parents\n );\n const parentsToAddFlag = difference(\n parents,\n this.parentsHavingFocusedChild\n );\n\n forEach(parentsToRemoveFlag, (parentFocusKey) => {\n const parentComponent = this.focusableComponents[parentFocusKey];\n\n parentComponent &&\n parentComponent.trackChildren &&\n parentComponent.onUpdateHasFocusedChild?.(false);\n this.onIntermediateNodeBecameBlurred(parentFocusKey, details);\n });\n\n forEach(parentsToAddFlag, (parentFocusKey) => {\n const parentComponent = this.focusableComponents[parentFocusKey];\n\n parentComponent &&\n parentComponent.trackChildren &&\n parentComponent.onUpdateHasFocusedChild?.(true);\n this.onIntermediateNodeBecameFocused(parentFocusKey, details);\n });\n\n this.parentsHavingFocusedChild = parents;\n }\n\n updateParentsLastFocusedChild(focusKey: string): void {\n let currentComponent = this.focusableComponents[focusKey];\n\n /**\n * Recursively iterate the tree up and update all the parent's lastFocusedChild\n */\n while (currentComponent) {\n const { parentFocusKey } = currentComponent;\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n\n if (parentComponent) {\n this.saveLastFocusedChildKey(\n parentComponent,\n currentComponent.focusKey\n );\n }\n\n currentComponent = parentComponent;\n }\n }\n\n getKeyMap(): KeyMap {\n return this.keyMap;\n }\n\n setKeyMap(keyMap: KeyMap): void {\n this.keyMap = {\n ...this.getKeyMap(),\n ...keyMap,\n };\n }\n\n isFocusableComponent(focusKey: string): boolean {\n return !!this.focusableComponents[focusKey];\n }\n\n /**\n * Checks whether the focusableComponent is actually participating in spatial navigation (in other words, is a\n * 'focusable' focusableComponent). Seems less confusing than calling it isFocusableFocusableComponent()\n */\n isParticipatingFocusableComponent(focusKey: string): boolean {\n return (\n this.isFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].focusable\n );\n }\n\n onIntermediateNodeBecameFocused(focusKey: string, details: Details): void {\n this.isParticipatingFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].onBecameFocusedHandler?.(\n this.getNodeLayoutByFocusKey(focusKey)!,\n details\n );\n }\n\n onIntermediateNodeBecameBlurred(focusKey: string, details: Details): void {\n this.isParticipatingFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].onBecameBlurredHandler?.(\n this.getNodeLayoutByFocusKey(focusKey)!,\n details\n );\n }\n\n pause(): void {\n this.parentsHavingFocusedChild = [];\n this.pressedKeys = {};\n this.log('pause', 'paused');\n this.visualDebugger?.clear();\n this.visualDebugger?.clearLayouts();\n this.getFocusableComponents().forEach((component) => {\n component.onUpdateFocus?.(false);\n component.onUpdateHasFocusedChild?.(false);\n });\n this.paused = true;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n setFocus(\n targetFocusKey: string,\n details: Details = { pressedKeys: {} }\n ): void {\n const lastFocusedKey = this.focusKey;\n const newFocusKey = this.getNextFocusKey(targetFocusKey);\n\n this.log('setFocus', 'newFocusKey', newFocusKey);\n\n this.setCurrentFocusedKey(newFocusKey, details);\n this.updateParentsHasFocusedChild(newFocusKey, details);\n this.updateParentsLastFocusedChild(lastFocusedKey!);\n }\n\n updateAllLayouts(): void {\n if (this.nativeMode) {\n return;\n }\n\n Object.entries(this.focusableComponents).forEach(([focusKey]) => {\n this.updateLayout(focusKey);\n });\n }\n\n updateLayout(focusKey: string): void {\n const component = this.focusableComponents[focusKey];\n\n if (!component || this.nativeMode || component.layoutUpdated) {\n return;\n }\n\n const { node } = component;\n\n measureLayout(\n node,\n (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => {\n component.layout = {\n x,\n y,\n width,\n height,\n left,\n top,\n node,\n };\n }\n );\n }\n\n updateFocusable(\n focusKey: string,\n {\n node,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut,\n }: UpdateFocusableOptions\n ): void {\n if (this.nativeMode) {\n return;\n }\n\n const component = this.focusableComponents[focusKey];\n\n if (component) {\n component.preferredChildFocusKey = preferredChildFocusKey;\n component.focusable = focusable ?? component.focusable;\n component.blockNavigationOut = blockNavigationOut;\n\n if (node) {\n component.node = node;\n }\n }\n }\n\n isNativeMode(): boolean {\n return this.nativeMode;\n }\n\n getFocusableComponents(): FocusableComponent[] {\n return Object.values(this.focusableComponents) as FocusableComponent[];\n }\n\n getFocusableComponentsByParentFocusKey(\n parentFocusKey: string\n ): FocusableComponent[] {\n return Object.values(this.focusableComponents).filter(\n (component) => component.parentFocusKey === parentFocusKey\n ) as FocusableComponent[];\n }\n}\n\n/**\n * Export singleton\n */\nexport default SpatialNavigation;\n","export const DIRECTION_LEFT = 'left';\nexport const DIRECTION_RIGHT = 'right';\nexport const DIRECTION_UP = 'up';\nexport const DIRECTION_DOWN = 'down';\nexport const KEY_ENTER = 'enter';\nexport const KEY_BACK = 'back';\n\nexport type Direction =\n | typeof DIRECTION_LEFT\n | typeof DIRECTION_RIGHT\n | typeof DIRECTION_UP\n | typeof DIRECTION_DOWN;\n\nexport interface Layout {\n x: number;\n y: number;\n width: number;\n height: number;\n left: number;\n top: number;\n node: HTMLElement;\n}\n\nexport interface Details {\n pressedKeys: Record<string, number>;\n layout?: Layout;\n event?: Event;\n mouseClick?: boolean;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* Warning: Do not play with :root */\\n.sdk-wrapper {\\n font-family: var(--sdk-font-body);\\n color: var(--sdk-text100);\\n --sdk-bets: #20f4ca;\\n --sdk-highlightPrimary-rgb: 255, 255, 255;\\n}\\n\\n.sdk-wrapper .focus-ring {\\n border: 3px solid transparent;\\n transition: border-color 0.2s ease-in-out;\\n border-radius: 10px;\\n}\\n\\n.sdk-wrapper .focus-ring[data-focused='true'] {\\n border-color: var(--sdk-highlightPrimary);\\n}\\n\\n.sdk-wrapper .focus-opacity {\\n background-color: transparent;\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.sdk-wrapper .focus-opacity[data-focused='true'] {\\n background-color: rgba(var(--sdk-highlightPrimary-rgb), 0.078);\\n}\\n\\n.FONT_BOLD_HEADLINE {\\n font-family: var(--sdk-font-headline);\\n}\\n\\n.FONT_BOLD {\\n font-family: var(--sdk-font-title);\\n}\\n\\n.TEXT_200 {\\n color: var(--sdk-text200);\\n}\\n\\n.T01 {\\n font-size: 18px;\\n font-weight: 400;\\n line-height: 24px;\\n}\\n\\n.T02 {\\n font-size: 18px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T04 {\\n font-size: 20px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T05_ALT {\\n font-size: 21px;\\n font-weight: 500;\\n line-height: 28px;\\n}\\n\\n.T10 {\\n font-size: 23px;\\n font-weight: 500;\\n line-height: 32px;\\n}\\n\\n.T20 {\\n font-size: 27px;\\n font-weight: 500;\\n line-height: 36px;\\n}\\n\\n.T30 {\\n font-size: 29px;\\n font-weight: 700;\\n line-height: 36px;\\n}\\n\\n.T50 {\\n font-size: 34px;\\n line-height: 40px;\\n}\\n\\n.T60 {\\n font-size: 38px;\\n font-weight: 500;\\n line-height: 44px;\\n}\\n\\n.T70 {\\n font-size: 48px;\\n font-weight: 900;\\n line-height: 56px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/App/App.styles.css\"],\"names\":[],\"mappings\":\"AAAA,oCAAoC;AACpC;EACE,iCAAiC;EACjC,yBAAyB;EACzB,mBAAmB;EACnB,yCAAyC;AAC3C;;AAEA;EACE,6BAA6B;EAC7B,yCAAyC;EACzC,mBAAmB;AACrB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,6BAA6B;EAC7B,6CAA6C;AAC/C;;AAEA;EACE,8DAA8D;AAChE;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB\",\"sourcesContent\":[\"/* Warning: Do not play with :root */\\n.sdk-wrapper {\\n font-family: var(--sdk-font-body);\\n color: var(--sdk-text100);\\n --sdk-bets: #20f4ca;\\n --sdk-highlightPrimary-rgb: 255, 255, 255;\\n}\\n\\n.sdk-wrapper .focus-ring {\\n border: 3px solid transparent;\\n transition: border-color 0.2s ease-in-out;\\n border-radius: 10px;\\n}\\n\\n.sdk-wrapper .focus-ring[data-focused='true'] {\\n border-color: var(--sdk-highlightPrimary);\\n}\\n\\n.sdk-wrapper .focus-opacity {\\n background-color: transparent;\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.sdk-wrapper .focus-opacity[data-focused='true'] {\\n background-color: rgba(var(--sdk-highlightPrimary-rgb), 0.078);\\n}\\n\\n.FONT_BOLD_HEADLINE {\\n font-family: var(--sdk-font-headline);\\n}\\n\\n.FONT_BOLD {\\n font-family: var(--sdk-font-title);\\n}\\n\\n.TEXT_200 {\\n color: var(--sdk-text200);\\n}\\n\\n.T01 {\\n font-size: 18px;\\n font-weight: 400;\\n line-height: 24px;\\n}\\n\\n.T02 {\\n font-size: 18px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T04 {\\n font-size: 20px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T05_ALT {\\n font-size: 21px;\\n font-weight: 500;\\n line-height: 28px;\\n}\\n\\n.T10 {\\n font-size: 23px;\\n font-weight: 500;\\n line-height: 32px;\\n}\\n\\n.T20 {\\n font-size: 27px;\\n font-weight: 500;\\n line-height: 36px;\\n}\\n\\n.T30 {\\n font-size: 29px;\\n font-weight: 700;\\n line-height: 36px;\\n}\\n\\n.T50 {\\n font-size: 34px;\\n line-height: 40px;\\n}\\n\\n.T60 {\\n font-size: 38px;\\n font-weight: 500;\\n line-height: 44px;\\n}\\n\\n.T70 {\\n font-size: 48px;\\n font-weight: 900;\\n line-height: 56px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".sdk--panel-manager {\\n padding: 60px;\\n padding-left: 48px;\\n padding-bottom: 0;\\n display: block;\\n}\\n\\n.sdk--panel-manager .panel-coming-soon {\\n display: block;\\n text-align: center;\\n}\\n\\n.sdk--panel-loading {\\n display: block;\\n padding: 40px 20px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/PanelManager/PanelManager.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,kBAAkB;EAClB,iBAAiB;EACjB,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB\",\"sourcesContent\":[\".sdk--panel-manager {\\n padding: 60px;\\n padding-left: 48px;\\n padding-bottom: 0;\\n display: block;\\n}\\n\\n.sdk--panel-manager .panel-coming-soon {\\n display: block;\\n text-align: center;\\n}\\n\\n.sdk--panel-loading {\\n display: block;\\n padding: 40px 20px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".panel-navigation {\\n width: 100%;\\n}\\n\\n.panel-navigation > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.panel-navigation .panel-nav-button-container {\\n display: inline-block;\\n margin-right: 12px;\\n}\\n\\n.panel-navigation .panel-nav-button-container:last-child {\\n margin-right: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/organisms/PanelNavigation/PanelNavigation.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;AACb;;AAEA;EACE,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB\",\"sourcesContent\":[\".panel-navigation {\\n width: 100%;\\n}\\n\\n.panel-navigation > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.panel-navigation .panel-nav-button-container {\\n display: inline-block;\\n margin-right: 12px;\\n}\\n\\n.panel-navigation .panel-nav-button-container:last-child {\\n margin-right: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".panel-nav-button-container {\\n display: block;\\n text-align: center;\\n color: var(--sdk-text300);\\n font-family: var(--sdk-font-title);\\n box-sizing: border-box;\\n}\\n\\n.panel-nav-button-container > * {\\n margin-bottom: 0;\\n}\\n\\n.panel-nav-button-container path {\\n fill: var(--sdk-highlightSecondary);\\n}\\n\\n.panel-nav-button-container button {\\n padding: 8px 0;\\n background-color: var(--sdk-surface3);\\n\\n transition: background-color 0.2s ease-in-out, color 0.3s ease-in-out;\\n}\\n\\n.panel-nav-button-container .panel-nav-label {\\n margin-top: 10px;\\n}\\n\\n.panel-nav-button-container[data-focused='true'],\\n.panel-nav-button-container:hover,\\n.panel-nav-button-active {\\n color: var(--sdk-text100);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] path,\\n.panel-nav-button-container:hover path {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] rect,\\n.panel-nav-button-container:hover rect {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] button,\\n.panel-nav-button-container:hover button {\\n background-color: var(--sdk-accentPrimary);\\n}\\n\\n.panel-nav-button-active button {\\n background-color: var(--sdk-surface5);\\n}\\n\\n.panel-nav-button-active path {\\n fill: var(--sdk-highlightPrimary);\\n}\\n\\n.panel-nav-button-container .FONT_BOLD {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-family: var(--sdk-font-headline);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/molecules/PanelNavButton/PanelNavButton.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAc;EACd,kBAAkB;EAClB,yBAAyB;EACzB,kCAAkC;EAClC,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,qCAAqC;;EAErC,qEAAqE;AACvE;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;;EAGE,yBAAyB;AAC3B;;AAEA;;EAEE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;;EAEE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;;EAEE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,qCAAqC;AACvC\",\"sourcesContent\":[\".panel-nav-button-container {\\n display: block;\\n text-align: center;\\n color: var(--sdk-text300);\\n font-family: var(--sdk-font-title);\\n box-sizing: border-box;\\n}\\n\\n.panel-nav-button-container > * {\\n margin-bottom: 0;\\n}\\n\\n.panel-nav-button-container path {\\n fill: var(--sdk-highlightSecondary);\\n}\\n\\n.panel-nav-button-container button {\\n padding: 8px 0;\\n background-color: var(--sdk-surface3);\\n\\n transition: background-color 0.2s ease-in-out, color 0.3s ease-in-out;\\n}\\n\\n.panel-nav-button-container .panel-nav-label {\\n margin-top: 10px;\\n}\\n\\n.panel-nav-button-container[data-focused='true'],\\n.panel-nav-button-container:hover,\\n.panel-nav-button-active {\\n color: var(--sdk-text100);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] path,\\n.panel-nav-button-container:hover path {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] rect,\\n.panel-nav-button-container:hover rect {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] button,\\n.panel-nav-button-container:hover button {\\n background-color: var(--sdk-accentPrimary);\\n}\\n\\n.panel-nav-button-active button {\\n background-color: var(--sdk-surface5);\\n}\\n\\n.panel-nav-button-active path {\\n fill: var(--sdk-highlightPrimary);\\n}\\n\\n.panel-nav-button-container .FONT_BOLD {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-family: var(--sdk-font-headline);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".base-button {\\n border-radius: 6px;\\n display: block;\\n text-align: center;\\n cursor: pointer;\\n width: 100%;\\n border: none;\\n font-family: var(--sdk-font-title);\\n}\\n\\n.base-button > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/atoms/BaseButton/BaseButton.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,cAAc;EACd,kBAAkB;EAClB,eAAe;EACf,WAAW;EACX,YAAY;EACZ,kCAAkC;AACpC;;AAEA;EACE,qBAAqB;EACrB,sBAAsB;AACxB\",\"sourcesContent\":[\".base-button {\\n border-radius: 6px;\\n display: block;\\n text-align: center;\\n cursor: pointer;\\n width: 100%;\\n border: none;\\n font-family: var(--sdk-font-title);\\n}\\n\\n.base-button > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".scrollable-container {\\n position: relative;\\n}\\n\\n.scrollable-container::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n height: 58px; /* Height of the top gradient */\\n z-index: 0;\\n transition: z-index 0.3s ease;\\n}\\n\\n.scrollable-container[data-scrolled='true']::before {\\n z-index: 1;\\n background: linear-gradient(0deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.scrollable-container::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n height: 96px; /* Height of the bottom gradient */\\n background: linear-gradient(180deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.focusable-item {\\n width: 100%;\\n height: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/ScrollableContainer/ScrollableContainer.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,YAAY,EAAE,+BAA+B;EAC7C,UAAU;EACV,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,yEAAyE;AAC3E;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,SAAS;EACT,YAAY,EAAE,kCAAkC;EAChD,2EAA2E;AAC7E;;AAEA;EACE,WAAW;EACX,YAAY;AACd\",\"sourcesContent\":[\".scrollable-container {\\n position: relative;\\n}\\n\\n.scrollable-container::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n height: 58px; /* Height of the top gradient */\\n z-index: 0;\\n transition: z-index 0.3s ease;\\n}\\n\\n.scrollable-container[data-scrolled='true']::before {\\n z-index: 1;\\n background: linear-gradient(0deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.scrollable-container::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n height: 96px; /* Height of the bottom gradient */\\n background: linear-gradient(180deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.focusable-item {\\n width: 100%;\\n height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import React, { useEffect, useRef } from 'react';\nimport { useScrollableContainer } from './useScrollableContainer';\n\ntype Props = {\n children: React.ReactNode;\n};\n\n/**\n * Component to be used as a child of `ScrollableContainer`.\n * Wraps the focusable item and registers it in the context.\n * Automatically unregisters on unmount to prevent memory leaks.\n */\nconst FocusableItem: React.FC<Props> = ({ children }) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const { setRef, removeRef } = useScrollableContainer();\n\n useEffect(() => {\n const element = ref.current;\n if (element) {\n setRef(element);\n }\n\n return () => {\n if (element) {\n removeRef(element);\n }\n };\n }, [setRef, removeRef]);\n\n return (\n <div className=\"focusable-item\" ref={ref}>\n {children}\n </div>\n );\n};\n\nexport default FocusableItem;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./ScrollableContainer.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useState, useRef, useCallback, useMemo } from 'react';\nimport './ScrollableContainer.styles.css';\nimport { Layout } from '@/external/spatial-navigation/utils';\n\nconst wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport interface ScrollableContainerContextType {\n /**\n * Sets a reference for a focusable item.\n * This is used to register the item in the context so it can be focused later.\n */\n setRef: (ref: HTMLElement) => void;\n /**\n * Removes a reference for a focusable item.\n * This is used to unregister the item when it unmounts to prevent memory leaks.\n */\n removeRef: (ref: HTMLElement) => void;\n /**\n * Called when an item is focused.\n * This function scrolls the container to the focused item if necessary.\n */\n scrollToFocusedElement: (\n layout: Layout,\n options?: { offsetTop?: number }\n ) => void;\n}\n\ntype ScrollableContainerProps = {\n children?: React.ReactNode;\n /**\n * The element that is scrollable.\n * This is typically a container that has overflow set to auto or scroll.\n */\n scrollableContainerRef?: HTMLElement | null;\n /**\n * The top offset of the container, used to adjust the scroll position.\n * This is useful if the container has a fixed header or similar elements.\n */\n containerTopOffset?: number;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Context for ScrollableContainer\n */\nexport const ScrollableContainerContext = React.createContext<\n ScrollableContainerContextType\n>({\n setRef: () => {},\n removeRef: () => {},\n scrollToFocusedElement: () => {},\n});\n\n/**\n * ScrollableContainer component provides a context for focusable items\n * that allows them to register themselves and handle scrolling\n * when they become focused.\n * @example\n * ```jsx\n * <ScrollableContainer scrollableContainerRef={scrollableContainerRef}>\n * <FocusableItem>Item 1</FocusableItem>\n * <FocusableItem>Item 2</FocusableItem>\n * <FocusableItem>Item 3</FocusableItem>\n * </ScrollableContainer>\n * ```\n */\nexport const ScrollableContainer: React.FC<ScrollableContainerProps> = ({\n children,\n scrollableContainerRef,\n containerTopOffset = 0,\n ...rest\n}) => {\n const [scrolled, setScrolled] = useState(false);\n const refsSet = useRef<Set<HTMLElement>>(new Set());\n const hashRef = useRef('');\n const lastHashRef = useRef('');\n const sortedRefsCache = useRef<HTMLElement[]>([]);\n\n const setRef = useCallback((ref: HTMLElement) => {\n refsSet.current.add(ref);\n hashRef.current = Math.random().toString(36).substring(2, 15);\n }, []);\n\n const removeRef = useCallback((ref: HTMLElement) => {\n refsSet.current.delete(ref);\n hashRef.current = Math.random().toString(36).substring(2, 15);\n }, []);\n\n const getOrderedRefs = useCallback(() => {\n if (hashRef.current === lastHashRef.current) {\n return sortedRefsCache.current;\n }\n\n const refsArray = Array.from(refsSet.current);\n\n sortedRefsCache.current = refsArray.sort((a, b) => {\n if (!scrollableContainerRef) return 0;\n const containerRect = scrollableContainerRef.getBoundingClientRect();\n const aRect = a ? a.getBoundingClientRect() : { top: 0, bottom: 0 };\n const bRect = b ? b.getBoundingClientRect() : { top: 0, bottom: 0 };\n\n // Calculate the actual distance from container top (positive means below, negative means above)\n const aDistance = aRect.top - containerRect.top;\n const bDistance = bRect.top - containerRect.top;\n\n return aDistance - bDistance;\n });\n\n lastHashRef.current = hashRef.current;\n return sortedRefsCache.current;\n }, [scrollableContainerRef]);\n\n /**\n * @description - Scrolls the container to the focused element if necessary\n */\n const scrollToFocusedElement = useCallback(\n async (layout: Layout, options?: { offsetTop?: number }) => {\n if (!scrollableContainerRef || !layout.node) return;\n\n const offsetTop = options?.offsetTop || 0;\n const refs = getOrderedRefs();\n\n // Wait for the next frame to ensure the layout is updated\n if (process.env.NODE_ENV !== 'test') {\n await wait(0);\n }\n\n const containerRect = scrollableContainerRef.getBoundingClientRect();\n const nodeRect = layout.node.getBoundingClientRect();\n let index = -1;\n\n for (let i = refs.length - 1; i >= 0; i--) {\n if (refs[i].contains(layout.node)) {\n index = i;\n break;\n }\n }\n\n if (index === -1) {\n console.warn(\n 'Element not found in refsMap to focus to. Register the element wrapping it with <FocusableItem />'\n );\n return;\n }\n\n let hasOutside = false;\n\n refs.slice(index).forEach((el) => {\n const rect = el.getBoundingClientRect();\n if (\n rect.bottom > containerRect.bottom ||\n rect.top < containerRect.top\n ) {\n hasOutside = true;\n }\n });\n\n if (!hasOutside) return;\n\n const target =\n index === 0\n ? 0\n : scrollableContainerRef.scrollTop +\n (nodeRect.top - containerRect.top - containerTopOffset - offsetTop);\n scrollableContainerRef.scrollTop = target;\n\n setScrolled((prev) => {\n const newScrolled = target > 0;\n return prev !== newScrolled ? newScrolled : prev;\n });\n },\n [scrollableContainerRef, containerTopOffset, getOrderedRefs]\n );\n\n const contextValue = useMemo(\n () => ({\n setRef,\n removeRef,\n scrollToFocusedElement,\n }),\n [setRef, removeRef, scrollToFocusedElement]\n );\n\n return (\n <ScrollableContainerContext.Provider value={contextValue}>\n <div className=\"scrollable-container\" data-scrolled={scrolled} {...rest}>\n {children}\n </div>\n </ScrollableContainerContext.Provider>\n );\n};\n\nexport default ScrollableContainer;\n","import { useContext } from 'react';\nimport { ScrollableContainerContext } from './ScrollableContainer';\n\n/**\n * Custom hook to access the ScrollableContainer context.\n * Use this hook in components that need to interact with the scrollable container.\n *\n * @example\n * ```tsx\n * const { scrollToFocusedElement } = useScrollableContainer();\n *\n * const handleFocus = (layout: Layout) => {\n * scrollToFocusedElement(layout, { offsetTop: 20 });\n * };\n * ```\n */\nexport const useScrollableContainer = () => {\n const context = useContext(ScrollableContainerContext);\n if (!context) {\n throw new Error(\n 'useScrollableContainer must be used within a ScrollableContainer'\n );\n }\n return context;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { MaestroPanelType } from '@/models/IPanel';\n\n// Lazy load all icon components\nconst KeyPlaysIcon = lazy(() => import('./KeyPlaysIcon'));\nconst PlayIcon = lazy(() => import('./PlayIcon'));\nconst BetsIcon = lazy(() => import('./BetsIcon'));\nconst StatsIcon = lazy(() => import('./StatsIcon'));\nconst WarningIcon = lazy(() => import('./WarningIcon'));\nconst ExpandIcon = lazy(() => import('./ExpandIcon'));\nconst CollapseIcon = lazy(() => import('./CollapseIcon'));\nconst TimesIcon = lazy(() => import('./TimesIcon'));\nconst CheckmarkIcon = lazy(() => import('./CheckmarkIcon'));\nconst FlameIcon = lazy(() => import('./FlameIcon'));\nconst BetsWarningIcon = lazy(() => import('./BetsWarningIcon'));\nconst MobilePhoneIcon = lazy(() => import('./MobilePhoneIcon'));\nconst FantasyIcon = lazy(() => import('./FantasyIcon'));\nconst ShopIcon = lazy(() => import('./ShopIcon'));\nconst HelloWorldIcon = lazy(() => import('./HelloWorldIcon'));\nconst ChatIcon = lazy(() => import('./ChatIcon'));\nconst ShopifyIcon = lazy(() => import('./ShopifyIcon'));\nconst BuilderIcon = lazy(() => import('./BuilderIcon'));\nconst FoxKeyPlaysIcon = lazy(() => import('./FoxKeyPlaysIcon'));\nconst FoxStatsIcon = lazy(() => import('./FoxStatsIcon'));\nconst FoxMultiViewIcon = lazy(() => import('./FoxMultiViewIcon'));\n\n// Ensures all MaestroPanelType values have icons\nconst panelIcons: Record<MaestroPanelType, React.LazyExoticComponent<any>> = {\n [MaestroPanelType.ESPN_KEY_PLAYS]: KeyPlaysIcon,\n [MaestroPanelType.ESPN_BETS]: BetsIcon,\n [MaestroPanelType.ESPN_STATS]: StatsIcon,\n [MaestroPanelType.ESPN_FANTASY]: FantasyIcon,\n [MaestroPanelType.ESPN_SHOP]: ShopIcon,\n [MaestroPanelType.HELLO_WORLD]: HelloWorldIcon,\n [MaestroPanelType.FOX_STATS]: FoxStatsIcon,\n [MaestroPanelType.FOX_KEY_PLAYS]: FoxKeyPlaysIcon,\n [MaestroPanelType.FOX_MULTI_VIEW]: FoxMultiViewIcon,\n [MaestroPanelType.BUILDER_BLOCK_PANEL]: BuilderIcon,\n};\n\nconst otherIcons: Record<string, React.LazyExoticComponent<any>> = {\n play: PlayIcon,\n warning: WarningIcon,\n expand: ExpandIcon,\n collapse: CollapseIcon,\n times: TimesIcon,\n checkmark: CheckmarkIcon,\n flame: FlameIcon,\n betsWarning: BetsWarningIcon,\n mobilePhone: MobilePhoneIcon,\n chat: ChatIcon,\n shopifyBlockPanel: ShopifyIcon,\n};\n\nconst iconImports: Record<string, React.LazyExoticComponent<any>> = {\n ...panelIcons,\n ...otherIcons,\n};\n\nexport type IconsName = keyof typeof iconImports;\n\nexport type IconProps = {\n iconName: IconsName;\n width: number;\n height: number;\n};\n\n// Skeleton component for loading state\nconst Skeleton = (props: Omit<IconProps, 'iconName'>) => (\n <div style={{ width: props.width, height: props.height }} />\n);\n\ninterface IconState {\n loaded: boolean;\n}\nclass Icon extends React.Component<IconProps, IconState> {\n render() {\n const { iconName, width, height } = this.props;\n\n const IconComponent = iconImports[iconName];\n if (!IconComponent) {\n return <Skeleton width={width} height={height} />;\n }\n\n return (\n <Suspense fallback={<Skeleton width={width} height={height} />}>\n <IconComponent iconName={iconName} width={width} height={height} />\n </Suspense>\n );\n }\n}\n\nexport default Icon;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./BaseButton.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from 'react';\nimport { ButtonHTMLAttributes } from 'react';\nimport './BaseButton.styles.css';\nimport FocusableItem from '@/components/core/ScrollableContainer/FocusableItem';\n\nclass BaseButton extends React.Component<\n ButtonHTMLAttributes<HTMLButtonElement>\n> {\n render() {\n const className = ['base-button', this.props.className].join(' ');\n\n return (\n <FocusableItem>\n <button {...this.props} className={className}>\n {this.props.children}\n </button>\n </FocusableItem>\n );\n }\n}\n\nexport default BaseButton;\n","import { Observable } from '../helpers/Observable';\n\n/**\n * Base view model that implements reactive properties\n */\nexport abstract class ViewModel {\n private _isLoading = new Observable<boolean>(false);\n private _error = new Observable<string | null>(null);\n\n get isLoading(): Observable<boolean> {\n return this._isLoading;\n }\n\n get error(): Observable<string | null> {\n return this._error;\n }\n\n protected setLoading(loading: boolean): void {\n this._isLoading.value = loading;\n }\n\n protected setError(error: string | null): void {\n this._error.value = error;\n }\n}\n","// Network error types\nexport class NetworkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NetworkError';\n }\n}\n\nexport class AuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AuthError';\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ServerError extends Error {\n statusCode: number;\n\n constructor(statusCode: number, message: string) {\n super(message);\n this.name = 'ServerError';\n this.statusCode = statusCode;\n }\n}\n\nexport class BadRequestError extends Error {\n statusCode: number;\n\n constructor(statusCode: number, message: string) {\n super(message);\n this.name = 'BadRequestError';\n this.statusCode = statusCode;\n }\n}\n","import AxiosNetworkClient from '../../external/AxiosNetworkClient';\nimport LocalStorageCacheManager from '../../external/LocalStorageCacheManager';\nimport { ICacheManager } from '../../external/ports/cacheManager';\nimport { INetworkClient } from '../../external/ports/networkClient';\nimport {\n AuthError,\n BadRequestError,\n NetworkError,\n NotFoundError,\n ServerError,\n} from './errors';\n\nexport const MAESTRO_BASE_URL = 'https://api.maestro.io';\nexport const SDK_FLAVOR = 'MaestroKit_Web';\n\n// Common endpoints\nexport const ENDPOINTS = {\n CAN_I_PLAY: '/caniplay/v1',\n STREAM: '/stream/v1',\n USER_PROFILE: '/userprofile/v1',\n ACTIVE_USER: '/active/v2',\n // Add more endpoints as needed\n};\n\n// HTTP methods\nexport const HttpMethod = {\n GET: 'GET',\n POST: 'POST',\n PUT: 'PUT',\n DELETE: 'DELETE',\n} as const;\n\nexport type HttpMethod = typeof HttpMethod[keyof typeof HttpMethod];\n\nexport interface NetworkManagerOptions {\n networkClient?: INetworkClient;\n externalNetworkClient?: INetworkClient;\n externalBaseURL?: string;\n cacheManager?: ICacheManager;\n defaultCacheDuration?: number;\n}\n\nclass NetworkManager {\n private cacheManager: ICacheManager;\n private maestroClient: INetworkClient;\n private externalClient: INetworkClient;\n private pollingTasks: Map<\n string,\n { interval: number; controller: AbortController }\n >;\n private localStorage: Storage;\n\n constructor(\n options: NetworkManagerOptions = {},\n localStorageOverride?: Storage\n ) {\n this.pollingTasks = new Map();\n\n // Initialize cache manager\n this.cacheManager =\n options.cacheManager ||\n new LocalStorageCacheManager(options.defaultCacheDuration);\n\n // Initialize Maestro API client\n this.maestroClient =\n options.networkClient ||\n new AxiosNetworkClient({\n baseURL: MAESTRO_BASE_URL,\n retries: 3,\n delay: 1000,\n backoff: 2,\n });\n\n // Initialize External API client\n this.externalClient =\n options.externalNetworkClient ||\n new AxiosNetworkClient({\n baseURL: options.externalBaseURL || '',\n retries: 3,\n delay: 1000,\n backoff: 2,\n });\n\n this.localStorage = localStorageOverride ||\n (typeof globalThis !== 'undefined' && globalThis.localStorage) || {\n length: 0,\n clear: () => {},\n getItem: () => null,\n key: () => null,\n removeItem: () => {},\n setItem: () => {},\n };\n }\n\n /**\n * Set authentication for Maestro APIs\n */\n setAuthentication(token: string | null, apiKey: string | null): void {\n this.maestroClient.setAuthentication(token, apiKey);\n }\n\n /**\n * Execute a request with optional caching\n * Extracts duplicated cache logic from request methods\n */\n private async withCache<T>(\n cacheParams: { endpoint: string; params: Record<string, any> },\n useCache: boolean,\n fetchFn: () => Promise<T>\n ): Promise<T> {\n const cacheKey = this.cacheManager.produceCacheKey(\n JSON.stringify({\n endpoint: cacheParams.endpoint,\n params: cacheParams.params,\n data: null,\n })\n );\n\n if (useCache) {\n const cachedData = this.cacheManager.getCache<T>(cacheKey);\n if (cachedData) {\n return cachedData;\n }\n }\n\n const response = await fetchFn();\n\n if (useCache) {\n this.cacheManager.setCache(cacheKey, response);\n }\n\n return response;\n }\n\n /**\n * Handle errors from network requests\n */\n private handleError(error: any): never {\n // Check if it's an Axios error with a response\n if (error.response) {\n const status = error.response.status;\n const message = error.response.data?.message || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthError(message);\n } else if (status === 404) {\n throw new NotFoundError(message);\n } else if (status >= 500) {\n throw new ServerError(status, message);\n } else {\n throw new BadRequestError(status, message);\n }\n } else if (error.request) {\n // Request was made but no response received\n throw new NetworkError('Network request failed');\n } else {\n // Something else happened while setting up the request\n throw error;\n }\n }\n\n /**\n * Make a request to the Maestro API\n */\n async maestroApiRequest<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n maestroDefaultHeaders = null,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n maestroDefaultHeaders?: { siteId: string; jwt: string } | null;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<T> {\n // Add SDK flavor to headers\n const requestHeaders: Record<string, string> = {\n 'x-maestro-maestro-kit-flavor': SDK_FLAVOR,\n ...headers,\n };\n\n // Add Maestro default headers if provided\n if (maestroDefaultHeaders) {\n requestHeaders['x-maestro-client-id'] = maestroDefaultHeaders.siteId;\n requestHeaders['Authorization'] = `Bearer ${maestroDefaultHeaders.jwt}`;\n requestHeaders['Content-type'] = 'application/json';\n }\n\n const shouldCache = method === HttpMethod.GET && useCache;\n\n const fetchFn = async (): Promise<T> => {\n let response: T;\n\n if (method === HttpMethod.GET) {\n response = await this.maestroClient.get<T>(\n endpoint,\n params,\n requestHeaders\n );\n } else if (method === HttpMethod.POST) {\n response = await this.maestroClient.post<any, T>(endpoint, data);\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response) {\n response = {} as T;\n }\n\n return response;\n };\n\n try {\n return await this.withCache<T>(\n { endpoint, params },\n shouldCache,\n fetchFn\n );\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Make a request to an external API\n */\n async externalApiRequest<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<T> {\n const shouldCache = method === HttpMethod.GET && useCache;\n\n const fetchFn = async (): Promise<T> => {\n let response: T;\n\n if (method === HttpMethod.GET) {\n response = await this.externalClient.get<T>(endpoint, params, headers);\n } else if (method === HttpMethod.POST) {\n response = await this.externalClient.post<any, T>(endpoint, data);\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response) {\n response = {} as T;\n }\n\n return response;\n };\n\n try {\n return await this.withCache<T>(\n { endpoint, params },\n shouldCache,\n fetchFn\n );\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Make a request to an external API and return both data and headers\n * Note: Only data is cached, headers are not persisted\n */\n async externalApiRequestWithHeaders<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<{ data: T; headers: Record<string, string> }> {\n const shouldCache = method === HttpMethod.GET && useCache;\n const cacheKey = this.cacheManager.produceCacheKey(\n JSON.stringify({ endpoint, params, data: null })\n );\n\n // Check cache - return cached data with empty headers\n if (shouldCache) {\n const cachedData = this.cacheManager.getCache<T>(cacheKey);\n if (cachedData) {\n return { data: cachedData, headers: {} };\n }\n }\n\n try {\n let response: { data: T; headers: Record<string, string> };\n\n if (method === HttpMethod.GET) {\n response = await this.externalClient.getWithHeaders<T>(\n endpoint,\n params,\n headers\n );\n } else if (method === HttpMethod.POST) {\n response = await this.externalClient.postWithHeaders<any, T>(\n endpoint,\n data,\n params,\n headers\n );\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response.data) {\n response.data = {} as T;\n }\n\n // Cache only data, not headers\n if (shouldCache) {\n this.cacheManager.setCache(cacheKey, response.data);\n }\n\n return response;\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Start polling a Maestro API endpoint at specified interval\n */\n pollMaestroApiRequest<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n maestroDefaultHeaders = null,\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n maestroDefaultHeaders?: { siteId: string; jwt: string } | null;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: T) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `${endpoint}-${JSON.stringify(params)}-${JSON.stringify(\n data\n )}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.maestroApiRequest<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n maestroDefaultHeaders,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with the data\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Start polling an external API endpoint at specified interval\n */\n pollExternalApiRequest<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: T) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `external-${endpoint}-${JSON.stringify(\n params\n )}-${JSON.stringify(data)}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.externalApiRequest<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with the data\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Start polling an external API endpoint at specified interval and return both data and headers\n */\n pollExternalApiRequestWithHeaders<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: { data: T; headers: Record<string, string> }) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `external-headers-${endpoint}-${JSON.stringify(\n params\n )}-${JSON.stringify(data)}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.externalApiRequestWithHeaders<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with both data and headers\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Stop all polling tasks\n */\n stopAllPolling(): void {\n for (const [key, { controller }] of this.pollingTasks.entries()) {\n controller.abort();\n this.pollingTasks.delete(key);\n }\n }\n\n /**\n * Clear all cached data\n */\n clearAllCache(): void {\n const originalLength = this.localStorage.length;\n for (let i = 0; i < originalLength; i++) {\n const key = this.localStorage.key(i);\n if (key && key.startsWith('maestro-cache-')) {\n this.localStorage.removeItem(key);\n }\n }\n }\n}\n\nexport default NetworkManager;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","module.exports = require('./lib/axios');","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelManager.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelNavButton.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import BaseButton from '@/components/atoms/BaseButton/BaseButton';\nimport Icon, { IconsName } from '@/components/atoms/SvgIcon/Icon';\nimport './PanelNavButton.styles.css';\nimport React from 'react';\nimport { withFocusable } from '@/external/spatial-navigation';\n\ntype PanelNavButtonProps = {\n iconName: IconsName;\n index: number;\n active: boolean;\n children?: React.ReactNode;\n focused?: boolean;\n focusKey: string;\n onBecameFocused: () => void;\n width: string;\n};\n\nclass PanelNavButton extends React.Component<PanelNavButtonProps, {}> {\n static displayName = 'PanelNavButton';\n\n render() {\n const { iconName, active, children, focused, width } = this.props;\n return (\n <div\n className={[\n 'panel-nav-button-container',\n 'T02',\n active ? 'panel-nav-button-active' : '',\n ].join(' ')}\n data-focused={focused}\n style={{\n width,\n }}\n >\n <BaseButton>\n <Icon iconName={iconName} height={36} width={36} />\n </BaseButton>\n <div className=\"panel-nav-label FONT_BOLD\">{children}</div>\n </div>\n );\n }\n}\n\nexport default withFocusable<PanelNavButtonProps>()(PanelNavButton);\n","import PanelNavButton from './PanelNavButton';\n\nexport default PanelNavButton;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelNavigation.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import PanelNavButton from '@/components/molecules/PanelNavButton';\nimport { IconsName } from '@/components/atoms/SvgIcon/Icon';\nimport './PanelNavigation.styles.css';\nimport React from 'react';\nimport { Direction } from '@/external/spatial-navigation/utils';\nimport SDK from '@/index';\nimport {\n withFocusable,\n WithFocusableProps,\n} from '@/external/spatial-navigation';\n\ninterface PanelNavigationProps {\n items: {\n title: string;\n onEnter: () => void;\n iconName: IconsName;\n active: boolean;\n }[];\n}\n\nconst BUTTON_MARGIN = 12;\n\nclass PanelNavigationButton extends React.Component<{\n item: PanelNavigationProps['items'][number];\n index: number;\n onBecameFocused: (index: number) => () => void;\n onArrowPress?: (direction: Direction) => void;\n width: string;\n}> {\n handleArrowPress = (d: Direction, _props: any) => {\n if (d === 'left' && this.props.index === 0) {\n SDK.getMaestroEventViewModel().deliverFocus();\n return;\n }\n\n if (this.props.onArrowPress) {\n this.props.onArrowPress(d);\n }\n };\n\n render() {\n const { item, index, width } = this.props;\n return (\n <PanelNavButton\n iconName={item.iconName}\n key={item.title}\n index={index}\n onBecameFocused={this.props.onBecameFocused(index)}\n active={item.active}\n focusKey={`PANEL_NAV_BUTTON_${index}`}\n onArrowPress={this.handleArrowPress}\n parentFocusKey=\"PANEL_NAVIGATION\"\n width={width}\n >\n {item.title}\n </PanelNavButton>\n );\n }\n}\n\nclass PanelNavigation extends React.Component<PanelNavigationProps> {\n handleBecameFocused = (index: number) => () => {\n if (this.props.items[index]) {\n this.props.items[index].onEnter();\n }\n };\n\n render() {\n const itemsCount = this.props.items.length;\n if (itemsCount === 0) {\n return null;\n }\n const marginTotal = (itemsCount - 1) * BUTTON_MARGIN;\n const buttonWidth = `calc((100% - ${marginTotal}px) / ${itemsCount})`;\n\n return (\n <FocusableWrapper focusKey=\"PANEL_NAVIGATION\">\n {this.props.items.map((item, index) => (\n <PanelNavigationButton\n onBecameFocused={this.handleBecameFocused}\n key={item.title}\n item={item}\n index={index}\n width={buttonWidth}\n />\n ))}\n </FocusableWrapper>\n );\n }\n}\n\nclass Wrapper extends React.Component<WithFocusableProps> {\n render() {\n return <div className=\"panel-navigation\">{this.props.children}</div>;\n }\n}\n\nconst FocusableWrapper = withFocusable({ trackChildren: true })(Wrapper);\n\nexport default PanelNavigation;\n","import PanelNavigation from './PanelNavigation';\n\nexport default PanelNavigation;\n","import React, { Suspense, lazy } from 'react';\nimport { PanelManagerViewModel } from '@/view-models/PanelManagerViewModel';\nimport './PanelManager.styles.css';\nimport PanelNavigation from '@/components/organisms/PanelNavigation';\nimport { MaestroPanelType } from '@/models/IPanel';\nimport SDK from '@/index';\n\n// Lazy load panel components\nconst KeyPlaysView = lazy(() =>\n import('@/modules/espn/key-plays/view/KeyPlaysView')\n);\nconst BetsView = lazy(() => import('@/modules/espn/bets/view/BetsView'));\nconst StatsView = lazy(() => import('@/modules/espn/stats/view'));\nconst FantasyView = lazy(() => import('@/modules/espn/fantasy/view'));\nconst ShopView = lazy(() => import('@/modules/espn/shop/view'));\nconst HelloWorldView = lazy(() => import('@/modules/maestro/hello-world'));\nconst BuilderView = lazy(() => import('@/modules/maestro/builder'));\nconst FoxKeyPlays = lazy(() =>\n import('@/modules/fox/key-plays/view/FoxKeyPlays')\n);\nconst FoxMultiView = lazy(() =>\n import('@/modules/fox/multi-view/view/FoxMultiView')\n);\nconst FoxStatsView = lazy(() =>\n import('@/modules/fox/stats/view/FoxStatsView')\n);\n\n// Loading fallback component\nconst PanelLoading = () => <div className=\"sdk--panel-loading\" />;\n\nconst PANELS_MAP: Record<MaestroPanelType, React.LazyExoticComponent<any>> = {\n espnKeyPlays: KeyPlaysView,\n espnBet: BetsView,\n espnStats: StatsView,\n espnFantasy: FantasyView,\n espnShop: ShopView,\n helloWorld: HelloWorldView,\n foxKeyPlays: FoxKeyPlays,\n foxMultiview: FoxMultiView,\n foxStats: FoxStatsView,\n builderBlockPanel: BuilderView,\n};\n\ninterface PanelManagerState {\n activePanel: MaestroPanelType | null;\n visiblePanels: { type: MaestroPanelType; title: string }[];\n}\n\nclass PanelManager extends React.Component<{}, PanelManagerState> {\n private unsubscribe: (() => void) | null = null;\n private panelsUnsubscribe: (() => void) | null = null;\n private viewModel: PanelManagerViewModel;\n\n constructor(props: {}) {\n super(props);\n this.viewModel = SDK.getMaestroEventViewModel().panelManagerViewModel;\n\n this.state = {\n activePanel: this.viewModel.currentPanel,\n visiblePanels: this.viewModel.panelsObservable.value,\n };\n }\n\n componentDidMount() {\n // Subscribe to changes in the current panel\n this.unsubscribe = this.viewModel.currentPanelObservable.subscribe(() => {\n this.setState({ activePanel: this.viewModel.currentPanel });\n });\n\n // Subscribe to changes in the visible panels\n this.panelsUnsubscribe = this.viewModel.panelsObservable.subscribe(\n (panels) => {\n this.setState({ visiblePanels: panels });\n }\n );\n }\n\n componentWillUnmount() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n if (this.panelsUnsubscribe) {\n this.panelsUnsubscribe();\n this.panelsUnsubscribe = null;\n }\n }\n\n goToPanel(panel: MaestroPanelType) {\n return () => {\n if (this.viewModel.currentPanel === panel) {\n return;\n }\n this.viewModel.currentPanel = panel;\n };\n }\n\n render() {\n const { activePanel, visiblePanels } = this.state;\n\n // Create panel items only for visible panels\n const PANEL_ITEMS: {\n title: string;\n onEnter: () => void;\n iconName: MaestroPanelType;\n active: boolean;\n }[] = visiblePanels.map((panel) => ({\n iconName: panel.type,\n onEnter: this.goToPanel(panel.type),\n title: panel.title,\n active: activePanel === panel.type,\n }));\n\n const ActivePanelComponent = activePanel ? PANELS_MAP[activePanel] : null;\n\n return (\n <div className=\"sdk--panel-manager\">\n <PanelNavigation items={PANEL_ITEMS} />\n {ActivePanelComponent && (\n <div className=\"sdk--panel-wrapper\">\n <Suspense fallback={<PanelLoading />}>\n <ActivePanelComponent />\n </Suspense>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PanelManager;\n","import PanelManager from './PanelManager';\n\nexport default PanelManager;\n","import IModel from './IModel';\n\ntype ObjectValues<T> = T[keyof T];\n\nexport default interface ITheme extends IModel {\n button: IThemeButton;\n channelOfflineThumbnail?: string;\n colors: IThemeColors;\n creator: string;\n desktopBackground?: string;\n icon?: string;\n logo?: string;\n mobileBackground?: string;\n mode?: ThemeModes;\n name: string;\n owner: string;\n siteId?: string;\n type: ThemeTypes;\n typography: IThemeTypography;\n}\n\nexport interface IThemeColors {\n accentPrimary: string;\n accentSecondary: string;\n accentTertiary: string;\n alertConfirmation: string;\n alertError: string;\n alertWarning: string;\n highlightPrimary: string;\n highlightSecondary: string;\n highlightTertiary: string;\n surface1: string;\n surface2: string;\n surface3: string;\n surface4: string;\n surface5: string;\n surface6: string;\n text100: string;\n text200: string;\n text300: string;\n text400: string;\n text500: string;\n}\n\nexport interface IThemeButton {\n borderRadius: BorderRadius;\n textCapitalization: TextCapitalization;\n}\n\nexport interface IThemeTypography {\n body: string;\n headline: string;\n}\n\nexport interface IClassicThemeOptions {\n accentPrimary: string;\n accentSecondary: string;\n}\n\nexport const BORDER_RADIUS = {\n rounded: 'rounded',\n square: 'square',\n pill: 'pill',\n} as const;\nexport type BorderRadius = ObjectValues<typeof BORDER_RADIUS>;\n\nexport const TEXT_CAPITALIZATION = {\n lowercase: 'lowercase',\n original: 'original',\n uppercase: 'uppercase',\n} as const;\nexport type TextCapitalization = ObjectValues<typeof TEXT_CAPITALIZATION>;\n\nexport const THEME_TYPES = {\n ADMIN: 'admin',\n ADVANCED: 'advanced',\n CLASSIC: 'classic',\n CUSTOM: 'custom',\n} as const;\nexport type ThemeTypes = ObjectValues<typeof THEME_TYPES>;\n\nexport const THEME_MODES = {\n DARK: 'dark',\n LIGHT: 'light',\n} as const;\nexport type ThemeModes = ObjectValues<typeof THEME_MODES>;\n","import ITheme, {\n BORDER_RADIUS,\n TEXT_CAPITALIZATION,\n THEME_MODES,\n THEME_TYPES,\n} from '@/models/ITheme';\n\nconst FONT_FAMILY = 'BentonSans-Medium';\n\nexport const DARK_THEME: ITheme = {\n _id: '6274067af74b66a544018dac',\n button: {\n borderRadius: BORDER_RADIUS.rounded,\n textCapitalization: TEXT_CAPITALIZATION.uppercase,\n },\n colors: {\n // Accent colors\n accentPrimary: '#FFFFFF',\n\n // Secondary accent colors\n accentSecondary: '#3C3F47',\n\n // Tertiary accent colors\n accentTertiary: '#0C0C0E',\n\n // Surface Colors\n surface1: '#080A0C',\n surface2: '#12141A',\n surface3: '#1B1E26',\n surface4: '#242833',\n surface5: '#363C4D',\n surface6: '#3E4759',\n\n // Highlight colors\n highlightPrimary: '#FFFFFF',\n highlightSecondary: '#9A9EA9',\n highlightTertiary: '#0A0C0F',\n\n // Alert colors\n alertConfirmation: '#43D48F',\n alertWarning: '#F58B00',\n alertError: '#FF0000',\n\n // Text colors\n text100: '#F8F9FA',\n text200: '#C2C5CB',\n text300: '#8D919D',\n text400: '#5C606B',\n text500: '#0C0C0E',\n },\n creator: '016901e60000000000000000',\n name: 'Dark Mode',\n type: THEME_TYPES.CLASSIC,\n mode: THEME_MODES.DARK,\n owner: '016901e60000000000000000',\n typography: {\n body: FONT_FAMILY,\n headline: FONT_FAMILY,\n },\n};\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./App.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from 'react';\nimport { DARK_THEME } from '@/services/ThemeManager/constants';\nimport './App.styles.css';\nimport SDK from '@/index';\nimport { IThemeTypography } from '@/models/ITheme';\n\n// Our theme.typography uses self-hosted fonts, so it won't work for our use case here.\n// Instead, we map the typography keys to the font families the client uses\ntype Typography = keyof IThemeTypography | 'title';\nconst FONT_FAMILY_MAP: Record<Typography, string> = {\n body: 'BentonSans',\n headline: 'BentonSansBold',\n title: 'BentonSansMedium',\n};\n\nclass App extends React.Component<{ children?: React.ReactNode }> {\n get colors() {\n const config = SDK.getPageConfig();\n return config?.theme?.colors || DARK_THEME.colors;\n }\n\n componentDidMount() {\n Object.keys(this.colors).forEach((key) => {\n document.documentElement.style.setProperty(\n `--sdk-${key}`,\n this.colors[key as keyof typeof this.colors]\n );\n });\n\n Object.keys(FONT_FAMILY_MAP).forEach((key) => {\n document.documentElement.style.setProperty(\n `--sdk-font-${key}`,\n FONT_FAMILY_MAP[key as Typography]\n );\n });\n }\n\n componentWillUnmount() {\n Object.keys(this.colors).forEach((key) => {\n document.documentElement.style.removeProperty(`--sdk-${key}`);\n });\n\n Object.keys(FONT_FAMILY_MAP).forEach((key) => {\n document.documentElement.style.removeProperty(`--sdk-font-${key}`);\n });\n }\n\n render() {\n return <div className=\"sdk-wrapper\">{this.props.children}</div>;\n }\n}\n\nexport default App;\n","import App from './App';\n\nexport default App;\n","/* eslint-disable react/no-find-dom-node */\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Component, createElement } from 'react';\nimport { ROOT_FOCUS_KEY } from './spatialNavigation';\nimport { Details, Direction, Layout } from './utils';\nimport SDK from '@/index';\n\ninterface WithFocusableConfig {\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n autoRestoreFocus?: boolean;\n blockNavigationOut?: boolean;\n}\n\nexport interface WithFocusableProps {\n focused?: boolean;\n focusKey?: string;\n parentFocusKey?: string;\n preferredChildFocusKey?: string;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n autoRestoreFocus?: boolean;\n blockNavigationOut?: boolean;\n hasFocusedChild?: boolean;\n focusable?: boolean;\n onEnterPress?: (props: any, details: Details) => void;\n /**\n * @description - Called when \"click\" action is performed (e.g., mouse click or touch), fired by spatial navigation\n * @param props - The props of the component\n * @param details - object containing information about the event, such as the source of the event, layout, etc.\n */\n onClickPress?: (props: any, details: Details) => void;\n onEnterRelease?: (props: any) => void;\n onBackPress?: (props: any, details: Details) => void;\n onArrowPress?: (\n direction: Direction,\n props: any,\n details: Details\n ) => boolean | void;\n onBecameFocused?: (layout: Layout, props: any, details: Details) => void;\n onBecameBlurred?: (layout: Layout, props: any, details: Details) => void;\n}\n\nexport interface WithFocusableState {\n realFocusKey: string;\n focused: boolean;\n hasFocusedChild: boolean;\n parentFocusKey: string;\n}\n\n// Helper functions to replace lodash and recompose\nconst uniqueId = (prefix: string): string =>\n `${prefix}${Math.random().toString(36).substr(2, 9)}`;\n\nconst noop = () => {};\n\nconst omit = <T extends Record<string, any>>(\n obj: T,\n keys: string[]\n): Partial<T> => {\n const result = { ...obj };\n keys.forEach((key) => delete result[key]);\n return result;\n};\n\nconst withFocusable = <P extends object>({\n forgetLastFocusedChild: configForgetLastFocusedChild = false,\n trackChildren: configTrackChildren = false,\n autoRestoreFocus: configAutoRestoreFocus,\n blockNavigationOut: configBlockNavigationOut = false,\n}: WithFocusableConfig = {}) => {\n return (WrappedComponent: React.ComponentType<P & WithFocusableProps>) => {\n return class WithFocusable extends Component<\n P & WithFocusableProps,\n WithFocusableState\n > {\n static contextTypes = {\n parentFocusKey: PropTypes.string,\n };\n\n static childContextTypes = {\n parentFocusKey: PropTypes.string,\n };\n\n state: WithFocusableState = {\n realFocusKey: this.props.focusKey || uniqueId('sn:focusable-item-'),\n focused: false,\n hasFocusedChild: false,\n parentFocusKey: this.props.parentFocusKey || ROOT_FOCUS_KEY,\n };\n navigation = SDK.getMaestroEventViewModel().navigation;\n\n getChildContext() {\n return {\n parentFocusKey: this.state.realFocusKey,\n };\n }\n\n setFocus = (focusKey: string) => {\n if (!this.navigation.isNativeMode()) {\n this.navigation.setFocus(focusKey);\n }\n };\n\n navigateByDirection = this.navigation.navigateByDirection;\n\n stealFocus = () => {\n this.navigation.setFocus(this.state.realFocusKey);\n };\n\n onUpdateFocus = (focused: boolean) => {\n this.setState({ focused });\n };\n\n onUpdateHasFocusedChild = (hasFocusedChild: boolean) => {\n this.setState({ hasFocusedChild });\n };\n\n onEnterPressHandler = (details: Details) => {\n const { onEnterPress = noop, ...rest } = this.props;\n onEnterPress(rest, details);\n };\n\n onClickPressHandler = (details: Details) => {\n const { onClickPress = noop, ...rest } = this.props;\n onClickPress(rest, details);\n };\n\n onEnterReleaseHandler = () => {\n const { onEnterRelease = noop, ...rest } = this.props;\n onEnterRelease(rest);\n };\n\n onBackPressHandler = (details: Details) => {\n const { onBackPress = noop, ...rest } = this.props;\n onBackPress(rest, details);\n };\n\n onArrowPressHandler = (direction: Direction, details: Details) => {\n const { onArrowPress = noop, ...rest } = this.props;\n return onArrowPress(direction, rest, details);\n };\n\n onBecameFocusedHandler = (layout: Layout, details: Details) => {\n const { onBecameFocused = noop, ...rest } = this.props;\n onBecameFocused(layout, rest, details);\n };\n\n onBecameBlurredHandler = (layout: Layout, details: Details) => {\n const { onBecameBlurred = noop, ...rest } = this.props;\n onBecameBlurred(layout, rest, details);\n };\n\n componentDidMount() {\n const { realFocusKey: focusKey, parentFocusKey } = this.state;\n\n const {\n preferredChildFocusKey,\n forgetLastFocusedChild = false,\n trackChildren,\n focusable = true,\n autoRestoreFocus = true,\n blockNavigationOut = false,\n } = this.props;\n\n let node: HTMLElement;\n if (this.navigation.isNativeMode()) {\n node = document.createElement('div');\n } else {\n const domNode = findDOMNode(this) as Element;\n if (!domNode) {\n throw new Error('Could not find DOM node');\n }\n node = domNode as HTMLElement;\n }\n\n this.navigation.addFocusable({\n focusKey,\n node,\n parentFocusKey,\n preferredChildFocusKey,\n onEnterPressHandler: this.onEnterPressHandler,\n onClickPressHandler: this.onClickPressHandler,\n onEnterReleaseHandler: this.onEnterReleaseHandler,\n onBackPressHandler: this.onBackPressHandler,\n onArrowPressHandler: this.onArrowPressHandler,\n onBecameFocusedHandler: this.onBecameFocusedHandler,\n onBecameBlurredHandler: this.onBecameBlurredHandler,\n onUpdateFocus: this.onUpdateFocus,\n onUpdateHasFocusedChild: this.onUpdateHasFocusedChild,\n forgetLastFocusedChild:\n configForgetLastFocusedChild || forgetLastFocusedChild,\n trackChildren: configTrackChildren || trackChildren,\n blockNavigationOut: configBlockNavigationOut || blockNavigationOut,\n autoRestoreFocus:\n configAutoRestoreFocus !== undefined\n ? configAutoRestoreFocus\n : autoRestoreFocus,\n focusable,\n });\n }\n\n componentDidUpdate() {\n const { realFocusKey: focusKey } = this.state;\n\n const {\n preferredChildFocusKey,\n focusable = true,\n blockNavigationOut = false,\n } = this.props;\n\n let node: HTMLElement;\n if (this.navigation.isNativeMode()) {\n node = document.createElement('div');\n } else {\n const domNode = findDOMNode(this) as Element;\n if (!domNode) {\n throw new Error('Could not find DOM node');\n }\n node = domNode as HTMLElement;\n }\n\n this.navigation.updateFocusable(focusKey, {\n node,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut: configBlockNavigationOut || blockNavigationOut,\n });\n }\n\n componentWillUnmount() {\n const { realFocusKey: focusKey } = this.state;\n this.navigation.removeFocusable({ focusKey });\n }\n\n render() {\n const props = {\n ...this.props,\n ...this.state,\n setFocus: this.setFocus,\n navigateByDirection: this.navigateByDirection,\n stealFocus: this.stealFocus,\n onUpdateFocus: this.onUpdateFocus,\n onUpdateHasFocusedChild: this.onUpdateHasFocusedChild,\n };\n\n const filteredProps = omit(props, [\n 'onBecameFocusedHandler',\n 'onBecameBlurredHandler',\n 'onEnterPressHandler',\n 'onClickPressHandler',\n 'onEnterReleaseHandler',\n 'onArrowPressHandler',\n 'onUpdateFocus',\n 'onUpdateHasFocusedChild',\n 'forgetLastFocusedChild',\n 'trackChildren',\n 'autoRestoreFocus',\n ]);\n\n return createElement(\n WrappedComponent,\n filteredProps as P & WithFocusableProps\n );\n }\n };\n };\n};\n\nexport default withFocusable;\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack:///./src/models/IPanel.ts","webpack:///./node_modules/axios/lib/utils.js","webpack:///./src/helpers/Observable.ts","webpack:///./src/sentry.ts","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./src/external/ReactRenderer.tsx","webpack:///./src/view-models/PanelManagerViewModel.ts","webpack:///./src/services/StaticService/StaticService.ts","webpack:///./src/services/StaticService/index.ts","webpack:///./src/view-models/MaestroEventViewModel.ts","webpack:///./src/services/InsightsService/InsightsService.ts","webpack:///./src/services/InsightsService/InsightsPayloadBuilder.ts","webpack:///./src/services/AnalyticsService/AnalyticsService.ts","webpack:///./src/index.tsx","webpack:///./src/services/UserSettingsManager.ts","webpack:///./src/external/AxiosNetworkClient.ts","webpack:///./node_modules/axios/lib/core/AxiosError.js","webpack:///./src/interfaces/IUserSettings.ts","webpack:///external {\"root\":\"ReactDOM\",\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack:///./node_modules/axios/lib/cancel/CanceledError.js","webpack:///./src/external/LocalStorageCacheManager.ts","webpack:///./src/external/spatial-navigation/measureLayout.ts","webpack:///./src/external/spatial-navigation/visualDebugger.ts","webpack:///./src/external/spatial-navigation/spatialNavigation.ts","webpack:///./src/external/spatial-navigation/utils.ts","webpack:///./node_modules/axios/lib/defaults/index.js","webpack:///./src/components/core/App/App.styles.css","webpack:///./src/components/core/PanelManager/PanelManager.styles.css","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.styles.css","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.styles.css","webpack:///./src/components/atoms/BaseButton/BaseButton.styles.css","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.styles.css","webpack:///./node_modules/prop-types/index.js","webpack:///./src/components/core/ScrollableContainer/FocusableItem.tsx","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.styles.css?2329","webpack:///./src/components/core/ScrollableContainer/ScrollableContainer.tsx","webpack:///./src/components/core/ScrollableContainer/useScrollableContainer.ts","webpack:///./src/components/atoms/SvgIcon/Icon.tsx","webpack:///./src/components/atoms/BaseButton/BaseButton.styles.css?f4c1","webpack:///./src/components/atoms/BaseButton/BaseButton.tsx","webpack:///./src/view-models/ViewModel.ts","webpack:///./src/services/NetworkManager/errors.ts","webpack:///./src/services/NetworkManager/NetworkManager.ts","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/defaults/transitional.js","webpack:///./node_modules/axios/lib/helpers/toFormData.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/env/data.js","webpack:///./node_modules/axios/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/buffer/node_modules/isarray/index.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/parseProtocol.js","webpack:///./node_modules/axios/lib/helpers/null.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/components/core/PanelManager/PanelManager.styles.css?b788","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.styles.css?7e02","webpack:///./src/components/molecules/PanelNavButton/PanelNavButton.tsx","webpack:///./src/components/molecules/PanelNavButton/index.ts","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.styles.css?d524","webpack:///./src/components/organisms/PanelNavigation/PanelNavigation.tsx","webpack:///./src/components/organisms/PanelNavigation/index.ts","webpack:///./src/components/core/PanelManager/PanelManager.tsx","webpack:///./src/components/core/PanelManager/index.tsx","webpack:///./src/models/ITheme.ts","webpack:///./src/services/ThemeManager/constants.ts","webpack:///./src/components/core/App/App.styles.css?bef0","webpack:///./src/components/core/App/App.tsx","webpack:///./src/components/core/App/index.ts","webpack:///./src/external/spatial-navigation/withFocusable.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","0","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","require","MaestroPanelType","ESPN_KEY_PLAYS","ESPN_STATS","ESPN_BETS","ESPN_FANTASY","ESPN_SHOP","HELLO_WORLD","FOX_KEY_PLAYS","FOX_MULTI_VIEW","FOX_STATS","BUILDER_BLOCK_PANEL","cache","toString","kindOf","thing","str","toLowerCase","kindOfTest","isArray","val","Array","isUndefined","isArrayBuffer","isObject","isPlainObject","getPrototypeOf","isDate","isFile","isBlob","isFileList","isFunction","isURLSearchParams","forEach","obj","fn","TypedArray","isTypedArray","Uint8Array","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isStream","pipe","isStandardBrowserEnv","navigator","product","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","prop","merged","getOwnPropertyNames","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","Observable","initialValue","_defineProperty","this","_value","newValue","notify","subscribe","listener","listeners","DEV_DOMAINS","sentryClient","pendingErrors","isInitializing","initSentry","async","process","BrowserClient","defaultStackParser","defaultIntegrations","makeFetchTransport","isDev","find","domain","test","location","href","dsn","transport","stackParser","integrations","integration","includes","tracesSampleRate","release","pkg","version","environment","enabled","extra","_sentryClient","captureException","memo","isOldIE","Boolean","atob","getTarget","styleTarget","querySelector","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","list","options","idCountMap","identifiers","item","id","base","count","concat","index","css","media","sourceMap","references","updater","addStyle","insertStyleElement","style","attributes","nonce","keys","insert","textStore","replaceText","replacement","join","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","btoa","unescape","encodeURIComponent","JSON","stringify","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","removeStyleElement","newObj","lastIdentifiers","newList","newLastIdentifiers","_i","_index","splice","_slicedToArray","_arrayWithHoles","iterator","_s","_e","_arr","_n","_d","next","done","_iterableToArrayLimit","minLen","_arrayLikeToArray","from","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","_item","cssMapping","base64","sourceMapping","sourceURLs","sources","map","source","sourceRoot","cssWithMappingToString","mediaQuery","dedupe","alreadyImportedModules","ReactRenderer","Map","renderersMap","has","unmount","delete","renderer","getRenderer","App","default","PanelManager","render","React","el","getElementById","children","ReactDOM","unmountComponentAtNode","innerHTML","set","PanelManagerViewModel","getAvailablePanelsFromConfig","config","SDK","getPageConfig","panels","_p$renderer","_p$renderer$supported","supported_platforms","bbd","panel","panelType","panel_type","values","title","panel_name","settingsManager","UserSettingsManager","getInstance","initializePanels","subscribeToSettingsChanges","filteredPanels","filterPanels","isProdEnv","getIsProdEnv","_panels","updateActivePanel","settingsUnsubscribe","settings","updatePanelsBasedOnSettings","isPanelHidden","currentPanel","_currentPanel","cleanup","setActivePanel","getIndex","forPanelType","findIndex","getPanelType","atIndex","_this$panels$atIndex","currentIndex","getUnlistedPanels","SITE_ID_STATIC_BASE_URL_MAP","StaticService","siteId","baseURL","client","NetworkManager","externalNetworkClient","AxiosNetworkClient","backoff","delay","retries","metadataValue","externalApiRequest","endpoint","fetchPageConfig","pageId","fetchPageConfigById","fetchPageConfigByMetadata","pageConfig","_pageConfig$panels","some","_panel$renderer","_panel$renderer$suppo","pollGlobalConfig","onData","interval","Math","floor","random","pollExternalApiRequest","onError","context","MaestroEventViewModel","ViewModel","eventId","delegate","analyticsService","super","_pageId","_eventId","panelManagerViewModel","navigation","SpatialNavigation","loadPromises","isPanelAvailable","then","KeyPlaysViewModel","keyPlaysViewModel","catch","warn","BetsViewModel","betsViewModel","StatsViewModel","statsViewModel","FantasyViewModel","fantasyViewModel","ShopViewModel","shopViewModel","builderPanel","BuilderPanelViewModel","builderPanelViewModel","paused","focusKey","updatePlayerTimeCode","timestamp","_this$keyPlaysViewMod","_this$statsViewModel","timestampDate","Date","isNaN","getTime","playerTimeCode","onUpdatePlayerTimeCode","getPlayerTimeCode","setDataToPanel","panelData","panelTypes","viewModels","espnStats","espnBet","espnKeyPlays","espnFantasy","espnShop","builderBlockPanel","foxKeyPlays","foxMultiview","foxStats","helloWorld","viewModel","log","_this$betsViewModel","_this$statsViewModel2","_this$fantasyViewMode","_this$shopViewModel","_this$builderPanelVie","destroy","didHidePanel","updateKeyPlaysData","setKeyPlays","updateUserSettings","updateSettings","startFocusManagement","setCurrentFocusedKey","resume","didStartPlayingClip","lastPlayedClipIndex","currentClipPlaybackProgress","currentlyPlayingClipIndex","clearLoadFailureStatus","didStopPlayingClip","didFailToPlayClip","_this$keyPlaysViewMod2","handleKeyPlayLoadFailure","didUpdatePlaybackProgressOfClip","to","isShowingPanel","currentEventDoesNotSupportKeyPlays","errorState","getCurrentEventID","getCurrentlyPlayingClipIndex","_this$keyPlaysViewMod3","_this$keyPlaysViewMod4","getLastPlayedClipIndex","_this$keyPlaysViewMod5","_this$keyPlaysViewMod6","getCurrentClipPlaybackProgress","_this$keyPlaysViewMod7","_this$keyPlaysViewMod8","getKeyPlaysCount","_this$keyPlaysViewMod9","_this$keyPlaysViewMod0","allItems","_title","_isLive","_isShowingPanel","deliverFocus","pause","InsightsService","isEnabled","_globalConfig$bbd$ana","_globalConfig$bbd","_globalConfig$bbd$ana2","globalConfig","getGlobalConfig","analytics","payload","parsedData","URLSearchParams","entries","append","post","time","now","diff","responseStart","_","randomId","client_time","substring","InsightsPayloadBuilder","insightsService","cacheManager","LocalStorageCacheManager","currentTime","serverOffsetTime","getDeviceOffset","getPageInsights","getDeviceInsights","getInsightsInsights","getMetadataInsights","getReferrerInsights","getSessionInsights","getSiteInsights","getUserInsights","getEventInsights","eventData","ontology","e_d","e_m","metadata","e_t","e_u","e0","kingdom","e1","phylum","e2","class","e3","order","e4","family","e5","genus","e6","species","p_c","p_id","page","_id","p_n","p_s","slug","p_t","getDevicePermanentID","devicePermanentId","localStorage","getItem","newDevicePermanentId","setItem","getDeviceCreated","deviceCreated","getCache","Number","setCache","getTabID","tabId","sessionStorage","newTabId","d_ct","d_nd","d_np","platform","d_pid","d_sh","screen","height","d_sw","width","d_tid","d_tim","d_tof","d_ua","userAgent","serverOffset","serverTime","getServerTime","responseEnd","_this$pageConfig","i_id","insights","m_iv","r_d","r_s","r_u","getSessionID","sessionId","newSessionId","se_id","se_s","_this$pageConfig2","_this$pageConfig3","_this$pageConfig4","_this$pageConfig5","_this$pageConfig6","si_d","site","domainUrl","si_id","si_pid","package","si_pv","si_s","u_a","u_c","u_e","u_id","u_li","u_n","u_nu","u_s","u_u","u_un","AnalyticsService","insightsPayloadBuilder","getMaestroEventViewModel","trackAction","eventInsightsData","getPayload","e2_class","e4_family","e3_order","e0_kingdom","e1_phylum","e5_genus","e6_species","action","trackImpression","getPanelDataFromPageConfig","panel_id","getBaseMetadataFromPageConfig","league","airing","sport","external_field_4","external_field_1","external_field_2","external_field_3","SDKSessionId","pageSessionId","isPageSessionActive","baseMetadata","session","page_session","scheduleNextBeacon","pageSessionBeaconTimeoutId","pinchBackSessionId","pinchback_session","beaconInterval","beacon_interval","sendSessionBeacon","isPageSessionBeaconRunning","sessionBeacon","paywall_gated","viewer_id","is_billable","MaestroWebSDK","_analyticsService","instance","userSettings","useProdEnv","getSiteID","staticService","globalConfigPoller","SDKSessionStart","maestroEventViewModel","initViewModels","pageSessionStart","_config","activePanelUnmountFn","pageSessionEnd","deinit","SDKSessionEnd","stop","configure","configParams","setSiteID","siteID","info","pinchBackSessionStart","panelUnmountFn","renderPanel","isCleanedUp","cleanupFn","pinchBackSessionEnd","PANEL_TYPE_SETTINGS_KEY_MAP","_settings","DEFAULT_USER_SETTINGS","getCurrentSettings","validateSettings","mergedSettings","mergeSettings","getPanelSettings","_this$_settings$value","panelKey","mapPanelTypeToSettingsKey","panelSettings","hidePanel","shouldHideWagers","betsSettings","hideWagers","resetToDefaults","currentSettings","mergedPanelSettings","settingKey","settingValue","axiosInstance","axios","headers","operation","attempt","axiosError","response","status","code","delayTime","pow","retry","params","setAuthentication","token","apiKey","defaults","common","utils","AxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","defineProperties","customProps","bets","stats","keyPlays","fantasy","CanceledError","ERR_CANCELED","__CANCEL__","cacheDuration","maxSize","accessLog","produceCacheKey","prefix","getCurrentSize","totalSize","startsWith","cleanupOldEntries","keysToRemove","parse","removeItem","logicalKey","cleanupLRUEntries","newItemSize","sort","cacheKey","cacheData","cachedData","clearCache","clearCacheByPattern","pattern","clearAllCache","clear","getRect","node","offsetParent","offsetHeight","offsetWidth","left","offsetLeft","top","offsetTop","nodeType","scrollLeft","scrollTop","measureLayout","callback","relativeNode","relativeRect","hasDOM","WIDTH","innerWidth","HEIGHT","innerHeight","VisualDebugger","debugCtx","createCanvas","layoutsCtx","zIndex","canvas","ctx","getContext","body","clearRect","clearLayouts","drawLayout","layout","parentFocusKey","strokeStyle","strokeRect","font","fillStyle","fillText","drawPoint","x","y","color","size","lineWidth","ROOT_FOCUS_KEY","DEFAULT_KEY_MAP","DEBUG_FN_COLORS","THROTTLE_OPTIONS","leading","trailing","throttle","func","wait","previous","args","remaining","apply","sortBy","array","iteratee","aValue","bValue","first","difference","isVertical","isIncremental","isSibling","itemX","itemY","itemWidth","itemHeight","coordinate","itemSize","direction","refCorners","siblingCorners","isVerticalDirection","refA","refB","siblingA","siblingB","refCoordinateA","refCoordinateB","siblingCoordinateA","siblingCoordinateB","thresholdDistance","max","min","abs","distancesToCompare","sortSiblingsByPriority","siblings","currentLayout","_focusKey","getRefCorners","aCorners","bCorners","aIsAdjacentSlice","isAdjacentSlice","bIsAdjacentSlice","aPrimaryAxisFunction","getPrimaryAxisDistance","getSecondaryAxisDistance","bPrimaryAxisFunction","aSecondaryAxisFunction","bSecondaryAxisFunction","aPrimaryAxisDistance","bPrimaryAxisDistance","focusableComponents","parentsHavingFocusedChild","nativeMode","throttleKeypresses","pressedKeys","keyDownEventListener","clickEventListener","keyUpEventListener","keyMap","debug","visualDebugger","logIndex","onKeyEvent","setFocus","updateAllLayouts","navigateByDirection","init","setKeyMap","visualDebug","isInteger","bindEventHandlers","startDrawLayouts","draw","requestAnimationFrame","_this$visualDebugger","component","_this$visualDebugger2","unbindEventHandlers","getEventType","keyCode","getKeyMap","addEventListener","keyDownHandler","eventType","preventDefault","stopPropagation","details","getNodeLayoutByFocusKey","onEnterPress","onBackPress","_this$visualDebugger3","onArrowPress","_this$keyDownEventLis","_this$keyDownEventLis2","cancel","onEnterRelease","findFocusKeyForElement","mouseClick","onClickPress","removeEventListener","element","focusable","contains","_component$onClickPre","onClickPressHandler","_component$onEnterPre","onEnterPressHandler","_component$onBackPres","onBackPressHandler","_component$onEnterRel","onEnterReleaseHandler","_component$onArrowPre","onArrowPressHandler","validDirections","smartNavigate","_this$visualDebugger4","fromParentFocusKey","layoutUpdated","currentComponent","updateLayout","isIncrementalDirection","currentCutoffCoordinate","getCutoffCoordinate","siblingCutoffCoordinate","sortedSiblings","nextComponent","saveLastFocusedChildKey","lastFocusedChildKey","functionName","debugString","rest","getNextFocusKey","targetFocusKey","targetComponent","trackChildren","preferredChildFocusKey","forgetLastFocusedChild","isParticipatingFocusableComponent","childKey","childrenClosestToOrigin","getChildClosestToOrigin","addFocusable","onBecameFocusedHandler","onBecameBlurredHandler","onUpdateFocus","onUpdateHasFocusedChild","autoRestoreFocus","blockNavigationOut","removeFocusable","componentToRemove","Reflect","deleteProperty","parentComponent","wasFocused","newFocusKey","isFocusableComponent","_oldComponent$onUpdat","_oldComponent$onBecam","oldComponent","_newComponent$onUpdat","_newComponent$onBecam","newComponent","updateParentsHasFocusedChild","parents","currentParentFocusKey","parentsToRemoveFlag","parentsToAddFlag","_parentComponent$onUp","onIntermediateNodeBecameBlurred","_parentComponent$onUp2","onIntermediateNodeBecameFocused","updateParentsLastFocusedChild","_this$focusableCompon","_this$focusableCompon2","_this$focusableCompon3","_this$focusableCompon4","_this$visualDebugger5","_this$visualDebugger6","getFocusableComponents","_component$onUpdateFo","_component$onUpdateHa","lastFocusedKey","updateFocusable","isNativeMode","getFocusableComponentsByParentFocusKey","normalizeHeaderName","transitionalDefaults","toFormData","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","transitional","XMLHttpRequest","transformRequest","isObjectPayload","contentType","_FormData","env","rawValue","parser","encoder","stringifySafely","transformResponse","silentJSONParsing","forcedJSONParsing","strictJSONParsing","responseType","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","method","___CSS_LOADER_EXPORT___","FocusableItem","ref","useRef","setRef","removeRef","useScrollableContainer","useEffect","current","className","locals","ScrollableContainerContext","createContext","scrollToFocusedElement","ScrollableContainer","scrollableContainerRef","containerTopOffset","scrolled","setScrolled","useState","refsSet","Set","hashRef","lastHashRef","sortedRefsCache","useCallback","add","getOrderedRefs","refsArray","containerRect","getBoundingClientRect","aRect","bottom","bRect","refs","ms","nodeRect","hasOutside","rect","prev","newScrolled","contextValue","useMemo","Provider","_extends","data-scrolled","useContext","KeyPlaysIcon","lazy","PlayIcon","BetsIcon","StatsIcon","WarningIcon","ExpandIcon","CollapseIcon","TimesIcon","CheckmarkIcon","FlameIcon","BetsWarningIcon","MobilePhoneIcon","FantasyIcon","ShopIcon","HelloWorldIcon","ChatIcon","ShopifyIcon","BuilderIcon","FoxKeyPlaysIcon","FoxStatsIcon","FoxMultiViewIcon","iconImports","play","warning","expand","collapse","times","checkmark","flame","betsWarning","mobilePhone","chat","shopifyBlockPanel","Skeleton","Icon","Component","iconName","IconComponent","Suspense","fallback","BaseButton","_isLoading","_error","setLoading","loading","setError","NetworkError","AuthError","NotFoundError","ServerError","statusCode","BadRequestError","HttpMethod","GET","POST","PUT","DELETE","localStorageOverride","pollingTasks","defaultCacheDuration","maestroClient","networkClient","externalClient","externalBaseURL","globalThis","cacheParams","useCache","fetchFn","handleError","_error$response$data","maestroDefaultHeaders","skipResponseBodyDeserialization","requestHeaders","jwt","shouldCache","withCache","getWithHeaders","postWithHeaders","pollMaestroApiRequest","taskKey","_this$pollingTasks$ge","controller","abort","AbortController","signal","aborted","maestroApiRequest","_this$pollingTasks$ge2","_this$pollingTasks$ge3","_this$pollingTasks$ge4","pollExternalApiRequestWithHeaders","_this$pollingTasks$ge5","externalApiRequestWithHeaders","_this$pollingTasks$ge6","stopAllPolling","originalLength","encode","url","paramsSerializer","serializedParams","parts","v","toISOString","hashmarkIndex","clarifyTimeoutError","formData","convertValue","Blob","Buffer","build","parentKey","fullKey","pop","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","parseProtocol","onCanceled","requestData","cancelToken","unsubscribe","auth","username","password","Authorization","fullPath","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","toUpperCase","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","protocol","ERR_BAD_REQUEST","send","isAbsoluteURL","combineURLs","requestedURL","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","g","Function","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","browser","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","Axios","mergeConfig","createInstance","defaultConfig","instanceConfig","CancelToken","isCancel","VERSION","Cancel","spread","isAxiosError","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","boolean","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","handlers","use","eject","h","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","normalizedName","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","arg","encodingOrOffset","allocUnsafe","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","checked","copy","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","global","foo","subarray","typedArraySupport","poolSize","_augment","configurable","fill","allocUnsafeSlow","_isBuffer","compare","pos","swap16","swap32","swap64","equals","inspect","match","thisStart","thisEnd","thisCopy","targetCopy","isFinite","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","num","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","expires","path","secure","cookie","toGMTString","RegExp","decodeURIComponent","relativeURL","ignoreDuplicateOf","split","line","originURL","msie","urlParsingNode","resolveURL","host","search","hash","hostname","port","pathname","charAt","requestURL","exec","deprecatedWarnings","formatMessage","opt","desc","opts","ERR_DEPRECATED","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","executor","resolvePromise","_listeners","onfulfilled","_resolve","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","PanelNavButton","active","focused","data-focused","withFocusable","PanelNavigationButton","_props","onBecameFocused","handleArrowPress","PanelNavigation","items","onEnter","itemsCount","buttonWidth","FocusableWrapper","handleBecameFocused","Wrapper","KeyPlaysView","BetsView","StatsView","FantasyView","ShopView","HelloWorldView","BuilderView","PanelLoading","PANELS_MAP","state","activePanel","visiblePanels","panelsObservable","componentDidMount","currentPanelObservable","setState","panelsUnsubscribe","componentWillUnmount","goToPanel","PANEL_ITEMS","ActivePanelComponent","DARK_THEME","button","borderRadius","textCapitalization","colors","accentPrimary","accentSecondary","accentTertiary","surface1","surface2","surface3","surface4","surface5","surface6","highlightPrimary","highlightSecondary","highlightTertiary","alertConfirmation","alertWarning","alertError","text100","text200","text300","text400","text500","creator","owner","typography","headline","FONT_FAMILY_MAP","_config$theme","theme","documentElement","setProperty","removeProperty","configForgetLastFocusedChild","configTrackChildren","configAutoRestoreFocus","configBlockNavigationOut","WrappedComponent","_WithFocusable","realFocusKey","hasFocusedChild","onBecameBlurred","getChildContext","domNode","findDOMNode","componentDidUpdate","filteredProps","omit","stealFocus"],"mappings":"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","file":"maestro-web-sdk.esm.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({}[chunkId]||chunkId) + \".maestro-web-sdk.esm.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","module.exports = require(\"react\");","export const MaestroPanelType = {\n ESPN_KEY_PLAYS: 'espnKeyPlays',\n ESPN_STATS: 'espnStats',\n ESPN_BETS: 'espnBet',\n ESPN_FANTASY: 'espnFantasy',\n ESPN_SHOP: 'espnShop',\n HELLO_WORLD: 'helloWorld',\n FOX_KEY_PLAYS: 'foxKeyPlays',\n FOX_MULTI_VIEW: 'foxMultiview',\n FOX_STATS: 'foxStats',\n BUILDER_BLOCK_PANEL: 'builderBlockPanel',\n} as const;\n\nexport type MaestroPanelType = typeof MaestroPanelType[keyof typeof MaestroPanelType];\n\nexport interface PanelTypeInfo {\n id: MaestroPanelType;\n name: string;\n imageNamePrefix: string;\n iconName: string;\n}\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","/**\n * Basic observable implementation for view models\n */\nexport class Observable<T> {\n private listeners: ((value: T) => void)[] = [];\n private _value: T;\n\n constructor(initialValue: T) {\n this._value = initialValue;\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(newValue: T) {\n this._value = newValue;\n this.notify();\n }\n\n subscribe(listener: (value: T) => void): () => void {\n this.listeners.push(listener);\n\n // Return unsubscribe function\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener);\n };\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener(this._value));\n }\n}\n","import pkg from '../package.json';\n\nconst DEV_DOMAINS = [/bbd-web-sdk\\.us-central1-dev\\.gcp\\.maestro\\.io/];\n\n// BrowserClient type is inferred from dynamic import\nlet sentryClient: any = null;\nlet pendingErrors: Array<{ error: unknown; extra?: any }> = [];\nlet isInitializing = false;\n\nconst initSentry = async () => {\n if (sentryClient || isInitializing) return;\n if (process.env.NODE_ENV === 'test') return;\n\n isInitializing = true;\n\n try {\n const {\n BrowserClient,\n defaultStackParser,\n defaultIntegrations,\n makeFetchTransport,\n } = await import('@sentry/browser');\n\n const isDev =\n DEV_DOMAINS.find((domain) => domain.test(window.location.href)) !== null;\n\n sentryClient = new BrowserClient({\n dsn:\n 'https://91444a71cbaefc62e8dc813f22bad3bf@o4506894189330432.ingest.us.sentry.io/4509946717470720',\n transport: makeFetchTransport,\n stackParser: defaultStackParser,\n integrations: defaultIntegrations.filter((integration) => {\n // filter integrations that use the global variable\n return !['BrowserApiErrors', 'Breadcrumbs', 'GlobalHandlers'].includes(\n integration.name\n );\n }),\n tracesSampleRate: isDev ? 1 : 0.1,\n release: pkg.version,\n environment: isDev ? 'development' : 'production',\n enabled: !/localhost/.test(window.location.href),\n });\n\n // Flush pending errors\n pendingErrors.forEach(({ error, extra }) => {\n sentryClient?.captureException(error, extra);\n });\n pendingErrors = [];\n } catch (e) {\n console.error('[maestro-web-sdk] Failed to load Sentry:', e);\n } finally {\n isInitializing = false;\n }\n};\n\nexport const captureException = (error: unknown, extra?: any) => {\n if (sentryClient) {\n sentryClient.captureException(error, extra);\n } else {\n pendingErrors.push({ error, extra });\n initSentry(); // Trigger lazy init\n }\n};\n\nexport default initSentry;\n","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","import { IRenderer } from './ports/renderer';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\ntype Renderer = {\n render: (children: React.ReactNode) => void;\n unmount: () => void;\n};\n\nclass ReactRenderer implements IRenderer {\n private renderersMap: Map<string, Renderer> = new Map();\n\n /**\n * Renders the panel manager\n * @param id The element ID to render in\n * @param options Options for rendering including height and width\n */\n async renderPanel(id: string) {\n // Check if there's already a renderer for this ID and clean it up first\n if (this.renderersMap.has(id)) {\n const existingRenderer = this.renderersMap.get(id)!;\n existingRenderer.unmount();\n this.renderersMap.delete(id);\n }\n\n const renderer = await this.getRenderer(id);\n const App = require('../components/core/App').default;\n const PanelManager = require('../components/core/PanelManager').default;\n\n renderer.render(\n <App>\n <PanelManager />\n </App>\n );\n\n return () => {\n // Only unmount if this renderer is still in the map (hasn't been replaced)\n if (this.renderersMap.has(id) && this.renderersMap.get(id) === renderer) {\n renderer.unmount();\n this.renderersMap.delete(id);\n }\n };\n }\n\n /**\n * @description Get the render function and renderer for the MaestroWebSDK. Useful to configure the renderer and fonts before rendering the component.\n * @param {string} id - The id of the element to render the component in.\n * @param {{ height: number; width: number }} options - The height and width of the component.\n */\n private async getRenderer(id: string): Promise<Renderer> {\n if (this.renderersMap.has(id)) {\n return this.renderersMap.get(id)!;\n }\n\n const el = document.getElementById(id);\n if (!el) {\n throw new Error(`Element with id ${id} not found`);\n }\n\n const renderer: Renderer = {\n render: (children) => {\n ReactDOM.render(children as any, el);\n },\n unmount: () => {\n // Use the captured element reference so unmount still works even if\n // the node was detached from the DOM.\n ReactDOM.unmountComponentAtNode(el);\n // Defensive cleanup in case any nodes remain.\n el.innerHTML = '';\n },\n };\n\n this.renderersMap.set(id, renderer);\n return renderer;\n }\n}\n\nexport default ReactRenderer;\n","import { Observable } from '../helpers/Observable';\nimport { MaestroPanelType } from '../models/IPanel';\nimport { UserSettingsManager } from '../services/UserSettingsManager';\nimport SDK from '../index';\n\nexport type PanelInfo = {\n type: MaestroPanelType;\n title: string;\n};\n\nexport class PanelManagerViewModel {\n private _panels = new Observable<PanelInfo[]>([]);\n private _currentPanel = new Observable<MaestroPanelType | null>(null);\n private settingsManager: UserSettingsManager;\n private settingsUnsubscribe: (() => void) | null = null;\n private getAvailablePanelsFromConfig(): PanelInfo[] {\n const config = SDK.getPageConfig();\n if (config && Array.isArray(config.panels) && config.panels.length > 0) {\n // Map config.panel types to MaestroPanelType, filter out unknowns\n return config.panels\n .filter((p) => p.renderer?.supported_platforms?.bbd !== false)\n .map((panel) => {\n const panelType = panel.panel_type as MaestroPanelType;\n if (\n !panelType ||\n !Object.values(MaestroPanelType).includes(panelType)\n ) {\n return null;\n }\n\n return {\n type: panelType,\n title: panel.panel_name || '',\n };\n })\n .filter((panelType): panelType is PanelInfo => panelType !== null);\n }\n\n return [];\n }\n\n constructor() {\n this.settingsManager = UserSettingsManager.getInstance();\n this.initializePanels();\n this.subscribeToSettingsChanges();\n }\n\n /**\n * Initialize panels based on current settings\n */\n private initializePanels(): void {\n const filteredPanels = this.filterPanels();\n const isProdEnv = SDK.getIsProdEnv();\n\n if (!filteredPanels.length && !isProdEnv) {\n this._panels.value = [\n {\n type: 'helloWorld',\n title: 'HELLO WORLD',\n },\n ];\n } else {\n this._panels.value = filteredPanels;\n }\n\n this.updateActivePanel();\n }\n\n /**\n * Subscribe to settings changes to update panels dynamically\n */\n private subscribeToSettingsChanges(): void {\n this.settingsUnsubscribe = this.settingsManager.settings.subscribe(() => {\n this.updatePanelsBasedOnSettings();\n });\n }\n\n /**\n * Filter panels based on user settings and page config\n */\n private filterPanels(): PanelInfo[] {\n const availablePanels = this.getAvailablePanelsFromConfig();\n return availablePanels.filter((panel) => {\n return !this.settingsManager.isPanelHidden(panel.type);\n });\n }\n\n private updateActivePanel() {\n if (!this.currentPanel && this.panels[0]) {\n this.currentPanel = this.panels[0].type;\n }\n\n // If current panel is now hidden, switch to first visible panel\n if (\n this.panels.length > 0 &&\n this._currentPanel.value &&\n !this.panels.find((p) => p.type === this._currentPanel.value)\n ) {\n this._currentPanel.value = this.panels[0].type;\n }\n }\n\n /**\n * Update panels when settings change\n */\n private updatePanelsBasedOnSettings(): void {\n const filteredPanels = this.filterPanels();\n this._panels.value = filteredPanels;\n\n this.updateActivePanel();\n }\n\n /**\n * Cleanup subscriptions\n */\n public cleanup(): void {\n if (this.settingsUnsubscribe) {\n this.settingsUnsubscribe();\n this.settingsUnsubscribe = null;\n }\n }\n\n // Getter for panels\n get panels(): PanelInfo[] {\n return this._panels.value;\n }\n\n // Getter for panels observable\n get panelsObservable(): Observable<PanelInfo[]> {\n return this._panels;\n }\n\n // Getter for currentPanel\n get currentPanel(): MaestroPanelType | null {\n return this._currentPanel.value;\n }\n\n // Setter for currentPanel\n set currentPanel(value: MaestroPanelType | null) {\n this._currentPanel.value = value;\n }\n\n // Getter for currentPanel as Observable\n get currentPanelObservable(): Observable<MaestroPanelType | null> {\n return this._currentPanel;\n }\n\n setActivePanel(panelType: MaestroPanelType) {\n if (\n panelType === this.currentPanel ||\n this.panels.find((p) => p.type === panelType) === undefined\n ) {\n return;\n }\n this.currentPanel = panelType;\n this.updateActivePanel();\n }\n\n // Get the index of a specific panel type\n getIndex(forPanelType: MaestroPanelType): number | null {\n const index = this.panels.findIndex((p) => p.type === forPanelType);\n return index !== -1 ? index : null;\n }\n\n // Get the panel type at a specific index\n getPanelType(atIndex: number): MaestroPanelType | null {\n return this.panels[atIndex]?.type || null;\n }\n\n // Computed property for panel to the left\n get panelTypeToLeft(): MaestroPanelType | null {\n if (!this.currentPanel) return null;\n const currentIndex = this.getIndex(this.currentPanel);\n if (currentIndex === null || currentIndex === 0) return null;\n return this.getPanelType(currentIndex - 1);\n }\n\n // Computed property for panel to the right\n get panelTypeToRight(): MaestroPanelType | null {\n if (!this.currentPanel) return null;\n const currentIndex = this.getIndex(this.currentPanel);\n if (currentIndex === null || currentIndex === this.panels.length - 1)\n return null;\n return this.getPanelType(currentIndex + 1);\n }\n\n /**\n * @returns Array of PanelInfo for panels defined in config but not listed in MaestroPanelType\n */\n getUnlistedPanels(): PanelInfo[] {\n const config = SDK.getPageConfig();\n if (!config || !Array.isArray(config.panels)) {\n return [];\n }\n\n return config.panels\n .filter((panel) => {\n return (\n !!panel.panel_type &&\n !Object.values(MaestroPanelType).includes(panel.panel_type)\n );\n })\n .map(\n (panel): PanelInfo => {\n return {\n type: panel.panel_type!,\n title: panel.panel_name || '',\n };\n }\n );\n }\n}\n","import { Observable } from '../../helpers/Observable';\nimport { GlobalConfig, PageConfig } from './types';\nimport AxiosNetworkClient from '@/external/AxiosNetworkClient';\nimport { captureException } from '@/sentry';\nimport NetworkManager from '../NetworkManager/NetworkManager';\n\nconst SITE_ID_STATIC_BASE_URL_MAP: Record<string, string> = {\n '664b9c57d59a7a431542d814':\n 'https://static-prod.us-central1-espn-prod.gcp.maestro.io',\n '6930c214fcb9633b5484de81':\n 'https://static-prod.us-central1-espn-prod.gcp.maestro.io',\n};\n\ntype FetchPageConfigParams = {\n siteId: string;\n metadataValue?: string;\n pageId?: string;\n};\nexport default class StaticService {\n public configObservable = new Observable<PageConfig | null>(null);\n private client: NetworkManager;\n\n constructor(siteId: string) {\n const baseURL =\n SITE_ID_STATIC_BASE_URL_MAP[siteId] || 'https://static.gcp.maestro.io';\n this.client = new NetworkManager({\n externalNetworkClient: new AxiosNetworkClient({\n backoff: 2,\n baseURL,\n delay: 1000,\n retries: 5,\n }),\n });\n }\n\n private async fetchPageConfigByMetadata(\n siteId: string,\n metadataValue: string\n ): Promise<PageConfig | null> {\n try {\n return await this.client.externalApiRequest<PageConfig>({\n endpoint: `/pages/sites/${siteId}/metadata/${metadataValue}.json`,\n });\n } catch (err) {\n captureException(err, { siteId, metadataValue });\n console.error(\n `Failed to fetch page configuration for site ${siteId} and metadata value: ${metadataValue}:`,\n err instanceof Error ? err.message : String(err)\n );\n\n return Promise.resolve(null);\n }\n }\n\n fetchPageConfig({ siteId, metadataValue, pageId }: FetchPageConfigParams) {\n if (pageId) {\n return this.fetchPageConfigById(siteId, pageId);\n } else if (metadataValue) {\n return this.fetchPageConfigByMetadata(siteId, metadataValue);\n }\n\n return Promise.resolve(null);\n }\n\n private async fetchPageConfigById(\n siteId: string,\n pageId: string\n ): Promise<PageConfig | null> {\n try {\n return await this.client.externalApiRequest<PageConfig>({\n endpoint: `/pages/sites/${siteId}/pages/${pageId}.json`,\n });\n } catch (err) {\n captureException(err, { siteId, pageId });\n console.error(\n `Failed to fetch page configuration for site ${siteId} and page ID: ${pageId}:`,\n err instanceof Error ? err.message : String(err)\n );\n\n return Promise.resolve(null);\n }\n }\n\n static isPanelAvailable(pageConfig: PageConfig | null, panelType: string) {\n return pageConfig?.panels?.some(\n (panel) =>\n panel.panel_type === panelType &&\n panel.renderer?.supported_platforms?.bbd !== false\n );\n }\n\n pollGlobalConfig(onData: (data: GlobalConfig) => void): { stop: () => void } {\n // random interval from 4 - 6 minutes\n const interval = 240000 + Math.floor(Math.random() * 120000);\n return this.client.pollExternalApiRequest<GlobalConfig>({\n endpoint: `/config/global.json`,\n interval,\n onData,\n onError: (err) => {\n captureException(err, {\n context: 'StaticService.pollGlobalConfig',\n });\n console.error(\n `Failed to poll global configuration`,\n err instanceof Error ? err.message : String(err)\n );\n },\n });\n }\n}\n","import StaticService from './StaticService';\n\nexport default StaticService;\n","import IMaestroEventDelegate from '../interfaces/IMaestroEventDelegate';\nimport IMaestroEvent from '../interfaces/IMaestroEvent';\nimport { Observable } from '../helpers/Observable';\nimport { ViewModel } from './ViewModel';\nimport SpatialNavigation from '@/external/spatial-navigation/spatialNavigation';\nimport IMaestroKeyPlaysResponse from '../modules/espn/key-plays/interfaces/IKeyPlaysResponse';\nimport { MaestroPanelType } from '@/models/IPanel';\nimport { IUserSettings } from '../interfaces/IUserSettings';\nimport { UserSettingsManager } from '../services/UserSettingsManager';\nimport { PanelManagerViewModel } from './PanelManagerViewModel';\nimport SDK from '..';\nimport StaticService from '@/services/StaticService';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport { IKeyPlaysViewModel } from '../modules/espn/key-plays/interfaces/IKeyPlaysViewModel';\nimport { IBetsViewModel } from '../modules/espn/bets/interfaces/IBetsViewModel';\nimport { IStatsViewModel } from '../modules/espn/stats/interfaces/IStatsViewModel';\nimport { IFantasyViewModel } from '@/modules/espn/fantasy/types';\nimport { IShopViewModel } from '@/modules/espn/shop/types';\nimport { BuilderPanelViewModel } from '@/modules/maestro/builder/view-model/BuilderPanelViewModel';\n\nexport class MaestroEventViewModel extends ViewModel implements IMaestroEvent {\n private _eventId = new Observable('');\n private _pageId = new Observable('');\n private _title = new Observable('');\n private _isLive = new Observable<boolean>(false);\n private _isShowingPanel = new Observable(false);\n private playerTimeCode: number | null = null;\n private analyticsService: AnalyticsService;\n delegate: IMaestroEventDelegate;\n keyPlaysViewModel: IKeyPlaysViewModel | null = null;\n fantasyViewModel: IFantasyViewModel | null = null;\n betsViewModel: IBetsViewModel | null = null;\n statsViewModel: IStatsViewModel | null = null;\n shopViewModel: IShopViewModel | null = null;\n builderPanelViewModel: BuilderPanelViewModel | null = null;\n panelManagerViewModel: PanelManagerViewModel;\n navigation: SpatialNavigation;\n\n constructor(\n eventId: string = '',\n pageId: string = '',\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService\n ) {\n super();\n this._pageId.value = pageId;\n this._eventId.value = eventId;\n this.delegate = delegate;\n this.analyticsService = analyticsService;\n\n this.panelManagerViewModel = new PanelManagerViewModel();\n this.navigation = new SpatialNavigation();\n }\n\n /**\n * Initializes view models for enabled panels using dynamic imports (code splitting).\n *\n * This method lazily loads view model modules based on the page configuration,\n * reducing initial bundle size by only loading modules for panels that are enabled.\n *\n * @remarks\n * - Must be called after SDK configuration and before interacting with any view models\n * - Typically invoked during `userDidStartWatchingEvent()` flow\n * - Each view model is loaded in parallel for optimal performance\n *\n * @remarks Error Handling\n * - Individual view model loading failures are caught and logged as warnings\n * - Failed view models remain `null`, allowing other panels to function normally\n * - The method resolves successfully even if some view models fail to load\n * - Callers should check for `null` before using any view model property\n *\n * @example\n * ```typescript\n * await maestroEventViewModel.initViewModels();\n * // Check if view model loaded before use\n * if (maestroEventViewModel.betsViewModel) {\n * maestroEventViewModel.betsViewModel.startPolling();\n * }\n * ```\n *\n * @returns Promise that resolves when all view model loading attempts complete\n */\n async initViewModels(): Promise<void> {\n const pageConfig = SDK.getPageConfig();\n const loadPromises: Promise<void>[] = [];\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnKeyPlays')) {\n loadPromises.push(\n import('../modules/espn/key-plays/view-model/KeyPlaysViewModel')\n .then(({ default: KeyPlaysViewModel }) => {\n this.keyPlaysViewModel = new KeyPlaysViewModel(\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load KeyPlaysViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnBet')) {\n loadPromises.push(\n import('../modules/espn/bets/view-model/BetsViewModel')\n .then(({ default: BetsViewModel }) => {\n this.betsViewModel = new BetsViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load BetsViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnStats')) {\n loadPromises.push(\n import('../modules/espn/stats/view-model/StatsViewModel')\n .then(({ default: StatsViewModel }) => {\n this.statsViewModel = new StatsViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load StatsViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnFantasy')) {\n loadPromises.push(\n import('@/modules/espn/fantasy/view-model/FantasyViewModel')\n .then(({ default: FantasyViewModel }) => {\n this.fantasyViewModel = new FantasyViewModel(\n this._eventId.value,\n this.delegate,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load FantasyViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'espnShop')) {\n loadPromises.push(\n import('@/modules/espn/shop/view-model/ShopViewModel')\n .then(({ default: ShopViewModel }) => {\n this.shopViewModel = new ShopViewModel(\n this._eventId.value,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load ShopViewModel:', err);\n })\n );\n }\n\n if (StaticService.isPanelAvailable(pageConfig, 'builderBlockPanel')) {\n const builderPanel = pageConfig?.panels?.find(\n (p) => p.panel_type === 'builderBlockPanel'\n );\n if (builderPanel) {\n loadPromises.push(\n import('@/modules/maestro/builder/view-model/BuilderPanelViewModel')\n .then(({ BuilderPanelViewModel }) => {\n this.builderPanelViewModel = new BuilderPanelViewModel(\n builderPanel as any,\n this.analyticsService\n );\n })\n .catch((err) => {\n console.warn('Failed to load BuilderPanelViewModel:', err);\n })\n );\n }\n }\n\n await Promise.all(loadPromises);\n }\n\n setActivePanel(panelType: MaestroPanelType): void {\n const index = this.panelManagerViewModel.getIndex(panelType);\n if (index === null) {\n console.warn(`Panel type \"${panelType}\" not found.`);\n return;\n }\n\n if (!this.navigation.paused) {\n console.warn(\n 'Cannot set active panel while navigation is not paused. Doing so will cause focus issues.'\n );\n return;\n }\n\n this.panelManagerViewModel.setActivePanel(panelType);\n this.navigation.focusKey = `PANEL_NAV_BUTTON_${index}`;\n }\n\n updatePlayerTimeCode(timestamp: number): void {\n const timestampDate = new Date(timestamp);\n if (isNaN(timestampDate.getTime())) {\n console.warn('Invalid timestamp provided:', timestamp);\n console.warn(\n 'Make sure the timestamp is a valid number. \\nhttps://developers.maestro.io/sdk/web/maestro-event-interface/state/updatePlayerTimeCode'\n );\n return;\n }\n\n this.playerTimeCode = timestamp;\n this.keyPlaysViewModel?.onUpdatePlayerTimeCode(this.playerTimeCode);\n this.statsViewModel?.onUpdatePlayerTimeCode(this.playerTimeCode);\n }\n\n getPlayerTimeCode(): number | null {\n return this.playerTimeCode;\n }\n\n setDataToPanel(panelData: Record<string, any>): void {\n const panelTypes = Object.keys(panelData);\n\n // Map panel types to view model instances\n const viewModels: Record<MaestroPanelType, any> = {\n espnStats: this.statsViewModel,\n espnBet: this.betsViewModel,\n espnKeyPlays: this.keyPlaysViewModel,\n espnFantasy: this.fantasyViewModel,\n espnShop: this.shopViewModel,\n builderBlockPanel: this.builderPanelViewModel,\n foxKeyPlays: null,\n foxMultiview: null,\n foxStats: null,\n helloWorld: null,\n };\n\n for (const panelType of panelTypes) {\n const data = panelData[panelType];\n if (!data) continue;\n\n const viewModel = viewModels[panelType as MaestroPanelType];\n\n if (!viewModel) {\n // Panel is not initialized, so we ignore the data\n console.log(\n `[setDataToPanel] Panel '${panelType}' not initialized/supported. Data ignored.`\n );\n } else {\n // Panel exists, call its setDataToPanel method\n if (viewModel.setDataToPanel) {\n viewModel.setDataToPanel(data);\n }\n }\n }\n }\n\n async deinit() {\n this.betsViewModel?.cleanup();\n this.statsViewModel?.cleanup();\n this.fantasyViewModel?.cleanup();\n this.shopViewModel?.cleanup();\n this.builderPanelViewModel?.cleanup();\n this.navigation.destroy();\n try {\n await this.didHidePanel();\n } catch (error) {\n console.error('Error during didHidePanel in deinit:', error);\n }\n }\n\n updateKeyPlaysData(data: IMaestroKeyPlaysResponse | null): Promise<void> {\n if (!this.keyPlaysViewModel) {\n return Promise.resolve();\n }\n return this.keyPlaysViewModel.setKeyPlays(data, this.playerTimeCode);\n }\n\n updateUserSettings(settings: IUserSettings): Promise<void> {\n return new Promise((resolve) => {\n UserSettingsManager.getInstance().updateSettings(settings);\n resolve();\n });\n }\n\n startFocusManagement(): Promise<void> {\n this.navigation.setCurrentFocusedKey(\n this.navigation.focusKey || 'PANEL_NAV_BUTTON_0'\n );\n setTimeout(() => {\n this.navigation.resume();\n }, 0);\n\n return Promise.resolve();\n }\n\n didStartPlayingClip(index: number) {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.lastPlayedClipIndex.value = index;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = 0;\n this.keyPlaysViewModel.currentlyPlayingClipIndex.value = index;\n this.keyPlaysViewModel.clearLoadFailureStatus(index);\n }\n\n didStopPlayingClip(index: number): void {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.lastPlayedClipIndex.value = index;\n this.keyPlaysViewModel.currentlyPlayingClipIndex.value = null;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = null;\n }\n\n didFailToPlayClip(index: number): void {\n this.keyPlaysViewModel?.handleKeyPlayLoadFailure(index);\n }\n\n didUpdatePlaybackProgressOfClip(index: number, to: number): void {\n if (!this.keyPlaysViewModel) return;\n this.keyPlaysViewModel.currentClipPlaybackProgress.value = to;\n this.keyPlaysViewModel.clearLoadFailureStatus(index);\n }\n\n async didShowPanel(): Promise<void> {\n this.isShowingPanel = true;\n }\n\n async didHidePanel(): Promise<void> {\n this.isShowingPanel = false;\n this.navigation.focusKey = null;\n }\n\n currentEventDoesNotSupportKeyPlays(): void {\n if (this.keyPlaysViewModel) {\n this.keyPlaysViewModel.errorState.value = 'unsupportedEvent';\n }\n }\n\n getCurrentEventID() {\n return this.eventId.value;\n }\n\n getCurrentlyPlayingClipIndex() {\n return this.keyPlaysViewModel?.currentlyPlayingClipIndex.value ?? null;\n }\n\n getLastPlayedClipIndex() {\n return this.keyPlaysViewModel?.lastPlayedClipIndex.value ?? null;\n }\n\n getCurrentClipPlaybackProgress() {\n return this.keyPlaysViewModel?.currentClipPlaybackProgress.value ?? null;\n }\n\n getKeyPlaysCount() {\n return this.keyPlaysViewModel?.allItems.length ?? 0;\n }\n\n get eventId(): Observable<string> {\n return this._eventId;\n }\n\n get title(): Observable<string> {\n return this._title;\n }\n\n get isLive(): Observable<boolean> {\n return this._isLive;\n }\n\n get isShowingPanel(): boolean {\n return this._isShowingPanel.value;\n }\n\n set isShowingPanel(value: boolean) {\n this._isShowingPanel.value = value;\n }\n\n /**\n * This method is called when the user navigates to the MaestroEventViewModel.\n * It will pause navigation and start focus management.\n */\n deliverFocus() {\n this.navigation.pause();\n this.delegate.startFocusManagement();\n }\n}\n","import AxiosNetworkClient from '@/external/AxiosNetworkClient';\nimport { INetworkClient } from '@/external/ports/networkClient';\nimport { captureException } from '@/sentry';\nimport SDK from '@/index';\n\nconst INSIGHTS_BASE_URL = 'https://insights.maestro.io';\n\nexport default class InsightsService {\n private client: INetworkClient;\n\n constructor() {\n this.client = new AxiosNetworkClient({\n baseURL: INSIGHTS_BASE_URL,\n backoff: 2,\n delay: 1000,\n retries: 1,\n });\n }\n\n private isEnabled() {\n const globalConfig = SDK.getGlobalConfig();\n const analyticsEnabled = globalConfig?.bbd?.analytics?.enabled ?? true;\n\n return analyticsEnabled;\n }\n\n async action(payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n console.warn('InsightsService: Analytics is disabled in global config');\n return;\n }\n\n try {\n // do like qs.stringify with my payload and send as formData\n const parsedData = new URLSearchParams();\n for (const [key, value] of Object.entries(payload)) {\n if (value !== undefined && value !== null) {\n parsedData.append(key, value.toString());\n }\n }\n await this.client.post('/action', parsedData, undefined, {\n 'Content-Type': 'application/x-www-form-urlencoded',\n });\n } catch (err) {\n captureException(err, { payload });\n console.error('Failed to send insights action:', err);\n }\n }\n\n async getServerTime() {\n if (!this.isEnabled()) {\n return {\n time: Date.now(),\n diff: 0,\n };\n }\n const responseStart = Date.now();\n\n try {\n return await this.client.get<{ time: number; diff: number }>('/time', {\n _: `${Date.now()}-${this.randomId()}`, // to prevent caching\n client_time: responseStart,\n });\n } catch (err) {\n captureException(err);\n console.error('Failed to get server time:', err);\n return {\n time: Date.now(),\n diff: 0,\n };\n }\n }\n\n private randomId() {\n return (\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n );\n }\n}\n","import { ICacheManager } from '@/external/ports/cacheManager';\nimport InsightsService from './InsightsService';\nimport LocalStorageCacheManager from '@/external/LocalStorageCacheManager';\nimport { PageConfig } from '../StaticService/types';\nimport SDK from '@/index';\n\ntype EventData = {\n metadata?: Record<string, unknown>;\n ontology: {\n kingdom: string;\n phylum: string;\n class?: string;\n order?: string;\n family?: string;\n genus?: string;\n species?: string;\n };\n};\n\nexport default class InsightsPayloadBuilder {\n currentTime = 0;\n serverOffsetTime = 0;\n insightsService: InsightsService;\n cacheManager: ICacheManager;\n pageConfig: PageConfig | null = null;\n\n constructor() {\n this.insightsService = new InsightsService();\n this.cacheManager = new LocalStorageCacheManager();\n }\n\n async getPayload(event: EventData) {\n this.currentTime = Date.now();\n this.serverOffsetTime = await this.getDeviceOffset();\n this.pageConfig = SDK.getPageConfig();\n\n return {\n ...this.getPageInsights(),\n ...this.getDeviceInsights(),\n ...this.getInsightsInsights(),\n ...this.getMetadataInsights(),\n ...this.getReferrerInsights(),\n ...this.getSessionInsights(),\n ...this.getSiteInsights(),\n ...this.getUserInsights(),\n ...this.getEventInsights(event),\n };\n }\n\n private getEventInsights(eventData: EventData) {\n const ontology = eventData.ontology;\n\n return {\n /**\n * @description Event Domain. NAMESPACE env var.\n * @example maestro\n */\n e_d: 'maestro',\n /**\n * @description Event stringified metadata. defaults to null.\n * @example \"{\\\"key\\\":\\\"value\\\"}\"\n */\n e_m:\n Object.values(eventData.metadata || {}).length > 0\n ? JSON.stringify(eventData.metadata)\n : null,\n /**\n * @description Event time accounting for offset.\n */\n e_t: this.currentTime + this.serverOffsetTime,\n /**\n * @description Event URL. defaults to undefined.\n */\n e_u: window.location.href,\n /**\n * @description Event ontology kingdom. This is the highest level of the ontology and can be used to identify the event type.\n * @example 'panel', 'engage', 'espn_key_plays'\n */\n e0: ontology.kingdom,\n /**\n * @description Event phylum.\n * @example 'view', 'click', 'play clip'\n */\n e1: ontology.phylum,\n /**\n * @description Event class.\n * @example 'panel_type'\n */\n e2: ontology.class,\n /**\n * @description Event order.\n * @example 'panel_id'\n */\n e3: ontology.order,\n /**\n * @description Event family.\n * @example 'panel_name'\n */\n e4: ontology.family,\n /**\n * @description Event genus. This is a more specific level of the ontology and can be used to identify the event type.\n */\n e5: ontology.genus,\n /**\n * @description Event species. This is the most specific level of the ontology and can be used to identify the event type.\n */\n e6: ontology.species,\n /**\n * @description Current timestamp.\n */\n t: this.currentTime,\n };\n }\n\n private getPageInsights() {\n const config = SDK.getPageConfig();\n return {\n /**\n * @description MongoDB page collection name (e.g. 'pages')\n * @example object.collection\n */\n p_c: 'pages',\n /**\n * @description MongoDB page document ID (e.g. 'pageId')\n * @example object._id\n */\n p_id: config?.page._id,\n /**\n * @description MongoDB page name (e.g. 'Home', 'Product Page')\n * @example object.data.name || object.seo.title\n */\n p_n: config?.page.name,\n /**\n * @description MongoDB page slug (e.g. 'home', 'product-page')\n * @example object.slug\n */\n p_s: config?.page.slug,\n /**\n * @description MongoDB page type (e.g. 'landing', 'channel')\n * @example object.type\n */\n p_t: config?.page.type,\n };\n }\n\n getDevicePermanentID() {\n const devicePermanentId = localStorage.getItem('mio:device:permanentId');\n if (devicePermanentId) {\n return devicePermanentId;\n }\n const newDevicePermanentId = this.randomId();\n localStorage.setItem('mio:device:permanentId', newDevicePermanentId);\n return newDevicePermanentId;\n }\n\n private getDeviceCreated() {\n const deviceCreated = this.cacheManager.getCache('mio:device:created');\n if (deviceCreated) {\n return Number(deviceCreated);\n }\n const now = new Date().getTime();\n this.cacheManager.setCache('mio:device:created', now.toString());\n return now;\n }\n\n private getTabID() {\n const tabId = sessionStorage.getItem('mio:device:tabId');\n if (tabId) {\n return tabId;\n }\n\n const newTabId = this.randomId();\n sessionStorage.setItem('mio:device:tabId', newTabId);\n return newTabId;\n }\n\n private getDeviceInsights() {\n return {\n /**\n * @description Device created timestamp. You might wanna keep this fixed for the device you're in using a local storage or something related\n * @example new Date().getTime()\n */\n d_ct: this.getDeviceCreated(),\n /**\n * @description New device or not. If you want to keep track of new devices, you can use a local storage or something related\n * @example localStorage.getItem('isNewDevice') === 'true'\n */\n d_nd: false,\n /**\n * @description Navigator Platform (more Web API specific).\n * @example 'MacIntel', 'Win32', 'Linux x86_64'\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n */\n d_np: window.navigator.platform,\n /**\n * @description A unique identifier for the device, which can be used to track the device across sessions. You might wanna save this into a local storage or something related.\n * @example localStorage.getItem('devicePermanentId') || generateUniqueId()\n */\n d_pid: this.getDevicePermanentID(),\n /**\n * @description Device screen height in pixels.\n * @example window.screen.height\n */\n d_sh: window.screen.height,\n /**\n * @description Device screen width in pixels.\n * @example window.screen.width\n */\n d_sw: window.screen.width,\n /**\n * @description Device tab ID, which can be used to track the device across tabs.\n */\n d_tid: this.getTabID(),\n /**\n * @description Device time in milliseconds since epoch.\n */\n d_tim: this.currentTime,\n /**\n * @description Device time offset in milliseconds. You might wanna keep this fixed for the device you're in using a local storage or something related.\n */\n d_tof: this.serverOffsetTime,\n /**\n * @description Device user agent string.\n * @example navigator.userAgent ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent\n */\n d_ua: window.navigator.userAgent,\n };\n }\n\n private randomId() {\n return (\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n );\n }\n\n private async getDeviceOffset() {\n const responseStart = Date.now();\n const {\n diff: serverOffset,\n time: serverTime,\n } = await this.insightsService.getServerTime();\n\n const responseEnd = Date.now();\n\n const queryTime = responseEnd - responseStart;\n const clientOffset = responseEnd - serverTime;\n\n // from NTP algo: https://en.wikipedia.org/wiki/Network_Time_Protocol\n // JS example: https://stackoverflow.com/questions/1638337\n // /the-best-way-to-synchronize-client-side-javascript-clock-with-server-date\n // will account for latent response times back to client\n return (serverOffset - queryTime - clientOffset) / 2;\n }\n\n private getInsightsInsights() {\n return {\n /**\n * @description Unique identifier for the insights ID. Stored in site's document.\n * @example site.settings.services.insights_id\n */\n i_id: this.pageConfig?.insights._id,\n };\n }\n private getMetadataInsights() {\n return {\n /**\n * @description Metadata version, used to track changes in the metadata structure.\n * @example '1.00.0'\n */\n m_iv: '1.00.0',\n };\n }\n private getReferrerInsights() {\n return {\n /**\n * @description Referrer domain, which can be used to track the domain from which the user came. Defaults to \"$direct\"\n * @example 'example.com'.\n */\n r_d: '$direct',\n /**\n * @description Referrer source, which can be used to track the source from which the user came (queryParam.r). Defaults to null\n * @example const urlParams = new URLSearchParams(window.location.search);\n * urlParams.get('r') || null\n */\n r_s: null,\n /**\n * @description Referrer URL, which can be used to track the full URL from which the user came. Defaults to \"$direct\"\n * @example document.referrer\n */\n r_u: '$direct',\n };\n }\n\n private getSessionID() {\n const sessionId = sessionStorage.getItem('mio:session:id');\n if (sessionId) {\n return sessionId;\n }\n\n const newSessionId = this.randomId();\n sessionStorage.setItem('mio:session:id', newSessionId);\n return newSessionId;\n }\n\n private getSessionInsights() {\n return {\n /**\n * @description Session ID, which can be used to track the session across requests. You might wanna keep this fixed for the session you're in using a local storage or something related.\n */\n se_id: this.getSessionID(),\n /**\n * @description Session created timestamp. Usually set when the first event is fired\n * @example new Date().getTime()\n */\n se_s: this.currentTime,\n };\n }\n private getSiteInsights() {\n return {\n /**\n * @description Site domain.\n * @example site.settings.domain.url. 'maestro.tv/site_slug'\n */\n si_d: this.pageConfig?.site.domainUrl,\n /**\n * @description Site ID.\n * @example site._id\n */\n si_id: this.pageConfig?.site._id,\n /**\n * @description Site package ID.\n * @example `${site.package.id}-sapphire`\n */\n si_pid: `${this.pageConfig?.site.package.id}-sapphire`,\n /**\n * @description Site package version.\n * @example `${site.package.version}-sapphire`\n */\n si_pv: `${this.pageConfig?.site.package.version}-sapphire`,\n /**\n * @description Site slug.\n * @example site.slug\n */\n si_s: this.pageConfig?.site.slug,\n };\n }\n private getUserInsights() {\n return {\n /**\n * @description User avatar URL. Stored in user profile. defaults to null\n * @example GET 'https://api.maestro.io/userprofile/v1'\n */\n u_a: null,\n /**\n * @description User account created date in milliseconds since epoch. defaults to null\n * @example account.created\n */\n u_c: null,\n /**\n * @description Logged User email. defaults to null\n * @example account.email\n */\n u_e: null,\n /**\n * @description Logged User ID. defaults to null\n * @example account._id\n */\n u_id: null,\n /**\n * @description Logged User is logged in or not. defaults to false\n */\n u_li: false,\n /**\n * @description Logged User name. defaults to null\n * @example account.name\n */\n u_n: null,\n /**\n * @description Logged User new user or not. Usually we compare server time and account.created. If it was created less than 1 day ago it's a new user. defaults to false\n * @example Math.abs((serverTime || Date.now()) - account.created) < msIn.day\n */\n u_nu: false,\n /**\n * @description Logged User service. defaults to null\n * @example account.service\n */\n u_s: null,\n /**\n * @description Logged User UID. defaults to null\n * @example account.uid\n */\n u_u: null,\n /**\n * @description Logged User name. defaults to null\n * @example account.name\n */\n u_un: null,\n };\n }\n}\n","import InsightsPayloadBuilder from '../InsightsService/InsightsPayloadBuilder';\nimport SDK from '../..';\nimport InsightsService from '../InsightsService/InsightsService';\nimport { PageConfig } from '../StaticService/types';\nimport { ActionTrackEvent, BaseMetadata, ImpressionTrackEvent } from './types';\nimport { version } from '../../../package.json';\nimport { captureException } from '@/sentry';\nimport { MaestroPanelType } from '@/models/IPanel';\n\ntype KeyPlaysClickedAction = {\n type: 'espnKeyPlays';\n name: 'key_play_clicked';\n metadata: {\n action: string;\n clip: string;\n key_play: string;\n };\n};\n\ntype BetsItemClickedAction = {\n type: 'espnBet';\n name: 'bets_item_clicked';\n metadata: {\n card: string;\n bet_type: string | null;\n in_game_bets: number;\n total_bets: number;\n };\n};\n\ntype StatsItemClickedAction = {\n type: 'espnStats';\n name: 'stats_item_clicked';\n metadata: {\n card: string[];\n game_state: string[];\n };\n};\n\ntype FantasyItemClickedAction = {\n type: 'espnFantasy';\n name: 'fantasy_item_clicked';\n metadata: {\n card: string;\n };\n};\n\ntype ShopItemClickedAction = {\n type: 'espnShop';\n name: 'shop_item_clicked';\n metadata: {\n card: string[];\n game_state: string[];\n product: string | null;\n entity_type: string[];\n entity_name: string[];\n price: string | null;\n sale: string[];\n };\n};\n\ntype PanelClickPayload =\n | KeyPlaysClickedAction\n | BetsItemClickedAction\n | StatsItemClickedAction\n | FantasyItemClickedAction\n | ShopItemClickedAction;\n\ntype PanelData = {\n panel_type: string;\n panel_id: string;\n panel_name: string;\n};\n\nconst SESSION_BEACON_SECONDS = 240;\n\nclass AnalyticsService {\n insightsService: InsightsService;\n insightsPayloadBuilder: InsightsPayloadBuilder;\n private SDKSessionId: string = '';\n private pageSessionId: string = '';\n private pinchBackSessionId: string = '';\n private pageSessionBeaconTimeoutId: NodeJS.Timeout | null = null;\n private isPageSessionBeaconRunning: boolean = false;\n private isPageSessionActive: boolean = false;\n\n constructor() {\n this.insightsService = new InsightsService();\n this.insightsPayloadBuilder = new InsightsPayloadBuilder();\n }\n\n private async trackAction(event: ActionTrackEvent) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n SDK.getMaestroEventViewModel().delegate.trackAction(event);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n class: event.e2_class,\n family: event.e4_family,\n order: event.e3_order,\n kingdom: event.e0_kingdom,\n phylum: event.e1_phylum,\n genus: event.e5_genus,\n species: event.e6_species,\n },\n metadata: event.metadata,\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n\n private async trackImpression(event: ImpressionTrackEvent) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n SDK.getMaestroEventViewModel().delegate.trackImpression(event);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: event.e0_kingdom,\n phylum: event.e1_phylum,\n class: event.e2_class,\n order: event.e3_order,\n family: event.e4_family,\n genus: event.e5_genus,\n species: event.e6_species,\n },\n metadata: event.metadata,\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n\n async panelView(panelType: MaestroPanelType, metadata?: Record<string, any>) {\n const config = SDK.getPageConfig();\n const panelData = this.getPanelDataFromPageConfig(panelType, config);\n await this.trackImpression({\n name: 'panel_selected',\n e0_kingdom: 'panel',\n e1_phylum: 'view',\n e2_class: panelData.panel_type,\n e3_order: panelData.panel_id,\n e4_family: panelData.panel_name,\n metadata: {\n ...(metadata || {}),\n ...this.getBaseMetadataFromPageConfig(config),\n },\n });\n }\n\n async panelClick({ type, metadata, name }: PanelClickPayload) {\n const config = SDK.getPageConfig();\n const panelData = this.getPanelDataFromPageConfig(type, config);\n await this.trackAction({\n name,\n e0_kingdom: 'panel',\n e1_phylum: 'engage',\n e2_class: panelData.panel_type,\n e3_order: panelData.panel_id,\n e4_family: panelData.panel_name,\n metadata: {\n ...this.getBaseMetadataFromPageConfig(config),\n ...metadata,\n },\n });\n }\n\n getBaseMetadataFromPageConfig(pageConfig: PageConfig | null): BaseMetadata {\n if (!pageConfig) {\n console.warn('Page Config not found. Could not extract metadata.');\n return {\n league: '',\n airing: '',\n event: '',\n sport: '',\n };\n }\n\n const metadata = pageConfig.page.metadata;\n const airing =\n metadata?.external_field_4 === 'airing'\n ? metadata.external_field_1 || ''\n : '';\n const event =\n metadata?.external_field_4 === 'event'\n ? metadata.external_field_1 || 'unknown'\n : 'unknown';\n const sport = metadata?.external_field_2 || '';\n const league = metadata?.external_field_3 || '';\n\n return {\n league,\n airing,\n event,\n sport,\n };\n }\n\n getPanelDataFromPageConfig(\n type: MaestroPanelType,\n pageConfig: PageConfig | null\n ): PanelData {\n if (!pageConfig) {\n console.warn('Page Config not found. Could not extract panel data.');\n return {\n panel_id: '',\n panel_name: '',\n panel_type: '',\n };\n }\n\n const panel = pageConfig.panels.find((p) => p.panel_type === type);\n if (!panel) {\n console.warn(`Panel of type ${type} not found in Page Config.`);\n return {\n panel_id: '',\n panel_name: '',\n panel_type: '',\n };\n }\n\n return {\n panel_id: panel._id,\n panel_name: panel.panel_name || '',\n panel_type: panel.panel_type || '',\n };\n }\n\n async SDKSessionStart() {\n try {\n this.SDKSessionId = Math.random().toString(36).substring(2, 15);\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'sdk',\n },\n metadata: {\n version,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to start SDK session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.SDKSessionStart',\n });\n }\n }\n\n async pageSessionStart() {\n try {\n this.pageSessionId = Math.random().toString(36).substring(2, 15);\n this.isPageSessionActive = true;\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'page',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n\n // Start the beacon cycle with recursive setTimeout\n this.scheduleNextBeacon();\n } catch (err) {\n console.error(`Failed to start page session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pageSessionStart',\n });\n }\n }\n\n async pageSessionEnd() {\n try {\n this.isPageSessionActive = false;\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'page',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n },\n });\n\n console.log('AnalyticsService: pageSessionEnd', eventInsightsData);\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end page session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pageSessionEnd',\n });\n } finally {\n // Clear any pending beacon timeouts\n if (this.pageSessionBeaconTimeoutId) {\n clearTimeout(this.pageSessionBeaconTimeoutId);\n this.pageSessionBeaconTimeoutId = null;\n }\n this.pageSessionId = '';\n }\n }\n\n async pinchBackSessionStart() {\n try {\n this.pinchBackSessionId = Math.random().toString(36).substring(2, 15);\n\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'start',\n class: 'pinchback',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to start pinchback session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pinchBackSessionStart',\n });\n }\n }\n\n async pinchBackSessionEnd() {\n try {\n const pageConfig = SDK.getPageConfig();\n const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);\n\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'pinchback',\n },\n metadata: {\n ...baseMetadata,\n version,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n console.log('AnalyticsService: pinchBackSessionEnd', eventInsightsData);\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end pinchback session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.pinchBackSessionEnd',\n });\n } finally {\n this.pinchBackSessionId = '';\n }\n }\n\n async SDKSessionEnd() {\n try {\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'end',\n class: 'sdk',\n },\n metadata: {\n version,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n } catch (err) {\n console.error(`Failed to end SDK session: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.SDKSessionEnd',\n });\n } finally {\n this.SDKSessionId = '';\n }\n }\n\n private scheduleNextBeacon() {\n // Only schedule if page session is still active\n if (!this.isPageSessionActive) {\n return;\n }\n\n const globalConfig = SDK.getGlobalConfig();\n const beaconInterval =\n globalConfig?.bbd?.analytics?.beacon_interval || SESSION_BEACON_SECONDS;\n this.pageSessionBeaconTimeoutId = setTimeout(async () => {\n await this.sendSessionBeacon();\n }, beaconInterval * 1000);\n }\n\n private async sendSessionBeacon() {\n // Prevent overlapping beacon calls\n if (this.isPageSessionBeaconRunning || !this.isPageSessionActive) {\n return;\n }\n\n this.isPageSessionBeaconRunning = true;\n\n try {\n await this.sessionBeacon();\n } catch (err) {\n console.error(`Failed to send session beacon: ${err}`);\n captureException(err, {\n context: 'AnalyticsService.sendSessionBeacon',\n SDKSessionId: this.SDKSessionId,\n pageSessionId: this.pageSessionId,\n });\n } finally {\n this.isPageSessionBeaconRunning = false;\n\n // Schedule next beacon only after current one completes\n if (this.isPageSessionActive) {\n this.scheduleNextBeacon();\n }\n }\n }\n\n private async sessionBeacon() {\n const eventInsightsData = await this.insightsPayloadBuilder.getPayload({\n ontology: {\n kingdom: 'session',\n phylum: 'beacon',\n class: 'frequent',\n },\n metadata: {\n paywall_gated: false,\n viewer_id: this.insightsPayloadBuilder.getDevicePermanentID(),\n is_billable: false,\n session: this.SDKSessionId,\n page_session: this.pageSessionId,\n pinchback_session: this.pinchBackSessionId,\n },\n });\n\n await this.insightsService.action(eventInsightsData);\n }\n}\n\nexport default AnalyticsService;\n","import ReactRenderer from './external/ReactRenderer';\nimport { IRenderer } from './external/ports/renderer';\nimport IMaestroEventDelegate, {\n PanelEvent,\n} from './interfaces/IMaestroEventDelegate';\nimport IMaestroManager, {\n SDKConfigParams,\n SDKEventConfigParams,\n SDKStopEventParams,\n} from './interfaces/IMaestroManager';\nimport IMaestroEvent from './interfaces/IMaestroEvent';\nimport { MaestroEventViewModel } from './view-models/MaestroEventViewModel';\nimport IMaestroKeyPlaysResponse from './modules/espn/key-plays/interfaces/IKeyPlaysResponse';\nimport { UserSettingsManager } from './services/UserSettingsManager';\nimport StaticService from './services/StaticService';\nimport { GlobalConfig, PageConfig } from './services/StaticService/types';\nimport { MaestroPanelType } from './models/IPanel';\nimport AnalyticsService from './services/AnalyticsService/AnalyticsService';\n\nexport {\n ActionTrackEvent,\n ImpressionTrackEvent,\n Metadata,\n PanelClickAction,\n PanelViewAction,\n} from './services/AnalyticsService/types';\n\nexport {\n PanelEvent,\n IMaestroEventDelegate,\n IMaestroEvent,\n IMaestroKeyPlaysResponse,\n MaestroPanelType,\n SDKEventConfigParams,\n SDKStopEventParams,\n};\nexport {\n IUserSettings,\n DEFAULT_USER_SETTINGS,\n} from './interfaces/IUserSettings';\n\n/**\n * Main SDK class that serves as the entry point for the Maestro TV SDK\n * Follows a singleton pattern similar to the Swift implementation\n */\nclass MaestroWebSDK implements IMaestroManager {\n private static instance: MaestroWebSDK;\n private renderer: IRenderer;\n private siteID: string = '';\n private maestroEventViewModel: MaestroEventViewModel | null = null;\n private pageConfig: PageConfig | null = null;\n private globalConfig: GlobalConfig | null = null;\n private globalConfigPoller: { stop: () => void } | null = null;\n private _analyticsService: AnalyticsService | null = null;\n private isProdEnv: boolean = true;\n private activePanelUnmountFn: (() => Promise<void>) | null = null;\n\n private constructor(renderer: IRenderer) {\n this.renderer = renderer;\n }\n\n private get analyticsService(): AnalyticsService {\n if (!this._analyticsService) {\n this._analyticsService = new AnalyticsService();\n }\n return this._analyticsService;\n }\n\n /**\n * @description Returns the MaestroWebSDK instance\n * @returns {MaestroWebSDK} - The MaestroWebSDK instance\n */\n public static getInstance() {\n if (!MaestroWebSDK.instance) {\n const renderer = new ReactRenderer();\n MaestroWebSDK.instance = new MaestroWebSDK(renderer);\n }\n return MaestroWebSDK.instance;\n }\n\n async userDidStartWatchingEvent({\n eventId,\n pageId,\n userSettings,\n delegate,\n useProdEnv = true,\n }: SDKEventConfigParams): Promise<IMaestroEvent> {\n this.isProdEnv = useProdEnv;\n\n // Fetch page config before initializing view models\n const siteId = this.getSiteID();\n if (!siteId || siteId.trim() === '') {\n throw new Error(\n 'siteID must be set before calling userDidStartWatchingEvent.'\n );\n }\n\n if (!eventId && !pageId) {\n throw new Error(\n 'Either eventId or pageId must be provided to load the page configuration.'\n );\n }\n\n const staticService = new StaticService(siteId);\n this.pageConfig = await staticService.fetchPageConfig({\n siteId,\n metadataValue: eventId,\n pageId,\n });\n if (!this.pageConfig) {\n throw new Error(\n `Could not determine page configuration for siteId: ${siteId}, pageId: ${pageId} and eventId: ${eventId}.`\n );\n }\n\n this.globalConfigPoller = staticService.pollGlobalConfig((data) => {\n this.globalConfig = data;\n });\n\n // Initialize user settings if provided\n if (userSettings) {\n UserSettingsManager.getInstance().updateSettings(userSettings);\n }\n\n await this.analyticsService.SDKSessionStart();\n this.maestroEventViewModel = new MaestroEventViewModel(\n eventId,\n pageId,\n delegate,\n this.analyticsService\n );\n await this.maestroEventViewModel.initViewModels();\n await this.analyticsService.pageSessionStart();\n\n return this.maestroEventViewModel;\n }\n\n async userDidStopWatchingEvent(_config: SDKStopEventParams): Promise<void> {\n if (this.activePanelUnmountFn) {\n await this.activePanelUnmountFn();\n }\n\n await this.analyticsService.pageSessionEnd();\n\n if (this.maestroEventViewModel) {\n await this.maestroEventViewModel.deinit();\n this.maestroEventViewModel = null;\n }\n\n await this.analyticsService.SDKSessionEnd();\n\n if (this.globalConfigPoller) {\n this.globalConfigPoller.stop();\n this.globalConfigPoller = null;\n }\n }\n\n configure(configParams: SDKConfigParams) {\n this.setSiteID(configParams.siteID);\n\n // Configure user settings if provided\n if (configParams.userSettings) {\n UserSettingsManager.getInstance().updateSettings(\n configParams.userSettings\n );\n }\n\n console.info('MaestroWebSDK configured', configParams);\n }\n\n /**\n * Sets the site ID for the SDK\n * @param siteID The site ID to set\n */\n public setSiteID(siteID: string) {\n if (!siteID || siteID.trim() === '') {\n throw new Error('Site ID must be provided');\n }\n this.siteID = siteID;\n }\n\n public getSiteID() {\n return this.siteID;\n }\n\n public getIsProdEnv() {\n return this.isProdEnv;\n }\n\n /**\n * Gets the event view model\n * @returns The current event view model\n */\n public getMaestroEventViewModel(): MaestroEventViewModel {\n if (!this.maestroEventViewModel) {\n throw new Error('No Maestro Event View Model set');\n }\n\n return this.maestroEventViewModel;\n }\n\n async renderPanel(id: string): Promise<() => Promise<void>> {\n await this.analyticsService.pinchBackSessionStart();\n\n const panelUnmountFn = await this.renderer.renderPanel(id);\n let isCleanedUp = false;\n\n const cleanupFn = async () => {\n if (isCleanedUp) {\n return;\n }\n isCleanedUp = true;\n\n // Unmount first so the UI is torn down immediately and any portals/handlers\n // are cleaned up even if the caller doesn't await this async function.\n panelUnmountFn();\n await this.analyticsService.pinchBackSessionEnd();\n\n if (this.activePanelUnmountFn === cleanupFn) {\n this.activePanelUnmountFn = null;\n }\n };\n\n this.activePanelUnmountFn = cleanupFn;\n return cleanupFn;\n }\n\n public getPageConfig(): PageConfig | null {\n return this.pageConfig;\n }\n\n public getGlobalConfig(): GlobalConfig | null {\n return this.globalConfig;\n }\n}\n\nconst SDK = MaestroWebSDK.getInstance();\nexport default SDK;\n","import { Observable } from '@/helpers/Observable';\nimport {\n IUserSettings,\n DEFAULT_USER_SETTINGS,\n PanelSettings,\n} from '@/interfaces/IUserSettings';\nimport { MaestroPanelType } from '@/models/IPanel';\n\ntype PanelTypeWithSettings =\n | typeof MaestroPanelType.ESPN_BETS\n | typeof MaestroPanelType.ESPN_STATS\n | typeof MaestroPanelType.ESPN_KEY_PLAYS\n | typeof MaestroPanelType.ESPN_FANTASY\n | typeof MaestroPanelType.ESPN_SHOP;\n\nconst PANEL_TYPE_SETTINGS_KEY_MAP: Record<\n PanelTypeWithSettings,\n keyof NonNullable<IUserSettings['panels']>\n> = {\n [MaestroPanelType.ESPN_BETS]: 'bets',\n [MaestroPanelType.ESPN_STATS]: 'stats',\n [MaestroPanelType.ESPN_KEY_PLAYS]: 'keyPlays',\n [MaestroPanelType.ESPN_FANTASY]: 'fantasy',\n [MaestroPanelType.ESPN_SHOP]: 'shop',\n};\n\n/**\n * UserSettingsManager - Singleton service for managing user settings\n * Uses Observable pattern for reactive updates across the SDK\n */\nexport class UserSettingsManager {\n private static instance: UserSettingsManager;\n private _settings: Observable<IUserSettings>;\n\n private constructor() {\n this._settings = new Observable<IUserSettings>(DEFAULT_USER_SETTINGS);\n }\n\n /**\n * Get the singleton instance of UserSettingsManager\n */\n static getInstance(): UserSettingsManager {\n if (!UserSettingsManager.instance) {\n UserSettingsManager.instance = new UserSettingsManager();\n }\n return UserSettingsManager.instance;\n }\n\n /**\n * Get the current settings as an Observable\n */\n get settings(): Observable<IUserSettings> {\n return this._settings;\n }\n\n /**\n * Get the current settings value (snapshot)\n */\n getCurrentSettings(): IUserSettings {\n return this._settings.value;\n }\n\n /**\n * Update user settings with validation and merge logic\n * @param userSettings - New settings to apply\n */\n updateSettings(userSettings: IUserSettings): void {\n if (!this.validateSettings(userSettings)) {\n console.warn('Invalid user settings provided, using default setting');\n return;\n }\n\n const mergedSettings = this.mergeSettings(\n this._settings.value,\n userSettings\n );\n this._settings.value = mergedSettings;\n }\n\n /**\n * Get settings for a specific panel type\n * @param panelType - Panel type to get settings for\n */\n getPanelSettings<T extends keyof NonNullable<IUserSettings['panels']>>(\n panelType: T\n ): PanelSettings<T> | undefined {\n return this._settings.value.panels?.[panelType];\n }\n\n /**\n * Check if a panel should be hidden\n * @param panelType - Panel type to check\n */\n isPanelHidden(panelType: MaestroPanelType): boolean {\n const panelKey = this.mapPanelTypeToSettingsKey(panelType);\n if (!panelKey) return false;\n\n const panelSettings = this.getPanelSettings(panelKey);\n return (panelSettings as any)?.hidePanel === true;\n }\n\n /**\n * Check if wagers should be hidden for betting panel\n */\n shouldHideWagers(): boolean {\n const betsSettings = this.getPanelSettings('bets');\n return betsSettings?.hideWagers === true;\n }\n\n /**\n * Reset settings to defaults\n */\n resetToDefaults(): void {\n this._settings.value = DEFAULT_USER_SETTINGS;\n }\n\n /**\n * Validate settings structure and values\n * @param settings - Settings to validate\n */\n private validateSettings(settings: IUserSettings): boolean {\n if (!settings || typeof settings !== 'object') {\n return false;\n }\n\n // Validate panels object if present\n if (settings.panels && typeof settings.panels !== 'object') {\n return false;\n }\n\n // Validate individual panel settings\n if (settings.panels) {\n for (const [panelKey, panelSettings] of Object.entries(settings.panels)) {\n if (panelSettings && typeof panelSettings !== 'object') {\n return false;\n }\n\n // Validate boolean properties\n if (panelSettings) {\n for (const [key, value] of Object.entries(panelSettings)) {\n if (value !== undefined && typeof value !== 'boolean') {\n console.warn(\n `Invalid setting value for ${panelKey}.${key}: expected boolean, got ${typeof value}`\n );\n return false;\n }\n }\n }\n }\n }\n\n return true;\n }\n\n /**\n * Merge user settings with current settings (deep merge)\n * @param currentSettings - Current settings\n * @param userSettings - New settings to merge\n */\n private mergeSettings(\n currentSettings: IUserSettings,\n userSettings: IUserSettings\n ): IUserSettings {\n const merged: IUserSettings = {\n panels: {\n ...currentSettings.panels,\n },\n };\n\n if (userSettings.panels) {\n for (const [panelKey, panelSettings] of Object.entries(\n userSettings.panels\n )) {\n if (panelSettings) {\n const currentPanelSettings = merged.panels![\n panelKey as keyof NonNullable<IUserSettings['panels']>\n ];\n const mergedPanelSettings = { ...currentPanelSettings };\n\n // Filter out undefined values and only merge defined ones\n for (const [settingKey, settingValue] of Object.entries(\n panelSettings\n )) {\n if (settingValue !== undefined) {\n (mergedPanelSettings as any)[settingKey] = settingValue;\n }\n }\n\n merged.panels![\n panelKey as keyof NonNullable<IUserSettings['panels']>\n ] = mergedPanelSettings;\n }\n }\n }\n\n return merged;\n }\n\n /**\n * Map MaestroPanelType to settings key\n * @param panelType - Panel type from MaestroPanelType enum\n */\n private mapPanelTypeToSettingsKey(\n panelType: MaestroPanelType\n ): keyof NonNullable<IUserSettings['panels']> | null {\n if (panelType in PANEL_TYPE_SETTINGS_KEY_MAP) {\n return PANEL_TYPE_SETTINGS_KEY_MAP[panelType as PanelTypeWithSettings];\n }\n return null;\n }\n}\n","import axios, { AxiosError, AxiosInstance } from 'axios';\nimport { INetworkClient } from './ports/networkClient';\n\nconst REQUEST_TIMEOUT = 5000;\n\nclass AxiosNetworkClient implements INetworkClient {\n private client: AxiosInstance;\n private retries: number;\n private delay: number;\n private backoff: number;\n\n constructor({\n baseURL,\n retries,\n delay,\n backoff,\n axiosInstance,\n }: {\n baseURL: string;\n retries: number;\n delay: number;\n backoff: number;\n axiosInstance?: AxiosInstance;\n }) {\n this.retries = retries;\n this.delay = delay;\n this.backoff = backoff;\n\n this.client =\n axiosInstance ||\n axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n timeout: REQUEST_TIMEOUT,\n });\n }\n\n private async retry<T>(\n operation: () => Promise<T>,\n attempt: number = 0\n ): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n const axiosError = error as AxiosError;\n\n // Check if we should retry\n const shouldRetry =\n attempt < this.retries &&\n ((axiosError.response && axiosError.response.status === 429) ||\n axiosError.code === 'ECONNABORTED');\n\n if (shouldRetry) {\n const delayTime = this.delay * Math.pow(this.backoff, attempt);\n console.log(\n `Retrying request in ${delayTime}ms due to: ${axiosError.message}`\n );\n\n await new Promise((resolve) => setTimeout(resolve, delayTime));\n return this.retry(operation, attempt + 1);\n }\n\n throw error;\n }\n }\n\n async get<TResponseData = any>(\n endpoint: string,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<TResponseData> {\n return this.retry(async () => {\n const response = await this.client.get<TResponseData>(endpoint, {\n params,\n headers,\n });\n return response.data;\n });\n }\n\n async getWithHeaders<TResponseData = any>(\n endpoint: string,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<{ data: TResponseData; headers: Record<string, string> }> {\n return this.retry(async () => {\n const response = await this.client.get<TResponseData>(endpoint, {\n params,\n headers,\n });\n return {\n data: response.data,\n headers: response.headers as Record<string, string>,\n };\n });\n }\n\n async post<TRequestData = any, TResponseData = any>(\n endpoint: string,\n data: TRequestData,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<TResponseData> {\n return this.retry(async () => {\n const response = await this.client.post<TResponseData>(endpoint, data, {\n params,\n headers,\n });\n return response.data;\n });\n }\n\n async postWithHeaders<TRequestData = any, TResponseData = any>(\n endpoint: string,\n data: TRequestData,\n params?: Record<string, any>,\n headers?: Record<string, string>\n ): Promise<{ data: TResponseData; headers: Record<string, string> }> {\n return this.retry(async () => {\n const response = await this.client.post<TResponseData>(endpoint, data, {\n params,\n headers,\n });\n return {\n data: response.data,\n headers: response.headers as Record<string, string>,\n };\n });\n }\n\n setAuthentication(token: string | null, apiKey: string | null): void {\n this.client.defaults.headers.common['Authorization'] = token\n ? `Bearer ${token}`\n : '';\n this.client.defaults.headers.common['x-maestro-api-key'] = apiKey || '';\n }\n}\n\nexport default AxiosNetworkClient;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","/**\n * User settings interface for customizing Maestro Web SDK behavior\n * Supports panel-level and feature-level customizations\n */\nexport interface IUserSettings {\n panels?: {\n bets?: {\n /** Hide the entire bets panel from panel selection */\n hidePanel?: boolean;\n /** Hide wager values (dollar amounts) in betting cards */\n hideWagers?: boolean;\n };\n stats?: {\n /** Hide the entire stats panel from panel selection */\n hidePanel?: boolean;\n };\n keyPlays?: {\n /** Hide the entire key plays panel from panel selection */\n hidePanel?: boolean;\n };\n fantasy?: {\n /** Hide the entire fantasy panel from panel selection */\n hidePanel?: boolean;\n };\n shop?: {\n /** Hide the entire shop panel from panel selection */\n hidePanel?: boolean;\n };\n };\n}\n\n/**\n * Default user settings - all features enabled by default\n */\nexport const DEFAULT_USER_SETTINGS: IUserSettings = {\n panels: {\n bets: {\n hidePanel: false,\n hideWagers: false,\n },\n stats: {\n hidePanel: false,\n },\n keyPlays: {\n hidePanel: false,\n },\n fantasy: {\n hidePanel: false,\n },\n },\n};\n\n/**\n * Panel-specific settings type helpers\n */\nexport type BetsSettings = NonNullable<IUserSettings['panels']>['bets'];\nexport type StatsSettings = NonNullable<IUserSettings['panels']>['stats'];\nexport type KeyPlaysSettings = NonNullable<IUserSettings['panels']>['keyPlays'];\n\n/**\n * Utility type for getting panel settings by panel type\n */\nexport type PanelSettings<\n T extends keyof NonNullable<IUserSettings['panels']>\n> = NonNullable<IUserSettings['panels']>[T];\n","module.exports = require(\"react-dom\");","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","import { ICacheManager } from './ports/cacheManager';\n\n/**\n * Manages caching using localStorage with support for TTL, size limits, and versioning.\n * This class implements the ICacheManager interface and provides methods for setting, getting,\n * and clearing cache entries.\n */\nexport default class LocalStorageCacheManager implements ICacheManager {\n private readonly prefix: string = 'maestro-cache-';\n private readonly cacheDuration: number;\n private readonly maxSize: number;\n private readonly version: string;\n private readonly accessLog: Map<string, number>;\n\n /**\n * Creates a new LocalStorageCacheManager instance.\n * @param cacheDuration - The time-to-live (TTL) for cache entries in milliseconds.\n * @param maxSize - The maximum size of the cache in bytes.\n * @param version - The version of the cache. Used to invalidate cache entries when the version changes.\n */\n constructor(\n cacheDuration: number = 3600000,\n maxSize: number = 5 * 1024 * 1024,\n version: string = '1.0'\n ) {\n this.cacheDuration = cacheDuration;\n this.maxSize = maxSize;\n this.version = version;\n this.accessLog = new Map();\n }\n\n /**\n * Produces a cache key by combining the prefix, version, and the provided key.\n * @param key - The key to be used in the cache.\n * @returns The generated cache key.\n */\n public produceCacheKey(key: string): string {\n return `${this.prefix}${this.version}:${key}`;\n }\n\n /**\n * Calculates the current size of the cache in bytes.\n * @returns The total size of the cache in bytes.\n */\n private getCurrentSize(): number {\n let totalSize = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n const value = localStorage.getItem(key);\n if (value) {\n totalSize += key.length + value.length;\n }\n }\n }\n return totalSize;\n }\n\n /**\n * Cleans up old cache entries based on their TTL.\n */\n private cleanupOldEntries(): void {\n const now = Date.now();\n // Collect keys to remove first\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n const value = localStorage.getItem(key);\n if (value) {\n try {\n const { timestamp } = JSON.parse(value);\n if (now - timestamp > this.cacheDuration) {\n keysToRemove.push(key);\n }\n } catch (err) {\n keysToRemove.push(key);\n }\n }\n }\n }\n keysToRemove.forEach((key) => {\n localStorage.removeItem(key);\n // Remove from accessLog\n const logicalKey = key.replace(this.prefix + this.version + ':', '');\n this.accessLog.delete(logicalKey);\n });\n }\n\n /**\n * Cleans up least recently used cache entries when the cache is full.\n */\n private cleanupLRUEntries(newItemSize: number): void {\n // Remove oldest entries until we're under the size limit\n const entries = Array.from(this.accessLog.entries()).sort(\n ([, a], [, b]) => a - b\n );\n while (\n this.getCurrentSize() + newItemSize > this.maxSize &&\n entries.length > 0\n ) {\n const [key] = entries.shift()!;\n localStorage.removeItem(this.produceCacheKey(key));\n this.accessLog.delete(key);\n }\n }\n\n /**\n * Sets a value in the cache with the specified key.\n * @param key - The key to store the value under.\n * @param data - The value to be stored in the cache.\n */\n setCache(key: string, data: any): void {\n this.cleanupOldEntries();\n const cacheKey = this.produceCacheKey(key);\n const cacheData = {\n data,\n timestamp: Date.now(),\n };\n const newItemSize = cacheKey.length + JSON.stringify(cacheData).length;\n this.cleanupLRUEntries(newItemSize);\n // After cleanup, check if it fits\n if (this.getCurrentSize() + newItemSize > this.maxSize) {\n // Still doesn't fit, don't add\n return;\n }\n localStorage.setItem(cacheKey, JSON.stringify(cacheData));\n this.accessLog.set(key, Date.now());\n }\n\n /**\n * Retrieves a value from the cache by its key.\n * @param key - The key to retrieve the value for.\n * @returns The cached value, or null if the key is not found or the entry has expired.\n */\n getCache(key: string): any {\n this.cleanupOldEntries();\n const cacheKey = this.produceCacheKey(key);\n const cachedData = localStorage.getItem(cacheKey);\n if (!cachedData) {\n return null;\n }\n try {\n const { data, timestamp } = JSON.parse(cachedData);\n const now = Date.now();\n if (now - timestamp > this.cacheDuration) {\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n return null;\n }\n // Update last access time\n this.accessLog.set(key, now);\n return data;\n } catch (err) {\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n return null;\n }\n }\n\n /**\n * Clears a specific cache entry by its key.\n * @param key - The key of the cache entry to clear.\n */\n clearCache(key: string): void {\n const cacheKey = this.produceCacheKey(key);\n localStorage.removeItem(cacheKey);\n this.accessLog.delete(key);\n }\n\n /**\n * Clears all cache entries that match the specified pattern.\n * @param pattern - The pattern to match against cache keys.\n */\n clearCacheByPattern(pattern: string): void {\n // Collect all matching keys first\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix) && key.includes(pattern)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => {\n localStorage.removeItem(key);\n // Remove from accessLog\n const logicalKey = key.replace(this.prefix + this.version + ':', '');\n this.accessLog.delete(logicalKey);\n });\n }\n\n /**\n * Clears all cache entries.\n */\n clearAllCache(): void {\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n this.accessLog.clear();\n }\n}\n","const ELEMENT_NODE = 1;\n\nconst getRect = (node: any) => {\n let { offsetParent } = node;\n const height = node.offsetHeight;\n const width = node.offsetWidth;\n let left = node.offsetLeft;\n let top = node.offsetTop;\n\n while (offsetParent && offsetParent.nodeType === ELEMENT_NODE) {\n left += offsetParent.offsetLeft - offsetParent.scrollLeft;\n top += offsetParent.offsetTop - offsetParent.scrollTop;\n ({ offsetParent } = offsetParent);\n }\n\n return {\n height,\n left,\n top,\n width,\n };\n};\n\nconst measureLayout = (\n node: any,\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => void\n) => {\n const relativeNode = node && node.parentNode;\n\n if (relativeNode) {\n const relativeRect = getRect(relativeNode);\n const { height, left, top, width } = getRect(node);\n const x = left - relativeRect.left;\n const y = top - relativeRect.top;\n\n callback(x, y, width, height, left, top);\n }\n};\n\nexport default measureLayout;\n","// We'll make VisualDebugger no-op for any environments lacking a DOM (e.g. SSR and React Native non-web platforms).\nconst hasDOM = typeof window !== 'undefined' && window.document;\n\nconst WIDTH = hasDOM ? window.innerWidth : 0;\nconst HEIGHT = hasDOM ? window.innerHeight : 0;\n\ninterface Layout {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nclass VisualDebugger {\n private debugCtx: CanvasRenderingContext2D | null;\n private layoutsCtx: CanvasRenderingContext2D | null;\n\n constructor() {\n if (hasDOM) {\n this.debugCtx = VisualDebugger.createCanvas('sn-debug', 1010);\n this.layoutsCtx = VisualDebugger.createCanvas('sn-layouts', 1000);\n } else {\n this.debugCtx = null;\n this.layoutsCtx = null;\n }\n }\n\n static createCanvas(id: string, zIndex: number): CanvasRenderingContext2D {\n const canvas = (document.querySelector(`#${id}`) ||\n document.createElement('canvas')) as HTMLCanvasElement;\n\n canvas.setAttribute('id', id);\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Could not get 2d context from canvas');\n }\n\n canvas.style.cssText = `position: fixed; top: 0; left: 0; z-index: ${zIndex}`;\n\n document.body.appendChild(canvas);\n\n canvas.width = WIDTH;\n canvas.height = HEIGHT;\n\n return ctx;\n }\n\n clear(): void {\n if (!hasDOM || !this.debugCtx) {\n return;\n }\n this.debugCtx.clearRect(0, 0, WIDTH, HEIGHT);\n }\n\n clearLayouts(): void {\n if (!hasDOM || !this.layoutsCtx) {\n return;\n }\n this.layoutsCtx.clearRect(0, 0, WIDTH, HEIGHT);\n }\n\n drawLayout(layout: Layout, focusKey: string, parentFocusKey: string): void {\n if (!hasDOM || !this.layoutsCtx) {\n return;\n }\n this.layoutsCtx.strokeStyle = 'green';\n this.layoutsCtx.strokeRect(\n layout.left,\n layout.top,\n layout.width,\n layout.height\n );\n this.layoutsCtx.font = '8px monospace';\n this.layoutsCtx.fillStyle = 'red';\n this.layoutsCtx.fillText(focusKey, layout.left, layout.top + 10);\n this.layoutsCtx.fillText(parentFocusKey, layout.left, layout.top + 25);\n this.layoutsCtx.fillText(\n `left: ${layout.left}`,\n layout.left,\n layout.top + 40\n );\n this.layoutsCtx.fillText(\n `top: ${layout.top}`,\n layout.left,\n layout.top + 55\n );\n }\n\n drawPoint(\n x: number,\n y: number,\n color: string = 'blue',\n size: number = 10\n ): void {\n if (!hasDOM || !this.debugCtx) {\n return;\n }\n this.debugCtx.strokeStyle = color;\n this.debugCtx.lineWidth = 3;\n this.debugCtx.strokeRect(x - size / 2, y - size / 2, size, size);\n }\n}\n\nexport default VisualDebugger;\n","import measureLayout from './measureLayout';\nimport { Details, Direction, KEY_BACK, Layout } from './utils';\nimport { DIRECTION_DOWN, KEY_ENTER } from './utils';\nimport { DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP } from './utils';\nimport VisualDebugger from './visualDebugger';\n\nexport const ROOT_FOCUS_KEY = 'SN:ROOT';\n\nconst ADJACENT_SLICE_THRESHOLD = 0.2;\n\n/**\n * Adjacent slice is 5 times more important than diagonal\n */\nconst ADJACENT_SLICE_WEIGHT = 5;\nconst DIAGONAL_SLICE_WEIGHT = 1;\n\n/**\n * Main coordinate distance is 5 times more important\n */\nconst MAIN_COORDINATE_WEIGHT = 5;\n\nexport type KeyType = Direction | typeof KEY_ENTER | typeof KEY_BACK;\n\nexport interface KeyMap {\n [key: string]: number[];\n}\n\nconst DEFAULT_KEY_MAP: KeyMap = {\n [DIRECTION_LEFT]: [37],\n [DIRECTION_UP]: [38],\n [DIRECTION_RIGHT]: [39],\n [DIRECTION_DOWN]: [40],\n [KEY_ENTER]: [13],\n [KEY_BACK]: [8, 10009, 461],\n};\n\nconst DEBUG_FN_COLORS = ['#0FF', '#FF0', '#F0F'];\n\nconst THROTTLE_OPTIONS = {\n leading: true,\n trailing: false,\n};\n\ninterface FocusableComponent {\n focusKey: string;\n node: HTMLElement;\n parentFocusKey: string | null;\n onEnterPressHandler?: (details: Details) => void;\n onBackPressHandler?: (details: Details) => void;\n onClickPressHandler?: (details: Details) => void;\n onEnterReleaseHandler?: () => void;\n onArrowPressHandler?: (\n direction: Direction,\n details: Details\n ) => boolean | void;\n onBecameFocusedHandler?: (layout: Layout, details: any) => void;\n onBecameBlurredHandler?: (layout: Layout, details: any) => void;\n onUpdateFocus?: (isFocused: boolean) => void;\n onUpdateHasFocusedChild?: (hasFocusedChild: boolean) => void;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n lastFocusedChildKey: string | null;\n preferredChildFocusKey?: string;\n focusable: boolean;\n blockNavigationOut?: boolean;\n autoRestoreFocus?: boolean;\n layout: Layout;\n layoutUpdated: boolean;\n}\n\ninterface Corner {\n x: number;\n y: number;\n}\n\ninterface RefCorners {\n a: Corner;\n b: Corner;\n}\n\nexport interface InitOptions {\n debug?: boolean;\n visualDebug?: boolean;\n nativeMode?: boolean;\n throttle?: number;\n throttleKeypresses?: boolean;\n}\n\ninterface AddFocusableOptions {\n focusKey: string;\n node: HTMLElement;\n parentFocusKey: string | null;\n onEnterPressHandler?: (details: Details) => void;\n onClickPressHandler?: (details: Details) => void;\n onEnterReleaseHandler?: () => void;\n onBackPressHandler?: (details: Details) => void;\n onArrowPressHandler?: (\n direction: Direction,\n details: Details\n ) => boolean | void;\n onBecameFocusedHandler?: (layout: Layout, details: any) => void;\n onBecameBlurredHandler?: (layout: Layout, details: any) => void;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n onUpdateFocus?: (isFocused: boolean) => void;\n onUpdateHasFocusedChild?: (hasFocusedChild: boolean) => void;\n preferredChildFocusKey?: string;\n autoRestoreFocus?: boolean;\n focusable?: boolean;\n blockNavigationOut?: boolean;\n}\n\ninterface UpdateFocusableOptions {\n node?: HTMLElement;\n preferredChildFocusKey?: string;\n focusable?: boolean;\n blockNavigationOut?: boolean;\n}\n\nexport const getChildClosestToOrigin = (\n children: FocusableComponent[]\n): FocusableComponent => {\n const childrenClosestToOrigin = sortBy(\n children,\n ({ layout }) => Math.abs(layout.left) + Math.abs(layout.top)\n );\n\n return first(childrenClosestToOrigin) as FocusableComponent;\n};\n\nconst throttle = <T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n options: { leading?: boolean; trailing?: boolean } = {}\n): T => {\n let timeout: number | null = null;\n let previous = 0;\n const { leading = true, trailing = true } = options;\n\n return function (this: any, ...args: Parameters<T>) {\n const now = Date.now();\n if (!previous && !leading) previous = now;\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(this, args);\n } else if (!timeout && trailing) {\n timeout = window.setTimeout(() => {\n previous = leading ? Date.now() : 0;\n timeout = null;\n func.apply(this, args);\n }, remaining);\n }\n } as T;\n};\n\nconst sortBy = <T>(array: T[], iteratee: (item: T) => number | string): T[] =>\n [...array].sort((a, b) => {\n const aValue = iteratee(a);\n const bValue = iteratee(b);\n return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;\n });\n\nconst first = <T>(array: T[]): T | undefined => array[0];\n\nconst difference = <T>(array: T[], values: T[]): T[] =>\n array.filter((x) => !values.includes(x));\n\nconst forEach = <T>(\n array: T[],\n iteratee: (item: T, index: number) => void\n): void => array.forEach(iteratee);\n\n/* eslint-disable no-nested-ternary */\nclass SpatialNavigation {\n private focusableComponents: Record<string, FocusableComponent>;\n focusKey: string | null;\n private parentsHavingFocusedChild: string[];\n private nativeMode: boolean;\n private throttle: number;\n private throttleKeypresses: boolean;\n private pressedKeys: Record<string, number>;\n paused: boolean;\n private keyDownEventListener: ((event: KeyboardEvent) => void) | null;\n private clickEventListener: ((event: MouseEvent) => void) | null;\n private keyUpEventListener: ((event: KeyboardEvent) => void) | null;\n private keyMap: KeyMap;\n private debug: boolean;\n private visualDebugger: VisualDebugger | null;\n private logIndex: number;\n\n /**\n * Used to determine the coordinate that will be used to filter items that are over the \"edge\"\n */\n static getCutoffCoordinate(\n isVertical: boolean,\n isIncremental: boolean,\n isSibling: boolean,\n layout: Layout\n ): number {\n const itemX = layout.left;\n const itemY = layout.top;\n const itemWidth = layout.width;\n const itemHeight = layout.height;\n\n const coordinate = isVertical ? itemY : itemX;\n const itemSize = isVertical ? itemHeight : itemWidth;\n\n return isIncremental\n ? isSibling\n ? coordinate\n : coordinate + itemSize\n : isSibling\n ? coordinate + itemSize\n : coordinate;\n }\n\n /**\n * Returns two corners (a and b) coordinates that are used as a reference points\n * Where \"a\" is always leftmost and topmost corner, and \"b\" is rightmost bottommost corner\n */\n static getRefCorners(\n direction: Direction,\n isSibling: boolean,\n layout: Layout\n ): RefCorners {\n const itemX = layout.left;\n const itemY = layout.top;\n const itemWidth = layout.width;\n const itemHeight = layout.height;\n\n const result: RefCorners = {\n a: {\n x: 0,\n y: 0,\n },\n b: {\n x: 0,\n y: 0,\n },\n };\n\n switch (direction) {\n case DIRECTION_UP: {\n const y = isSibling ? itemY + itemHeight : itemY;\n\n result.a = {\n x: itemX,\n y,\n };\n\n result.b = {\n x: itemX + itemWidth,\n y,\n };\n\n break;\n }\n\n case DIRECTION_DOWN: {\n const y = isSibling ? itemY : itemY + itemHeight;\n\n result.a = {\n x: itemX,\n y,\n };\n\n result.b = {\n x: itemX + itemWidth,\n y,\n };\n\n break;\n }\n\n case DIRECTION_LEFT: {\n const x = isSibling ? itemX + itemWidth : itemX;\n\n result.a = {\n x,\n y: itemY,\n };\n\n result.b = {\n x,\n y: itemY + itemHeight,\n };\n\n break;\n }\n\n case DIRECTION_RIGHT: {\n const x = isSibling ? itemX : itemX + itemWidth;\n\n result.a = {\n x,\n y: itemY,\n };\n\n result.b = {\n x,\n y: itemY + itemHeight,\n };\n\n break;\n }\n\n default:\n break;\n }\n\n return result;\n }\n\n /**\n * Calculates if the sibling node is intersecting enough with the ref node by the secondary coordinate\n */\n static isAdjacentSlice(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): boolean {\n const { a: refA, b: refB } = refCorners;\n const { a: siblingA, b: siblingB } = siblingCorners;\n const coordinate = isVerticalDirection ? 'x' : 'y';\n\n const refCoordinateA = refA[coordinate];\n const refCoordinateB = refB[coordinate];\n const siblingCoordinateA = siblingA[coordinate];\n const siblingCoordinateB = siblingB[coordinate];\n\n const thresholdDistance =\n (refCoordinateB - refCoordinateA) * ADJACENT_SLICE_THRESHOLD;\n\n const intersectionLength = Math.max(\n 0,\n Math.min(refCoordinateB, siblingCoordinateB) -\n Math.max(refCoordinateA, siblingCoordinateA)\n );\n\n return intersectionLength >= thresholdDistance;\n }\n\n static getPrimaryAxisDistance(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): number {\n const { a: refA } = refCorners;\n const { a: siblingA } = siblingCorners;\n const coordinate = isVerticalDirection ? 'y' : 'x';\n\n return Math.abs(siblingA[coordinate] - refA[coordinate]);\n }\n\n static getSecondaryAxisDistance(\n refCorners: RefCorners,\n siblingCorners: RefCorners,\n isVerticalDirection: boolean\n ): number {\n const { a: refA, b: refB } = refCorners;\n const { a: siblingA, b: siblingB } = siblingCorners;\n const coordinate = isVerticalDirection ? 'x' : 'y';\n\n const refCoordinateA = refA[coordinate];\n const refCoordinateB = refB[coordinate];\n const siblingCoordinateA = siblingA[coordinate];\n const siblingCoordinateB = siblingB[coordinate];\n\n const distancesToCompare = [];\n\n distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateA));\n distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateB));\n distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateA));\n distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateB));\n\n return Math.min(...distancesToCompare);\n }\n\n /**\n * Inspired by: https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS_for_TV/TV_remote_control_navigation#Algorithm_design\n * Ref Corners are the 2 corners of the current component in the direction of navigation\n * They used as a base to measure adjacent slices\n */\n sortSiblingsByPriority(\n siblings: FocusableComponent[],\n currentLayout: Layout,\n direction: Direction,\n _focusKey: string\n ): FocusableComponent[] {\n const isVerticalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_UP;\n\n const refCorners = SpatialNavigation.getRefCorners(\n direction,\n false,\n currentLayout\n );\n\n return [...siblings].sort(\n (a: FocusableComponent, b: FocusableComponent) => {\n const aCorners = SpatialNavigation.getRefCorners(\n direction,\n true,\n a.layout\n );\n const bCorners = SpatialNavigation.getRefCorners(\n direction,\n true,\n b.layout\n );\n\n const aIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aPrimaryAxisFunction = aIsAdjacentSlice\n ? SpatialNavigation.getPrimaryAxisDistance\n : SpatialNavigation.getSecondaryAxisDistance;\n const bPrimaryAxisFunction = bIsAdjacentSlice\n ? SpatialNavigation.getPrimaryAxisDistance\n : SpatialNavigation.getSecondaryAxisDistance;\n\n const aSecondaryAxisFunction = aIsAdjacentSlice\n ? SpatialNavigation.getSecondaryAxisDistance\n : SpatialNavigation.getPrimaryAxisDistance;\n const bSecondaryAxisFunction = bIsAdjacentSlice\n ? SpatialNavigation.getSecondaryAxisDistance\n : SpatialNavigation.getPrimaryAxisDistance;\n\n const aPrimaryAxisDistance = aPrimaryAxisFunction(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bPrimaryAxisDistance = bPrimaryAxisFunction(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aSecondaryAxisDistance = aSecondaryAxisFunction(\n refCorners,\n aCorners,\n isVerticalDirection\n );\n const bSecondaryAxisDistance = bSecondaryAxisFunction(\n refCorners,\n bCorners,\n isVerticalDirection\n );\n\n const aTotalDistancePoints =\n aPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +\n aSecondaryAxisDistance;\n const bTotalDistancePoints =\n bPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +\n bSecondaryAxisDistance;\n\n const aPriority =\n (aTotalDistancePoints + 1) /\n (aIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);\n const bPriority =\n (bTotalDistancePoints + 1) /\n (bIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);\n\n return aPriority - bPriority;\n }\n );\n }\n\n constructor(options: InitOptions = {}) {\n this.focusableComponents = {};\n this.focusKey = null;\n this.parentsHavingFocusedChild = [];\n this.nativeMode = false;\n this.throttle = 0;\n this.throttleKeypresses = false;\n this.pressedKeys = {};\n this.paused = true;\n this.keyDownEventListener = null;\n this.clickEventListener = null;\n this.keyUpEventListener = null;\n this.keyMap = DEFAULT_KEY_MAP;\n this.debug = false;\n this.visualDebugger = null;\n this.logIndex = 0;\n\n this.onKeyEvent = this.onKeyEvent.bind(this);\n this.pause = this.pause.bind(this);\n this.resume = this.resume.bind(this);\n this.setFocus = this.setFocus.bind(this);\n this.updateAllLayouts = this.updateAllLayouts.bind(this);\n this.navigateByDirection = this.navigateByDirection.bind(this);\n this.init = this.init.bind(this);\n this.setKeyMap = this.setKeyMap.bind(this);\n\n this.init(options);\n }\n\n init({\n debug = false,\n visualDebug = false,\n nativeMode = false,\n throttle = 0,\n throttleKeypresses = false,\n }: InitOptions = {}) {\n this.nativeMode = nativeMode;\n this.throttleKeypresses = throttleKeypresses;\n this.debug = debug;\n\n if (!this.nativeMode) {\n if (Number.isInteger(throttle) && throttle > 0) {\n this.throttle = throttle;\n }\n this.bindEventHandlers();\n if (visualDebug) {\n this.visualDebugger = new VisualDebugger();\n this.startDrawLayouts();\n }\n }\n }\n\n startDrawLayouts(): void {\n const draw = () => {\n requestAnimationFrame(() => {\n this.visualDebugger?.clearLayouts();\n Object.entries(this.focusableComponents).forEach(\n ([focusKey, component]) => {\n this.visualDebugger?.drawLayout(\n component.layout,\n focusKey,\n component.parentFocusKey!\n );\n }\n );\n draw();\n });\n };\n\n draw();\n }\n\n destroy(): void {\n this.unbindEventHandlers();\n }\n\n getEventType(keyCode: number): KeyType | undefined {\n return Object.keys(this.getKeyMap()).find((key) =>\n this.getKeyMap()[key].includes(keyCode)\n ) as KeyType | undefined;\n }\n\n bindEventHandlers(): void {\n if (typeof window !== 'undefined' && window.addEventListener) {\n const keyDownHandler = (event: KeyboardEvent) => {\n if (this.paused === true) {\n return;\n }\n\n if (this.debug) {\n this.logIndex += 1;\n }\n\n const eventType = this.getEventType(event.keyCode);\n\n if (!eventType) {\n return;\n }\n\n this.pressedKeys[eventType] = this.pressedKeys[eventType]\n ? this.pressedKeys[eventType] + 1\n : 1;\n\n event.preventDefault();\n event.stopPropagation();\n\n const details: Details = {\n pressedKeys: this.pressedKeys,\n };\n\n if (this.focusKey && this.getNodeLayoutByFocusKey(this.focusKey)) {\n details.layout = this.getNodeLayoutByFocusKey(this.focusKey)!;\n }\n\n if (eventType === KEY_ENTER && this.focusKey) {\n this.onEnterPress(details);\n return;\n }\n\n if (eventType === KEY_BACK && this.focusKey) {\n this.onBackPress(details);\n return;\n }\n\n const preventDefaultNavigation =\n this.onArrowPress(eventType as Direction, details) === false;\n\n if (preventDefaultNavigation) {\n this.log('keyDownEventListener', 'default navigation prevented');\n this.visualDebugger?.clear();\n } else {\n this.onKeyEvent(event);\n }\n };\n\n this.keyDownEventListener = this.throttle\n ? throttle(keyDownHandler, this.throttle, THROTTLE_OPTIONS)\n : keyDownHandler;\n\n this.keyUpEventListener = (event: KeyboardEvent) => {\n const eventType = this.getEventType(event.keyCode);\n\n if (eventType) {\n delete this.pressedKeys[eventType];\n }\n\n if (this.throttle && !this.throttleKeypresses) {\n // @ts-ignore\n this.keyDownEventListener?.cancel?.();\n }\n\n if (eventType === KEY_ENTER && this.focusKey) {\n this.onEnterRelease();\n }\n };\n\n // Click handler for mouse/touch support\n this.clickEventListener = (event: MouseEvent) => {\n if (this.paused === true) {\n return;\n }\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n // Find the focusable component that contains the clicked element\n const focusKey = this.findFocusKeyForElement(target);\n if (!focusKey) {\n return;\n }\n\n const details: Details = {\n pressedKeys: {},\n event,\n mouseClick: true,\n };\n\n const layout = this.getNodeLayoutByFocusKey(focusKey);\n if (layout) {\n details.layout = layout;\n }\n\n const isAlreadyFocused = this.focusKey === focusKey;\n if (!isAlreadyFocused) {\n this.setFocus(focusKey, details);\n }\n\n this.onClickPress(details);\n };\n\n window.addEventListener('keyup', this.keyUpEventListener);\n window.addEventListener('keydown', this.keyDownEventListener);\n window.addEventListener('click', this.clickEventListener);\n }\n }\n\n unbindEventHandlers(): void {\n if (typeof window !== 'undefined' && window.removeEventListener) {\n window.removeEventListener('keydown', this.keyDownEventListener!);\n window.removeEventListener('click', this.clickEventListener!);\n this.keyDownEventListener = null;\n this.clickEventListener = null;\n\n if (this.throttle) {\n window.removeEventListener('keyup', this.keyUpEventListener!);\n this.keyUpEventListener = null;\n }\n }\n }\n\n findFocusKeyForElement(element: HTMLElement): string | null {\n for (const focusKey of Object.keys(this.focusableComponents)) {\n const component = this.focusableComponents[focusKey];\n if (component && component.node && component.focusable) {\n if (component.node === element || component.node.contains(element)) {\n return focusKey;\n }\n }\n }\n return null;\n }\n\n onClickPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onClickPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onClickPress', 'componentNotFocusable');\n return;\n }\n\n component.onClickPressHandler?.(details);\n }\n\n onEnterPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onEnterPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onEnterPress', 'componentNotFocusable');\n return;\n }\n\n component.onEnterPressHandler?.(details);\n }\n\n onBackPress(details: Details): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onBackPress', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onBackPress', 'componentNotFocusable');\n return;\n }\n\n component.onBackPressHandler?.(details);\n }\n\n onEnterRelease(): void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onEnterRelease', 'noComponent');\n return;\n }\n\n if (!component.focusable) {\n this.log('onEnterRelease', 'componentNotFocusable');\n return;\n }\n\n component.onEnterReleaseHandler?.();\n }\n\n onArrowPress(direction: Direction, details: Details): boolean | void {\n const component = this.focusableComponents[this.focusKey!];\n\n if (!component) {\n this.log('onArrowPress', 'noComponent');\n return undefined;\n }\n\n return component.onArrowPressHandler?.(direction, details);\n }\n\n navigateByDirection(\n direction: Direction,\n details: Details = { pressedKeys: {} }\n ): void {\n if (this.paused === true) {\n return;\n }\n\n const validDirections = [\n DIRECTION_DOWN,\n DIRECTION_UP,\n DIRECTION_LEFT,\n DIRECTION_RIGHT,\n ];\n\n if (validDirections.includes(direction)) {\n this.log('navigateByDirection', 'direction', direction);\n this.smartNavigate(direction, null, details);\n } else {\n this.log(\n 'navigateByDirection',\n `Invalid direction. You passed: \\`${direction}\\`, but you can use only these: `,\n validDirections\n );\n }\n }\n\n onKeyEvent(event: KeyboardEvent): void {\n this.visualDebugger?.clear();\n\n const direction = Object.keys(this.getKeyMap()).find((key) =>\n this.getKeyMap()[key].includes(event.keyCode)\n ) as KeyType | undefined;\n\n if (direction) {\n this.smartNavigate(direction as Direction, null, {\n pressedKeys: {},\n event,\n });\n }\n }\n\n smartNavigate(\n direction: Direction,\n fromParentFocusKey: string | null,\n details: Details\n ): void {\n this.log('smartNavigate', 'direction', direction);\n this.log('smartNavigate', 'fromParentFocusKey', fromParentFocusKey);\n this.log('smartNavigate', 'this.focusKey', this.focusKey);\n\n if (!this.nativeMode && !fromParentFocusKey) {\n Object.values(this.focusableComponents).forEach((component) => {\n component.layoutUpdated = false;\n });\n }\n\n const currentComponent = this.focusableComponents[\n fromParentFocusKey || this.focusKey!\n ];\n\n this.log(\n 'smartNavigate',\n 'currentComponent',\n currentComponent ? currentComponent.focusKey : undefined,\n currentComponent ? currentComponent.node : undefined\n );\n\n if (currentComponent) {\n this.updateLayout(currentComponent.focusKey);\n const { parentFocusKey, focusKey, layout } = currentComponent;\n\n const isVerticalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_UP;\n const isIncrementalDirection =\n direction === DIRECTION_DOWN || direction === DIRECTION_RIGHT;\n\n const currentCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(\n isVerticalDirection,\n isIncrementalDirection,\n false,\n layout\n );\n\n /**\n * Get only the siblings with the coords on the way of our moving direction\n */\n const siblings = Object.values(this.focusableComponents).filter(\n (component) => {\n if (\n component.parentFocusKey === parentFocusKey &&\n component.focusable\n ) {\n this.updateLayout(component.focusKey);\n const siblingCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(\n isVerticalDirection,\n isIncrementalDirection,\n true,\n component.layout\n );\n\n return isIncrementalDirection\n ? siblingCutoffCoordinate >= currentCutoffCoordinate\n : siblingCutoffCoordinate <= currentCutoffCoordinate;\n }\n\n return false;\n }\n ) as FocusableComponent[];\n\n if (this.debug) {\n this.log('smartNavigate', 'siblings', siblings);\n }\n\n if (siblings.length > 0) {\n const sortedSiblings = this.sortSiblingsByPriority(\n siblings,\n layout,\n direction,\n focusKey\n );\n\n if (this.debug) {\n this.log('smartNavigate', 'sortedSiblings', sortedSiblings);\n }\n\n const nextComponent = sortedSiblings[0];\n\n if (nextComponent) {\n this.setFocus(nextComponent.focusKey, details);\n }\n } else {\n this.log('smartNavigate', 'noSiblings');\n\n if (parentFocusKey) {\n this.smartNavigate(direction, parentFocusKey, details);\n }\n }\n }\n }\n\n saveLastFocusedChildKey(\n component: FocusableComponent | undefined,\n focusKey: string\n ): void {\n if (component) {\n this.log(\n 'saveLastFocusedChildKey',\n `${component.focusKey} lastFocusedChildKey set`,\n focusKey\n );\n component.lastFocusedChildKey = focusKey;\n }\n }\n\n log(functionName: string, debugString: string, ...rest: any[]): void {\n if (this.debug) {\n console.log(\n `%c${functionName}%c${debugString}`,\n `background: ${\n DEBUG_FN_COLORS[this.logIndex % DEBUG_FN_COLORS.length]\n }; color: black; padding: 1px 5px;`,\n 'background: #333; color: #BADA55; padding: 1px 5px;',\n ...rest\n );\n }\n }\n\n getNextFocusKey(targetFocusKey: string): string {\n this.log('getNextFocusKey', 'targetFocusKey', targetFocusKey);\n\n const targetComponent = this.focusableComponents[targetFocusKey];\n\n if (!targetComponent) {\n return targetFocusKey;\n }\n\n const { trackChildren } = targetComponent;\n\n if (!trackChildren) {\n return targetFocusKey;\n }\n\n const children = Object.values(this.focusableComponents).filter(\n (component) =>\n component.parentFocusKey === targetFocusKey && component.focusable\n ) as FocusableComponent[];\n\n if (children.length === 0) {\n return targetFocusKey;\n }\n\n const { lastFocusedChildKey, preferredChildFocusKey } = targetComponent;\n\n /**\n * First of all trying to focus last focused child\n */\n if (\n lastFocusedChildKey &&\n !targetComponent.forgetLastFocusedChild &&\n this.isParticipatingFocusableComponent(lastFocusedChildKey)\n ) {\n this.log(\n 'getNextFocusKey',\n 'lastFocusedChildKey will be focused',\n lastFocusedChildKey\n );\n\n return this.getNextFocusKey(lastFocusedChildKey);\n }\n\n /**\n * If there is no lastFocusedChild, trying to focus the preferred focused key\n */\n if (\n preferredChildFocusKey &&\n this.isParticipatingFocusableComponent(preferredChildFocusKey)\n ) {\n this.log(\n 'getNextFocusKey',\n 'preferredChildFocusKey will be focused',\n preferredChildFocusKey\n );\n\n return this.getNextFocusKey(preferredChildFocusKey);\n }\n\n /**\n * Otherwise, trying to focus something by coordinates\n */\n children.forEach((component) => this.updateLayout(component.focusKey));\n const { focusKey: childKey } = getChildClosestToOrigin(children);\n\n this.log('getNextFocusKey', 'childKey will be focused', childKey);\n\n return this.getNextFocusKey(childKey);\n }\n\n addFocusable({\n focusKey,\n node,\n parentFocusKey,\n onEnterPressHandler,\n onEnterReleaseHandler,\n onBackPressHandler,\n onArrowPressHandler,\n onBecameFocusedHandler,\n onBecameBlurredHandler,\n forgetLastFocusedChild,\n trackChildren,\n onUpdateFocus,\n onUpdateHasFocusedChild,\n preferredChildFocusKey,\n onClickPressHandler,\n autoRestoreFocus,\n focusable = true,\n blockNavigationOut,\n }: AddFocusableOptions): void {\n this.focusableComponents[focusKey] = {\n focusKey,\n node,\n parentFocusKey,\n onClickPressHandler,\n onEnterPressHandler,\n onEnterReleaseHandler,\n onBackPressHandler,\n onArrowPressHandler,\n onBecameFocusedHandler,\n onBecameBlurredHandler,\n onUpdateFocus,\n onUpdateHasFocusedChild,\n forgetLastFocusedChild,\n trackChildren,\n lastFocusedChildKey: null,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut,\n autoRestoreFocus,\n layout: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n node,\n },\n layoutUpdated: false,\n };\n\n if (this.nativeMode) {\n return;\n }\n\n this.updateLayout(focusKey);\n\n /**\n * If for some reason this component was already focused before it was added, call the update\n */\n if (focusKey === this.focusKey) {\n this.setFocus(focusKey);\n }\n }\n\n removeFocusable({ focusKey }: { focusKey: string }): void {\n const componentToRemove = this.focusableComponents[focusKey];\n\n if (componentToRemove) {\n const { parentFocusKey } = componentToRemove;\n\n Reflect.deleteProperty(this.focusableComponents, focusKey);\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n const wasFocused = focusKey === this.focusKey;\n\n // If a component was unmounted and it was focused, we need to clear focusKey if the focus is in the Client App so the focus don't get lost.\n if (wasFocused) {\n if (this.paused) {\n this.focusKey = null;\n } else {\n // if its not paused, we need to focus on a component that is visible so we don't lose focus\n this.setFocus('PANEL_NAVIGATION');\n }\n }\n\n /**\n * If the component was stored as lastFocusedChild, clear lastFocusedChildKey from parent\n */\n parentComponent &&\n parentComponent.lastFocusedChildKey === focusKey &&\n (parentComponent.lastFocusedChildKey = null);\n\n if (this.nativeMode) {\n return;\n }\n\n /**\n * If the component was also focused at this time, focus another one\n */\n if (\n wasFocused &&\n parentComponent &&\n parentComponent.autoRestoreFocus &&\n !this.paused\n ) {\n this.setFocus(parentFocusKey!);\n }\n }\n }\n\n getNodeLayoutByFocusKey(focusKey: string): Layout | null {\n const component = this.focusableComponents[focusKey];\n\n if (component) {\n this.updateLayout(component.focusKey);\n\n return component.layout;\n }\n\n return null;\n }\n\n setCurrentFocusedKey(\n newFocusKey: string,\n details: Details = { pressedKeys: {} }\n ): void {\n if (\n this.isFocusableComponent(this.focusKey!) &&\n newFocusKey !== this.focusKey\n ) {\n const oldComponent = this.focusableComponents[this.focusKey!];\n const parentComponent = this.focusableComponents[\n oldComponent.parentFocusKey!\n ];\n\n this.saveLastFocusedChildKey(parentComponent, this.focusKey!);\n\n oldComponent.onUpdateFocus?.(false);\n oldComponent.onBecameBlurredHandler?.(\n this.getNodeLayoutByFocusKey(this.focusKey!)!,\n details\n );\n }\n\n this.focusKey = newFocusKey;\n\n if (this.isFocusableComponent(this.focusKey)) {\n const newComponent = this.focusableComponents[this.focusKey];\n\n newComponent.onUpdateFocus?.(true);\n this.updateParentsHasFocusedChild(this.focusKey, details);\n newComponent.onBecameFocusedHandler?.(\n this.getNodeLayoutByFocusKey(this.focusKey)!,\n details\n );\n }\n }\n\n updateParentsHasFocusedChild(focusKey: string, details: Details): void {\n const parents: string[] = [];\n\n let currentComponent = this.focusableComponents[focusKey];\n\n /**\n * Recursively iterate the tree up and find all the parents' focus keys\n */\n while (currentComponent) {\n const { parentFocusKey } = currentComponent;\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n\n if (parentComponent) {\n const { focusKey: currentParentFocusKey } = parentComponent;\n\n parents.push(currentParentFocusKey);\n }\n\n currentComponent = parentComponent;\n }\n\n const parentsToRemoveFlag = difference(\n this.parentsHavingFocusedChild,\n parents\n );\n const parentsToAddFlag = difference(\n parents,\n this.parentsHavingFocusedChild\n );\n\n forEach(parentsToRemoveFlag, (parentFocusKey) => {\n const parentComponent = this.focusableComponents[parentFocusKey];\n\n parentComponent &&\n parentComponent.trackChildren &&\n parentComponent.onUpdateHasFocusedChild?.(false);\n this.onIntermediateNodeBecameBlurred(parentFocusKey, details);\n });\n\n forEach(parentsToAddFlag, (parentFocusKey) => {\n const parentComponent = this.focusableComponents[parentFocusKey];\n\n parentComponent &&\n parentComponent.trackChildren &&\n parentComponent.onUpdateHasFocusedChild?.(true);\n this.onIntermediateNodeBecameFocused(parentFocusKey, details);\n });\n\n this.parentsHavingFocusedChild = parents;\n }\n\n updateParentsLastFocusedChild(focusKey: string): void {\n let currentComponent = this.focusableComponents[focusKey];\n\n /**\n * Recursively iterate the tree up and update all the parent's lastFocusedChild\n */\n while (currentComponent) {\n const { parentFocusKey } = currentComponent;\n\n const parentComponent = this.focusableComponents[parentFocusKey!];\n\n if (parentComponent) {\n this.saveLastFocusedChildKey(\n parentComponent,\n currentComponent.focusKey\n );\n }\n\n currentComponent = parentComponent;\n }\n }\n\n getKeyMap(): KeyMap {\n return this.keyMap;\n }\n\n setKeyMap(keyMap: KeyMap): void {\n this.keyMap = {\n ...this.getKeyMap(),\n ...keyMap,\n };\n }\n\n isFocusableComponent(focusKey: string): boolean {\n return !!this.focusableComponents[focusKey];\n }\n\n /**\n * Checks whether the focusableComponent is actually participating in spatial navigation (in other words, is a\n * 'focusable' focusableComponent). Seems less confusing than calling it isFocusableFocusableComponent()\n */\n isParticipatingFocusableComponent(focusKey: string): boolean {\n return (\n this.isFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].focusable\n );\n }\n\n onIntermediateNodeBecameFocused(focusKey: string, details: Details): void {\n this.isParticipatingFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].onBecameFocusedHandler?.(\n this.getNodeLayoutByFocusKey(focusKey)!,\n details\n );\n }\n\n onIntermediateNodeBecameBlurred(focusKey: string, details: Details): void {\n this.isParticipatingFocusableComponent(focusKey) &&\n this.focusableComponents[focusKey].onBecameBlurredHandler?.(\n this.getNodeLayoutByFocusKey(focusKey)!,\n details\n );\n }\n\n pause(): void {\n this.parentsHavingFocusedChild = [];\n this.pressedKeys = {};\n this.log('pause', 'paused');\n this.visualDebugger?.clear();\n this.visualDebugger?.clearLayouts();\n this.getFocusableComponents().forEach((component) => {\n component.onUpdateFocus?.(false);\n component.onUpdateHasFocusedChild?.(false);\n });\n this.paused = true;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n setFocus(\n targetFocusKey: string,\n details: Details = { pressedKeys: {} }\n ): void {\n const lastFocusedKey = this.focusKey;\n const newFocusKey = this.getNextFocusKey(targetFocusKey);\n\n this.log('setFocus', 'newFocusKey', newFocusKey);\n\n this.setCurrentFocusedKey(newFocusKey, details);\n this.updateParentsHasFocusedChild(newFocusKey, details);\n this.updateParentsLastFocusedChild(lastFocusedKey!);\n }\n\n updateAllLayouts(): void {\n if (this.nativeMode) {\n return;\n }\n\n Object.entries(this.focusableComponents).forEach(([focusKey]) => {\n this.updateLayout(focusKey);\n });\n }\n\n updateLayout(focusKey: string): void {\n const component = this.focusableComponents[focusKey];\n\n if (!component || this.nativeMode || component.layoutUpdated) {\n return;\n }\n\n const { node } = component;\n\n measureLayout(\n node,\n (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => {\n component.layout = {\n x,\n y,\n width,\n height,\n left,\n top,\n node,\n };\n }\n );\n }\n\n updateFocusable(\n focusKey: string,\n {\n node,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut,\n }: UpdateFocusableOptions\n ): void {\n if (this.nativeMode) {\n return;\n }\n\n const component = this.focusableComponents[focusKey];\n\n if (component) {\n component.preferredChildFocusKey = preferredChildFocusKey;\n component.focusable = focusable ?? component.focusable;\n component.blockNavigationOut = blockNavigationOut;\n\n if (node) {\n component.node = node;\n }\n }\n }\n\n isNativeMode(): boolean {\n return this.nativeMode;\n }\n\n getFocusableComponents(): FocusableComponent[] {\n return Object.values(this.focusableComponents) as FocusableComponent[];\n }\n\n getFocusableComponentsByParentFocusKey(\n parentFocusKey: string\n ): FocusableComponent[] {\n return Object.values(this.focusableComponents).filter(\n (component) => component.parentFocusKey === parentFocusKey\n ) as FocusableComponent[];\n }\n}\n\n/**\n * Export singleton\n */\nexport default SpatialNavigation;\n","export const DIRECTION_LEFT = 'left';\nexport const DIRECTION_RIGHT = 'right';\nexport const DIRECTION_UP = 'up';\nexport const DIRECTION_DOWN = 'down';\nexport const KEY_ENTER = 'enter';\nexport const KEY_BACK = 'back';\n\nexport type Direction =\n | typeof DIRECTION_LEFT\n | typeof DIRECTION_RIGHT\n | typeof DIRECTION_UP\n | typeof DIRECTION_DOWN;\n\nexport interface Layout {\n x: number;\n y: number;\n width: number;\n height: number;\n left: number;\n top: number;\n node: HTMLElement;\n}\n\nexport interface Details {\n pressedKeys: Record<string, number>;\n layout?: Layout;\n event?: Event;\n mouseClick?: boolean;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* Warning: Do not play with :root */\\n.sdk-wrapper {\\n font-family: var(--sdk-font-body);\\n color: var(--sdk-text100);\\n --sdk-bets: #20f4ca;\\n --sdk-highlightPrimary-rgb: 255, 255, 255;\\n}\\n\\n.sdk-wrapper .focus-ring {\\n border: 3px solid transparent;\\n transition: border-color 0.2s ease-in-out;\\n border-radius: 10px;\\n}\\n\\n.sdk-wrapper .focus-ring[data-focused='true'] {\\n border-color: var(--sdk-highlightPrimary);\\n}\\n\\n.sdk-wrapper .focus-opacity {\\n background-color: transparent;\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.sdk-wrapper .focus-opacity[data-focused='true'] {\\n background-color: rgba(var(--sdk-highlightPrimary-rgb), 0.078);\\n}\\n\\n.FONT_BOLD_HEADLINE {\\n font-family: var(--sdk-font-headline);\\n}\\n\\n.FONT_BOLD {\\n font-family: var(--sdk-font-title);\\n}\\n\\n.TEXT_200 {\\n color: var(--sdk-text200);\\n}\\n\\n.T01 {\\n font-size: 18px;\\n font-weight: 400;\\n line-height: 24px;\\n}\\n\\n.T02 {\\n font-size: 18px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T04 {\\n font-size: 20px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T05_ALT {\\n font-size: 21px;\\n font-weight: 500;\\n line-height: 28px;\\n}\\n\\n.T10 {\\n font-size: 23px;\\n font-weight: 500;\\n line-height: 32px;\\n}\\n\\n.T20 {\\n font-size: 27px;\\n font-weight: 500;\\n line-height: 36px;\\n}\\n\\n.T30 {\\n font-size: 29px;\\n font-weight: 700;\\n line-height: 36px;\\n}\\n\\n.T50 {\\n font-size: 34px;\\n line-height: 40px;\\n}\\n\\n.T60 {\\n font-size: 38px;\\n font-weight: 500;\\n line-height: 44px;\\n}\\n\\n.T70 {\\n font-size: 48px;\\n font-weight: 900;\\n line-height: 56px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/App/App.styles.css\"],\"names\":[],\"mappings\":\"AAAA,oCAAoC;AACpC;EACE,iCAAiC;EACjC,yBAAyB;EACzB,mBAAmB;EACnB,yCAAyC;AAC3C;;AAEA;EACE,6BAA6B;EAC7B,yCAAyC;EACzC,mBAAmB;AACrB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,6BAA6B;EAC7B,6CAA6C;AAC/C;;AAEA;EACE,8DAA8D;AAChE;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,iBAAiB;AACnB\",\"sourcesContent\":[\"/* Warning: Do not play with :root */\\n.sdk-wrapper {\\n font-family: var(--sdk-font-body);\\n color: var(--sdk-text100);\\n --sdk-bets: #20f4ca;\\n --sdk-highlightPrimary-rgb: 255, 255, 255;\\n}\\n\\n.sdk-wrapper .focus-ring {\\n border: 3px solid transparent;\\n transition: border-color 0.2s ease-in-out;\\n border-radius: 10px;\\n}\\n\\n.sdk-wrapper .focus-ring[data-focused='true'] {\\n border-color: var(--sdk-highlightPrimary);\\n}\\n\\n.sdk-wrapper .focus-opacity {\\n background-color: transparent;\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.sdk-wrapper .focus-opacity[data-focused='true'] {\\n background-color: rgba(var(--sdk-highlightPrimary-rgb), 0.078);\\n}\\n\\n.FONT_BOLD_HEADLINE {\\n font-family: var(--sdk-font-headline);\\n}\\n\\n.FONT_BOLD {\\n font-family: var(--sdk-font-title);\\n}\\n\\n.TEXT_200 {\\n color: var(--sdk-text200);\\n}\\n\\n.T01 {\\n font-size: 18px;\\n font-weight: 400;\\n line-height: 24px;\\n}\\n\\n.T02 {\\n font-size: 18px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T04 {\\n font-size: 20px;\\n font-weight: 500;\\n line-height: 24px;\\n}\\n\\n.T05_ALT {\\n font-size: 21px;\\n font-weight: 500;\\n line-height: 28px;\\n}\\n\\n.T10 {\\n font-size: 23px;\\n font-weight: 500;\\n line-height: 32px;\\n}\\n\\n.T20 {\\n font-size: 27px;\\n font-weight: 500;\\n line-height: 36px;\\n}\\n\\n.T30 {\\n font-size: 29px;\\n font-weight: 700;\\n line-height: 36px;\\n}\\n\\n.T50 {\\n font-size: 34px;\\n line-height: 40px;\\n}\\n\\n.T60 {\\n font-size: 38px;\\n font-weight: 500;\\n line-height: 44px;\\n}\\n\\n.T70 {\\n font-size: 48px;\\n font-weight: 900;\\n line-height: 56px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".sdk--panel-manager {\\n padding: 60px;\\n padding-left: 48px;\\n padding-bottom: 0;\\n display: block;\\n}\\n\\n.sdk--panel-manager .panel-coming-soon {\\n display: block;\\n text-align: center;\\n}\\n\\n.sdk--panel-loading {\\n display: block;\\n padding: 40px 20px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/PanelManager/PanelManager.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,kBAAkB;EAClB,iBAAiB;EACjB,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB\",\"sourcesContent\":[\".sdk--panel-manager {\\n padding: 60px;\\n padding-left: 48px;\\n padding-bottom: 0;\\n display: block;\\n}\\n\\n.sdk--panel-manager .panel-coming-soon {\\n display: block;\\n text-align: center;\\n}\\n\\n.sdk--panel-loading {\\n display: block;\\n padding: 40px 20px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".panel-navigation {\\n width: 100%;\\n}\\n\\n.panel-navigation > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.panel-navigation .panel-nav-button-container {\\n display: inline-block;\\n margin-right: 12px;\\n}\\n\\n.panel-navigation .panel-nav-button-container:last-child {\\n margin-right: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/organisms/PanelNavigation/PanelNavigation.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;AACb;;AAEA;EACE,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB\",\"sourcesContent\":[\".panel-navigation {\\n width: 100%;\\n}\\n\\n.panel-navigation > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.panel-navigation .panel-nav-button-container {\\n display: inline-block;\\n margin-right: 12px;\\n}\\n\\n.panel-navigation .panel-nav-button-container:last-child {\\n margin-right: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".panel-nav-button-container {\\n display: block;\\n text-align: center;\\n color: var(--sdk-text300);\\n font-family: var(--sdk-font-title);\\n box-sizing: border-box;\\n}\\n\\n.panel-nav-button-container > * {\\n margin-bottom: 0;\\n}\\n\\n.panel-nav-button-container path {\\n fill: var(--sdk-highlightSecondary);\\n}\\n\\n.panel-nav-button-container button {\\n padding: 8px 0;\\n background-color: var(--sdk-surface3);\\n\\n transition: background-color 0.2s ease-in-out, color 0.3s ease-in-out;\\n}\\n\\n.panel-nav-button-container .panel-nav-label {\\n margin-top: 10px;\\n}\\n\\n.panel-nav-button-container[data-focused='true'],\\n.panel-nav-button-container:hover,\\n.panel-nav-button-active {\\n color: var(--sdk-text100);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] path,\\n.panel-nav-button-container:hover path {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] rect,\\n.panel-nav-button-container:hover rect {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] button,\\n.panel-nav-button-container:hover button {\\n background-color: var(--sdk-accentPrimary);\\n}\\n\\n.panel-nav-button-active button {\\n background-color: var(--sdk-surface5);\\n}\\n\\n.panel-nav-button-active path {\\n fill: var(--sdk-highlightPrimary);\\n}\\n\\n.panel-nav-button-container .FONT_BOLD {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-family: var(--sdk-font-headline);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/molecules/PanelNavButton/PanelNavButton.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAc;EACd,kBAAkB;EAClB,yBAAyB;EACzB,kCAAkC;EAClC,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,qCAAqC;;EAErC,qEAAqE;AACvE;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;;EAGE,yBAAyB;AAC3B;;AAEA;;EAEE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;;EAEE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;;EAEE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,qCAAqC;AACvC\",\"sourcesContent\":[\".panel-nav-button-container {\\n display: block;\\n text-align: center;\\n color: var(--sdk-text300);\\n font-family: var(--sdk-font-title);\\n box-sizing: border-box;\\n}\\n\\n.panel-nav-button-container > * {\\n margin-bottom: 0;\\n}\\n\\n.panel-nav-button-container path {\\n fill: var(--sdk-highlightSecondary);\\n}\\n\\n.panel-nav-button-container button {\\n padding: 8px 0;\\n background-color: var(--sdk-surface3);\\n\\n transition: background-color 0.2s ease-in-out, color 0.3s ease-in-out;\\n}\\n\\n.panel-nav-button-container .panel-nav-label {\\n margin-top: 10px;\\n}\\n\\n.panel-nav-button-container[data-focused='true'],\\n.panel-nav-button-container:hover,\\n.panel-nav-button-active {\\n color: var(--sdk-text100);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] path,\\n.panel-nav-button-container:hover path {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] rect,\\n.panel-nav-button-container:hover rect {\\n fill: var(--sdk-highlightTertiary);\\n stroke: var(--sdk-highlightTertiary);\\n}\\n\\n.panel-nav-button-container[data-focused='true'] button,\\n.panel-nav-button-container:hover button {\\n background-color: var(--sdk-accentPrimary);\\n}\\n\\n.panel-nav-button-active button {\\n background-color: var(--sdk-surface5);\\n}\\n\\n.panel-nav-button-active path {\\n fill: var(--sdk-highlightPrimary);\\n}\\n\\n.panel-nav-button-container .FONT_BOLD {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-family: var(--sdk-font-headline);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".base-button {\\n border-radius: 6px;\\n display: block;\\n text-align: center;\\n cursor: pointer;\\n width: 100%;\\n border: none;\\n font-family: var(--sdk-font-title);\\n}\\n\\n.base-button > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/atoms/BaseButton/BaseButton.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,cAAc;EACd,kBAAkB;EAClB,eAAe;EACf,WAAW;EACX,YAAY;EACZ,kCAAkC;AACpC;;AAEA;EACE,qBAAqB;EACrB,sBAAsB;AACxB\",\"sourcesContent\":[\".base-button {\\n border-radius: 6px;\\n display: block;\\n text-align: center;\\n cursor: pointer;\\n width: 100%;\\n border: none;\\n font-family: var(--sdk-font-title);\\n}\\n\\n.base-button > * {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".scrollable-container {\\n position: relative;\\n}\\n\\n.scrollable-container::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n height: 58px; /* Height of the top gradient */\\n z-index: 0;\\n transition: z-index 0.3s ease;\\n}\\n\\n.scrollable-container[data-scrolled='true']::before {\\n z-index: 1;\\n background: linear-gradient(0deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.scrollable-container::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n height: 96px; /* Height of the bottom gradient */\\n background: linear-gradient(180deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.focusable-item {\\n width: 100%;\\n height: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/core/ScrollableContainer/ScrollableContainer.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,YAAY,EAAE,+BAA+B;EAC7C,UAAU;EACV,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,yEAAyE;AAC3E;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,SAAS;EACT,YAAY,EAAE,kCAAkC;EAChD,2EAA2E;AAC7E;;AAEA;EACE,WAAW;EACX,YAAY;AACd\",\"sourcesContent\":[\".scrollable-container {\\n position: relative;\\n}\\n\\n.scrollable-container::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n height: 58px; /* Height of the top gradient */\\n z-index: 0;\\n transition: z-index 0.3s ease;\\n}\\n\\n.scrollable-container[data-scrolled='true']::before {\\n z-index: 1;\\n background: linear-gradient(0deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.scrollable-container::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n height: 96px; /* Height of the bottom gradient */\\n background: linear-gradient(180deg, #080a0c00 0%, var(--sdk-surface1) 100%);\\n}\\n\\n.focusable-item {\\n width: 100%;\\n height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import React, { useEffect, useRef } from 'react';\nimport { useScrollableContainer } from './useScrollableContainer';\n\ntype Props = {\n children: React.ReactNode;\n};\n\n/**\n * Component to be used as a child of `ScrollableContainer`.\n * Wraps the focusable item and registers it in the context.\n * Automatically unregisters on unmount to prevent memory leaks.\n */\nconst FocusableItem: React.FC<Props> = ({ children }) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const { setRef, removeRef } = useScrollableContainer();\n\n useEffect(() => {\n const element = ref.current;\n if (element) {\n setRef(element);\n }\n\n return () => {\n if (element) {\n removeRef(element);\n }\n };\n }, [setRef, removeRef]);\n\n return (\n <div className=\"focusable-item\" ref={ref}>\n {children}\n </div>\n );\n};\n\nexport default FocusableItem;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./ScrollableContainer.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useState, useRef, useCallback, useMemo } from 'react';\nimport './ScrollableContainer.styles.css';\nimport { Layout } from '@/external/spatial-navigation/utils';\n\nconst wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport interface ScrollableContainerContextType {\n /**\n * Sets a reference for a focusable item.\n * This is used to register the item in the context so it can be focused later.\n */\n setRef: (ref: HTMLElement) => void;\n /**\n * Removes a reference for a focusable item.\n * This is used to unregister the item when it unmounts to prevent memory leaks.\n */\n removeRef: (ref: HTMLElement) => void;\n /**\n * Called when an item is focused.\n * This function scrolls the container to the focused item if necessary.\n */\n scrollToFocusedElement: (\n layout: Layout,\n options?: { offsetTop?: number }\n ) => void;\n}\n\ntype ScrollableContainerProps = {\n children?: React.ReactNode;\n /**\n * The element that is scrollable.\n * This is typically a container that has overflow set to auto or scroll.\n */\n scrollableContainerRef?: HTMLElement | null;\n /**\n * The top offset of the container, used to adjust the scroll position.\n * This is useful if the container has a fixed header or similar elements.\n */\n containerTopOffset?: number;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Context for ScrollableContainer\n */\nexport const ScrollableContainerContext = React.createContext<\n ScrollableContainerContextType\n>({\n setRef: () => {},\n removeRef: () => {},\n scrollToFocusedElement: () => {},\n});\n\n/**\n * ScrollableContainer component provides a context for focusable items\n * that allows them to register themselves and handle scrolling\n * when they become focused.\n * @example\n * ```jsx\n * <ScrollableContainer scrollableContainerRef={scrollableContainerRef}>\n * <FocusableItem>Item 1</FocusableItem>\n * <FocusableItem>Item 2</FocusableItem>\n * <FocusableItem>Item 3</FocusableItem>\n * </ScrollableContainer>\n * ```\n */\nexport const ScrollableContainer: React.FC<ScrollableContainerProps> = ({\n children,\n scrollableContainerRef,\n containerTopOffset = 0,\n ...rest\n}) => {\n const [scrolled, setScrolled] = useState(false);\n const refsSet = useRef<Set<HTMLElement>>(new Set());\n const hashRef = useRef('');\n const lastHashRef = useRef('');\n const sortedRefsCache = useRef<HTMLElement[]>([]);\n\n const setRef = useCallback((ref: HTMLElement) => {\n refsSet.current.add(ref);\n hashRef.current = Math.random().toString(36).substring(2, 15);\n }, []);\n\n const removeRef = useCallback((ref: HTMLElement) => {\n refsSet.current.delete(ref);\n hashRef.current = Math.random().toString(36).substring(2, 15);\n }, []);\n\n const getOrderedRefs = useCallback(() => {\n if (hashRef.current === lastHashRef.current) {\n return sortedRefsCache.current;\n }\n\n const refsArray = Array.from(refsSet.current);\n\n sortedRefsCache.current = refsArray.sort((a, b) => {\n if (!scrollableContainerRef) return 0;\n const containerRect = scrollableContainerRef.getBoundingClientRect();\n const aRect = a ? a.getBoundingClientRect() : { top: 0, bottom: 0 };\n const bRect = b ? b.getBoundingClientRect() : { top: 0, bottom: 0 };\n\n // Calculate the actual distance from container top (positive means below, negative means above)\n const aDistance = aRect.top - containerRect.top;\n const bDistance = bRect.top - containerRect.top;\n\n return aDistance - bDistance;\n });\n\n lastHashRef.current = hashRef.current;\n return sortedRefsCache.current;\n }, [scrollableContainerRef]);\n\n /**\n * @description - Scrolls the container to the focused element if necessary\n */\n const scrollToFocusedElement = useCallback(\n async (layout: Layout, options?: { offsetTop?: number }) => {\n if (!scrollableContainerRef || !layout.node) return;\n\n const offsetTop = options?.offsetTop || 0;\n const refs = getOrderedRefs();\n\n // Wait for the next frame to ensure the layout is updated\n if (process.env.NODE_ENV !== 'test') {\n await wait(0);\n }\n\n const containerRect = scrollableContainerRef.getBoundingClientRect();\n const nodeRect = layout.node.getBoundingClientRect();\n let index = -1;\n\n for (let i = refs.length - 1; i >= 0; i--) {\n if (refs[i].contains(layout.node)) {\n index = i;\n break;\n }\n }\n\n if (index === -1) {\n console.warn(\n 'Element not found in refsMap to focus to. Register the element wrapping it with <FocusableItem />'\n );\n return;\n }\n\n let hasOutside = false;\n\n refs.slice(index).forEach((el) => {\n const rect = el.getBoundingClientRect();\n if (\n rect.bottom > containerRect.bottom ||\n rect.top < containerRect.top\n ) {\n hasOutside = true;\n }\n });\n\n if (!hasOutside) return;\n\n const target =\n index === 0\n ? 0\n : scrollableContainerRef.scrollTop +\n (nodeRect.top - containerRect.top - containerTopOffset - offsetTop);\n scrollableContainerRef.scrollTop = target;\n\n setScrolled((prev) => {\n const newScrolled = target > 0;\n return prev !== newScrolled ? newScrolled : prev;\n });\n },\n [scrollableContainerRef, containerTopOffset, getOrderedRefs]\n );\n\n const contextValue = useMemo(\n () => ({\n setRef,\n removeRef,\n scrollToFocusedElement,\n }),\n [setRef, removeRef, scrollToFocusedElement]\n );\n\n return (\n <ScrollableContainerContext.Provider value={contextValue}>\n <div className=\"scrollable-container\" data-scrolled={scrolled} {...rest}>\n {children}\n </div>\n </ScrollableContainerContext.Provider>\n );\n};\n\nexport default ScrollableContainer;\n","import { useContext } from 'react';\nimport { ScrollableContainerContext } from './ScrollableContainer';\n\n/**\n * Custom hook to access the ScrollableContainer context.\n * Use this hook in components that need to interact with the scrollable container.\n *\n * @example\n * ```tsx\n * const { scrollToFocusedElement } = useScrollableContainer();\n *\n * const handleFocus = (layout: Layout) => {\n * scrollToFocusedElement(layout, { offsetTop: 20 });\n * };\n * ```\n */\nexport const useScrollableContainer = () => {\n const context = useContext(ScrollableContainerContext);\n if (!context) {\n throw new Error(\n 'useScrollableContainer must be used within a ScrollableContainer'\n );\n }\n return context;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { MaestroPanelType } from '@/models/IPanel';\n\n// Lazy load all icon components\nconst KeyPlaysIcon = lazy(() => import('./KeyPlaysIcon'));\nconst PlayIcon = lazy(() => import('./PlayIcon'));\nconst BetsIcon = lazy(() => import('./BetsIcon'));\nconst StatsIcon = lazy(() => import('./StatsIcon'));\nconst WarningIcon = lazy(() => import('./WarningIcon'));\nconst ExpandIcon = lazy(() => import('./ExpandIcon'));\nconst CollapseIcon = lazy(() => import('./CollapseIcon'));\nconst TimesIcon = lazy(() => import('./TimesIcon'));\nconst CheckmarkIcon = lazy(() => import('./CheckmarkIcon'));\nconst FlameIcon = lazy(() => import('./FlameIcon'));\nconst BetsWarningIcon = lazy(() => import('./BetsWarningIcon'));\nconst MobilePhoneIcon = lazy(() => import('./MobilePhoneIcon'));\nconst FantasyIcon = lazy(() => import('./FantasyIcon'));\nconst ShopIcon = lazy(() => import('./ShopIcon'));\nconst HelloWorldIcon = lazy(() => import('./HelloWorldIcon'));\nconst ChatIcon = lazy(() => import('./ChatIcon'));\nconst ShopifyIcon = lazy(() => import('./ShopifyIcon'));\nconst BuilderIcon = lazy(() => import('./BuilderIcon'));\nconst FoxKeyPlaysIcon = lazy(() => import('./FoxKeyPlaysIcon'));\nconst FoxStatsIcon = lazy(() => import('./FoxStatsIcon'));\nconst FoxMultiViewIcon = lazy(() => import('./FoxMultiViewIcon'));\n\n// Ensures all MaestroPanelType values have icons\nconst panelIcons: Record<MaestroPanelType, React.LazyExoticComponent<any>> = {\n [MaestroPanelType.ESPN_KEY_PLAYS]: KeyPlaysIcon,\n [MaestroPanelType.ESPN_BETS]: BetsIcon,\n [MaestroPanelType.ESPN_STATS]: StatsIcon,\n [MaestroPanelType.ESPN_FANTASY]: FantasyIcon,\n [MaestroPanelType.ESPN_SHOP]: ShopIcon,\n [MaestroPanelType.HELLO_WORLD]: HelloWorldIcon,\n [MaestroPanelType.FOX_STATS]: FoxStatsIcon,\n [MaestroPanelType.FOX_KEY_PLAYS]: FoxKeyPlaysIcon,\n [MaestroPanelType.FOX_MULTI_VIEW]: FoxMultiViewIcon,\n [MaestroPanelType.BUILDER_BLOCK_PANEL]: BuilderIcon,\n};\n\nconst otherIcons: Record<string, React.LazyExoticComponent<any>> = {\n play: PlayIcon,\n warning: WarningIcon,\n expand: ExpandIcon,\n collapse: CollapseIcon,\n times: TimesIcon,\n checkmark: CheckmarkIcon,\n flame: FlameIcon,\n betsWarning: BetsWarningIcon,\n mobilePhone: MobilePhoneIcon,\n chat: ChatIcon,\n shopifyBlockPanel: ShopifyIcon,\n};\n\nconst iconImports: Record<string, React.LazyExoticComponent<any>> = {\n ...panelIcons,\n ...otherIcons,\n};\n\nexport type IconsName = keyof typeof iconImports;\n\nexport type IconProps = {\n iconName: IconsName;\n width: number;\n height: number;\n};\n\n// Skeleton component for loading state\nconst Skeleton = (props: Omit<IconProps, 'iconName'>) => (\n <div style={{ width: props.width, height: props.height }} />\n);\n\ninterface IconState {\n loaded: boolean;\n}\nclass Icon extends React.Component<IconProps, IconState> {\n render() {\n const { iconName, width, height } = this.props;\n\n const IconComponent = iconImports[iconName];\n if (!IconComponent) {\n return <Skeleton width={width} height={height} />;\n }\n\n return (\n <Suspense fallback={<Skeleton width={width} height={height} />}>\n <IconComponent iconName={iconName} width={width} height={height} />\n </Suspense>\n );\n }\n}\n\nexport default Icon;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./BaseButton.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from 'react';\nimport { ButtonHTMLAttributes } from 'react';\nimport './BaseButton.styles.css';\nimport FocusableItem from '@/components/core/ScrollableContainer/FocusableItem';\n\nclass BaseButton extends React.Component<\n ButtonHTMLAttributes<HTMLButtonElement>\n> {\n render() {\n const className = ['base-button', this.props.className].join(' ');\n\n return (\n <FocusableItem>\n <button {...this.props} className={className}>\n {this.props.children}\n </button>\n </FocusableItem>\n );\n }\n}\n\nexport default BaseButton;\n","import { Observable } from '../helpers/Observable';\n\n/**\n * Base view model that implements reactive properties\n */\nexport abstract class ViewModel {\n private _isLoading = new Observable<boolean>(false);\n private _error = new Observable<string | null>(null);\n\n get isLoading(): Observable<boolean> {\n return this._isLoading;\n }\n\n get error(): Observable<string | null> {\n return this._error;\n }\n\n protected setLoading(loading: boolean): void {\n this._isLoading.value = loading;\n }\n\n protected setError(error: string | null): void {\n this._error.value = error;\n }\n}\n","// Network error types\nexport class NetworkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NetworkError';\n }\n}\n\nexport class AuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AuthError';\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ServerError extends Error {\n statusCode: number;\n\n constructor(statusCode: number, message: string) {\n super(message);\n this.name = 'ServerError';\n this.statusCode = statusCode;\n }\n}\n\nexport class BadRequestError extends Error {\n statusCode: number;\n\n constructor(statusCode: number, message: string) {\n super(message);\n this.name = 'BadRequestError';\n this.statusCode = statusCode;\n }\n}\n","import AxiosNetworkClient from '../../external/AxiosNetworkClient';\nimport LocalStorageCacheManager from '../../external/LocalStorageCacheManager';\nimport { ICacheManager } from '../../external/ports/cacheManager';\nimport { INetworkClient } from '../../external/ports/networkClient';\nimport {\n AuthError,\n BadRequestError,\n NetworkError,\n NotFoundError,\n ServerError,\n} from './errors';\n\nexport const MAESTRO_BASE_URL = 'https://api.maestro.io';\nexport const SDK_FLAVOR = 'MaestroKit_Web';\n\n// Common endpoints\nexport const ENDPOINTS = {\n CAN_I_PLAY: '/caniplay/v1',\n STREAM: '/stream/v1',\n USER_PROFILE: '/userprofile/v1',\n ACTIVE_USER: '/active/v2',\n // Add more endpoints as needed\n};\n\n// HTTP methods\nexport const HttpMethod = {\n GET: 'GET',\n POST: 'POST',\n PUT: 'PUT',\n DELETE: 'DELETE',\n} as const;\n\nexport type HttpMethod = typeof HttpMethod[keyof typeof HttpMethod];\n\nexport interface NetworkManagerOptions {\n networkClient?: INetworkClient;\n externalNetworkClient?: INetworkClient;\n externalBaseURL?: string;\n cacheManager?: ICacheManager;\n defaultCacheDuration?: number;\n}\n\nclass NetworkManager {\n private cacheManager: ICacheManager;\n private maestroClient: INetworkClient;\n private externalClient: INetworkClient;\n private pollingTasks: Map<\n string,\n { interval: number; controller: AbortController }\n >;\n private localStorage: Storage;\n\n constructor(\n options: NetworkManagerOptions = {},\n localStorageOverride?: Storage\n ) {\n this.pollingTasks = new Map();\n\n // Initialize cache manager\n this.cacheManager =\n options.cacheManager ||\n new LocalStorageCacheManager(options.defaultCacheDuration);\n\n // Initialize Maestro API client\n this.maestroClient =\n options.networkClient ||\n new AxiosNetworkClient({\n baseURL: MAESTRO_BASE_URL,\n retries: 3,\n delay: 1000,\n backoff: 2,\n });\n\n // Initialize External API client\n this.externalClient =\n options.externalNetworkClient ||\n new AxiosNetworkClient({\n baseURL: options.externalBaseURL || '',\n retries: 3,\n delay: 1000,\n backoff: 2,\n });\n\n this.localStorage = localStorageOverride ||\n (typeof globalThis !== 'undefined' && globalThis.localStorage) || {\n length: 0,\n clear: () => {},\n getItem: () => null,\n key: () => null,\n removeItem: () => {},\n setItem: () => {},\n };\n }\n\n /**\n * Set authentication for Maestro APIs\n */\n setAuthentication(token: string | null, apiKey: string | null): void {\n this.maestroClient.setAuthentication(token, apiKey);\n }\n\n /**\n * Execute a request with optional caching\n * Extracts duplicated cache logic from request methods\n */\n private async withCache<T>(\n cacheParams: { endpoint: string; params: Record<string, any> },\n useCache: boolean,\n fetchFn: () => Promise<T>\n ): Promise<T> {\n const cacheKey = this.cacheManager.produceCacheKey(\n JSON.stringify({\n endpoint: cacheParams.endpoint,\n params: cacheParams.params,\n data: null,\n })\n );\n\n if (useCache) {\n const cachedData = this.cacheManager.getCache<T>(cacheKey);\n if (cachedData) {\n return cachedData;\n }\n }\n\n const response = await fetchFn();\n\n if (useCache) {\n this.cacheManager.setCache(cacheKey, response);\n }\n\n return response;\n }\n\n /**\n * Handle errors from network requests\n */\n private handleError(error: any): never {\n // Check if it's an Axios error with a response\n if (error.response) {\n const status = error.response.status;\n const message = error.response.data?.message || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthError(message);\n } else if (status === 404) {\n throw new NotFoundError(message);\n } else if (status >= 500) {\n throw new ServerError(status, message);\n } else {\n throw new BadRequestError(status, message);\n }\n } else if (error.request) {\n // Request was made but no response received\n throw new NetworkError('Network request failed');\n } else {\n // Something else happened while setting up the request\n throw error;\n }\n }\n\n /**\n * Make a request to the Maestro API\n */\n async maestroApiRequest<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n maestroDefaultHeaders = null,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n maestroDefaultHeaders?: { siteId: string; jwt: string } | null;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<T> {\n // Add SDK flavor to headers\n const requestHeaders: Record<string, string> = {\n 'x-maestro-maestro-kit-flavor': SDK_FLAVOR,\n ...headers,\n };\n\n // Add Maestro default headers if provided\n if (maestroDefaultHeaders) {\n requestHeaders['x-maestro-client-id'] = maestroDefaultHeaders.siteId;\n requestHeaders['Authorization'] = `Bearer ${maestroDefaultHeaders.jwt}`;\n requestHeaders['Content-type'] = 'application/json';\n }\n\n const shouldCache = method === HttpMethod.GET && useCache;\n\n const fetchFn = async (): Promise<T> => {\n let response: T;\n\n if (method === HttpMethod.GET) {\n response = await this.maestroClient.get<T>(\n endpoint,\n params,\n requestHeaders\n );\n } else if (method === HttpMethod.POST) {\n response = await this.maestroClient.post<any, T>(endpoint, data);\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response) {\n response = {} as T;\n }\n\n return response;\n };\n\n try {\n return await this.withCache<T>(\n { endpoint, params },\n shouldCache,\n fetchFn\n );\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Make a request to an external API\n */\n async externalApiRequest<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<T> {\n const shouldCache = method === HttpMethod.GET && useCache;\n\n const fetchFn = async (): Promise<T> => {\n let response: T;\n\n if (method === HttpMethod.GET) {\n response = await this.externalClient.get<T>(endpoint, params, headers);\n } else if (method === HttpMethod.POST) {\n response = await this.externalClient.post<any, T>(endpoint, data);\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response) {\n response = {} as T;\n }\n\n return response;\n };\n\n try {\n return await this.withCache<T>(\n { endpoint, params },\n shouldCache,\n fetchFn\n );\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Make a request to an external API and return both data and headers\n * Note: Only data is cached, headers are not persisted\n */\n async externalApiRequestWithHeaders<T = any>({\n endpoint,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n useCache = false,\n skipResponseBodyDeserialization = false,\n }: {\n endpoint: string;\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n useCache?: boolean;\n skipResponseBodyDeserialization?: boolean;\n }): Promise<{ data: T; headers: Record<string, string> }> {\n const shouldCache = method === HttpMethod.GET && useCache;\n const cacheKey = this.cacheManager.produceCacheKey(\n JSON.stringify({ endpoint, params, data: null })\n );\n\n // Check cache - return cached data with empty headers\n if (shouldCache) {\n const cachedData = this.cacheManager.getCache<T>(cacheKey);\n if (cachedData) {\n return { data: cachedData, headers: {} };\n }\n }\n\n try {\n let response: { data: T; headers: Record<string, string> };\n\n if (method === HttpMethod.GET) {\n response = await this.externalClient.getWithHeaders<T>(\n endpoint,\n params,\n headers\n );\n } else if (method === HttpMethod.POST) {\n response = await this.externalClient.postWithHeaders<any, T>(\n endpoint,\n data,\n params,\n headers\n );\n } else {\n throw new Error(`Method ${method} not implemented`);\n }\n\n if (skipResponseBodyDeserialization && !response.data) {\n response.data = {} as T;\n }\n\n // Cache only data, not headers\n if (shouldCache) {\n this.cacheManager.setCache(cacheKey, response.data);\n }\n\n return response;\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n /**\n * Start polling a Maestro API endpoint at specified interval\n */\n pollMaestroApiRequest<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n maestroDefaultHeaders = null,\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n maestroDefaultHeaders?: { siteId: string; jwt: string } | null;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: T) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `${endpoint}-${JSON.stringify(params)}-${JSON.stringify(\n data\n )}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.maestroApiRequest<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n maestroDefaultHeaders,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with the data\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Start polling an external API endpoint at specified interval\n */\n pollExternalApiRequest<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: T) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `external-${endpoint}-${JSON.stringify(\n params\n )}-${JSON.stringify(data)}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.externalApiRequest<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with the data\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Start polling an external API endpoint at specified interval and return both data and headers\n */\n pollExternalApiRequestWithHeaders<T = any>({\n endpoint,\n interval,\n method = HttpMethod.GET,\n params = {},\n data = null,\n headers = {},\n skipResponseBodyDeserialization = false,\n onData,\n onError,\n }: {\n endpoint: string;\n interval: number; // milliseconds\n method?: HttpMethod;\n params?: Record<string, any>;\n data?: any;\n headers?: Record<string, string>;\n skipResponseBodyDeserialization?: boolean;\n onData: (data: { data: T; headers: Record<string, string> }) => void;\n onError?: (error: Error) => void;\n }): { stop: () => void } {\n // Create a unique key for this polling task\n const taskKey = `external-headers-${endpoint}-${JSON.stringify(\n params\n )}-${JSON.stringify(data)}`;\n\n // Stop existing polling for this endpoint if it exists\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n\n // Create a new abort controller for cancellation\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the polling\n (async () => {\n while (!signal.aborted) {\n try {\n const response = await this.externalApiRequestWithHeaders<T>({\n endpoint,\n method,\n params,\n data,\n headers,\n skipResponseBodyDeserialization,\n useCache: false, // Don't use cache for polling\n });\n\n // Call the callback with both data and headers\n onData(response);\n } catch (error) {\n // Call the error callback if provided\n if (onError) {\n onError(error as Error);\n }\n }\n\n // Wait for the interval before next poll\n if (!signal.aborted) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n }\n })();\n\n // Store the controller for later cancellation\n this.pollingTasks.set(taskKey, { controller, interval });\n\n // Return a function to stop polling\n return {\n stop: () => {\n if (this.pollingTasks.has(taskKey)) {\n this.pollingTasks.get(taskKey)?.controller.abort();\n this.pollingTasks.delete(taskKey);\n }\n },\n };\n }\n\n /**\n * Stop all polling tasks\n */\n stopAllPolling(): void {\n for (const [key, { controller }] of this.pollingTasks.entries()) {\n controller.abort();\n this.pollingTasks.delete(key);\n }\n }\n\n /**\n * Clear all cached data\n */\n clearAllCache(): void {\n const originalLength = this.localStorage.length;\n for (let i = 0; i < originalLength; i++) {\n const key = this.localStorage.key(i);\n if (key && key.startsWith('maestro-cache-')) {\n this.localStorage.removeItem(key);\n }\n }\n }\n}\n\nexport default NetworkManager;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","module.exports = require('./lib/axios');","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelManager.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelNavButton.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import BaseButton from '@/components/atoms/BaseButton/BaseButton';\nimport Icon, { IconsName } from '@/components/atoms/SvgIcon/Icon';\nimport './PanelNavButton.styles.css';\nimport React from 'react';\nimport { withFocusable } from '@/external/spatial-navigation';\n\ntype PanelNavButtonProps = {\n iconName: IconsName;\n index: number;\n active: boolean;\n children?: React.ReactNode;\n focused?: boolean;\n focusKey: string;\n onBecameFocused: () => void;\n width: string;\n};\n\nclass PanelNavButton extends React.Component<PanelNavButtonProps, {}> {\n static displayName = 'PanelNavButton';\n\n render() {\n const { iconName, active, children, focused, width } = this.props;\n return (\n <div\n className={[\n 'panel-nav-button-container',\n 'T02',\n active ? 'panel-nav-button-active' : '',\n ].join(' ')}\n data-focused={focused}\n style={{\n width,\n }}\n >\n <BaseButton>\n <Icon iconName={iconName} height={36} width={36} />\n </BaseButton>\n <div className=\"panel-nav-label FONT_BOLD\">{children}</div>\n </div>\n );\n }\n}\n\nexport default withFocusable<PanelNavButtonProps>()(PanelNavButton);\n","import PanelNavButton from './PanelNavButton';\n\nexport default PanelNavButton;\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./PanelNavigation.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import PanelNavButton from '@/components/molecules/PanelNavButton';\nimport { IconsName } from '@/components/atoms/SvgIcon/Icon';\nimport './PanelNavigation.styles.css';\nimport React from 'react';\nimport { Direction } from '@/external/spatial-navigation/utils';\nimport SDK from '@/index';\nimport {\n withFocusable,\n WithFocusableProps,\n} from '@/external/spatial-navigation';\n\ninterface PanelNavigationProps {\n items: {\n title: string;\n onEnter: () => void;\n iconName: IconsName;\n active: boolean;\n }[];\n}\n\nconst BUTTON_MARGIN = 12;\n\nclass PanelNavigationButton extends React.Component<{\n item: PanelNavigationProps['items'][number];\n index: number;\n onBecameFocused: (index: number) => () => void;\n onArrowPress?: (direction: Direction) => void;\n width: string;\n}> {\n handleArrowPress = (d: Direction, _props: any) => {\n if (d === 'left' && this.props.index === 0) {\n SDK.getMaestroEventViewModel().deliverFocus();\n return;\n }\n\n if (this.props.onArrowPress) {\n this.props.onArrowPress(d);\n }\n };\n\n render() {\n const { item, index, width } = this.props;\n return (\n <PanelNavButton\n iconName={item.iconName}\n key={item.title}\n index={index}\n onBecameFocused={this.props.onBecameFocused(index)}\n active={item.active}\n focusKey={`PANEL_NAV_BUTTON_${index}`}\n onArrowPress={this.handleArrowPress}\n parentFocusKey=\"PANEL_NAVIGATION\"\n width={width}\n >\n {item.title}\n </PanelNavButton>\n );\n }\n}\n\nclass PanelNavigation extends React.Component<PanelNavigationProps> {\n handleBecameFocused = (index: number) => () => {\n if (this.props.items[index]) {\n this.props.items[index].onEnter();\n }\n };\n\n render() {\n const itemsCount = this.props.items.length;\n if (itemsCount === 0) {\n return null;\n }\n const marginTotal = (itemsCount - 1) * BUTTON_MARGIN;\n const buttonWidth = `calc((100% - ${marginTotal}px) / ${itemsCount})`;\n\n return (\n <FocusableWrapper focusKey=\"PANEL_NAVIGATION\">\n {this.props.items.map((item, index) => (\n <PanelNavigationButton\n onBecameFocused={this.handleBecameFocused}\n key={item.title}\n item={item}\n index={index}\n width={buttonWidth}\n />\n ))}\n </FocusableWrapper>\n );\n }\n}\n\nclass Wrapper extends React.Component<WithFocusableProps> {\n render() {\n return <div className=\"panel-navigation\">{this.props.children}</div>;\n }\n}\n\nconst FocusableWrapper = withFocusable({ trackChildren: true })(Wrapper);\n\nexport default PanelNavigation;\n","import PanelNavigation from './PanelNavigation';\n\nexport default PanelNavigation;\n","import React, { Suspense, lazy } from 'react';\nimport { PanelManagerViewModel } from '@/view-models/PanelManagerViewModel';\nimport './PanelManager.styles.css';\nimport PanelNavigation from '@/components/organisms/PanelNavigation';\nimport { MaestroPanelType } from '@/models/IPanel';\nimport SDK from '@/index';\n\n// Lazy load panel components\nconst KeyPlaysView = lazy(() =>\n import('@/modules/espn/key-plays/view/KeyPlaysView')\n);\nconst BetsView = lazy(() => import('@/modules/espn/bets/view/BetsView'));\nconst StatsView = lazy(() => import('@/modules/espn/stats/view'));\nconst FantasyView = lazy(() => import('@/modules/espn/fantasy/view'));\nconst ShopView = lazy(() => import('@/modules/espn/shop/view'));\nconst HelloWorldView = lazy(() => import('@/modules/maestro/hello-world'));\nconst BuilderView = lazy(() => import('@/modules/maestro/builder'));\nconst FoxKeyPlays = lazy(() =>\n import('@/modules/fox/key-plays/view/FoxKeyPlays')\n);\nconst FoxMultiView = lazy(() =>\n import('@/modules/fox/multi-view/view/FoxMultiView')\n);\nconst FoxStatsView = lazy(() =>\n import('@/modules/fox/stats/view/FoxStatsView')\n);\n\n// Loading fallback component\nconst PanelLoading = () => <div className=\"sdk--panel-loading\" />;\n\nconst PANELS_MAP: Record<MaestroPanelType, React.LazyExoticComponent<any>> = {\n espnKeyPlays: KeyPlaysView,\n espnBet: BetsView,\n espnStats: StatsView,\n espnFantasy: FantasyView,\n espnShop: ShopView,\n helloWorld: HelloWorldView,\n foxKeyPlays: FoxKeyPlays,\n foxMultiview: FoxMultiView,\n foxStats: FoxStatsView,\n builderBlockPanel: BuilderView,\n};\n\ninterface PanelManagerState {\n activePanel: MaestroPanelType | null;\n visiblePanels: { type: MaestroPanelType; title: string }[];\n}\n\nclass PanelManager extends React.Component<{}, PanelManagerState> {\n private unsubscribe: (() => void) | null = null;\n private panelsUnsubscribe: (() => void) | null = null;\n private viewModel: PanelManagerViewModel;\n\n constructor(props: {}) {\n super(props);\n this.viewModel = SDK.getMaestroEventViewModel().panelManagerViewModel;\n\n this.state = {\n activePanel: this.viewModel.currentPanel,\n visiblePanels: this.viewModel.panelsObservable.value,\n };\n }\n\n componentDidMount() {\n // Subscribe to changes in the current panel\n this.unsubscribe = this.viewModel.currentPanelObservable.subscribe(() => {\n this.setState({ activePanel: this.viewModel.currentPanel });\n });\n\n // Subscribe to changes in the visible panels\n this.panelsUnsubscribe = this.viewModel.panelsObservable.subscribe(\n (panels) => {\n this.setState({ visiblePanels: panels });\n }\n );\n }\n\n componentWillUnmount() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n if (this.panelsUnsubscribe) {\n this.panelsUnsubscribe();\n this.panelsUnsubscribe = null;\n }\n }\n\n goToPanel(panel: MaestroPanelType) {\n return () => {\n if (this.viewModel.currentPanel === panel) {\n return;\n }\n this.viewModel.currentPanel = panel;\n };\n }\n\n render() {\n const { activePanel, visiblePanels } = this.state;\n\n // Create panel items only for visible panels\n const PANEL_ITEMS: {\n title: string;\n onEnter: () => void;\n iconName: MaestroPanelType;\n active: boolean;\n }[] = visiblePanels.map((panel) => ({\n iconName: panel.type,\n onEnter: this.goToPanel(panel.type),\n title: panel.title,\n active: activePanel === panel.type,\n }));\n\n const ActivePanelComponent = activePanel ? PANELS_MAP[activePanel] : null;\n\n return (\n <div className=\"sdk--panel-manager\">\n <PanelNavigation items={PANEL_ITEMS} />\n {ActivePanelComponent && (\n <div className=\"sdk--panel-wrapper\">\n <Suspense fallback={<PanelLoading />}>\n <ActivePanelComponent />\n </Suspense>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PanelManager;\n","import PanelManager from './PanelManager';\n\nexport default PanelManager;\n","import IModel from './IModel';\n\ntype ObjectValues<T> = T[keyof T];\n\nexport default interface ITheme extends IModel {\n button: IThemeButton;\n channelOfflineThumbnail?: string;\n colors: IThemeColors;\n creator: string;\n desktopBackground?: string;\n icon?: string;\n logo?: string;\n mobileBackground?: string;\n mode?: ThemeModes;\n name: string;\n owner: string;\n siteId?: string;\n type: ThemeTypes;\n typography: IThemeTypography;\n}\n\nexport interface IThemeColors {\n accentPrimary: string;\n accentSecondary: string;\n accentTertiary: string;\n alertConfirmation: string;\n alertError: string;\n alertWarning: string;\n highlightPrimary: string;\n highlightSecondary: string;\n highlightTertiary: string;\n surface1: string;\n surface2: string;\n surface3: string;\n surface4: string;\n surface5: string;\n surface6: string;\n text100: string;\n text200: string;\n text300: string;\n text400: string;\n text500: string;\n}\n\nexport interface IThemeButton {\n borderRadius: BorderRadius;\n textCapitalization: TextCapitalization;\n}\n\nexport interface IThemeTypography {\n body: string;\n headline: string;\n}\n\nexport interface IClassicThemeOptions {\n accentPrimary: string;\n accentSecondary: string;\n}\n\nexport const BORDER_RADIUS = {\n rounded: 'rounded',\n square: 'square',\n pill: 'pill',\n} as const;\nexport type BorderRadius = ObjectValues<typeof BORDER_RADIUS>;\n\nexport const TEXT_CAPITALIZATION = {\n lowercase: 'lowercase',\n original: 'original',\n uppercase: 'uppercase',\n} as const;\nexport type TextCapitalization = ObjectValues<typeof TEXT_CAPITALIZATION>;\n\nexport const THEME_TYPES = {\n ADMIN: 'admin',\n ADVANCED: 'advanced',\n CLASSIC: 'classic',\n CUSTOM: 'custom',\n} as const;\nexport type ThemeTypes = ObjectValues<typeof THEME_TYPES>;\n\nexport const THEME_MODES = {\n DARK: 'dark',\n LIGHT: 'light',\n} as const;\nexport type ThemeModes = ObjectValues<typeof THEME_MODES>;\n","import ITheme, {\n BORDER_RADIUS,\n TEXT_CAPITALIZATION,\n THEME_MODES,\n THEME_TYPES,\n} from '@/models/ITheme';\n\nconst FONT_FAMILY = 'BentonSans-Medium';\n\nexport const DARK_THEME: ITheme = {\n _id: '6274067af74b66a544018dac',\n button: {\n borderRadius: BORDER_RADIUS.rounded,\n textCapitalization: TEXT_CAPITALIZATION.uppercase,\n },\n colors: {\n // Accent colors\n accentPrimary: '#FFFFFF',\n\n // Secondary accent colors\n accentSecondary: '#3C3F47',\n\n // Tertiary accent colors\n accentTertiary: '#0C0C0E',\n\n // Surface Colors\n surface1: '#080A0C',\n surface2: '#12141A',\n surface3: '#1B1E26',\n surface4: '#242833',\n surface5: '#363C4D',\n surface6: '#3E4759',\n\n // Highlight colors\n highlightPrimary: '#FFFFFF',\n highlightSecondary: '#9A9EA9',\n highlightTertiary: '#0A0C0F',\n\n // Alert colors\n alertConfirmation: '#43D48F',\n alertWarning: '#F58B00',\n alertError: '#FF0000',\n\n // Text colors\n text100: '#F8F9FA',\n text200: '#C2C5CB',\n text300: '#8D919D',\n text400: '#5C606B',\n text500: '#0C0C0E',\n },\n creator: '016901e60000000000000000',\n name: 'Dark Mode',\n type: THEME_TYPES.CLASSIC,\n mode: THEME_MODES.DARK,\n owner: '016901e60000000000000000',\n typography: {\n body: FONT_FAMILY,\n headline: FONT_FAMILY,\n },\n};\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js??ref--6-1!./App.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from 'react';\nimport { DARK_THEME } from '@/services/ThemeManager/constants';\nimport './App.styles.css';\nimport SDK from '@/index';\nimport { IThemeTypography } from '@/models/ITheme';\n\n// Our theme.typography uses self-hosted fonts, so it won't work for our use case here.\n// Instead, we map the typography keys to the font families the client uses\ntype Typography = keyof IThemeTypography | 'title';\nconst FONT_FAMILY_MAP: Record<Typography, string> = {\n body: 'BentonSans',\n headline: 'BentonSansBold',\n title: 'BentonSansMedium',\n};\n\nclass App extends React.Component<{ children?: React.ReactNode }> {\n get colors() {\n const config = SDK.getPageConfig();\n return config?.theme?.colors || DARK_THEME.colors;\n }\n\n componentDidMount() {\n Object.keys(this.colors).forEach((key) => {\n document.documentElement.style.setProperty(\n `--sdk-${key}`,\n this.colors[key as keyof typeof this.colors]\n );\n });\n\n Object.keys(FONT_FAMILY_MAP).forEach((key) => {\n document.documentElement.style.setProperty(\n `--sdk-font-${key}`,\n FONT_FAMILY_MAP[key as Typography]\n );\n });\n }\n\n componentWillUnmount() {\n Object.keys(this.colors).forEach((key) => {\n document.documentElement.style.removeProperty(`--sdk-${key}`);\n });\n\n Object.keys(FONT_FAMILY_MAP).forEach((key) => {\n document.documentElement.style.removeProperty(`--sdk-font-${key}`);\n });\n }\n\n render() {\n return <div className=\"sdk-wrapper\">{this.props.children}</div>;\n }\n}\n\nexport default App;\n","import App from './App';\n\nexport default App;\n","/* eslint-disable react/no-find-dom-node */\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Component, createElement } from 'react';\nimport { ROOT_FOCUS_KEY } from './spatialNavigation';\nimport { Details, Direction, Layout } from './utils';\nimport SDK from '@/index';\n\ninterface WithFocusableConfig {\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n autoRestoreFocus?: boolean;\n blockNavigationOut?: boolean;\n}\n\nexport interface WithFocusableProps {\n focused?: boolean;\n focusKey?: string;\n parentFocusKey?: string;\n preferredChildFocusKey?: string;\n forgetLastFocusedChild?: boolean;\n trackChildren?: boolean;\n autoRestoreFocus?: boolean;\n blockNavigationOut?: boolean;\n hasFocusedChild?: boolean;\n focusable?: boolean;\n onEnterPress?: (props: any, details: Details) => void;\n /**\n * @description - Called when \"click\" action is performed (e.g., mouse click or touch), fired by spatial navigation\n * @param props - The props of the component\n * @param details - object containing information about the event, such as the source of the event, layout, etc.\n */\n onClickPress?: (props: any, details: Details) => void;\n onEnterRelease?: (props: any) => void;\n onBackPress?: (props: any, details: Details) => void;\n onArrowPress?: (\n direction: Direction,\n props: any,\n details: Details\n ) => boolean | void;\n onBecameFocused?: (layout: Layout, props: any, details: Details) => void;\n onBecameBlurred?: (layout: Layout, props: any, details: Details) => void;\n}\n\nexport interface WithFocusableState {\n realFocusKey: string;\n focused: boolean;\n hasFocusedChild: boolean;\n parentFocusKey: string;\n}\n\n// Helper functions to replace lodash and recompose\nconst uniqueId = (prefix: string): string =>\n `${prefix}${Math.random().toString(36).substr(2, 9)}`;\n\nconst noop = () => {};\n\nconst omit = <T extends Record<string, any>>(\n obj: T,\n keys: string[]\n): Partial<T> => {\n const result = { ...obj };\n keys.forEach((key) => delete result[key]);\n return result;\n};\n\nconst withFocusable = <P extends object>({\n forgetLastFocusedChild: configForgetLastFocusedChild = false,\n trackChildren: configTrackChildren = false,\n autoRestoreFocus: configAutoRestoreFocus,\n blockNavigationOut: configBlockNavigationOut = false,\n}: WithFocusableConfig = {}) => {\n return (WrappedComponent: React.ComponentType<P & WithFocusableProps>) => {\n return class WithFocusable extends Component<\n P & WithFocusableProps,\n WithFocusableState\n > {\n static contextTypes = {\n parentFocusKey: PropTypes.string,\n };\n\n static childContextTypes = {\n parentFocusKey: PropTypes.string,\n };\n\n state: WithFocusableState = {\n realFocusKey: this.props.focusKey || uniqueId('sn:focusable-item-'),\n focused: false,\n hasFocusedChild: false,\n parentFocusKey: this.props.parentFocusKey || ROOT_FOCUS_KEY,\n };\n navigation = SDK.getMaestroEventViewModel().navigation;\n\n getChildContext() {\n return {\n parentFocusKey: this.state.realFocusKey,\n };\n }\n\n setFocus = (focusKey: string) => {\n if (!this.navigation.isNativeMode()) {\n this.navigation.setFocus(focusKey);\n }\n };\n\n navigateByDirection = this.navigation.navigateByDirection;\n\n stealFocus = () => {\n this.navigation.setFocus(this.state.realFocusKey);\n };\n\n onUpdateFocus = (focused: boolean) => {\n this.setState({ focused });\n };\n\n onUpdateHasFocusedChild = (hasFocusedChild: boolean) => {\n this.setState({ hasFocusedChild });\n };\n\n onEnterPressHandler = (details: Details) => {\n const { onEnterPress = noop, ...rest } = this.props;\n onEnterPress(rest, details);\n };\n\n onClickPressHandler = (details: Details) => {\n const { onClickPress = noop, ...rest } = this.props;\n onClickPress(rest, details);\n };\n\n onEnterReleaseHandler = () => {\n const { onEnterRelease = noop, ...rest } = this.props;\n onEnterRelease(rest);\n };\n\n onBackPressHandler = (details: Details) => {\n const { onBackPress = noop, ...rest } = this.props;\n onBackPress(rest, details);\n };\n\n onArrowPressHandler = (direction: Direction, details: Details) => {\n const { onArrowPress = noop, ...rest } = this.props;\n return onArrowPress(direction, rest, details);\n };\n\n onBecameFocusedHandler = (layout: Layout, details: Details) => {\n const { onBecameFocused = noop, ...rest } = this.props;\n onBecameFocused(layout, rest, details);\n };\n\n onBecameBlurredHandler = (layout: Layout, details: Details) => {\n const { onBecameBlurred = noop, ...rest } = this.props;\n onBecameBlurred(layout, rest, details);\n };\n\n componentDidMount() {\n const { realFocusKey: focusKey, parentFocusKey } = this.state;\n\n const {\n preferredChildFocusKey,\n forgetLastFocusedChild = false,\n trackChildren,\n focusable = true,\n autoRestoreFocus = true,\n blockNavigationOut = false,\n } = this.props;\n\n let node: HTMLElement;\n if (this.navigation.isNativeMode()) {\n node = document.createElement('div');\n } else {\n const domNode = findDOMNode(this) as Element;\n if (!domNode) {\n throw new Error('Could not find DOM node');\n }\n node = domNode as HTMLElement;\n }\n\n this.navigation.addFocusable({\n focusKey,\n node,\n parentFocusKey,\n preferredChildFocusKey,\n onEnterPressHandler: this.onEnterPressHandler,\n onClickPressHandler: this.onClickPressHandler,\n onEnterReleaseHandler: this.onEnterReleaseHandler,\n onBackPressHandler: this.onBackPressHandler,\n onArrowPressHandler: this.onArrowPressHandler,\n onBecameFocusedHandler: this.onBecameFocusedHandler,\n onBecameBlurredHandler: this.onBecameBlurredHandler,\n onUpdateFocus: this.onUpdateFocus,\n onUpdateHasFocusedChild: this.onUpdateHasFocusedChild,\n forgetLastFocusedChild:\n configForgetLastFocusedChild || forgetLastFocusedChild,\n trackChildren: configTrackChildren || trackChildren,\n blockNavigationOut: configBlockNavigationOut || blockNavigationOut,\n autoRestoreFocus:\n configAutoRestoreFocus !== undefined\n ? configAutoRestoreFocus\n : autoRestoreFocus,\n focusable,\n });\n }\n\n componentDidUpdate() {\n const { realFocusKey: focusKey } = this.state;\n\n const {\n preferredChildFocusKey,\n focusable = true,\n blockNavigationOut = false,\n } = this.props;\n\n let node: HTMLElement;\n if (this.navigation.isNativeMode()) {\n node = document.createElement('div');\n } else {\n const domNode = findDOMNode(this) as Element;\n if (!domNode) {\n throw new Error('Could not find DOM node');\n }\n node = domNode as HTMLElement;\n }\n\n this.navigation.updateFocusable(focusKey, {\n node,\n preferredChildFocusKey,\n focusable,\n blockNavigationOut: configBlockNavigationOut || blockNavigationOut,\n });\n }\n\n componentWillUnmount() {\n const { realFocusKey: focusKey } = this.state;\n this.navigation.removeFocusable({ focusKey });\n }\n\n render() {\n const props = {\n ...this.props,\n ...this.state,\n setFocus: this.setFocus,\n navigateByDirection: this.navigateByDirection,\n stealFocus: this.stealFocus,\n onUpdateFocus: this.onUpdateFocus,\n onUpdateHasFocusedChild: this.onUpdateHasFocusedChild,\n };\n\n const filteredProps = omit(props, [\n 'onBecameFocusedHandler',\n 'onBecameBlurredHandler',\n 'onEnterPressHandler',\n 'onClickPressHandler',\n 'onEnterReleaseHandler',\n 'onArrowPressHandler',\n 'onUpdateFocus',\n 'onUpdateHasFocusedChild',\n 'forgetLastFocusedChild',\n 'trackChildren',\n 'autoRestoreFocus',\n ]);\n\n return createElement(\n WrappedComponent,\n filteredProps as P & WithFocusableProps\n );\n }\n };\n };\n};\n\nexport default withFocusable;\n"],"sourceRoot":""}
|