{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"electron\"","webpack:///external \"path\"","webpack:///external \"fs\"","webpack:///external \"crypto\"","webpack:///external \"node-fetch\"","webpack:///external \"events\"","webpack:///external \"module\"","webpack:///./src/0globals.js","webpack:///./src/modules/webpackModules.js","webpack:///./src/modules/dataStore.js","webpack:///./src/modules/bdEvents.js","webpack:///./src/modules/pluginModule.js","webpack:///./src/ui/tooltip.js","webpack:///./src/ui/tooltipWrap.js","webpack:///./src/modules/pluginCertifier.js","webpack:///./src/modules/contentManager.js","webpack:///./src/modules/domtools.js","webpack:///./src/modules/themeModule.js","webpack:///./src/modules/v2.js","webpack:///./src/modules/utils.js","webpack:///./src/modules/settingsPanelSidebar.js","webpack:///./src/modules/coloredText.js","webpack:///./src/modules/24hour.js","webpack:///./src/ui/xSvg.js","webpack:///./src/ui/tools.js","webpack:///./src/ui/settingsTitle.js","webpack:///./src/ui/tabBarSeparator.js","webpack:///./src/ui/tabBarHeader.js","webpack:///./src/ui/tabBarItem.js","webpack:///./src/ui/publicservers/serverCard.js","webpack:///./src/ui/scroller.js","webpack:///./src/ui/publicservers/sidebarView.js","webpack:///./src/ui/publicservers/publicServers.js","webpack:///./src/svg/bug_hunter.jsx","webpack:///./src/svg/circus.jsx","webpack:///./src/modules/distant.js","webpack:///./src/modules/Layers.jsx","webpack:///./src/modules/publicServers.js","webpack:///./src/modules/voiceMode.js","webpack:///./src/modules/classNormalizer.js","webpack:///./src/modules/devMode.js","webpack:///./src/ui/components/switch.jsx","webpack:///./src/ui/switch.js","webpack:///./src/ui/margintop.jsx","webpack:///./src/ui/settingsGroup.jsx","webpack:///./src/ui/sectionedSettingsPanel.js","webpack:///./src/ui/checkbox.js","webpack:///./src/ui/cssEditorDetached.js","webpack:///./src/ui/cssEditor.js","webpack:///./src/ui/errorBoundary.js","webpack:///./src/ui/contentColumn.js","webpack:///./src/ui/reloadIcon.js","webpack:///./src/ui/icons/edit.jsx","webpack:///./src/ui/icons/delete.jsx","webpack:///./src/ui/addoncard.jsx","webpack:///./src/ui/icons/downarrow.jsx","webpack:///./src/ui/components/dropdown.jsx","webpack:///./src/ui/icons/search.jsx","webpack:///./src/ui/components/search.jsx","webpack:///./src/ui/addonlist.jsx","webpack:///./src/modules/CustomRichPresence.js","webpack:///./src/ui/presenceSettings.jsx","webpack:///./src/ui/AccountInfos.jsx","webpack:///./src/modules/AntiAdDM.js","webpack:///./src/modules/blurPrivate.js","webpack:///./src/modules/disableTyping.js","webpack:///./src/ui/ApiPreview.jsx","webpack:///./src/ui/icons/history.jsx","webpack:///./src/modules/popoutWindow.js","webpack:///./src/modules/settingsPanel.js","webpack:///./src/ui/bdLogo.js","webpack:///./src/svg/lightcord.jsx","webpack:///./src/modules/emojiModule.js","webpack:///./src/modules/core.js","webpack:///./src/modules/bdApi.js","webpack:///./src/localStorageFix.js","webpack:///./src/index.js","webpack:///./src/loadingIcon.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","minimumDiscordVersion","currentDiscordVersion","window","DiscordNative","remoteApp","getVersion","minSupportedVersion","bbdVersion","bbdChangelog","description","changes","title","type","items","settings","id","info","implemented","hidden","cat","category","experimental","process","platform","defaultCookie","settingsCookie","settingsRPC","defaultRPC","Date","now","lightcordSettings","defaultLightcordSettings","bdpluginErrors","bdthemeErrors","bdConfig","BetterDiscordConfig","bdthemes","bdplugins","pluginCookie","themeCookie","req","webpackJsonp","push","__extra_id__","find","filter","default","mod","findAll","findByProps","propNames","every","prop","undefined","findByPrototypes","protoNames","protoProp","findByDisplayName","displayName","Lightcord","BetterDiscord","WebpackModules","__non_webpack_require__","fs","path","releaseChannel","globals","app","getReleaseChannel","dataPath","env","APPDATA","join","HOME","XDG_CONFIG_HOME","constructor","this","data","stable","canary","ptb","pluginData","DataStore","initialize","existsSync","BDFile","writeFileSync","JSON","stringify","parse","readFileSync","settingsFile","unlinkSync","assign","setBDData","err","console","error","Utils","alert","_injectionPath","_configFile","resolve","injectionPath","_BDFile","_settingsFile","getPluginFile","pluginName","ContentManager","pluginsFolder","getSettingGroup","setSettingGroup","getBDData","getPluginData","setPluginData","deletePluginData","EventEmitter","super","BDEvents","dispatch","eventName","args","emit","off","eventAction","removeListener","PluginModule","loadPlugins","async","loadPluginData","splice","plugins","keys","length","plugin","getName","load","file","filename","message","stack","start","showToast","Promise","setTimeout","savePluginData","remote","getCurrentWebContents","on","channelSwitch","startPlugin","reload","stopPlugin","stop","enablePlugin","enable","disablePlugin","disable","togglePlugin","toggle","loadPlugin","loadContent","showContentErrors","values","log","unloadPlugin","filenameOrName","bdplugin","unloadContent","delete","fullPath","reloadPlugin","enabled","reloadContent","edit","shell","openItem","updatePluginList","results","loadNewContent","added","removed","saved","newMessage","onMessage","onSwitch","rawObserver","e","observer","TooltipClasses","TooltipLayers","getTooltipClasses","getTooltipLayers","getClass","sideOrColor","upperCase","toUpperCase","slice","tooltipClass","classExists","toPx","EmulatedTooltip","node","text","options","style","side","preventFlip","disabled","attachEvents","jQuery","label","toLowerCase","element","document","createElement","className","layer","disabledPointerEvents","tooltipElement","tooltip","labelElement","tooltipContent","pointerElement","tooltipPointer","append","addEventListener","show","MutationObserver","mutations","forEach","mutation","nodes","Array","from","removedNodes","directMatch","indexOf","parentMatch","some","parent","contains","hide","disconnect","observe","body","subtree","childList","querySelector","removeDa","BDModules","popouts","layerContainer","getBoundingClientRect","top","offsetHeight","screenHeight","left","offsetWidth","screenWidth","remove","_className","textContent","container","canShowAbove","showAbove","showBelow","canShowBelow","canShowLeft","showLeft","showRight","canShowRight","classList","add","setProperty","centerHorizontally","centerVertically","nodecenter","React","Component","props","BDV2","reactDom","findDOMNode","Tooltip","componentWillUnmount","render","children","cache","cache2","PluginCertifier","patch","attachment","nextTick","getElementById","url","startsWith","endsWith","nodeFetch","headers","electron","userAgent","then","res","status","Error","hash","crypto","Buffer","alloc","chunk","concat","update","hashResult","digest","hashToUrl","checkHash","result","div","childNodes","flowerStarModule","flowerStarContainer","childModule","childContainer","suspect","parentNode","borderColor","nextNode","child","tagName","preventDefault","stopImmediatePropagation","showConfirmationModal","harm","confirmText","cancelText","danger","onCancel","onConfirm","openExternal","href","includes","react","tooltipWrap","width","height","svg","viewBox","x","y","mask","fill","pointerEvents","official","span","display","float","flowerStar","stroke","color","onClick","link","getKeyedArray","content","buffer","installPath","contentManager","_pluginsFolder","_themesFolder","catch","cursor","fill-rule","class","renderToElements","elem","processAttachment","isTrusted","checkViruses","resultCallback","removeCallback","toString","isHarmful","keyword","split","oof","no_comments","replace","trim","test","regexps","regex","pop","json","processFile","__path","isFromLoader","createReadStream","addonCache","timestamp","saveAddonCache","basename","obj","arr","k","save","generateKey","encryptSettingsCache","cipher","encrypted","final","Api","ensureExported","ObjectStorage","localStorageModule","localStorage","impl","set","btoa","setInterval","val","safeJSONParse","atob","isArray","Module","globalPaths","getAppPath","MetaError","originalJSRequire","_extensions","originalCSSRequire","splitRegex","escapedAtRegex","hasPatched","timeCache","watchers","patchExtensions","getContentRequire","realpathSync","loadAddonCertifierCache","dataStore","decipher","decrypted","decryptSettingsCache","watchContent","contentType","isPlugin","baseFolder","themesFolder","fileEnding","watch","persistent","eventType","statSync","code","pluginModule","themeModule","unloadTheme","isFile","stats","mtime","getTime","loadTheme","reloadTheme","unwatchContent","close","extractMeta","firstLine","parseOldMeta","parseNewMeta","meta","rawMeta","substring","lastIndexOf","parsed","testJSON","format","block","out","field","accum","line","charAt","substr","self","originalRequire","possiblePath","Reflect","apply","arguments","stripBOM","atimeMs","modified","mtimeMs","size","css","_compile","isEmpty","warn","makePlaceholderPlugin","getAuthor","getDescription","source","website","escapeID","isLoaded","cantUnload","basedir","files","readdirSync","contentList","map","f","errors","loadAllContent","loadThemes","DOMTools","head","script","src","onload","timing","_","duration","performance","requestAnimationFrame","animate","time","timeFraction","progress","selector","parseHTML","NodeList","nodeType","query","baseElement","querySelectorAll","html","fragment","template","innerHTML","cloneNode","textNode","createTextNode","spanElement","nodeValue","classes","flat","classname","indicator","oldName","newName","thisNode","thatNode","prepend","targetNode","insertBefore","nextSibling","newNode","nextElementSibling","next","matches","previous","previousElementSibling","num","indexInParent","parentElement","parents","closest","attribute","global","getComputedStyle","parseInt","clientWidth","clientHeight","_listeners","event","delegate","callback","namespace","hasDelegate","eventFunc","target","cancel","removeEventListener","listeners","newCancel","findIndex","matchFilter","listener","defaultFilter","list","__offAll","onMount","wrappedCallback","unsubscribe","subscribe","addedNodes","onMountChange","onUnmount","elements","domWrapper","appendChild","Element","DOM","ThemeModule","loadThemeData","themes","theme","addStyle","unescape","saveThemeData","enableTheme","bdEvents","version","disableTheme","removeStyle","toggleTheme","bdtheme","updateThemeList","editorDetached","protect","theModule","isDefault","clear","sort","getToken","getEmail","showToken","proxy","Proxy","getOwnPropertyDescriptor","func","__proto__","findByUniqueProperties","internal","getInternalInstance","V2","joinBD1","InviteActions","acceptInviteAndTransitionToInviteChannel","leaveBD1","GuildActions","leaveGuild","joinBD2","leaveBD2","joinLC","leaveLC","anchor","anchorUnderlineOnHover","guildsWrapper","wrapper","unreadMentionsBar","guilds","guildsError","selected","pill","blobContainer","defaultProps","search","submit","activateRagingDemon","dismiss","openDM","userId","selfId","UserStore","getCurrentUser","privateChannelId","ChannelStore","getDMFromUserId","PrivateChannelActions","selectPrivateChannel","ChannelActions","openPrivateChannel","parseSettings","reduce","setting","Math","max","documentElement","innerWidth","innerHeight","_windowConfigFile","transparent","frame","charCodeAt","channelTextArea","titleWrapper","textarea","focus","selectionStart","selectionEnd","execCommand","moduleName","groupCollapsed","groupEnd","string","replacement","RegExp","method","params","what","methodName","before","after","instead","once","silent","force","origMethod","canceled","thisObject","methodArguments","cancelPatch","originalMethod","callOriginalMethod","returnValue","tempRet","suppressErrors","__monkeyPatched","__originalMethod","sidebar","hasNotice","form","bottom","toastWrapper","icon","timeout","toastElem","innerText","modalModule","modal","inner","hideOnFullscreen","headerModule","header","responsiveWidthMobile","footer2Module","focusLock","backdrop","backdropWithLayer","footer","addClass","closingListeners","onClose","pluginErrors","themeErrors","generateTab","el","tabs","removeClass","scroller","index","click","ModalStack","ChangelogClasses","TextElement","FlexChild","Titles","Changelog","selectable","MarkdownParser","image","subtitle","ce","changelogItems","entry","margin","marginTop","renderHeader","Child","grow","shrink","tag","Tags","H4","Sizes","SMALL","Colors","STANDARD","date","renderFooter","Anchor","AnchorClasses","joinSupportServer","stopPropagation","supportLink","defaultFooter","onScroll","ModalActions","Markdown","ConfirmationModal","emptyFunction","openModal","red","modalKey","V2_SettingsPanel_Sidebar","panels","register","panel","component","getComponent","Settings","devMode","section","LCitems","LCDevItems","injectColoredText","cancelColoredText","MessageComponent","monkeyPatch","childrenMessageContent","messageContent","originalType","roleColor","colorString","removeColoredText","classNameMarkup","markup","inject24Hour","cancel24Hour","twelveHour","convert","matched","match","padStart","cancelCozy","TimeFormatter","cancelCompact","remove24Hour","V2C_XSvg","reactComponent","xmlns","fillRule","V2C_Tools","toolsModule","toolsContainer","containerModule","closeButton","closeButtonBold","tools","XSvg","keybind","keybindBold","V2C_SettingsTitle","V2C_TabBarSeparator","V2C_TabBarHeader","button","V2C_TabBarItem","setInitialState","state","V2C_ServerCard","server","iconUrl","fallback","imageError","joined","guildList","identifier","cardModule","card","cardPrimary","flexModule","flexChild","_horizontalReverse","wrapModule","noWrap","streamerModeEnabled","marginBottom8","pinned","ref","onError","handleError","draggable","horizontal","members","flex","categories","minHeight","backgroundColor","setState","V2C_Scroller","scrollerModule1","scrollerHorizontal","scrollerModule2","sidebarRegionScroller","wrapperClass","scrollerWrap","scrollerThemed","themeGhostHairline","fade","scrollerFade","scrollerClass","contentColumn","contentRegionScroller","contentRegionScrollerWrap","themeGhost","scrollerTrack","originalRender","configurable","V2C_SidebarView","Scroller","dark","V2C_PublicServers","changeCategory","searchKeyDown","checkConnection","connect","GuildStore","AvatarDefaults","SortedGuildStore","componentDidMount","selectedCategory","loading","servers","connection","user","fetch","endPoint","end","term","categoryButtons","total","refs","sbv","contentScroller","scrollTop","serverCard","acceptInvite","invite_code","joinEndPoint","credentials","windowOptions","round","screenX","screenY","joinWindow","webContents","loadURL","resizable","maximizable","minimizable","alwaysOnTop","center","webPreferences","nodeIntegration","getFlattenedGuildIds","defaultList","DEFAULT_AVATARS","ServerCard","online","nativejoin","floor","random","response","SidebarView","Tools","fontSize","TabBarSeparator","searchInput","TabBarHeader","TabBarItem","marginLeft","onKeyDown","onChange","placeholder","maxLength","which","searchinput","notConnected","columnModule","contentColumnDefault","SettingsTitle","bdServer","marginBottom","lineHeight","username","discriminator","padding","BugHunterBadge","Circus","cx","cy","uuidv4","awaitingBadgesPromises","badgesToFetch","_cache","badges","DistantServer","newPromise","badge","Constants","defaultUsers","fetchedBadges","users","handleRequest","Routes","responseBody","promise","user_id","LightcordError","route","SERVER_URL","Authorization","reject","scopes","layers","Layers","inject","isInjected","classNameLayers","v2","ReactInstance","FindReact","forceUpdate","createLayer","getLayer","lay","LayerModules","Layer","animation","Value","keydown","ev","componentWillEnter","toValue","componentWillLeave","interpolation","interpolate","inputRange","outputRange","opacity","transform","scale","Div","__SECRET_EMOTION__","position","right","overflow","WebkitBoxOrient","WebkitBoxDirection","msFlexDirection","flexDirection","zIndex","paddingTop","_appendButton","V2_PublicServers","rootId","btn","guildClasses","listItem","circleButtonMask","classNametutorialContainer","downloadProgress","tutorialContainer","addButton","guildPatch","GuildList","webpackModules","GuildListOld","removeButton","randClass","ClassNormalizer","unpatchClassModules","moduleFilter","revertElement","patchClassModules","normalizeElement","patchDOMMethods","patchClassModule","unpatchClassModule","shouldIgnore","isNaN","baseClassName","componentName","classNames","normalClass","camelCase","newString","clen","newClass","toRemove","DOMTokenList","token","tokens","debugListener","copySelectorListener","startDebugListener","startCopySelector","stopDebugListener","stopCopySelector","getSelector","classLayer","classItems","menu","cm","cmWrap","styleFlexible","accommodateScrollbar","clientY","clientX","setAttribute","scrollerClasses","removeCM","keyCode","cmg","cmi","item","labelContainer","colorDefault","NativeModule","copy","queryAll","focused","separator","scrollHeight","names","unshift","ownerDocument","entries","Switch","checked","switch","Components","inputs","classnames","getClassName","SwitchItem","beta","userSettingsVoice","formModule","switchItem","betaClassNames","marginModule","marginTop60","MarginTop","V2C_SettingsGroup","renderOldSettings","buttonComponent","componentDidCatch","errInfo","FormSection","FormText","hideBorder","DEFAULT","Themes","note","setImmediate","V2C_SectionedSettingsPanel","sections","SettingsGroup","V2C_Checkbox","checkboxElement","checkbox","checkboxInner","V2C_CssEditorDetached","updateCss","saveCss","editor","ace","setTheme","session","setMode","setShowPrintMargin","setFontSize","destroy","updateLineCount","lineCount","lines","lineNumbers","indentUnit","scrollbarStyle","_ccss","ccss","_root","injectRoot","detachedRoot","insertAfter","Checkbox","borderRadius","borderRight","borderLeft","saveSettings","attach","unmountComponentAtNode","root","getValue","V2C_CssEditor","detachedEditor","detach","detached","componentDidUpdate","prevProps","prevState","codeMirror","arg","droot","injectDetachedRoot","BDErrorBoundary","hasError","V2C_ContentColumn","V2C_ReloadIcon","Edit","Delete","anchorClasses","V2C_PluginCard","showSettings","hasSettings","addon","getSettingsPanel","settingsPanel","reloads","trusted","closeSettings","panelRef","current","settingsOpen","settingspanel","cardNode","cTop","cBottom","eTop","offsetTop","eBottom","isHidden","thisNodeOffset","offset","containerOffset","original","getString","dangerouslySetInnerHTML","__html","buildTitle","author","nameIndex","versionIndex","authorIndex","LayerStack","popLayer","makeLink","makeButton","action","unmounted","links","invite","tester","donate","patreon","settingsComponent","authorId","authorLink","isScanning","DownArrow","Select","open","dropdown","createRef","showMenu","hideMenu","opt","isOpen","Search","onFocus","onBlur","CardList","ascending","isPlugins","cookie","manager","reverse","onAddonChanges","openFolder","openPath","confirmDelete","BdApi","toLocaleLowerCase","getProps","getAddons","sortedAddons","a","b","cap","first","second","localeCompare","rendered","renderCheckUpdates","ZeresPluginLibrary","PluginUpdates","checkAll","tooltipIsShowing","onMouseLeave","Button","look","hoverColor","onRightClick","checkUpdateButton","refreshIcon","addonCards","sortOptions","directions","dispatcher","Dispatcher","ActionTypes","pid","game","application_id","details","timestamps","assets","large_image","small_image","sendGame","LOCAL_ACTIVITY_UPDATE","socketId","activity","formatedGame","applicationId","getAssets","V2C_PresenceSettingsModules","V2C_PresenceSettings","preview","isfetching","fetchAssets","assetComponents","Set","updateWhenFetched","comp","defaultSetting","RPCProps","CustomRichPresence","asset","updatePreview","marginBottom20","optionsComponents","RpcPreview","ohgodohfuck","_optionsComponents","InputText","InputNumber","InputChoice","choices","inputTextModules","InputNumberModules","InputChoiceModules","PureComponent","removeKeybind","defaultMarginh5","colorStandard","size32","_horizontal","inputMini","size16","size20","input","TextInput","lastEdited","isTiming","rowModule","marginModule2","colorModule","sizeModule","inputModule","sizeModule2","row","size14","h5","Divider","colorTransparent","setValue","clipboard","Dropdown","emptyClasses","popoutModules","UserPopoutComponent","PopoutProps","profileModules","UserProfileComponent","ProfileProps","connectedProfileStore","DividerModules","divider","dividerDefault","active","changeTab","tab","setActive","Tab","rpc","isActive","Profile","Popout","PresenceErrorCatcher","emptyStateImage","emptyState","emptyStateHeader","emptyStateSubtext","role","tabindex","UserPopout","userModule","render1","guildId","channelId","disableUserProfileLink","_UserPopout","popout","excludeProperties","UserProfile","render2","render3","render4","profile","scrollbarModule1","scrollbarGhostHairline","GuildModule","getGuilds","relationShipModule","getRelationships","sessionModule","getSessions","V2C_AccountInfos","CodeContent","getProfileValue","language","getStatistics","getSessionValue","sessionsRaw","sessions","sessionId","clientInfo","os","client","activities","repeat","createdAt","avatarURL","avatar","getAvatarURL","getDate","getMonth","getFullYear","getHours","getMinutes","getSeconds","flags","hasPremiumSubscription","email","mfaEnabled","mobile","phone","verified","nsfwAllowed","relations","friends","isFriend","blocked","isBlocked","hightlightJS","highlight","messageModule1","messageModule2","listLanguages","DiscordModules","ChannelModule","getChannel","hasChannel","addRelationship","DMModule","closePrivateChannel","antiDM","bot","guild_id","channel","channel_id","EmbedsContains","location","embeds","embed","fields","selectors","standardSidebarView","defaultClassName","selects","userSettingsAccount","paymentSourceRow","subText","descriptionWrapper","viewBody","userSettingsSecurity","getSelectors","startTyping","typingModule","stopTyping","DisableTyping","ApiPreview","states","allComponents","general","AlertBox","compName","compPath","ComponentPreview","AllPreviews","getStrForProp","lang","String","$$typeof","for","generateCode","openTag","propStrings","childrenProp","str","propObject","isLast","childrenData","help","success","SettingSubTitle","searchable","Tabs","ErrorCatcher","CodeBlock","History","windows","Map","init","popoutModule","getWindow","applyThemes","removeThemes","themeName","existing","removeAttribute","BDSidebarHeader","sidebarComponents","Separator","Header","Item","changelogButton","showChangelogModal","isClearingCache","updateSettings","registerComponents","makeComponent","lightcordComponent","PresenceComponent","AccountInfosComponent","ApiPreviewComponent","coreComponent","customCssComponent","renderAddonPane","getSettings","publicServersModule","voiceMode","tfHour","coloredText","setWindowPreference","dMode","callRingingBeat","settingsStore","showCurrentGame","updateRemoteSettings","getCurrentWindow","setAlwaysOnTop","AntiAdDM","blurPrivate","disableTyping","appSettings","getGlobal","relaunch","exit","popoutWindow","core","methods","NotificationsUseShim","loadSettings","renderSidebar","SectionedSettingsPanel","coreSettings","isChecked","ipc","send","argv","quit","clearCache","PresenceSettings","CssEditor","ContentList","prefix","SettingComponent","BDLogo","clipRule","strokeLinecap","strokeLinejoin","LightcordLogo","x1","y1","x2","y2","gradientTransform","gradientUnits","stopColor","EmojiRegex","CustomEmojiModule","CustomEmoji","EmojiModuleApi","getCustomEmojiById","AutocompleteModule","AutoCompletionTemplates","getAutocompleteOptions","EmojiModuleQuery","queryEmojiResults","Messages","EMOJI_MATCHING","guildModule","getGuild","isFetching","emojiSearch","getDisambiguatedEmojiContext","LIGHTCORD_EMOJIS","arg1","arg2","condition","setEmojiUsable","queryResults","renderResults","D","emojis","EMOJI","Emoji","emoji","uniqueName","sentinel","guild","getPlainText","isAnimated","animated","managed","originalName","getRawText","cancelEmojiRender","cancelEmoteRender","getNestedProp","newContent","hasParsed","exec","raw","words","word","emojiId","jumboable","shift","u","onHover","R","Title","classNameLayer","classNameSocialLinks","classNameModal","EmojiFilterModule","isEmojiDisabled","isUsable","usable","surrogates","diversity","Core","setConfig","config","hasStarted","setMethods","ED","WebSocket","patchAttributes","initSettings","checkForGuilds","initializeSettings","getElementsByClassName","initObserver","previousVersion","EmojiModule","patchSocial","patchGuildPills","patchGuildListItems","patchGuildSeparator","patchMessageHeader","patchMemberList","patchAttachment","haveInstalledDefault","logo","attribsPatchs","cancelPatchAttributes","DiscordTag","DiscordTagComp","badgeDiv","TooltipWrap","applyBadges","timesChecked","blob","deferLoaded","readyState","injectExternals","getPredicateSections","settingModule","poped","mlen","animating","socialLinks","getAttribute","socialPatch","TabBar","socialModule1","newOne","returnVal","classNameColorMuted","sizes","classNameVersionHash","colorMuted","versionHash","branch","additional","size12","commit","originalVersions","chat","blockDiv","distant","getBadges","scope","div2","guildListItemsPatch","GuildClasses","getGuildClasses","listItemClass","blobClass","GuildComponent","return","guildData","unread","audio","video","animatable","guildPillPatch","guildPill","hovered","guildSeparatorPatch","Guilds","guildComponents","GuildSeparator","AttachmentPatch","Attachment","messageHeaderPatch","MessageHeader","memberListPatch","MemberListItem","renderDecorators","updateInjector","ReactDom","ReactComponent","WindowConfigFile","getAllWindowPreferences","getWindowPreference","addScript","removeScript","mainCore","protos","getData","loadData","saveData","setData","deleteData","onRemoved","isPluginEnabled","isThemeEnabled","isSettingEnabled","enableSetting","disableSetting","toggleSetting","makeAddonAPI","folder","isEnabled","getAll","Plugins","contentWindowGetter","HTMLIFrameElement","contentWindow","writable","Function","oOpen","XMLHttpRequest","localStorageFix","v2Loader","loadingIcon","deprecateGlobal","globalKeys","Globals","CoreWrapper"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,6GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,gBClFrDhC,EAAOD,QAAUkC,QAAQ,a,cCAzBjC,EAAOD,QAAUkC,QAAQ,S,cCAzBjC,EAAOD,QAAUkC,QAAQ,O,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,e,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,+8BCAlB,MAAMC,EAAwB,UACxBC,EAAyBC,OAAOC,eAAiBD,OAAOC,cAAcC,WAAaF,OAAOC,cAAcC,UAAUC,YAAcH,OAAOC,cAAcC,UAAUC,cAAiB,UAChLC,EAAsB,QACtBC,EAAa,QACbC,EAAe,CACxBC,YAAa,yBACbC,QAAS,CACL,CACIC,MAAO,YACPC,KAAM,QACNC,MAAO,CACH,uDACA,2DAMHC,EAAW,CACpB,yBAA8B,CAACC,GAAI,YAAaC,KAAM,GAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,QACnJ,yBAA8B,CAACJ,GAAI,YAAaC,KAAM,GAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,QACnJ,qBAA8B,CAACJ,GAAI,WAAaC,KAAM,oCAAqDC,aAAa,EAAQC,QAAQ,EAAOC,IAAK,QAIpJ,iBAA8B,CAACJ,GAAI,WAAaC,KAAM,gCAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,eAA8B,CAACL,GAAI,WAAaC,KAAM,iDAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,aAA8B,CAACL,GAAI,WAAaC,KAAM,uBAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,gBAA8B,CAACL,GAAI,WAAaC,KAAM,gCAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,YAA8B,CAACL,GAAI,WAAaC,KAAM,6CAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,mBAA8B,CAACL,GAAI,WAAaC,KAAM,oDAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,qBAA8B,CAACL,GAAI,WAAaC,KAAM,2CAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,eAA8B,CAACL,GAAI,WAAaC,KAAM,yCAAqDC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WACrK,oBAA8B,CAACL,GAAI,YAAaC,KAAM,+FAAgGC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,WAGhN,sBAA8B,CAACL,GAAI,YAAaC,KAAM,yCAA0CC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBACzJ,eAA8B,CAACL,GAAI,YAAaC,KAAM,yDAA0DC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBACzK,cAA8B,CAACL,GAAI,YAAaC,KAAM,uDAAwDC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBACvK,qBAA8B,CAACL,GAAI,YAAaC,KAAM,uFAAwFC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBACvM,oBAA8B,CAACL,GAAI,YAAaC,KAAM,+DAAgEC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBAC/K,qBAA8B,CAACL,GAAI,YAAaC,KAAM,uDAAwDC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,mBACvK,0BAA8B,CAACL,GAAI,cAAeC,KAAM,6EAA8EC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,kBAAmBC,cAAc,GAGhO,iBAA6B,CAACN,GAAI,WAAYC,KAAM,wBAAyBC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,sBACtI,gBAAqB,CAACL,GAAI,YAAaC,KAAM,+EAAkFC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,OAAQC,SAAU,sBAGxL,wBAA8B,CAACL,GAAI,aAAeC,KAAM,kEAAmEC,aAAa,EAAOC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aAC1L,4BAA8B,CAACL,GAAI,cAAeC,KAAM,kEAAmEC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aACzL,oBAA8B,CAACL,GAAI,cAAeC,KAAM,yCAA0CC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aAChK,oBAA8B,CAACL,GAAI,cAAeC,KAAM,8JAAmKC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aACzR,WAA8B,CAACL,GAAI,cAAeC,KAAM,oEAAqEC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aAC3L,2BAA8B,CAACL,GAAI,cAAeC,KAAM,yEAA0EC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aAChM,iBAA8B,CAACL,GAAI,cAAeC,KAAM,qCAAsCC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,aAC5J,iBAA8B,CAACL,GAAI,cAAeC,KAAM,2EAA4EC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,YAAaC,cAAc,GAC7N,wBAA8B,CAACN,GAAI,eAAgBC,KAAM,+CAAgDC,aAAa,EAAMC,OAA6B,UAArBI,QAAQC,SAAsBJ,IAAK,YAAaC,SAAU,YAAaC,cAAc,GAGzN,gBAA8B,CAACN,GAAI,cAAeC,KAAM,8FAA+FC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,UACrN,mBAA8B,CAACL,GAAI,kBAAmBC,KAAM,oEAAqEC,aAAa,EAAMC,OAA6B,UAArBI,QAAQC,SAAsBJ,IAAK,YAAaC,SAAU,UACtN,mBAA8B,CAACL,GAAI,mBAAoBC,KAAM,iFAAkFC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,YAAaC,SAAU,UAG7M,OAA8B,CAACL,GAAI,uBAAwBC,KAAM,6BAA8BC,aAAa,EAAMC,QAAQ,EAAOC,IAAK,WAG7HK,EAAgB,CACzB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAmB,GAIVC,EAAiB,GAEjBC,EAAc,GACdC,EAAa,CACtB,KAAQ,YACR,eAAkB,qBAClB,MAAS,mBACT,QAAW,mBACX,mBAAoBC,KAAKC,MACzB,eAAgB,KAChB,eAAgB,sBAGPC,EAAoB,GACpBC,EAA2B,GAE3BC,EAAiB,GACjBC,EAAgB,GAEhBC,EAAWzD,OAAOY,OAAO8C,qBAEzBC,EAAW,GACXC,EAAY,GAEZC,EAAe,GACfC,EAAc,GC9IrBC,EAAMC,aAAaC,KAAK,CAAC,GAAI,CAACC,aAAc,CAAC7E,EAAQD,EAAS2E,IAAQ1E,EAAOD,QAAU2E,GAAM,CAAC,CAAC,0BAC9FA,EAAIrE,EAAEwE,oBACNH,EAAIpE,EAAEuE,aACb,MAAMC,EAAQC,IACV,IAAK,MAAM9E,KAAKyE,EAAIpE,EAChB,GAAIoE,EAAIpE,EAAEwB,eAAe7B,GAAI,CACzB,MAAMI,EAAIqE,EAAIpE,EAAEL,GAAGF,QACnB,GAAIM,GAAKA,EAAEgB,YAAchB,EAAE2E,SAAWD,EAAO1E,EAAE2E,SAAU,OAAO3E,EAAE2E,QAClE,GAAI3E,GAAK0E,EAAO1E,GAAI,OAAOA,EAInC,OAAO,MAmBX,IAAI4E,EAAO,CAACH,OAAMI,QAhBDH,IACb,MAAM5E,EAAU,GAChB,IAAK,MAAMF,KAAKyE,EAAIpE,EAChB,GAAIoE,EAAIpE,EAAEwB,eAAe7B,GAAI,CACzB,MAAMI,EAAIqE,EAAIpE,EAAEL,GAAGF,QACfM,GAAKA,EAAEgB,YAAchB,EAAE2E,SAAWD,EAAO1E,EAAE2E,SAAU7E,EAAQyE,KAAKvE,EAAE2E,SAC/D3E,GAAK0E,EAAO1E,IAAIF,EAAQyE,KAAKvE,GAG9C,OAAOF,GAOgBgF,YAJP,IAAIC,IAAcN,EAAK9E,GAAUoF,EAAUC,MAAMC,QAAyBC,IAAjBvF,EAAOsF,KAI5CE,iBAHf,IAAIC,IAAeX,EAAK9E,GAAUA,EAAO6B,WAAa4D,EAAWJ,MAAMK,QAA6CH,IAAhCvF,EAAO6B,UAAU6D,KAGpEC,kBAF/BC,GAAgBd,EAAK9E,GAAUA,EAAO4F,cAAgBA,IAGlEX,QAEf7C,OAAOyD,UAAUC,cAAcC,eAAiBd,EClChD,MAAMe,EAA0B5D,OAAOH,QAKjCgE,EAAKhE,EAAQ,GACbiE,EAAOjE,EAAQ,GACfkE,EAAiB9D,cAAc+D,QAAU/D,cAAc+D,QAAQD,eAAiB9D,cAAcgE,IAAMhE,cAAcgE,IAAIC,oBAAsB,SAElJ,IAAIC,EAAW,GACmBA,EAAT,UAArB/C,QAAQC,SAAiCD,QAAQgD,IAAIC,QAC3B,WAArBjD,QAAQC,SAAkCyC,EAAKQ,KAAKlD,QAAQgD,IAAIG,KAAM,UAAW,eAC1EnD,QAAQgD,IAAII,gBAAkBpD,QAAQgD,IAAII,gBAAkBV,EAAKQ,KAAKlD,QAAQgD,IAAIG,KAAM,WACxGJ,EAAWL,EAAKQ,KAAKH,EAAU,iBAEhB,UAAI,MACfM,cACIC,KAAKC,KAAO,CAAC/D,SAAU,CAACgE,OAAQ,GAAIC,OAAQ,GAAIC,IAAK,KACrDJ,KAAKK,WAAa,GAClB/E,OAAOyD,UAAUC,cAAcsB,UAAYN,KAG/CO,aACI,IACSpB,EAAGqB,WAAWR,KAAKS,SAAStB,EAAGuB,cAAcV,KAAKS,OAAQE,KAAKC,UAAUZ,KAAKC,KAAM,KAAM,GAAI,SACnG,MAAMA,EAAOU,KAAKE,MAAM1B,EAAG2B,aAAad,KAAKS,OAAQ,UAErD,GADIR,EAAKjF,eAAe,cAAagF,KAAKC,KAAOA,IAC5Cd,EAAGqB,WAAWR,KAAKe,cAAe,OACvC,IAAI7E,EAAWgD,EAAwBc,KAAKe,cAC5C5B,EAAG6B,WAAWhB,KAAKe,cACsB7E,EAArCA,EAASlB,eAAe,YAAwBnB,OAAOoH,OAAO,CAACf,OAAQ,GAAIC,OAAQ,GAAIC,IAAK,IAAK,CAAC,CAACf,GAAiBnD,IACxGrC,OAAOoH,OAAO,CAACf,OAAQ,GAAIC,OAAQ,GAAIC,IAAK,IAAKlE,GACjE8D,KAAKkB,UAAU,WAAYhF,GAE/B,MAAOiF,GACHC,QAAQC,MAAMF,GACdG,GAAMC,MAAM,kBAAmB,gHAIvC,oBACI,OAAOvB,KAAKwB,eAAiB,KAYjC,iBAAkB,OAAOxB,KAAKyB,cAAgBzB,KAAKyB,YAAcrC,EAAKsC,QAAQ1B,KAAK2B,cAAe,gBAAiB,gBACnH,aAAc,OAAO3B,KAAK4B,UAAY5B,KAAK4B,QAAUxC,EAAKsC,QAAQjC,EAAU,mBAC5E,mBAAoB,OAAOO,KAAK6B,gBAAkB7B,KAAK6B,cAAgBzC,EAAKsC,QAAQjC,EAAU,oBAC9FqC,cAAcC,GAAa,OAAO3C,EAAKsC,QAAQM,GAAeC,cAAeF,EAAa,gBAE1FG,gBAAgBxH,GACZ,OAAOsF,KAAKC,KAAK/D,SAASmD,GAAgB3E,IAAQ,KAGtDyH,gBAAgBzH,EAAKuF,GACjBD,KAAKC,KAAK/D,SAASmD,GAAgB3E,GAAOuF,EAC1Cd,EAAGuB,cAAcV,KAAKS,OAAQE,KAAKC,UAAUZ,KAAKC,KAAM,KAAM,GAAI,SAGtEmC,UAAU1H,GACN,OAAOsF,KAAKC,KAAKvF,IAAQ,GAG7BwG,UAAUxG,EAAKN,GACX4F,KAAKC,KAAKvF,GAAON,EACjB+E,EAAGuB,cAAcV,KAAKS,OAAQE,KAAKC,UAAUZ,KAAKC,KAAM,KAAM,GAAI,SAGtEoC,cAAcN,EAAYrH,GACtB,YAAoC+D,IAAhCuB,KAAKK,WAAW0B,GAAkC/B,KAAKK,WAAW0B,GAAYrH,GAC7EyE,EAAGqB,WAAWR,KAAK8B,cAAcC,KACtC/B,KAAKK,WAAW0B,GAAcpB,KAAKE,MAAM1B,EAAG2B,aAAad,KAAK8B,cAAcC,KACrE/B,KAAKK,WAAW0B,GAAYrH,SAFnC,EAKJ4H,cAAcP,EAAYrH,EAAKN,QACbqE,IAAVrE,SACgCqE,IAAhCuB,KAAKK,WAAW0B,KAA2B/B,KAAKK,WAAW0B,GAAc,IAC7E/B,KAAKK,WAAW0B,GAAYrH,GAAON,EACnC+E,EAAGuB,cAAcV,KAAK8B,cAAcC,GAAapB,KAAKC,UAAUZ,KAAKK,WAAW0B,GAAa,KAAM,GAAI,UAG3GQ,iBAAiBR,EAAYrH,QACW+D,IAAhCuB,KAAKK,WAAW0B,KAA2B/B,KAAKK,WAAW0B,GAAc,WACtE/B,KAAKK,WAAW0B,GAAYrH,GACnCyE,EAAGuB,cAAcV,KAAK8B,cAAcC,GAAapB,KAAKC,UAAUZ,KAAKK,WAAW0B,GAAa,KAAM,GAAI,WC5F/G,MAAMS,EAAerH,EAAQ,GACd,UAAI,cAAuBqH,EACtCzC,cACI0C,QACAnH,OAAOyD,UAAUC,cAAc0D,SAAW1C,KAE9C2C,SAASC,KAAcC,GAAO7C,KAAK8C,KAAKF,KAAcC,GACtDE,IAAIH,EAAWI,GAAchD,KAAKiD,eAAeL,EAAWI,KCFhE,MAAME,EACFnD,cACIzE,OAAOyD,UAAUC,cAAckE,aAAelD,KAElD,aAAc,OAAOgC,GAAeC,eAGxCiB,EAAanI,UAAUoI,YAAcC,iBACjCpD,KAAKqD,iBACLjG,EAAekG,OAAO,EAAG,WAAatB,GAAemB,eACrD,MAAMI,EAAU1J,OAAO2J,KAAK/F,GAC5B,IAAK,IAAItE,EAAI,EAAGA,EAAIoK,EAAQE,OAAQtK,IAAK,CACrC,IAAIuK,EAAQhK,EAEZ,IACIgK,EAASjG,EAAU8F,EAAQpK,IAAIuK,OAC/BhK,EAAOgK,EAAOC,UACVD,EAAOE,MAA+B,mBAAhBF,EAAOE,MAAqBF,EAAOE,OAC/D,MAAOzC,GACLzD,EAAahE,IAAQ,EACrB4H,GAAMH,IAAI,UAAWzH,EAAO,wBAAyByH,GACrD/D,EAAeU,KAAK,CAACpE,KAAMA,EAAMmK,KAAMpG,EAAU8F,EAAQpK,IAAI2K,SAAUC,QAAS,6BAA8B1C,MAAO,CAAC0C,QAAS5C,EAAI4C,QAASC,MAAO7C,EAAI6C,SACvJ,SAKJ,GAFKtG,EAAahE,KAAOgE,EAAahE,IAAQ,GAE1CgE,EAAahE,GACb,IACIgK,EAAOO,QACHpH,EAAe,cAAcyE,GAAM4C,UAAW,GAAER,EAAOC,cAAcD,EAAOjI,6BAClF,MAAO0F,GACLzD,EAAahE,IAAQ,EACrB4H,GAAMH,IAAI,UAAWzH,EAAO,yBAA0ByH,GACtD/D,EAAeU,KAAK,CAACpE,KAAMA,EAAMmK,KAAMpG,EAAU8F,EAAQpK,IAAI2K,SAAUC,QAAS,8BAA+B1C,MAAO,CAAC0C,QAAS5C,EAAI4C,QAASC,MAAO7C,EAAI6C,eAI1J,IAAIG,QAASzC,GAAY0C,WAAW1C,EAAS,KAEvD1B,KAAKqE,iBAELlJ,EAAQ,GAAYmJ,OAAOC,wBAAwBC,GAAG,uBAAwBxE,KAAKyE,cAAc9J,KAAKqF,QAI1GkD,EAAanI,UAAU2J,YAAc,SAAShB,EAAQiB,GAAS,GAC3D,IACIlH,EAAUiG,GAAQA,OAAOO,QACrBpH,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEzG,EAAUiG,GAAQA,OAAOC,cAAclG,EAAUiG,GAAQA,OAAOjI,6BAEnI,MAAO0F,GACCtE,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEzG,EAAUiG,GAAQA,OAAOC,cAAclG,EAAUiG,GAAQA,OAAOjI,qCAAsC,CAACO,KAAM,UAC5K0B,EAAagG,IAAU,EACvB1D,KAAKqE,iBACL/C,GAAMH,IAAI,UAAWuC,EAAS,yBAA0BvC,KAIhE+B,EAAanI,UAAU6J,WAAa,SAASlB,EAAQiB,GAAS,GAC1D,IACIlH,EAAUiG,GAAQA,OAAOmB,OACrBhI,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEzG,EAAUiG,GAAQA,OAAOC,cAAclG,EAAUiG,GAAQA,OAAOjI,6BAEnI,MAAO0F,GACCtE,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEzG,EAAUiG,GAAQA,OAAOC,cAAclG,EAAUiG,GAAQA,OAAOjI,qCAAsC,CAACO,KAAM,UAC5KsF,GAAMH,IAAI,UAAW1D,EAAUiG,GAAQA,OAAOC,UAAY,yBAA0BxC,KAI5F+B,EAAanI,UAAU+J,aAAe,SAAUpB,EAAQiB,GAAS,GACzDjH,EAAagG,KACjBhG,EAAagG,IAAU,EACvB1D,KAAKqE,iBACLrE,KAAK0E,YAAYhB,EAAQiB,KAG7BzB,EAAanI,UAAUgK,OAAS,SAAUrB,EAAQiB,GAAS,GACvD,OAAO3E,KAAK8E,aAAapB,EAAQiB,IAGrCzB,EAAanI,UAAUiK,cAAgB,SAAUtB,EAAQiB,GAAS,GACzDjH,EAAagG,KAClBhG,EAAagG,IAAU,EACvB1D,KAAKqE,iBACLrE,KAAK4E,WAAWlB,EAAQiB,KAG5BzB,EAAanI,UAAUkK,QAAU,SAAUvB,EAAQiB,GAAS,GACxD,OAAO3E,KAAKgF,cAActB,EAAQiB,IAGtCzB,EAAanI,UAAUmK,aAAe,SAAUxB,GACxChG,EAAagG,GAAS1D,KAAKgF,cAActB,GACxC1D,KAAK8E,aAAapB,IAG3BR,EAAanI,UAAUoK,OAAS,SAAUzB,EAAQiB,GAAS,GACvD,OAAO3E,KAAKkF,aAAaxB,EAAQiB,IAGrCzB,EAAanI,UAAUqK,WAAahC,eAAeU,GAC/C,MAAMzC,QAAcW,GAAeqD,YAAYvB,EAAU,UACzD,GAAIzC,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC/B,QAAS,CAAClC,KAChExE,EAAe,cAAcyE,GAAM4C,UAAaJ,EAAF,wBAAmC,CAAC9H,KAAM,UACrFsF,GAAMH,IAAI,iBAAqB2C,EAAF,wBAAmCzC,GAE3E,MAAMqC,EAAS7J,OAAO0L,OAAO9H,GAAWO,KAAK/C,GAAMmG,QAAQoE,IAAIvK,EAAE6I,SAAUA,IAAc7I,EAAE6I,UAAYA,GAAUJ,OACjH,IAAUA,EAAOE,MAA+B,mBAAhBF,EAAOE,MAAqBF,EAAOE,OACnE,MAAOzC,GAAUtE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC/B,QAAS,CAACpC,KACjFG,GAAMkE,IAAI,iBAAmB,GAAE9B,EAAOC,cAAcD,EAAOjI,4BACvDoB,EAAe,cAAcyE,GAAM4C,UAAW,GAAER,EAAOC,cAAcD,EAAOjI,2BAA4B,CAACO,KAAM,YACnH0G,EAASC,SAAS,gBAAiBe,EAAOC,YAG9CT,EAAanI,UAAU0K,aAAe,SAASC,GAC3C,MAAMC,EAAW9L,OAAO0L,OAAO9H,GAAWO,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBjI,EAAUiI,GAC/F,IAAKC,EAAU,OACf,MAAMjC,EAASiC,EAASjC,OAAOC,UAC3BjG,EAAagG,IAAS1D,KAAKgF,cAActB,GAAQ,GACrD,MAAMrC,EAAQW,GAAe4D,cAAcnI,EAAUiG,GAAQI,SAAU,UAEvE,UADOrG,EAAUiG,GACbrC,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC/B,QAAS,CAAClC,KAChExE,EAAe,cAAcyE,GAAM4C,UAAaR,EAAF,2DAAoE,CAAC1H,KAAM,UACtHsF,GAAMH,IAAI,iBAAqBuC,EAAF,2DAAoErC,GAE5GC,GAAMkE,IAAI,iBAAqB9B,EAAF,kBACzB7G,EAAe,cAAcyE,GAAM4C,UAAaR,EAAF,iBAA0B,CAAC1H,KAAM,YACnF0G,EAASC,SAAS,kBAAmBe,IAGzCR,EAAanI,UAAU8K,OAAS,SAASH,GACrC,MAAMC,EAAW9L,OAAO0L,OAAO9H,GAAWO,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBjI,EAAUiI,GAC/F,IAAKC,EAAU,OACf3F,KAAKyF,aAAaE,EAAS7B,UAC3B,MAAMgC,EAAW3K,EAAQ,GAAQuG,QAAQM,GAAeC,cAAe0D,EAAS7B,UAChF3I,EAAQ,GAAM6F,WAAW8E,IAG7B5C,EAAanI,UAAUgL,aAAe3C,eAAesC,GACjD,MAAMC,EAAW9L,OAAO0L,OAAO9H,GAAWO,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBjI,EAAUiI,GAC/F,IAAKC,EAAU,OAAO3F,KAAKoF,WAAWM,GACtC,MAAMhC,EAASiC,EAASjC,OAAOC,UACzBqC,EAAUtI,EAAagG,GACzBsC,GAAShG,KAAK4E,WAAWlB,GAAQ,GACrC,MAAMrC,QAAcW,GAAeiE,cAAcxI,EAAUiG,GAAQI,SAAU,UAC7E,GAAIzC,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC/B,QAAS,CAAClC,KAChExE,EAAe,cAAcyE,GAAM4C,UAAaR,EAAF,0BAAmC,CAAC1H,KAAM,UACrFsF,GAAMH,IAAI,iBAAqBuC,EAAF,0BAAmCrC,GAEvE5D,EAAUiG,GAAQA,OAAOE,MAAiD,mBAAlCnG,EAAUiG,GAAQA,OAAOE,MAAqBnG,EAAUiG,GAAQA,OAAOE,OAC/GoC,GAAShG,KAAK0E,YAAYhB,GAAQ,GACtCpC,GAAMkE,IAAI,iBAAmB,GAAE9B,MAAWjG,EAAUiG,GAAQA,OAAOjI,8BAC/DoB,EAAe,cAAcyE,GAAM4C,UAAW,GAAER,MAAWjG,EAAUiG,GAAQA,OAAOjI,6BAA8B,CAACO,KAAM,YAC7H0G,EAASC,SAAS,kBAAmBe,IAGzCR,EAAanI,UAAU4J,OAAS,SAASjL,GACrC,OAAOsG,KAAK+F,aAAarM,IAG7BwJ,EAAanI,UAAUmL,KAAO,SAASR,GACnCtE,QAAQoE,IAAI,QAAUE,GACtB,MAAMC,EAAW9L,OAAO0L,OAAO9H,GAAWO,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBjI,EAAUiI,GAC/F,IAAKC,EAAU,OACf,MAAMG,EAAW3K,EAAQ,GAAQuG,QAAQM,GAAeC,cAAe0D,EAAS7B,UAChF1C,QAAQoE,IAAI,QAAUM,GACtB3K,EAAQ,GAAYgL,MAAMC,SAAU,GAAEN,IAG1C5C,EAAanI,UAAUsL,iBAAmB,WACtC,MAAMC,EAAUtE,GAAeuE,eAAe,UAC9C,IAAK,MAAMzC,KAAYwC,EAAQE,MAAOxG,KAAKoF,WAAWtB,GACtD,IAAK,MAAMpK,KAAQ4M,EAAQG,QAASzG,KAAKyF,aAAa/L,IAG1DwJ,EAAanI,UAAUsI,eAAiB,WACpC,MAAMqD,EAAQpG,EAAU4B,gBAAgB,WACpCwE,GACA7M,OAAOoH,OAAOvD,EAAcgJ,IAIpCxD,EAAanI,UAAUsJ,eAAiB,WACpC/D,EAAU6B,gBAAgB,UAAWzE,IAGzCwF,EAAanI,UAAU4L,WAAa,WAChC,MAAMpD,EAAU1J,OAAO2J,KAAK/F,GAC5B,IAAK,IAAItE,EAAI,EAAGA,EAAIoK,EAAQE,OAAQtK,IAAK,CACrC,MAAMuK,EAASjG,EAAU8F,EAAQpK,IAAIuK,OACrC,GAAKhG,EAAagG,EAAOC,YACO,mBAArBD,EAAOkD,UACd,IAAMlD,EAAOkD,YACb,MAAOzF,GAAOG,GAAMH,IAAI,UAAW,gCAAkCuC,EAAOC,UAAY,IAAKxC,MAKzG+B,EAAanI,UAAU0J,cAAgB,WACnC,MAAMlB,EAAU1J,OAAO2J,KAAK/F,GAC5B,IAAK,IAAItE,EAAI,EAAGA,EAAIoK,EAAQE,OAAQtK,IAAK,CACrC,MAAMuK,EAASjG,EAAU8F,EAAQpK,IAAIuK,OACrC,GAAKhG,EAAagG,EAAOC,YACM,mBAApBD,EAAOmD,SACd,IAAMnD,EAAOmD,WACb,MAAO1F,GAAOG,GAAMH,IAAI,UAAW,+BAAiCuC,EAAOC,UAAY,IAAKxC,MAKxG+B,EAAanI,UAAU+L,YAAc,SAASC,GAC1C,MAAMxD,EAAU1J,OAAO2J,KAAK/F,GAC5B,IAAK,IAAItE,EAAI,EAAGA,EAAIoK,EAAQE,OAAQtK,IAAK,CACrC,MAAMuK,EAASjG,EAAU8F,EAAQpK,IAAIuK,OACrC,GAAKhG,EAAagG,EAAOC,YACM,mBAApBD,EAAOsD,SACd,IAAMtD,EAAOsD,SAASD,GACtB,MAAO5F,GAAOG,GAAMH,IAAI,UAAW,+BAAiCuC,EAAOC,UAAY,IAAKxC,MAKzF,UAAI+B,E,8BC1NnB,IAAI+D,EAKAC,EAJJ,SAASC,IACR,OAAGF,IACIA,EAAiBhI,EAAeZ,YAAY,UAAW,iBAG/D,SAAS+I,IACR,OAAGF,IACIA,EAAgBjI,EAAeZ,YAAY,QAAS,mBAG5D,MAAMgJ,EAAW,SAASC,GACtB,MAAMC,EAAYD,EAAY,GAAGE,cAAgBF,EAAYG,MAAM,GAC7DC,EAAeP,IAAqB,UAASI,GACnD,OAAIG,GACG,MAGLC,EAAc,SAASL,GACzB,QAAOD,EAASC,IAGdM,EAAO,SAASxN,GAClB,OAAUA,EAAF,MAGG,MAAMyN,EAapB9H,YAAY+H,EAAMC,EAAMC,EAAU,IACjC,MAAM,MAACC,EAAQ,QAAT,KAAkBC,EAAO,MAAzB,YAAgCC,GAAc,EAA9C,SAAqDC,GAAW,EAAhE,aAAuEC,GAAe,GAAQL,EAQ9F,GAPNhI,KAAK8H,KAAOA,aAAgBQ,OAASR,EAAK,GAAKA,EACzC9H,KAAKuI,MAAQR,EACb/H,KAAKiI,MAAQA,EAAMO,cACzBxI,KAAKkI,KAAOA,EAAKM,cACXxI,KAAKmI,YAAcA,EACnBnI,KAAKoI,SAAWA,GAEXT,EAAY3H,KAAKkI,MAAO,OAAO5G,GAAMH,IAAI,kBAAoB,QAAOnB,KAAKkI,wBACpF,IAAKP,EAAY3H,KAAKiI,OAAQ,OAAO3G,GAAMH,IAAI,kBAAoB,SAAQnB,KAAKiI,yBAEhFjI,KAAKyI,QAAUC,SAASC,cAAc,OACtC3I,KAAKyI,QAAQG,UAAYxB,IAAmByB,MAAQ,IAAMzB,IAAmB0B,sBAE7E9I,KAAK+I,eAAiBL,SAASC,cAAc,OAC7C3I,KAAK+I,eAAeH,UAAa,GAAEzB,IAAoB6B,WAAW3B,EAASrH,KAAKiI,SAEhFjI,KAAKiJ,aAAeP,SAASC,cAAc,OAC3C3I,KAAKiJ,aAAaL,UAAYzB,IAAoB+B,eAElD,MAAMC,EAAiBT,SAASC,cAAc,OAC9CQ,EAAeP,UAAYzB,IAAoBiC,eAE/CpJ,KAAK+I,eAAeM,OAAOF,GAC3BnJ,KAAK+I,eAAeM,OAAOrJ,KAAKiJ,cAChCjJ,KAAKyI,QAAQY,OAAOrJ,KAAK+I,gBAEtBV,IACFrI,KAAK8H,KAAKwB,iBAAiB,aAAc,KACxC,GAAItJ,KAAKoI,SAAU,OACnBpI,KAAKuJ,OAEL,MAAMvC,EAAW,IAAIwC,iBAAkBC,IACtCA,EAAUC,QAASC,IAClB,MAAMC,EAAQC,MAAMC,KAAKH,EAASI,cAC5BC,EAAcJ,EAAMK,QAAQjK,KAAK8H,OAAS,EAC1CoC,EAAcN,EAAMO,KAAKC,GAAUA,EAAOC,SAASrK,KAAK8H,QAC1DkC,GAAeE,KAClBlK,KAAKsK,OACLtD,EAASuD,kBAKZvD,EAASwD,QAAQ9B,SAAS+B,KAAM,CAACC,SAAS,EAAMC,WAAW,MAG5D3K,KAAK8H,KAAKwB,iBAAiB,aAAc,KACxCtJ,KAAKsK,UAML,gBACF,OAAO5B,SAASkC,cAAc,IAAItJ,GAAMuJ,SAASC,UAAU9Q,IAAI+M,GAAKA,EAAEgE,SAAS,GAAGA,SAAS,OAAOzJ,GAAMuJ,SAASC,UAAU9Q,IAAI+M,GAAKA,EAAEiE,gBAAgB,GAAGA,iBAGvJ,mBAAqB,OAAOhL,KAAK8H,KAAKmD,wBAAwBC,IAAMlL,KAAKyI,QAAQ0C,cAAgB,EAEjG,mBAAqB,OAAOnL,KAAK8H,KAAKmD,wBAAwBC,IAAMlL,KAAK8H,KAAKqD,aAAenL,KAAKyI,QAAQ0C,cAAgB7J,GAAM8J,aAEhI,kBAAoB,OAAOpL,KAAK8H,KAAKmD,wBAAwBI,KAAOrL,KAAKyI,QAAQ6C,aAAe,EAEnG,mBAAqB,OAAOtL,KAAK8H,KAAKmD,wBAAwBI,KAAOrL,KAAK8H,KAAKwD,YAActL,KAAKyI,QAAQ6C,aAAehK,GAAMiK,YAG/HjB,OACOtK,KAAKyI,QAAQ+C,SACbxL,KAAK+I,eAAeH,UAAY5I,KAAKyL,WAI5ClC,OACOvJ,KAAK+I,eAAeH,UAAa,GAAEzB,IAAoB6B,WAAW3B,EAASrH,KAAKiI,SACtFjI,KAAKiJ,aAAayC,YAAc1L,KAAKuI,MACrCvI,KAAK2L,UAAUtC,OAAOrJ,KAAKyI,SAEV,OAAbzI,KAAKkI,OACJlI,KAAK4L,eAAkB5L,KAAK4L,cAAgB5L,KAAKmI,YAAcnI,KAAK6L,YACnE7L,KAAK8L,aAGM,UAAb9L,KAAKkI,OACJlI,KAAK+L,eAAkB/L,KAAK+L,cAAgB/L,KAAKmI,YAAcnI,KAAK8L,YACnE9L,KAAK6L,aAGM,QAAb7L,KAAKkI,OACJlI,KAAKgM,cAAiBhM,KAAKgM,aAAehM,KAAKmI,YAAcnI,KAAKiM,WACjEjM,KAAKkM,aAGM,SAAblM,KAAKkI,OACJlI,KAAKmM,eAAkBnM,KAAKmM,cAAgBnM,KAAKmI,YAAcnI,KAAKkM,YACnElM,KAAKiM,YAKZJ,YACC7L,KAAK+I,eAAeqD,UAAUC,IAAIhF,EAAS,QAC3CrH,KAAKyI,QAAQR,MAAMqE,YAAY,MAAO1E,EAAK5H,KAAK8H,KAAKmD,wBAAwBC,IAAMlL,KAAKyI,QAAQ0C,aAAe,KAC/GnL,KAAKuM,qBAINT,YACC9L,KAAK+I,eAAeqD,UAAUC,IAAIhF,EAAS,WAC3CrH,KAAKyI,QAAQR,MAAMqE,YAAY,MAAO1E,EAAK5H,KAAK8H,KAAKmD,wBAAwBC,IAAMlL,KAAK8H,KAAKqD,aAAe,KAC5GnL,KAAKuM,qBAINN,WACCjM,KAAK+I,eAAeqD,UAAUC,IAAIhF,EAAS,SAC3CrH,KAAKyI,QAAQR,MAAMqE,YAAY,OAAQ1E,EAAK5H,KAAK8H,KAAKmD,wBAAwBI,KAAOrL,KAAKyI,QAAQ6C,YAAc,KAChHtL,KAAKwM,mBAINN,YACClM,KAAK+I,eAAeqD,UAAUC,IAAIhF,EAAS,UAC3CrH,KAAKyI,QAAQR,MAAMqE,YAAY,OAAQ1E,EAAK5H,KAAK8H,KAAKmD,wBAAwBI,KAAOrL,KAAK8H,KAAKwD,YAAc,KAC7GtL,KAAKwM,mBAGND,qBACO,MAAME,EAAazM,KAAK8H,KAAKmD,wBAAwBI,KAAQrL,KAAK8H,KAAKwD,YAAc,EACrFtL,KAAKyI,QAAQR,MAAMqE,YAAY,OAAQ1E,EAAK6E,EAAczM,KAAKyI,QAAQ6C,YAAc,IAG5FkB,mBACC,MAAMC,EAAazM,KAAK8H,KAAKmD,wBAAwBC,IAAOlL,KAAK8H,KAAKqD,aAAe,EACrFnL,KAAKyI,QAAQR,MAAMqE,YAAY,MAAO1E,EAAK6E,EAAczM,KAAKyI,QAAQ0C,aAAe,KCzLxE,oBAAcuB,MAAMC,UAC/B5M,YAAY6M,GACRnK,MAAMmK,GAGV,0BACI,MAAM,MAAC3E,EAAQ,QAAT,KAAkBC,EAAO,MAAzB,KAAgCH,EAAO,IAAM/H,KAAK4M,MACxD5M,KAAK8H,KAAO+E,GAAKC,SAASC,YAAY/M,MACtCA,KAAKgJ,QAAU,IAAIgE,EAAQhN,KAAK8H,KAAMC,EAAM,CAACE,QAAOC,SAGxD+E,uBACIjN,KAAKgJ,QAAQsB,cACNtK,KAAKgJ,QAGhBkE,SACI,OAAOlN,KAAK4M,MAAMO,W,cCT1B,MAAMC,EAAQ,GACRC,EAAS,GAEA,WAAI,MACftN,cACIzE,OAAOyD,UAAUC,cAAcsO,gBAAkBtN,KAGrDuN,MAAMC,EAAYrR,GACdO,QAAQ+Q,SAAS,MA4IlB,SAA2BD,EAAYrR,GAC1C,IAAIuM,SAASgF,eAAevR,GAAI,OAChC,IAAIqR,EAAWG,IAAIC,WAAW,+BAA+B,OAAOlF,SAASgF,eAAevR,GAAIqP,SAChG,IAAIgC,EAAW1J,SAAS+J,SAAS,gBAAkBL,EAAW1J,SAAS+J,SAAS,cAAc,OAAOnF,SAASgF,eAAevR,GAAIqP,SAEjIsC,IAAUN,EAAWG,IAAK,CACtBI,QAAS,CACL,aAAcC,SAAgBzJ,wBAAwB0J,aAE3DC,KAAKC,IACJ,GAAkB,MAAfA,EAAIC,OAAe,MAAM,IAAIC,MAAM,uBACtC,MAAMC,EAAOC,aAAkB,UAC/B,IAAItO,EAAOuO,OAAOC,MAAM,GACxBN,EAAI1D,KAAKjG,GAAG,OAAQkK,IAChBzO,EAAOuO,OAAOG,OAAO,CAAC1O,EAAMyO,IAC5BJ,EAAKM,OAAOF,KAEhBP,EAAI1D,KAAKjG,GAAG,MAAO,KACf,MAAMqK,EAAaP,EAAKQ,OAAO,OAE/BzB,EAAOG,EAAWG,KAAOkB,EACzBE,GAAUF,GAAcrB,EAAWG,IAEnCqB,GAAUH,EAAY5O,EAAMuN,EAAW1J,SAAWmL,KAkB9D,SAA0B9S,EAAI8S,EAAQnL,GAClC,MAAMoL,EAAMxG,SAASgF,eAAevR,GACpC,IAAI+S,GAAOA,EAAIC,WAAW1L,OAAS,EAAE,OAEjC2L,KAAiBA,GAAmBtE,UAAU9Q,IAAI+M,GAAKA,EAAEsI,qBAAqB,IAC9EC,KAAYA,GAAcxE,UAAU9Q,IAAI+M,GAAKA,EAAEwI,gBAAgB,IAEnE,GAAGN,EAAOO,QAAQ,CACd,IACIN,EAAIO,WAAWxH,MAAMyH,YAAc,mBAKnC,IAAIC,EAAY7H,IACZ,IAAI,IAAI8H,KAAS9H,EAAKqF,SACG,MAAlByC,EAAMC,QACLD,EAAMtG,iBAAiB,QAAUvC,IAC7BA,EAAE+I,iBACF/I,EAAEgJ,2BAEFzO,GAAM0O,sBACF,2CACA,OAAOf,EAAOjT,KAAKwM,cAAc,MAAM1E,EAAS,4BAA4BmL,EAAOgB,KAAK,sFACxF,CACIC,YAAa,kBACbC,WAAY,UACZC,QAAQ,EACRC,SAAU,OACVC,UAAW,KACPtC,SAAgB7H,MAAMoK,aAAaX,EAAMY,WAKpD,CAAC,OAAOC,SAASb,EAAMC,QAAQrH,gBACpCmH,EAASC,IAIrBD,EAAST,EAAIO,YAChB,MAAM1I,GACH3F,QAAQC,MAAM0F,GAElB8F,GAAKC,SAASI,OAAOL,GAAK6D,MAAM/H,cAAcgI,EAAa,CAAC5I,KAAMkH,EAAOjT,KAAK,IAAIiT,EAAOvV,KAAK,8BAC1FmT,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBC,oBAAqBpH,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,SAC7GhE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWkC,UAAU9Q,IAAI+M,GAAKA,EAAE+J,KAAK,GAAGA,IAAK,cAAc,QAAQF,MAAM,OAAOC,OAAO,OAAOE,QAAQ,aACnIlE,GAAK6D,MAAM/H,cAAc,OAAQ,CAC7BqI,EAAE,IACFC,EAAE,IACFL,MAAM,KACNC,OAAO,KACPK,KAAK,wCACLC,KAAK,UACLD,KAAK,4BACLtI,UAAUkC,UAAU9Q,IAAI+M,GAAKA,EAAEqK,eAAe,GAAGA,mBAI9DlC,QACD,GAAID,EAAOoC,SA2DZ,CACDnC,EAAIO,WAAWxH,MAAMyH,YAAc,UACnC,IAAI4B,EAAOzE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACV,MAAO,CAACsJ,QAAS,YAAa,CACvE1E,GAAK6D,MAAM/H,cAAcgI,EAAa,CAAC5I,KAAMkH,EAAOjT,KAAK,IAAIiT,EAAOvV,KAAK,4CAA6CuO,MAAM,SACxH4E,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBC,oBAAqBpH,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,OAAQW,MAAO,SAC5H3E,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBqC,WAAY,cAAc,QAAQb,MAAM,OAAOC,OAAO,OAAOE,QAAQ,cAAcW,OAAO,UAAUzJ,MAAM,CAAC0J,MAAM,YAC1K9E,GAAK6D,MAAM/H,cAAc,OAAQ,CAACwI,KAAK,eAAgB,YAAY,UAAU1X,EAAE,6VAEnFoT,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW0G,GAAYC,gBACpD1C,GAAK6D,MAAM/H,cAAc,MAAO,CAAC,cAAc,QAAQiI,MAAM,OAAOC,OAAO,OAAOE,QAAQ,eACtFlE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACwI,KAAK,UAAU1X,EAAE,yiBAKnEoT,GAAK6D,MAAM/H,cAAcgI,EAAa,CAAC5I,KAAM,gBAAgBkH,EAAOjT,KAAKwM,cAAc,kBACnFqE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBC,oBAAqBpH,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,QAASe,UACtHtQ,GAAM0O,sBACF,0CAA0Cf,EAAOjT,KAAKwM,cAAc,KACpE,uDAAuDyG,EAAOjT,KAAKwM,cAAc,wCACjF,CACI0H,YAAa,uBACbC,WAAY,uBACZC,QAAQ,EACRC,SAAU,OACVC,UAAW,KACP,IAAIuB,EAAOC,GAAczE,GAAQrP,KAAK+I,GAAKA,EAAE,KAAOkI,EAAOX,MAAM,GAEjER,IAAU+D,GACT3D,KAAK9K,UACF,GAAkB,MAAf+K,EAAIC,OAAe,MAAM,IAAIC,MAAM,sBACtC,IAAI0D,QAAgB5D,EAAI6D,SACpBC,EAAcrS,eAAqB,WAAhBqP,EAAOjT,KAAoBkW,GAAeC,eAAiBD,GAAeE,cAAenD,EAAOnL,UAEvHpD,wBAAcuR,EAAaF,GAC3BzQ,GAAM4C,UAAU+K,EAAOjT,KAAK,6BAC7BqW,MAAMlR,IACLA,EAAMA,aAAekN,MAAQlN,EAAM,IAAIkN,MAAMlN,GAC7CG,GAAM4C,UAAU/C,EAAI4C,QAAS,CACzB/H,KAAM,iBAO1B6Q,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBqC,WAAY,cAAc,QAAQb,MAAM,OAAOC,OAAO,OAAOE,QAAQ,YAAY9I,MAAM,CAChJ0J,MAAO,oBACPW,OAAQ,YAER,yBAAGnB,KAAK,OAAOoB,YAAU,WACrB,4BAAM9Y,EAAE,kBACR,4BAAM+Y,MAAM,OAAOrB,KAAK,eAAe1X,EAAE,oDAM7DoT,GAAKC,SAASI,OAAOoE,EAAMpC,OArHL,CACtBA,EAAIO,WAAWxH,MAAMyH,YAAc,UACnC,IAAI4B,EAAOzE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACV,MAAO,CAACsJ,QAAS,YAAa,CACvE1E,GAAK6D,MAAM/H,cAAcgI,EAAa,CAAC5I,KAAMkH,EAAOjT,KAAK,IAAIiT,EAAOvV,KAAK,+BACrEmT,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBC,oBAAqBpH,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,OAAQW,MAAO,SAC5H3E,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBqC,WAAY,cAAc,QAAQb,MAAM,OAAOC,OAAO,OAAOE,QAAQ,eAC9HlE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACwI,KAAK,UAAW,YAAY,UAAU1X,EAAE,6VAE9EoT,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW0G,GAAYC,gBACpD1C,GAAK6D,MAAM/H,cAAc,MAAO,CAAC,cAAc,QAAQiI,MAAM,OAAOC,OAAO,OAAOE,QAAQ,eACtFlE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACwI,KAAK,UAAU1X,EAAE,wDAKnEoT,GAAK6D,MAAM/H,cAAcgI,EAAa,CAAC5I,KAAM,gBAAgBkH,EAAOjT,KAAKwM,cAAc,kBACnFqE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBC,oBAAqBpH,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,QAASe,UACtHtQ,GAAM0O,sBACF,0CAA0Cf,EAAOjT,KAAKwM,cAAc,KACpE,wDAAwDyG,EAAOjT,KAAKwM,cAAc,mCAClF,CACI0H,YAAa,uBACbC,WAAY,uBACZC,QAAQ,EACRC,SAAU,OACVC,UAAW,KACP,IAAIuB,EAAOC,GAAczE,GAAQrP,KAAK+I,GAAKA,EAAE,KAAOkI,EAAOX,MAAM,GACjElN,QAAQoE,IAAIqM,GACZ/D,IAAU+D,GACT3D,KAAK9K,UACF,GAAkB,MAAf+K,EAAIC,OAAe,MAAM,IAAIC,MAAM,sBACtC,IAAI0D,QAAgB5D,EAAI6D,SACpBC,EAAcrS,eAAqB,WAAhBqP,EAAOjT,KAAoBkW,GAAeC,eAAiBD,GAAeE,cAAenD,EAAOnL,UACvH1C,QAAQoE,IAAIyM,GACZvR,wBAAcuR,EAAaF,GAC3BzQ,GAAM4C,UAAU+K,EAAOjT,KAAK,6BAC7BqW,MAAMlR,IACLA,EAAMA,aAAekN,MAAQlN,EAAM,IAAIkN,MAAMlN,GAC7CG,GAAM4C,UAAU/C,EAAI4C,QAAS,CACzB/H,KAAM,iBAO1B6Q,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAWwG,GAAiBqC,WAAY,cAAc,QAAQb,MAAM,OAAOC,OAAO,OAAOE,QAAQ,YAAY9I,MAAM,CAChJ0J,MAAO,oBACPW,OAAQ,YAER,yBAAGnB,KAAK,OAAOoB,YAAU,WACrB,4BAAM9Y,EAAE,kBACR,4BAAM+Y,MAAM,OAAOrB,KAAK,eAAe1X,EAAE,oDAM7DoT,GAAKC,SAASI,OAAOoE,EAAMpC,IAvInBuD,CAAiBtW,EAAI8S,EAAQzB,EAAW1J,WACzC,KACC,IAAI4O,EAAOhK,SAASgF,eAAevR,GAChCuW,GAAKA,EAAKlH,eAGtB6G,MAAM,QAzKDM,CAAkBnF,EAAYrR,KAItC8H,SAIA2O,UAAUtE,GACN,OAAOlB,EAAMkB,KAAUlB,EAAMkB,GAAMkB,UAIpC,SAASqD,GAAavE,EAAMrO,EAAM6S,EAAgBC,EAAgBjP,GACrE7D,EAAOA,EAAK+S,SAAS,QACrB,IAAIC,GAAY,EAChB,IAAI,IAAIC,KAAWjT,EAAKkT,MAAM,aAAa,CACvC,IAAI,IAAIC,IAAO,CACX,QACA,QACA,QACA,MACA,MACA,gBACA,eACA,OACA,YACA,iBAEA,GAAGF,EAAQ1K,cAAciI,SAAS2C,EAAI5K,gBAA6C,kBAA1B0K,EAAQ1K,cAAiC,CAC9FpH,QAAQoE,IAAI4N,EAAKF,GACjBD,EAAY,sBACZ,MAGR,GAAGA,EAAU,MAGjB,IAAIA,EAAU,CAIV,MAAMI,EAAcpT,EAAKqT,QAAQ,uCAAwC,IAAIC,OAK7E,GAJI,sBAAuBC,KAAKH,KAC5BJ,EAAY,4BAGZA,EAAU,CACV,MAAMQ,EAAU,CAEZ,+BACA,6CAEA,0BACA,yCAEJ,IAAI,IAAIC,KAASD,EAAQ,CACrB,GAAGR,EAAU,MACVS,EAAMF,KAAKH,KAAaJ,EAAY,6BAKnD,IAAIA,EAAU,OAAOF,EAAezE,GACpClB,EAAMkB,GAAQ,CACVkB,SAAS,EACT9V,KAAMqV,GAAUT,GAAM6E,MAAM,KAAKQ,MACjC3X,KAAM+S,GAAUT,GAAMT,SAAS,OAAS,SAAW,QACnDoC,KAAMgD,EACN3E,KAAMA,EACNxK,YAGJ1C,QAAQoE,IAAK,+BAA8B4H,EAAMkB,GAAMtS,KAAKwM,kBAAkB4E,EAAMkB,GAAM5U,QAE1FoZ,EAAe1F,EAAMkB,IAGzB,MAAMS,GAAY,GAEX,SAASC,GAAUV,EAAMrO,EAAM6D,EAAUgP,EAAgBC,GAE5D,GADA3R,QAAQoE,IAAK,SAAQ1B,WAAkBwK,KACnClB,EAAMkB,GAuBL,CACD,MAAMW,EAAS7B,EAAMkB,GAErBwE,EAAe7D,QAzBfnB,IAAU,kEAAkEQ,EAAM,CAC9EP,QAAS,CACL,aAAcC,SAAgBzJ,wBAAwB0J,aAE3DC,KAAK9K,UACJ,GAAkB,MAAf+K,EAAIC,OACH,OAAGtK,EAAS+J,SAAS,cAAqBkF,EAAezE,QACzDuE,GAAavE,EAAMrO,EAAM6S,EAAgBC,EAAgBjP,GAG7D,MAAMmL,QAAed,EAAIyF,OACzB3E,EAAOX,KAAOA,EACdW,EAAOnL,SAAWA,EAElBsJ,EAAMkB,GAAQW,EAEd6D,EAAe7D,KAChBoD,MAAOlR,IAEN,GADAC,QAAQC,MAAO,+BAA8BF,GAC1C2C,EAAS+J,SAAS,cAAc,OAAOkF,EAAezE,GACzDuE,GAAavE,EAAMrO,EAAM6S,EAAgBC,EAAgBjP,KAS9D,SAAS+P,GAAYC,EAAQhB,EAAgBC,EAAkBzE,QAAayF,GAAe,GAC9F,MAAMzF,EAAOC,aAAkB,UAC/B,IAAItO,EAAOuO,OAAOC,MAAM,GAExBuF,2BAAiBF,GAAQtP,GAAG,OAAQkK,IAChCzO,EAAOuO,OAAOG,OAAO,CAAC1O,EAAMyO,IAC5BJ,EAAKM,OAAOF,KACblK,GAAG,MAAO,KACT,MAAMqK,EAAaP,EAAKQ,OAAO,OAI/B,GAFAC,GAAUF,GAAciF,EAErBC,GAAgBE,GAAWpF,GAAY,CACtC,IAAIzU,EAAQ6Z,GAAWpF,GACvB,KAAGzU,EAAM8Z,UAAalX,KAAKC,MAAQ,QAK/B,YADA6V,EAAe1Y,EAAM6U,eAHdgF,GAAWpF,GAClBqD,GAAeiC,iBAOvBnF,GAAUH,EAAY5O,EAAMmU,mBAASN,GAAShB,EAAgBC,KAqCtE,IAAI3D,GAAmBtE,UAAU9Q,IAAI+M,GAAKA,EAAEsI,qBAAqB,GAC7DC,GAAcxE,UAAU9Q,IAAI+M,GAAKA,EAAEwI,gBAAgB,GA4LvD,SAASuC,GAAcuC,GACnB,IAAIC,EAAM,GAIV,OAHAza,OAAO2J,KAAK6Q,GAAK3K,QAAQ6K,IACrBD,EAAIxW,KAAK,CAACyW,EAAGF,EAAIE,OAEdD,EAGX,IAAI5Z,GAAM,KACN8Z,GAAO,KAyBX,SAASC,KACL/Z,GAAM,CAAC6T,cAAmB,IAAIyE,SAAS,UAAWzE,cAAmB,IAAIyE,SAAS,WAqB/E,SAAS0B,GAAqBzU,GACjC,IAAI4C,EAAO,CAAC2L,OAAO1E,KAAKpP,GAAI,GAAI,UAAW8T,OAAO1E,KAAKpP,GAAI,GAAI,WAE3Dia,EAASpG,iBAAsB,iBAAkB1L,GACjD+R,EAAYD,EAAO/F,OAAOJ,OAAO1E,KAAK7J,EAAM,SAEhD,OADA2U,EAAYpG,OAAOG,OAAO,CAACiG,EAAWD,EAAOE,UACtCD,EAAU5B,SAAS,UAnD9B1X,OAAOyD,UAAU+V,IAAIC,eAAexb,GAAGA,EAAEyb,eACxC9G,KAAK+G,IACF,IAAIC,EAAeD,EAAmBE,KACtCX,GAAO,WACHU,EAAaE,IAAI,iCAAkCC,KAAK1U,KAAKC,UAAUlG,OAE3E4a,YAAY,KACRd,MACD,KACH,IACI,IAAIe,EAiBZ,SAAuB3B,GACnB,IACI,OAAOjT,KAAKE,MAAM+S,GACrB,MAAM7M,GACH,OAAOA,aAAasH,MAAQ,IAAIA,MAAMtH,GAAKA,GArBjCyO,CAAcC,KAAKP,EAAalb,IAAI,oCAC9C,GAAGub,aAAelH,QAAUxE,MAAM6L,QAAQH,IAAuB,IAAfA,EAAI9R,QAAgB8R,EAAIvX,KAAK+I,GAAkB,iBAANA,IAA4D,KAAzCyH,OAAO1E,KAAKyL,EAAI,GAAI,UAAU9R,QAA0D,KAAzC+K,OAAO1E,KAAKyL,EAAI,GAAI,UAAU9R,OAGvL,OAFAgR,UACAD,KAGJ9Z,GAAM6a,EACT,MAAMxO,GACH0N,KACAD,QCrZR,MAAMpV,GAAOjE,EAAQ,GACfgE,GAAKhE,EAAQ,GACbwa,GAASxa,EAAQ,GAAUwa,OACjCA,GAAOC,YAAY9X,KAAKsB,GAAKsC,QAAQvG,EAAQ,GAAYmJ,OAAO/E,IAAIsW,aAAc,iBAClF,MAAMC,WAAkBzH,MACpBtO,YAAYgE,GACRtB,MAAMsB,GACN/D,KAAKtG,KAAO,aAGpB,MAAMqc,GAAoBJ,GAAOK,YAAY,OACvCC,GAAqBN,GAAOK,YAAY,QAAUL,GAAOK,YAAY,QAAU,IAAc,KAC7FE,GAAa,gDACbC,GAAiB,OAEhB,IAAIlC,GAAa,GAEpBmC,IAAa,EACF,WAAI,MAEfrW,cACIC,KAAKqW,UAAY,GACjBrW,KAAKsW,SAAW,GAGpBC,kBACOH,KACHA,IAAa,EACbT,GAAOK,YAAY,OAAShW,KAAKwW,kBAAkB,UACnDb,GAAOK,YAAY,QAAUhW,KAAKwW,kBAAkB,UAGxD,oBAAqB,OAAOxW,KAAKmS,iBAAmBnS,KAAKmS,eAAiBhT,GAAGsX,aAAarX,GAAKsC,QAAQpE,EAASmC,SAAW,cAC3H,mBAAoB,OAAOO,KAAKoS,gBAAkBpS,KAAKoS,cAAgBjT,GAAGsX,aAAarX,GAAKsC,QAAQpE,EAASmC,SAAW,aAExHiX,0BACI,GAAiE,iBAAvDC,EAAUzU,gBAAgB,yBAChCyU,EAAUxU,gBAAgB,wBAAyBuS,GAAqB,YAExE,IACIT,GAAatT,KAAKE,MD6X3B,SAA8BZ,GACjC,IACI,IAAI2W,EAAWrI,mBAAwB,cAAeC,OAAO1E,KAAKpP,GAAI,GAAI,UAAW8T,OAAO1E,KAAKpP,GAAI,GAAI,WACrGmc,EAAYD,EAAShI,OAAOJ,OAAO1E,KAAK7J,EAAM,WAElD,OADA4W,EAAYrI,OAAOG,OAAO,CAACkI,EAAWD,EAAS/B,UACxCgC,EAAU7D,SAAS,QAC7B,MAAMjM,GACH,MAAO,MCpYyB+P,CAAqBH,EAAUzU,gBAAgB,2BAC1E,MAAM6E,GACH4P,EAAUxU,gBAAgB,wBAAyBuS,GAAqB,OACxET,GAAa,GAGrBpa,OAAO2J,KAAKyQ,IACXvK,QAAQhP,IACL,IAAIN,EAAQ6Z,GAAWvZ,GACvB,IAAIN,GAA0B,iBAAVA,GAAsByP,MAAM6L,QAAQtb,GAAO,cAAc6Z,GAAWvZ,GAExF,IAAIkS,EAAQ,CAAC,CACTlS,IAAK,YACLsB,KAAM,UACP,CACCtB,IAAK,SACLsB,KAAM,UACP,CACCtB,IAAK,OACLsB,KAAM,WAEV,IAAI,IAAIwC,KAAQoO,EACZ,KAAKpO,EAAK9D,OAAON,WAAiBA,EAAMoE,EAAK9D,OAAS8D,EAAKxC,KAEvD,mBADOiY,GAAWvZ,GAIvBN,EAAMkU,OAAS5T,EAIfN,EAAM6U,OAAOO,gBACLyE,GAAWvZ,UAJXuZ,GAAWvZ,KAQ1BsF,KAAKmU,iBAGTA,iBACIwC,EAAUxU,gBAAgB,wBAAyBuS,GAAqB/T,KAAKC,UAAUqT,MAG3F8C,aAAaC,GACT,GAAIhX,KAAKsW,SAASU,GAAc,OAChC,MAAMC,EAA2B,WAAhBD,EACXE,EAAaD,EAAWjX,KAAKiC,cAAgBjC,KAAKmX,aAClDC,EAAaH,EAAW,aAAe,aAC7CjX,KAAKsW,SAASU,GAAe7X,GAAGkY,MAAMH,EAAY,CAACI,YAAY,GAAQlU,MAAOmU,EAAWzT,KACrF,IAAKyT,IAAczT,IAAaA,EAAS+J,SAASuJ,GAAa,aACzD,IAAIjT,QAAQlK,GAAKmK,WAAWnK,EAAG,KACrC,IAAKkF,GAAGqY,SAASpY,GAAKsC,QAAQwV,EAAYpT,IAC1C,MAAO3C,GACH,GAAiB,WAAbA,EAAIsW,KAAmB,OAE3B,cADOzX,KAAKqW,UAAUvS,GAClBmT,EAAiBS,EAAajS,aAAa3B,GACxC6T,GAAYC,YAAY9T,GAEnC,IAAK3E,GAAGqY,SAASpY,GAAKsC,QAAQwV,EAAYpT,IAAW+T,SAAU,OAC/D,MAAMC,EAAQ3Y,GAAGqY,SAASpY,GAAKsC,QAAQwV,EAAYpT,IAC9CgU,GAAUA,EAAMC,OAAUD,EAAMC,MAAMC,WACL,iBAA3BF,EAAMC,MAAMC,WACnBhY,KAAKqW,UAAUvS,IAAagU,EAAMC,MAAMC,YAC5ChY,KAAKqW,UAAUvS,GAAYgU,EAAMC,MAAMC,UACtB,UAAbT,IACIN,QAAgBS,EAAatS,WAAWtB,SACjC6T,GAAYM,UAAUnU,IAEpB,UAAbyT,IACIN,QAAgBS,EAAa3R,aAAajC,SACnC6T,GAAYO,YAAYpU,OAK/CqU,eAAenB,GACNhX,KAAKsW,SAASU,KACnBhX,KAAKsW,SAASU,GAAaoB,eACpBpY,KAAKsW,SAASU,IAGzBqB,YAAYtG,GACR,MAAMuG,EAAYvG,EAAQoB,MAAM,MAAM,GAEtC,GADmBmF,EAAU7H,SAAS,UACtB,OAAOzQ,KAAKuY,aAAaxG,GAEzC,GADmBuG,EAAU7H,SAAS,OACtB,OAAOzQ,KAAKwY,aAAazG,GACzC,MAAM,IAAI+D,GAAU,uBAGxByC,aAAaxG,GACT,MAAM0G,EAAO1G,EAAQoB,MAAM,MAAM,GAC3BuF,EAAUD,EAAKE,UAAUF,EAAKG,YAAY,UAAY,EAAGH,EAAKG,YAAY,QAChF,GAAIH,EAAKxO,QAAQ,QAAU,EAAG,MAAM,IAAI6L,GAAU,uBAClD,MAAM+C,EAASvX,GAAMwX,SAASJ,GAC9B,IAAKG,EAAQ,MAAM,IAAI/C,GAAU,6BACjC,IAAK+C,EAAOnf,KAAM,MAAM,IAAIoc,GAAU,2BAEtC,OADA+C,EAAOE,OAAS,OACTF,EAGXL,aAAazG,GACT,MAAMiH,EAAQjH,EAAQoB,MAAM,MAAO,GAAG,GAAGA,MAAM,KAAM,GAAG,GAClD8F,EAAM,GACZ,IAAIC,EAAQ,GACRC,EAAQ,GACZ,IAAK,MAAMC,KAAQJ,EAAM7F,MAAM+C,IAC3B,GAAoB,IAAhBkD,EAAK3V,OACT,GAAuB,MAAnB2V,EAAKC,OAAO,IAAiC,MAAnBD,EAAKC,OAAO,GAAY,CAClDJ,EAAIC,GAASC,EACb,MAAM/f,EAAIggB,EAAKnP,QAAQ,KACvBiP,EAAQE,EAAKE,OAAO,EAAGlgB,EAAI,GAC3B+f,EAAQC,EAAKE,OAAOlgB,EAAI,QAGxB+f,GAAS,IAAMC,EAAK9F,QAAQ,MAAO,MAAMA,QAAQ6C,GAAgB,KAMzE,OAHA8C,EAAIC,GAASC,EAAM5F,cACZ0F,EAAI,IACXA,EAAIF,OAAS,QACNE,EAGXzC,kBAAkBxa,GACd,MAAMib,EAAoB,WAATjb,EACXud,EAAOvZ,KACPwZ,EAAkBvC,EAAWlB,GAAoBE,GACvD,OAAO,SAAS/c,EAAQ4K,GACpB,MAAMoT,EAAaD,EAAWsC,EAAKtX,cAAgBsX,EAAKpC,aAClDsC,EAAera,GAAKsC,QAAQwV,EAAY9X,GAAKgV,SAAStQ,IAC5D,IAAK3E,GAAGqB,WAAWiZ,IAAiB3V,IAAa3E,GAAGsX,aAAagD,GAAe,OAAOC,QAAQC,MAAMH,EAAiBxZ,KAAM4Z,WAC5H,IAAI7H,EAAU5S,GAAG2B,aAAagD,EAAU,QACxCiO,EAAUzQ,GAAMuY,SAAS9H,GAEzB,MAAM+F,EAAQ3Y,GAAGqY,SAAS1T,GACpB2U,EAAOc,EAAKlB,YAAYtG,GAU9B,GATA0G,EAAK3U,SAAW1E,GAAKgV,SAAStQ,GAC9B2U,EAAKjS,MAAQsR,EAAMgC,QACnBrB,EAAKsB,SAAWjC,EAAMkC,QACtBvB,EAAKwB,KAAOnC,EAAMmC,KACbhD,IACDwB,EAAKyB,IAAMnI,EACQ,QAAf0G,EAAKM,SAAkBN,EAAKyB,IAAMzB,EAAKyB,IAAI/G,MAAM,MAAM1L,MAAM,GAAG7H,KAAK,OACzEmS,EAAW,oBAAmBpR,KAAKC,UAAU6X,OAE7CxB,EAAU,CACV/d,EAAOihB,SAASpI,EAAS7Y,EAAO4K,WACbxC,GAAM8Y,QAAQlhB,EAAOD,UAEpCwf,EAAKzc,KAAO9C,EAAOD,QACnBC,EAAOD,QAAUwf,EACjB1G,EAAU,KAGVzQ,GAAM+Y,KAAK,sBAA0B5B,EAAK/e,KAAP,yCACnCqY,GAAY,sBAAqBpR,KAAKC,UAAU6X,8BAAiCA,EAAKxf,SAAWwf,EAAK/e,SAG9GR,EAAOihB,SAASpI,EAASjO,IAIjCwW,sBAAsBra,GAClB,MAAO,CAACyD,OAAQ,CACRO,MAAO,OACPN,QAAS,IAAc1D,EAAKvG,MAAQuG,EAAK6D,SACzCyW,UAAW,IAAc,MACzBC,eAAgB,IAAcva,EAAK8D,QAAU9D,EAAK8D,QAAU,4EAC5DtI,WAAY,IAAc,OAE9B/B,KAAMuG,EAAKvG,MAAQuG,EAAK6D,SACxBA,SAAU7D,EAAK6D,SACf2W,OAAQxa,EAAKwa,OAASxa,EAAKwa,OAAS,GACpCC,QAASza,EAAKya,QAAUza,EAAKya,QAAU,IAI/C,kBAAkB5W,EAAU9H,GACxB,QAAyB,IAAd8H,QAA8C,IAAV9H,EAAuB,OACtE,MAAMib,EAAoB,WAATjb,EACXkb,EAAaD,EAAWjX,KAAKiC,cAAgBjC,KAAKmX,aAExD,GAAGta,EAAe,aAAa,CAC3B,IAAIoS,QAAe,IAAI9K,QAAQzC,IAC3BmS,GAAYzU,GAAKsC,QAAQwV,EAAYpT,GAAYmL,IAC7C7N,QAAQoE,IAAIyJ,GACZvN,EAAQuN,IACRX,IACA5M,EAAQ,CACJ8N,SAAS,EACTlB,KAAMA,EACNxK,SAAUA,EACVpK,KAAMoK,MAEX,KAEP,GAAGmL,IACCgF,GAAWhF,EAAOX,MAAQ,CACtB4F,UAAWlX,KAAKC,MAChBqR,KAAMW,EAAOX,KACbW,OAAQA,GAEZjP,KAAKmU,iBACFlF,EAAOO,SACN,MAAO,CACH9V,KAAMoK,EACND,KAAMC,EACNC,QAAS,mCAAmCkL,EAAOgB,KAAK,KACxD5O,MAAO,IAAIgN,MAAM,mCAAmCY,EAAOgB,KAAK,OAMhF,IAAK3U,OAAOH,QAAQiE,GAAKsC,QAAQwV,EAAYpT,IAC7C,MAAOzC,GAAQ,MAAO,CAAC3H,KAAMoK,EAAUD,KAAMC,EAAUC,QAAS,yBAA0B1C,MAAO,CAAC0C,QAAS1C,EAAM0C,QAASC,MAAO3C,EAAM2C,QACvI,MAAM+N,EAAUzW,OAAOH,QAAQiE,GAAKsC,QAAQwV,EAAYpT,IACxD,IAAIiO,EAAQrY,KAAK,MAAO,CAACA,KAAMoK,EAAUD,KAAMC,EAAUC,QAAS,wBAAyB1C,MAAO,IAAIgN,MAAM,gDAG5G,GAFA0D,EAAQ5V,GAAKmF,GAAMqZ,SAAS5I,EAAQrY,MAEhCud,EAAU,CACV,IAAKlF,EAAQ/V,KAAM,OACnB,IACI+V,EAAQrO,OAAS,IAAIqO,EAAQ/V,YACtByB,EAAUsU,EAAQrO,OAAOC,WAChClG,EAAUsU,EAAQrO,OAAOC,WAAaoO,EAE1C,MAAO1Q,GAAQ,MAAO,CAAC3H,KAAMoK,EAAUD,KAAMC,EAAUC,QAAS,4BAA6B1C,MAAO,CAAC0C,QAAS1C,EAAM0C,QAASC,MAAO3C,EAAM2C,qBAGnIxG,EAASuU,EAAQrY,MACxB8D,EAASuU,EAAQrY,MAAQqY,EAIjCnM,cAAc9B,EAAU9H,GACpB,QAAyB,IAAd8H,QAA8C,IAAV9H,EAAuB,OACtE,MACMkb,EADoB,WAATlb,EACagE,KAAKiC,cAAgBjC,KAAKmX,aACxD,WACW7b,OAAOH,QAAQiS,MAAM9R,OAAOH,QAAQuG,QAAQtC,GAAKsC,QAAQwV,EAAYpT,KAEhF,MAAO3C,GAAM,MAAO,CAACzH,KAAMoK,EAAUD,KAAMC,EAAUC,QAAS,yBAA0B1C,MAAO,CAAC0C,QAAS5C,EAAI4C,QAASC,MAAO7C,EAAI6C,SAGrI4W,SAAS9W,EAAU9H,GACf,MACMkb,EADoB,WAATlb,EACagE,KAAKiC,cAAgBjC,KAAKmX,aACxD,IAAK7b,OAAOH,QAAQiS,MAAM9R,OAAOH,QAAQuG,QAAQtC,GAAKsC,QAAQwV,EAAYpT,KAC1E,MAAO3C,GAAM,OAAO,EACpB,OAAO,EAGX,oBAAoB2C,EAAU9H,GAC1B,MAAM6e,EAAa7a,KAAK4F,cAAc9B,EAAU9H,GAChD,OAAI6e,SACS7a,KAAKqF,YAAYvB,EAAU9H,GAG5CuK,eAAevK,GACX,MAAMib,EAAoB,WAATjb,EACXob,EAAaH,EAAW,aAAe,aACvC6D,EAAU7D,EAAWjX,KAAKiC,cAAgBjC,KAAKmX,aAC/C4D,EAAQ5b,GAAG6b,YAAYF,GACvBG,EAAcphB,OAAO0L,OAAO0R,EAAWxZ,EAAYD,GACnDiJ,EAAUwU,EAAYhd,OAAO5D,IAAM0gB,EAAMtK,SAASpW,EAAEyJ,WAAWoX,IAAI1hB,GAAKyd,EAAWzd,EAAEkK,OAAOC,UAAYnK,EAAEE,MAEhH,MAAO,CAAC8M,MADMuU,EAAM9c,OAAOkd,IAAMF,EAAYjd,KAAK3D,GAAKA,EAAEyJ,UAAYqX,IAAMA,EAAEtN,SAASuJ,IAAejY,GAAGqY,SAASpY,GAAKsC,QAAQoZ,EAASK,IAAItD,UAC5HpR,WAGnB,qBAAqBzK,GACjBgE,KAAKuW,kBACL,MAAMU,EAAoB,WAATjb,EACXob,EAAaH,EAAW,aAAe,aACvC6D,EAAU7D,EAAWjX,KAAKiC,cAAgBjC,KAAKmX,aAC/CiE,EAAS,GACTL,EAAQ5b,GAAG6b,YAAYF,GAE7B,IAAK,MAAMhX,KAAYiX,EAAO,CAC1B,IAAK5b,GAAGqY,SAASpY,GAAKsC,QAAQoZ,EAAShX,IAAW+T,WAAa/T,EAAS+J,SAASuJ,GAAa,SAC9F,MAAM/V,QAAcrB,KAAKqF,YAAYvB,EAAU9H,GAC3CqF,GAAO+Z,EAAOtd,KAAKuD,GAG3B,OAAO+Z,EAGXjY,cAAe,OAAOnD,KAAKqb,eAAe,UAC1CC,aAAc,OAAOtb,KAAKqb,eAAe,WCzS9B,MAAME,GAEjB,gBAAgBpf,GACZ,OAAOA,EAAGmX,QAAQ,qBAAsB,KAQ/C,gBAAgBnX,EAAI+d,GACnBxR,SAAS8S,KAAKnS,OAAOkS,GAAS5S,cAAe,cAAaxM,MAAO+d,cAOlE,mBAAmB/d,GAClB,MAAMsM,EAAUC,SAASgF,eAAevR,GACpCsM,GAASA,EAAQ+C,SAStB,iBAAiBrP,EAAIwR,GACpB,OAAO,IAAIxJ,QAAQzC,IAClB,MAAM+Z,EAAS/S,SAASC,cAAc,UACtC8S,EAAOtf,GAAKA,EACZsf,EAAOC,IAAM/N,EACb8N,EAAOzf,KAAO,kBACdyf,EAAOE,OAASja,EAChBgH,SAAS8S,KAAKnS,OAAOoS,KAQvB,oBAAoBtf,GACbA,EAAK6D,KAAK2a,SAASxe,GACzB,MAAMsM,EAAUC,SAASgF,eAAevR,GACpCsM,GAASA,EAAQ+C,SAInB,gBAAe,OAACoQ,EAASC,IAAKA,GAAf,OAAkBjN,EAAlB,SAA0BkN,IACrC,MAAM7X,EAAQ8X,YAAY9e,MAE1B+e,uBAAsB,SAASC,EAAQC,GAErC,IAAIC,GAAgBD,EAAOjY,GAAS6X,EAChCK,EAAe,IAAGA,EAAe,GAGrC,MAAMC,EAAWR,EAAOO,GAExBvN,EAAOwN,GAEHD,EAAe,GACjBH,sBAAsBC,MAe9B,SAASI,GACL,MAAM5T,EAAUzI,KAAKsc,UAAUD,GAE/B,OADe5T,aAAmB8T,SAAW1S,MAAMC,KAAKrB,GAAS0B,KAAKvP,GAAoB,IAAfA,EAAE4hB,UAAuC,IAArB/T,EAAQ+T,UACpF/T,EACZzI,KAAKyc,MAAMJ,GAUtB,aAAaA,EAAUK,EAAchU,UACjC,OAAOgU,EAAY9R,cAAcyR,GAUrC,gBAAgBA,EAAUK,EAAchU,UACpC,OAAOgU,EAAYC,iBAAiBN,GAcxC,iBAAiBO,EAAMC,GAAW,GAC9B,MAAMC,EAAWpU,SAASC,cAAc,YACxCmU,EAASC,UAAYH,EACrB,MAAM9U,EAAOgV,EAAS/K,QAAQiL,WAAU,GACxC,OAAIH,EAAiB/U,EACdA,EAAKqH,WAAW1L,OAAS,EAAIqE,EAAKqH,WAAarH,EAAKqH,WAAW,GAI1E,qBAAqByN,EAAMC,GAAW,GAAQ,OAAO7c,KAAKsc,UAAUM,EAAMC,GAM1E,kBAAkBD,GACd,MAAMK,EAAWvU,SAASwU,eAAe,IACnCC,EAAczU,SAASC,cAAc,QAG3C,OAFAwU,EAAY9T,OAAO4T,GACnBA,EAASG,UAAYR,EACdO,EAAYJ,UASvB,gBAAgBtU,KAAY4U,GACxBA,EAAUA,EAAQC,OAAOrf,OAAOzE,GAAKA,GACrC,IAAK,IAAIA,EAAI,EAAGA,EAAI6jB,EAAQ5Z,OAAQjK,IAAK6jB,EAAQ7jB,GAAK6jB,EAAQ7jB,GAAGwZ,WAAWG,MAAM,KAGlF,OAFAkK,EAAUA,EAAQC,OAAOrf,OAAOzE,GAAKA,GACrCiP,EAAQ2D,UAAUC,OAAOgR,GAClB5U,EASX,mBAAmBA,KAAY4U,GAC3B,IAAK,IAAI7jB,EAAI,EAAGA,EAAI6jB,EAAQ5Z,OAAQjK,IAAK6jB,EAAQ7jB,GAAK6jB,EAAQ7jB,GAAGwZ,WAAWG,MAAM,KAGlF,OAFAkK,EAAUA,EAAQC,OAAOrf,OAAOzE,GAAKA,GACrCiP,EAAQ2D,UAAUZ,UAAU6R,GACrB5U,EAaX,mBAAmBA,EAAS8U,EAAWC,GAInC,OAHAD,EAAYA,EAAUvK,WAAWG,MAAM,KAAKlV,OAAOzE,GAAKA,QAC9B,IAAfgkB,EAA4BD,EAAU7T,QAAQlQ,GAAKiP,EAAQ2D,UAAUjH,OAAO3L,EAAGgkB,IACrFD,EAAU7T,QAAQlQ,GAAKiP,EAAQ2D,UAAUjH,OAAO3L,IAC9CiP,EASX,gBAAgBA,EAAS8U,GACrB,OAAOA,EAAUvK,WAAWG,MAAM,KAAKlV,OAAOzE,GAAKA,GAAG+E,MAAM/E,GAAKiP,EAAQ2D,UAAU/B,SAAS7Q,IAUhG,oBAAoBiP,EAASgV,EAASC,GAElC,OADAjV,EAAQ2D,UAAUkH,QAAQmK,EAASC,GAC5BjV,EASX,gBAAgBkV,EAAUC,GAEtB,MADwB,iBAAbA,IAAuBA,EAAW5d,KAAKyc,MAAMmB,IACnDA,GACLA,EAASvU,OAAOsU,GACTA,GAFe,KAW1B,iBAAiBA,EAAUC,GAEvB,MADwB,iBAAbA,IAAuBA,EAAW5d,KAAKyc,MAAMmB,IACnDA,GACLA,EAASC,QAAQF,GACVA,GAFe,KAW1B,mBAAmBA,EAAUG,GAEzB,OADAA,EAAWrO,WAAWsO,aAAaJ,EAAUG,EAAWE,aACjDL,EASX,aAAaA,EAAUM,GAEnB,OADAN,EAASlO,WAAWsO,aAAaE,EAASN,EAASK,aAC5CL,EASX,YAAYlV,EAAS4T,EAAW,IAC5B,OAAOA,EAAW5T,EAAQmC,cAAc,KAAOyR,GAAY5T,EAAQyV,mBAQvE,eAAezV,GACX,OAAOA,EAAQkU,iBAAiB,OASpC,iBAAiBlU,EAAS4T,GACtB,MAAM8B,EAAO,GACb,KAAO1V,EAAQyV,qBAAuBzV,EAAQyV,mBAAmBE,QAAQ/B,IAAW8B,EAAKrgB,KAAK2K,EAAUA,EAAQyV,oBAChH,OAAOC,EASX,gBAAgB1V,EAAS4T,EAAW,IAChC,MAAMgC,EAAW5V,EAAQ6V,uBACzB,OAAIjC,EAAiBgC,GAAYA,EAASD,QAAQ/B,GAAYgC,EAAW,KAClEA,EAQX,mBAAmB5V,GACf,MAAM4V,EAAW,GACjB,KAAO5V,EAAQ6V,wBAAwBD,EAASvgB,KAAK2K,EAAUA,EAAQ6V,wBACvE,OAAOD,EASX,qBAAqB5V,EAAS4T,GAC1B,MAAMgC,EAAW,GACjB,KAAO5V,EAAQ6V,yBAA2B7V,EAAQ6V,uBAAuBF,QAAQ/B,IAAWgC,EAASvgB,KAAK2K,EAAUA,EAAQ6V,wBAC5H,OAAOD,EAQX,qBAAqBvW,GACjB,MAAMqF,EAAWrF,EAAK2H,WAAWN,WACjC,IAAIoP,EAAM,EACV,IAAK,IAAIplB,EAAI,EAAGA,EAAIgU,EAAS1J,OAAQtK,IAAK,CACtC,GAAIgU,EAAShU,IAAM2O,EAAM,OAAOyW,EACJ,GAAxBpR,EAAShU,GAAGqjB,UAAe+B,IAEnC,OAAQ,EAIZ,aAAazW,GAAO,OAAO9H,KAAKwe,cAAc1W,GAS9C,cAAcW,EAAS4T,EAAW,IAC9B,OAAQA,GAAY5T,EAAQgW,cAAcL,QAAQ/B,GAAY5T,EAAQgW,cAAgB,KAS1F,iBAAiBhW,EAAS4T,GACtB,OAAO5T,EAAQmC,cAAc,YAAcyR,GAS/C,oBAAoB5T,EAAS4T,GACzB,OAAO5T,EAAQkU,iBAAiB,YAAcN,GASlD,eAAe5T,EAAS4T,EAAW,IAC/B,MAAMqC,EAAU,GAChB,GAAIrC,EAAU,KAAO5T,EAAQgW,eAAiBhW,EAAQgW,cAAcE,QAAQtC,IAAWqC,EAAQ5gB,KAAK2K,EAAUA,EAAQgW,cAAcE,QAAQtC,SACvI,KAAO5T,EAAQgW,eAAeC,EAAQ5gB,KAAK2K,EAAUA,EAAQgW,eAClE,OAAOC,EASX,oBAAoBjW,EAAS4T,GACzB,MAAMqC,EAAU,GAChB,KAAOjW,EAAQgW,gBAAkBhW,EAAQgW,cAAcL,QAAQ/B,IAAWqC,EAAQ5gB,KAAK2K,EAAUA,EAAQgW,eACzG,OAAOC,EASX,gBAAgBjW,EAAS4T,EAAW,KAChC,OAAOxS,MAAMC,KAAKrB,EAAQgW,cAActR,UAAUlP,OAAO8I,GAAKA,GAAK0B,GAAW1B,EAAEqX,QAAQ/B,IAY5F,WAAW5T,EAASmW,EAAWxkB,GAC3B,YAAqB,IAAVA,EAA8BykB,OAAOC,iBAAiBrW,GAASmW,IAC1EnW,EAAQR,MAAM2W,GAAaxkB,EACpBqO,GAWX,aAAaA,EAASrO,GAClB,YAAqB,IAAVA,EAA8B2kB,SAASD,iBAAiBrW,GAASmI,QAC5EnI,EAAQR,MAAM2I,MAAQxW,EACfqO,GAWX,cAAcA,EAASrO,GACnB,YAAqB,IAAVA,EAA8B2kB,SAASD,iBAAiBrW,GAASoI,SAC5EpI,EAAQR,MAAM4I,OAASzW,EAChBqO,GASX,YAAYA,EAASV,GACjB,YAAoB,IAATA,EAA6BU,EAAQiD,YACzCjD,EAAQiD,YAAc3D,EAQjC,kBAAkBU,GACd,OAAOA,EAAQuW,YAQnB,mBAAmBvW,GACf,OAAOA,EAAQwW,aAQnB,kBAAkBxW,GACd,OAAOA,EAAQ6C,YAQnB,mBAAmB7C,GACf,OAAOA,EAAQ0C,aAQnB,cAAc1C,GACV,OAAOA,EAAQwC,wBAGnB,uBAAyB,OAAOjL,KAAKkf,aAAelf,KAAKkf,WAAa,IAyBtE,UAAUzW,EAAS0W,EAAOC,EAAUC,GAChC,MAAOrjB,EAAMsjB,GAAaH,EAAMhM,MAAM,KAChCoM,EAAcH,GAAYC,EAC3BA,IAAUA,EAAWD,GAC1B,MAAMI,EAAaD,EAAyB,SAASJ,GAC7CA,EAAMM,OAAOrB,QAAQgB,IACrBC,EAASF,IAFgBE,EAMjC5W,EAAQa,iBAAiBtN,EAAMwjB,GAC/B,MAAME,EAAS,KACXjX,EAAQkX,oBAAoB3jB,EAAMwjB,IAEtC,GAAIF,EAAW,CACNtf,KAAK4f,UAAUN,KAAYtf,KAAK4f,UAAUN,GAAa,IAC5D,MAAMO,EAAY,KACdH,IACA1f,KAAK4f,UAAUN,GAAWhc,OAAOtD,KAAK4f,UAAUN,GAAWQ,UAAU1mB,GAAKA,EAAE+lB,OAASnjB,GAAQ5C,EAAEqP,SAAWA,GAAU,IAOxH,OALAzI,KAAK4f,UAAUN,GAAWxhB,KAAK,CAC3BqhB,MAAOnjB,EACPyM,QAASA,EACTiX,OAAQG,IAELA,EAEX,OAAOH,EAaX,YAAYjX,EAAS0W,EAAOC,EAAUC,GAClC,MAAOrjB,EAAMsjB,GAAaH,EAAMhM,MAAM,KAChCoM,EAAcH,GAAYC,EAC3BA,IAAUA,EAAWD,GAC1B,MAAMI,EAAaD,EAGf,SAASJ,GACJA,EAAMM,OAAOrB,QAAQgB,KAC1BC,EAASF,GACT1W,EAAQkX,oBAAoB3jB,EAAMwjB,KANL,SAASL,GACtCE,EAASF,GACT1W,EAAQkX,oBAAoB3jB,EAAMwjB,IAOtC/W,EAAQa,iBAAiBtN,EAAMwjB,GAC/B,MAAME,EAAS,KACXjX,EAAQkX,oBAAoB3jB,EAAMwjB,IAEtC,GAAIF,EAAW,CACNtf,KAAK4f,UAAUN,KAAYtf,KAAK4f,UAAUN,GAAa,IAC5D,MAAMO,EAAY,KACdH,IACA1f,KAAK4f,UAAUN,GAAWhc,OAAOtD,KAAK4f,UAAUN,GAAWQ,UAAU1mB,GAAKA,EAAE+lB,OAASnjB,GAAQ5C,EAAEqP,SAAWA,GAAU,IAOxH,OALAzI,KAAK4f,UAAUN,GAAWxhB,KAAK,CAC3BqhB,MAAOnjB,EACPyM,QAASA,EACTiX,OAAQG,IAELA,EAEX,OAAOH,EAGX,gBAAgBP,EAAO1W,GACnB,MAAOzM,EAAMsjB,GAAaH,EAAMhM,MAAM,KACtC,IAAI4M,EAAcC,GAAYA,EAASb,OAASnjB,EAAMikB,EAAgBpE,GAAKA,EACvEpT,IAASsX,EAAc3mB,GAAKA,EAAE+lB,OAASnjB,GAAQ5C,EAAEqP,SAAWA,EAASwX,EAAgB7mB,GAAKA,EAAEqP,SAAWA,GAC3G,MAAMmX,EAAY5f,KAAK4f,UAAUN,IAAc,GACzCY,EAAOlkB,EAAO4jB,EAAU3hB,OAAO8hB,GAAeH,EAAU3hB,OAAOgiB,GACrE,IAAK,IAAIzmB,EAAI,EAAGA,EAAI0mB,EAAKzc,OAAQjK,IAAK0mB,EAAK1mB,GAAGkmB,SAgClD,WAAWjX,EAAS0W,EAAOC,EAAUC,GACjC,GAAuB,iBAAZ5W,EAAsB,OAAOzI,KAAKmgB,SAAS1X,GACtD,MAAOzM,EAAMsjB,GAAaH,EAAMhM,MAAM,KACtC,GAAImM,EAAW,OAAOtf,KAAKmgB,SAAShB,EAAO1W,GAE3C,MAAM8W,EAAcH,GAAYC,EAC3BA,IAAUA,EAAWD,GAC1B,MAAMI,EAAaD,EAAyB,SAASJ,GAC7CA,EAAMM,OAAOrB,QAAQgB,IACrBC,EAASF,IAFgBE,EAOjC,OADA5W,EAAQkX,oBAAoB3jB,EAAMwjB,GAC3B/W,EAUX,qBAAqBX,EAAMuX,EAAUe,GAAU,GAC3C,MAAMC,EAAkB,KACpBrgB,KAAKgH,SAASsZ,YAAYD,GAC1BhB,KAQJ,OANArf,KAAKgH,SAASuZ,UAAUF,EAAiB1W,IACrC,MAAMC,EAAQC,MAAMC,KAAKsW,EAAUzW,EAAS6W,WAAa7W,EAASI,cAC5DC,EAAcJ,EAAMK,QAAQnC,IAAS,EACrCoC,EAAcN,EAAMO,KAAKC,GAAUA,EAAOC,SAASvC,IACzD,OAAOkC,GAAeE,IAEnBpC,EAIX,eAAeA,EAAMuX,GAAY,OAAOrf,KAAKygB,cAAc3Y,EAAMuX,GAGjE,iBAAiBvX,EAAMuX,GAAY,OAAOrf,KAAKygB,cAAc3Y,EAAMuX,GAAU,GAG7E,eAAevX,EAAMuX,GAAY,OAAOrf,KAAKogB,QAAQtY,EAAMuX,GAG3D,iBAAiBvX,EAAMuX,GAAY,OAAOrf,KAAK0gB,UAAU5Y,EAAMuX,GAAU,GAMzE,YAAYsB,GACR,MAAMC,EAAa5gB,KAAKsc,UAAW,mCACnC,IAAK,IAAIvV,EAAI,EAAGA,EAAI4Z,EAASld,OAAQsD,IAAK6Z,EAAWC,YAAYF,EAAS5Z,IAC1E,OAAO6Z,EAOX,sBAAsB9Y,GAClB,GAAMA,aAAgBQ,QAAaR,aAAgBgZ,QACnD,OAAOhZ,aAAgBQ,OAASR,EAAK,GAAKA,GAIlDxM,OAAOyD,UAAUC,cAAc+hB,IAAMxF,GCxuBrC,MAAMyF,GACFjhB,cACIzE,OAAOyD,UAAUC,cAAcgiB,YAAchhB,KAEjD,aAAc,OAAOgC,GAAemV,cAGxC6J,GAAYjmB,UAAUugB,WAAalY,iBAC/BpD,KAAKihB,gBACL5jB,EAAciG,OAAO,EAAG,WAAatB,GAAesZ,cACpD,MAAM4F,EAASrnB,OAAO2J,KAAKhG,GAE3B,IAAK,IAAIrE,EAAI,EAAGA,EAAI+nB,EAAOzd,OAAQtK,IAAK,CACpC,MAAMgoB,EAAQ3jB,EAAS0jB,EAAO/nB,IACzBwE,EAAYwjB,EAAMznB,QAAOiE,EAAYwjB,EAAMznB,OAAQ,GACpDiE,EAAYwjB,EAAMznB,OAAOqnB,GAAIK,SAASL,GAAIpG,SAASwG,EAAMhlB,IAAKklB,SAASF,EAAMjH,YAE3E,IAAI/V,QAASzC,GAAY0C,WAAW1C,EAAS,KAEvD,IAAK,MAAMyf,KAASxjB,EACXH,EAAS2jB,WAAexjB,EAAYwjB,GAE7CnhB,KAAKshB,iBAITN,GAAYjmB,UAAUwmB,YAAc,SAAS7nB,EAAMiL,GAAS,GACxDhH,EAAYjE,IAAQ,EACpBsG,KAAKshB,gBACL,MAAMH,EAAQ3jB,EAAS9D,GACvBqnB,GAAIK,SAASL,GAAIpG,SAASwG,EAAMhlB,IAAKklB,SAASF,EAAMjH,MACpDsH,EAAS7e,SAAS,iBACd9F,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEid,EAAMznB,SAASynB,EAAMM,8BAGxFT,GAAYjmB,UAAUgK,OAAS,SAAUrL,EAAMiL,GAAS,GACpD,OAAO3E,KAAKuhB,YAAY7nB,EAAMiL,IAGlCqc,GAAYjmB,UAAU2mB,aAAe,SAAShoB,EAAMiL,GAAS,GACzDhH,EAAYjE,IAAQ,EACpBsG,KAAKshB,gBACL,MAAMH,EAAQ3jB,EAAS9D,GACvBqnB,GAAIY,YAAYZ,GAAIpG,SAASwG,EAAMhlB,KACnCqlB,EAAS7e,SAAS,kBACd9F,EAAe,eAAiB8H,GAAQrD,GAAM4C,UAAW,GAAEid,EAAMznB,SAASynB,EAAMM,+BAGxFT,GAAYjmB,UAAUkK,QAAU,SAAUvL,EAAMiL,GAAS,GACrD,OAAO3E,KAAK0hB,aAAahoB,EAAMiL,IAGnCqc,GAAYjmB,UAAU6mB,YAAc,SAAST,GACrCxjB,EAAYwjB,GAAQnhB,KAAK0hB,aAAaP,GACrCnhB,KAAKuhB,YAAYJ,IAG1BH,GAAYjmB,UAAUoK,OAAS,SAAUzL,GACrC,OAAOsG,KAAK4hB,YAAYloB,IAG5BsnB,GAAYjmB,UAAUkd,UAAY7U,eAAeU,GAC7C,MAAMzC,QAAcW,GAAeqD,YAAYvB,EAAU,SACzD,GAAIzC,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC4b,OAAQ,CAAC7f,KAC/DxE,EAAe,cAAcyE,GAAM4C,UAAaJ,EAAF,qDAAgE,CAAC9H,KAAM,UAClHsF,GAAMH,IAAI,iBAAqB2C,EAAF,wBAAmCzC,GAE3E,MAAM8f,EAAQtnB,OAAO0L,OAAO/H,GAAUQ,KAAK/C,GAAKA,EAAE6I,UAAYA,GAC9DxC,GAAMkE,IAAI,iBAAmB,GAAE2b,EAAMznB,SAASynB,EAAMM,uBAChD5kB,EAAe,cAAcyE,GAAM4C,UAAW,GAAEid,EAAMznB,SAASynB,EAAMM,sBAAuB,CAACzlB,KAAM,YACvG0G,EAASC,SAAS,eAAgBwe,EAAMznB,OAG5CsnB,GAAYjmB,UAAU6c,YAAc,SAASlS,GACzC,MAAMmc,EAAUhoB,OAAO0L,OAAO/H,GAAUQ,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBlI,EAASkI,GAC5F,IAAKmc,EAAS,OACd,MAAMV,EAAQU,EAAQnoB,KAClBiE,EAAYwjB,IAAQnhB,KAAK0hB,aAAaP,GAAO,GACjD,MAAM9f,EAAQW,GAAe4D,cAAcpI,EAAS2jB,GAAOrd,SAAU,SAErE,UADOtG,EAAS2jB,GACZ9f,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC4b,OAAQ,CAAC7f,KAC/DxE,EAAe,cAAcyE,GAAM4C,UAAaid,EAAF,2DAAmE,CAACnlB,KAAM,UACrHsF,GAAMH,IAAI,iBAAqBggB,EAAF,2DAAmE9f,GAE3GC,GAAMkE,IAAI,iBAAqB2b,EAAF,kBACzBtkB,EAAe,cAAcyE,GAAM4C,UAAaid,EAAF,iBAAyB,CAACnlB,KAAM,YAClF0G,EAASC,SAAS,iBAAkBwe,IAGxCH,GAAYjmB,UAAU8K,OAAS,SAASH,GACpC,MAAMmc,EAAUhoB,OAAO0L,OAAO/H,GAAUQ,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBlI,EAASkI,GAC5F,IAAKmc,EAAS,OACd7hB,KAAK4X,YAAYiK,EAAQ/d,UACzB,MAAMgC,EAAW3K,EAAQ,GAAQuG,QAAQM,GAAemV,aAAc0K,EAAQ/d,UAC9E3I,EAAQ,GAAM6F,WAAW8E,IAG7Bkb,GAAYjmB,UAAUmd,YAAc9U,eAAesC,GAC/C,MAAMmc,EAAUhoB,OAAO0L,OAAO/H,GAAUQ,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBlI,EAASkI,GAC5F,IAAKmc,EAAS,OAAO7hB,KAAKiY,UAAUvS,GACpC,MAAMyb,EAAQU,EAAQnoB,KAChB2H,QAAcW,GAAeiE,cAAczI,EAAS2jB,GAAOrd,SAAU,SAE3E,GADInG,EAAYwjB,KAAQnhB,KAAK0hB,aAAaP,GAAO,GAAOnhB,KAAKuhB,YAAYJ,GAAO,IAC5E9f,EAGA,OAFIxE,EAAe,cAAcyE,GAAMgE,kBAAkB,CAAC4b,OAAQ,CAAC7f,KAC/DxE,EAAe,cAAcyE,GAAM4C,UAAaid,EAAF,0BAAkC,CAACnlB,KAAM,UACpFsF,GAAMH,IAAI,iBAAqBggB,EAAF,0BAAkC9f,GAE1EC,GAAMkE,IAAI,iBAAmB,GAAE2b,MAAU3jB,EAAS2jB,GAAOM,yBACrD5kB,EAAe,cAAcyE,GAAM4C,UAAW,GAAEid,MAAU3jB,EAAS2jB,GAAOM,wBAAyB,CAACzlB,KAAM,YAC9G0G,EAASC,SAAS,iBAAkBwe,IAGxCH,GAAYjmB,UAAU4J,OAAS,SAASjL,GACpC,OAAOsG,KAAKkY,YAAYxe,IAG5BsnB,GAAYjmB,UAAUmL,KAAO,SAASR,GAClC,MAAMC,EAAW9L,OAAO0L,OAAO/H,GAAUQ,KAAK/C,GAAKA,EAAE6I,UAAY4B,IAAmBlI,EAASkI,GAC7F,IAAKC,EAAU,OACf,MAAMG,EAAW3K,EAAQ,GAAQuG,QAAQM,GAAemV,aAAcxR,EAAS7B,UAC/E3I,EAAQ,GAAYgL,MAAMC,SAAU,GAAEN,IAG1Ckb,GAAYjmB,UAAU+mB,gBAAkB,WACpC,MAAMxb,EAAUtE,GAAeuE,eAAe,SAC9C,IAAK,MAAMzC,KAAYwC,EAAQE,MAAOxG,KAAKiY,UAAUnU,GACrD,IAAK,MAAMpK,KAAQ4M,EAAQG,QAASzG,KAAK4X,YAAYle,IAGzDsnB,GAAYjmB,UAAUkmB,cAAgB,WAClC,MAAMva,EAAQpG,EAAU4B,gBAAgB,UACpCwE,GACA7M,OAAOoH,OAAOtD,EAAa+I,IAInCsa,GAAYjmB,UAAUumB,cAAgB,WAClChhB,EAAU6B,gBAAgB,SAAUxE,IAGzB,WAAIqjB,GCpJJ,OAAI,MAEfjhB,cACIC,KAAK+hB,gBAAiB,EACtB/hB,KAAKf,eAAiB,MAClB,MAAMrB,EAAMC,aAAaC,KAAK,CAAC,GAAI,CAACC,aAAc,CAAC7E,EAAQD,EAAS2E,IAAQ1E,EAAOD,QAAU2E,GAAM,CAAC,CAAC,0BAC9FA,EAAIrE,EAAEwE,oBACNH,EAAIpE,EAAEuE,aAEb,MAMMikB,EAAU,CAACC,EAAWC,KACxB,IAAI/jB,EAAO+jB,EAAgCD,EAApBA,EAAU/jB,QACjC,IAAIC,EAAI,OAAO8jB,EACf,GAAI9jB,EAAIqN,QAAUrN,EAAIiX,KAAOjX,EAAIgkB,OAAShkB,EAAInE,MAAQmE,EAAIikB,KAAM,OAAO,KACvE,IAAKjkB,EAAIkkB,WAAalkB,EAAImkB,WAAankB,EAAIokB,UAAU,OAAON,EAE5D,MAAMO,EAAQ,IAAIC,MAAMtkB,EAAK,CACzBukB,yBAA0B,SAASrO,EAAK7V,GACpC,GAAa,aAATA,GAAgC,aAATA,GAAgC,cAATA,EAClD,OAAO3E,OAAO6oB,yBAAyBrO,EAAK7V,IAEhDxE,IAAK,SAASqa,EAAKsO,GACf,MAAY,YAARA,GAAsBtO,EAAIgO,SAAiB,IAAM,2FACzC,YAARM,GAAsBtO,EAAIiO,SAAiB,IAAM,wBACzC,aAARK,GAAuBtO,EAAIkO,UAAkB,KAAM,EAC3C,aAARI,GAAuBtO,EAAIuO,UAAkBJ,EAE1CnO,EAAIsO,MAInB,OAAIT,EAIGM,EAHI3oB,OAAOoH,OAAO,GAAIghB,EAAW,CAAC/jB,QAASskB,KAMhDxkB,EAAQC,IACV,IAAK,MAAM9E,KAAKyE,EAAIpE,EAChB,GAAIoE,EAAIpE,EAAEwB,eAAe7B,GAAI,CACzB,MAAMI,EAAIqE,EAAIpE,EAAEL,GAAGF,QACnB,GAAIM,GAAKA,EAAEgB,YAAchB,EAAE2E,SAAWD,EAAO1E,EAAE2E,SAAU,OAAO8jB,EAAQzoB,EAAE2E,SAAS,GACnF,GAAI3E,GAAK0E,EAAO1E,GAAI,OAAOyoB,EAAQzoB,GAAG,GAI9C,OAAO,MAmBX,MAAO,CAACyE,OAAMI,QAhBGH,IACb,MAAM5E,EAAU,GAChB,IAAK,MAAMF,KAAKyE,EAAIpE,EAChB,GAAIoE,EAAIpE,EAAEwB,eAAe7B,GAAI,CACzB,MAAMI,EAAIqE,EAAIpE,EAAEL,GAAGF,QACfM,GAAKA,EAAEgB,YAAchB,EAAE2E,SAAWD,EAAO1E,EAAE2E,SAAU7E,EAAQyE,KAAKkkB,EAAQzoB,EAAE2E,SAAS,IAChF3E,GAAK0E,EAAO1E,IAAIF,EAAQyE,KAAKkkB,EAAQzoB,GAAG,IAGzD,OAAOF,GAOYwpB,uBAJSvkB,GAAcN,EAAK9E,GAAUoF,EAAUC,MAAMC,QAAyBC,IAAjBvF,EAAOsF,KAI7CE,iBAHrBC,GAAeX,EAAK9E,GAAUA,EAAO6B,WAAa4D,EAAWJ,MAAMK,QAA6CH,IAAhCvF,EAAO6B,UAAU6D,KAG1DC,kBAFtCC,GAAgBd,EAAK9E,GAAUA,EAAO4F,cAAgBA,KAjE/D,GAsEtBkB,KAAK8iB,SAAW,CACZpS,MAAO1Q,KAAKf,eAAe4jB,uBAAuB,CAAC,YAAa,gBAAiB,WAAY,gBAAiB,iBAC9G/V,SAAU9M,KAAKf,eAAe4jB,uBAAuB,CAAC,iBAE1D7iB,KAAK+iB,oBAAsBhc,GAAKA,EAAElN,OAAO2J,KAAKuD,GAAG/I,KAAKuW,GAAKA,EAAE3G,WAAW,6BACxEtS,OAAOyD,UAAUC,cAAcgkB,GAAKhjB,KAGxCO,cAIA0iB,UAAWjjB,KAAKkjB,cAAcC,yCAAyC,oBACvEC,WAAYpjB,KAAKqjB,aAAaC,WAAW,qBAEzCC,UAAWvjB,KAAKkjB,cAAcC,yCAAyC,WACvEK,WAAYxjB,KAAKqjB,aAAaC,WAAW,sBAEzCG,SAAUzjB,KAAKkjB,cAAcC,yCAAyC,WACtEO,UAAW1jB,KAAKqjB,aAAaC,WAAW,sBAKxC,YAAa,OAAOtjB,KAAK8iB,SAASpS,MAIlC,YAAa,OAAO1Q,KAAK8iB,SAASpS,MAIlC,eAAgB,OAAO1Q,KAAK8iB,SAAShW,SAIrC,eAAgB,OAAO9M,KAAK8iB,SAAShW,SAIrC,qBAAsB,OAAO9M,KAAK8iB,SAASpS,MAAM/D,UAIjD,qBAAsB,OAAO3M,KAAK8iB,SAASpS,MAAM/D,UAEjD,oBAAqB,OAAO3M,KAAKf,eAAe4jB,uBAAuB,CAAC,4BAA8B,CAACc,OAAQ,gBAAiBC,uBAAwB,iCACxJ,yBAA0B,OAAO5jB,KAAKf,eAAe4jB,uBAAuB,CAAC,kBAC7E,qBAAsB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,UAAW,kBACpF,mBACF,MAAMgB,EAAgB/Y,UAAU9Q,IAAI+M,GAAKA,EAAE+c,SAAW/c,EAAEgd,mBAAmB,GAC/DC,EAASlZ,UAAU9Q,IAAI+M,GAAKA,EAAEkd,aAAeld,EAAEmd,UAAU,GACzDC,EAAOrZ,UAAU9Q,IAAI+M,GAAKA,EAAEqd,eAAe,GACjD,OAAOvqB,OAAOoH,OAAO,GAAI4iB,EAAeG,EAAQG,GAGpD,8BAA+B,OAAOnkB,KAAKf,eAAejB,KAAKzE,GAAKA,EAAE8qB,cAAgB9qB,EAAE8qB,aAAarpB,eAAe,mBACpH,uBAAwB,OAAOgF,KAAKf,eAAejB,KAAKzE,GAAKA,EAAE2E,SAAW3E,EAAE2E,QAAQY,aAAwC,WAAzBvF,EAAE2E,QAAQY,aAC7G,oBAAqB,OAAOkB,KAAKf,eAAe4jB,uBAAuB,CAAC,eACxE,qBAAsB,OAAO7iB,KAAKf,eAAeJ,kBAAkB,WACnE,mBAAoB,OAAOmB,KAAKf,eAAe4jB,uBAAuB,CAAC,aACvE,oBAAqB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,iBACxE,mBAAoB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,eACvE,eAAgB,OAAO7iB,KAAKf,eAAejB,KAAKzE,GAAKA,EAAE+Q,MAAQ/Q,EAAEgQ,OAAShQ,EAAE+qB,SAAW/qB,EAAEgrB,SAAWhrB,EAAE+qB,SAAW/qB,EAAEirB,sBAAwBjrB,EAAEkrB,SAC7I,mBAAoB,OAAOzkB,KAAKf,eAAejB,KAAKzE,GAAKA,EAAEyZ,UAAY,WAAWQ,KAAKja,EAAEyZ,aACzF,iBAAkB,OAAOhT,KAAKf,eAAe4jB,uBAAuB,CAAC,aACrE,gBAAiB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,mBACpE,mBAAoB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,eACvE,qBAAsB,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,uBACzE,4BAA6B,OAAO7iB,KAAKf,eAAe4jB,uBAAuB,CAAC,yBAEhF6B,OAAOC,GACH,MAAMC,EAAS5kB,KAAK6kB,UAAUC,iBAAiB3oB,GAC/C,GAAIyoB,GAAUD,EAAQ,OACtB,MAAMI,EAAmB/kB,KAAKglB,aAAaC,gBAAgBN,GAC3D,GAAII,EAAkB,OAAO/kB,KAAKklB,sBAAsBC,qBAAqBJ,GAC7E/kB,KAAKolB,eAAeC,mBAAmBT,EAAQD,GAGnDW,cAAc/oB,GACV,OAAO1C,OAAO2J,KAAKtH,GAAUqpB,OAAO,CAACjR,EAAK5Z,KACtC,MAAM8qB,EAAUtpB,EAASxB,GAIvB,OAHE8qB,EAAQjpB,MAAQA,GAAOipB,EAAQnpB,cAAgBmpB,EAAQlpB,SACvDkpB,EAAQzd,KAAOrN,EACf4Z,EAAIxW,KAAK0nB,IACJlR,GACV,MC/JI,MAAMhT,GAEjB,yBAA2B,OAAOmkB,KAAKC,IAAIhd,SAASid,gBAAgB3G,YAAa1jB,OAAOsqB,YAAc,GAEtG,0BAA4B,OAAOH,KAAKC,IAAIhd,SAASid,gBAAgB1G,aAAc3jB,OAAOuqB,aAAe,GAEzG,8BACI,OAAO7lB,KAAK8lB,kBAAoB,KAGpC,iCACI,MAAO,CACHC,aAAa,EACbC,OAAO,GAIf,2BAA2BtrB,GACvB,MAAY,gBAARA,GACQ,UAARA,GACG,KAGX,2BAA2BA,EAAKN,GAC5B,MAAY,gBAARM,GACQ,UAARA,GACG,KAGX,gBAAgBqX,GAIZ,OAH8B,QAA1BA,EAAQkU,WAAW,KACnBlU,EAAUA,EAAQtK,MAAM,IAErBsK,EAGX,qBACI,OAAOgP,GAAItE,MAAM,IAAI5R,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAEmf,iBAAmBnf,EAAEof,cAAc,GAAGD,iBAAiB,aAG9G,kBAAkBE,EAAUre,GACxBqe,EAASC,QACTD,EAASE,eAAiB,EAC1BF,EAASG,aAAeH,EAAShsB,MAAMqJ,OACvCiF,SAAS8d,YAAY,cAAc,EAAOze,GAG9C,gBAAgB5L,GACZ,OAAOA,EAAGmX,QAAQ,qBAAsB,KAG5C,WAAWmT,EAAY1iB,GACnB3C,QAAQoE,IAAK,qBAAoBihB,QAAiB1iB,IAAW,oCAAqC,kBAAmB,IAGzH,YAAY0iB,EAAY1iB,GACpB3C,QAAQiZ,KAAM,qBAAoBoM,QAAiB1iB,IAAW,oCAAqC,kBAAmB,IAG1H,WAAW0iB,EAAY1iB,EAAS1C,GAC5BD,QAAQoE,IAAK,qBAAoBihB,QAAiB1iB,IAAW,gCAAiC,cAAe,IACzG1C,IACAD,QAAQslB,eAAe,YAAcrlB,EAAM0C,QAAS,eACpD3C,QAAQC,MAAMA,EAAM2C,OACpB5C,QAAQulB,YAYhB,oBAAoBC,EAAQrhB,GACxB,IAAK,MAAMgQ,KAAOhQ,EAAQ,CACtB,IAAIshB,EAActhB,EAAOgQ,GACrB1L,MAAM6L,QAAQmR,KAAcA,EAAclmB,KAAKC,UAAUimB,IACjC,iBAAjBA,GAA6C,OAAhBA,IAAsBA,EAAcA,EAAY7T,YACxF4T,EAASA,EAAOtT,QAAQ,IAAIwT,OAAQ,KAAIvR,MAAS,KAAMsR,GAE3D,OAAOD,EAGX,cAAc1rB,GACV,OAAOA,EAAEoY,QAAQ,wBAAyB,QAG9C,gBAAgBrT,GACZ,IACI,OAAOU,KAAKE,MAAMZ,GAEtB,MAAOkB,GACH,OAAO,GAIf,eAAekT,GACX,GAAW,MAAPA,GAAsB5V,MAAP4V,GAA2B,IAAPA,EAAW,OAAO,EACzD,GAAoB,iBAATA,EAAmB,OAAO,EACrC,GAAIxK,MAAM6L,QAAQrB,GAAM,OAAqB,GAAdA,EAAI5Q,OACnC,IAAK,MAAM/I,KAAO2Z,EACd,GAAIA,EAAIrZ,eAAeN,GAAM,OAAO,EAExC,OAAO,EAGX,sBAAsBqsB,EAAQhjB,GAC1B,MAAO,IAAIijB,KACP,IAAM,OAAOD,KAAUC,GACvB,MAAOjgB,GAAK/G,KAAKmB,IAAI,kBAAmB,qBAAuB4C,EAASgD,KAIhF,mBAAmBkgB,EAAMC,EAAYlf,GACjC,MAAM,OAACmf,EAAD,MAASC,EAAT,QAAgBC,EAAhB,KAAyBC,GAAO,EAAhC,OAAuCC,GAAS,EAAhD,MAAuDC,GAAQ,GAASxf,EACxElJ,EAAckJ,EAAQlJ,aAAemoB,EAAKnoB,aAAemoB,EAAKC,GAAYpoB,aAAemoB,EAAKvtB,MAAQutB,EAAKlnB,YAAYjB,aAAemoB,EAAKlnB,YAAYrG,KAE7J,GADK6tB,GAAQnmB,QAAQoE,IAAI,QAAS0hB,EAAY,KAAMpoB,IAC/CmoB,EAAKC,GAAa,CACnB,IAAIM,EACC,OAAOpmB,QAAQC,MAAM6lB,EAAY,qBAAsBpoB,GADjDmoB,EAAKC,GAAc,aAGlC,MAAMO,EAAaR,EAAKC,GACxB,IAAIQ,GAAW,EACf,MAAMhI,EAAS,KACN6H,GAAQnmB,QAAQoE,IAAI,UAAW0hB,EAAY,KAAMpoB,GAEtD4oB,GAAW,GAgCf,OA9BAT,EAAKC,GAAc,WACf,GAAGQ,EACC,OAAOD,EAAWnuB,KAAK0G,QAAS4Z,WAEpC,MAAM3Z,EAAO,CACT0nB,WAAY3nB,KACZ4nB,gBAAiBhO,UACjBiO,YAAanI,EACboI,eAAgBL,EAChBM,mBAAoB,IAAM9nB,EAAK+nB,YAAc/nB,EAAK6nB,eAAenO,MAAM1Z,EAAK0nB,WAAY1nB,EAAK2nB,kBAEjG,GAAIP,EAAS,CACT,MAAMY,EAAU3mB,GAAM4mB,eAAeb,EAAS,yBAA2BJ,EAAKC,GAAYpoB,YAA1EwC,CAAuFrB,QACvFxB,IAAZwpB,IAAuBhoB,EAAK+nB,YAAcC,QAG1Cd,GAAQ7lB,GAAM4mB,eAAef,EAAQ,wBAA0BF,EAAKC,GAAYpoB,YAAxEwC,CAAqFrB,GACjGA,EAAK8nB,qBACDX,GAAO9lB,GAAM4mB,eAAed,EAAO,uBAAyBH,EAAKC,GAAYpoB,YAAtEwC,CAAmFrB,GAGlG,OADIqnB,GAAM5H,IACHzf,EAAK+nB,aAEhBnuB,OAAOoH,OAAOgmB,EAAKC,GAAaO,GAChCR,EAAKC,GAAYiB,iBAAkB,EACnClB,EAAKC,GAAYpoB,YAAcA,EAC1BmoB,EAAKC,GAAYkB,mBAClBnB,EAAKC,GAAYkB,iBAAmBX,EACpCR,EAAKC,GAAYlU,SAAW,WAAY,OAAOyU,EAAWzU,aAEvD0M,EAGX,iBAAiB5X,EAAMuX,GACnB,MAAMrY,EAAW,IAAIwC,iBAAkBC,IACnC,IAAK,IAAIlQ,EAAI,EAAGA,EAAIkQ,EAAUhG,OAAQlK,IAAK,CACvC,MAAMoQ,EAAWF,EAAUlQ,GACrBqQ,EAAQC,MAAMC,KAAKH,EAASI,cAC5BC,EAAcJ,EAAMK,QAAQnC,IAAS,EACrCoC,EAAcN,EAAMO,KAAKC,GAAUA,EAAOC,SAASvC,KACrDkC,GAAeE,KACflD,EAASuD,aACT8U,QAKZrY,EAASwD,QAAQ9B,SAAS+B,KAAM,CAACC,SAAS,EAAMC,WAAW,IAG/D,qBAAqB0J,EAAKjV,GACtB,OAAOA,EAAK+T,MAAM,YAAYoS,QAAO,SAASlR,EAAK7V,GAC/C,OAAO6V,GAAOA,EAAI7V,KACnB6V,GAYP,iBAAiBtC,EAAS/J,EAAU,IAChC,IAAKU,SAASkC,cAAc,cAAe,CACvC,MAAMe,EAAYjD,SAASkC,cAAc,IAAIC,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAEshB,SAAWthB,EAAEuhB,WAAW,GAAGD,SAAS,WAAa,KACtHE,EAAO5c,EAAYA,EAAUf,cAAc,QAAU,KACrD4d,EAASD,EAAOA,EAAKpd,aAAe,GACpCsd,EAAe/f,SAASC,cAAc,OAC5C8f,EAAarc,UAAUC,IAAI,aAC3Boc,EAAaxgB,MAAMqE,YAAY,SAAUkc,EAAO,MAChD9f,SAASkC,cAAc,cAAciW,YAAY4H,GAErD,MAAMA,EAAe/f,SAASkC,cAAc,eACtC,KAAC5O,EAAO,GAAR,KAAY0sB,GAAO,EAAnB,QAAyBC,EAAU,KAAQ3gB,EAC3C4gB,EAAYlgB,SAASC,cAAc,OACzCigB,EAAUxc,UAAUC,IAAI,YACpBrQ,GAAM4sB,EAAUxc,UAAUC,IAAI,SAAWrQ,GACzCA,GAAQ0sB,GAAME,EAAUxc,UAAUC,IAAI,QAC1Cuc,EAAUC,UAAY9W,EACtB0W,EAAa5H,YAAY+H,GACzBH,EAAaxgB,MAAMqE,YAAY,OAAS,cAAamc,EAAand,YAAc,QAChFlH,WAAW,KACPwkB,EAAUxc,UAAUC,IAAI,WACxBjI,WAAW,KACPwkB,EAAUpd,SACL9C,SAASiU,iBAAiB,wBAAwBlZ,QAAQiF,SAASkC,cAAc,cAAcY,UACrG,MACJmd,GAGP,aAAa5sB,EAAOgW,GAChB,IAAI+W,EAAche,UAAU9Q,IAAI+M,GAAKA,EAAEgiB,OAAShiB,EAAEiiB,QAAUjiB,EAAEkiB,kBAAkB,GAC5EC,EAAepe,UAAU9Q,IAAI+M,GAAKA,EAAEoiB,QAAUpiB,EAAEqiB,uBAAyBriB,EAAEkiB,kBAAkB,GAC7FI,EAAgBve,UAAU9Q,IAAI+M,GAAKA,EAAEoiB,QAAUpiB,EAAEqiB,uBAAyBriB,EAAEuiB,WAAW,GAC3F,MAAMP,EAAQhI,GAAIpY,cAAe,8FACSmC,UAAU9Q,IAAI+M,GAAKA,EAAEwiB,UAAYxiB,EAAEyiB,mBAAmB,GAAGD,kEAC5DT,EAAYC,mEACFD,EAAYE,+DAChBE,EAAaC,oEACTptB,mSAKXgW,6LAIOmX,EAAaO,UAAUJ,EAAcI,6NAMlFV,EAAMne,cAAc,kBAAkBtB,iBAAiB,QAAS,KAC5DyX,GAAI2I,SAASX,EAAO,WACpB3kB,WAAW,KACP2kB,EAAMvd,SACNme,EAAiBjgB,QAASsW,IACtB,IACIA,IACH,MAAMjZ,GACH3F,QAAQC,MAAM0F,OAGvB,OAEPgiB,EAAMne,cAAc,gBAAgBtB,iBAAiB,QAAS,KAC1DyX,GAAI2I,SAASX,EAAO,WACpB3kB,WAAW,KACP2kB,EAAMvd,SACNme,EAAiBjgB,QAASsW,IACtB,IACIA,IACH,MAAMjZ,GACH3F,QAAQC,MAAM0F,OAGvB,OAEPga,GAAItE,MAAM,cAAcpT,OAAO0f,GAC/B,MAAMY,EAAmB,GACzB,MAAO,CACHvR,MAAO,KACH2I,GAAI2I,SAASX,EAAO,WACpB3kB,WAAW,KACP2kB,EAAMvd,SACNme,EAAiBjgB,QAASsW,IACtB,IACIA,IACH,MAAMjZ,GACH3F,QAAQC,MAAM0F,OAGvB,MAEP6iB,QAAU5J,IACN2J,EAAiB7rB,KAAKkiB,KAKlC,0BAA0Bzc,QAASsmB,EAAe,GAAI3I,OAAQ4I,EAAc,KACxE,IAAKD,IAAiBC,EAAa,OACnC,IAAKD,EAAapmB,SAAWqmB,EAAYrmB,OAAQ,OACjD,IAAIqlB,EAAche,UAAU9Q,IAAI+M,GAAKA,EAAEgiB,OAAShiB,EAAEiiB,QAAUjiB,EAAEkiB,kBAAkB,GAC5EC,EAAepe,UAAU9Q,IAAI+M,GAAKA,EAAEoiB,QAAUpiB,EAAEqiB,uBAAyBriB,EAAEkiB,kBAAkB,GAC7FI,EAAgBve,UAAU9Q,IAAI+M,GAAKA,EAAEoiB,QAAUpiB,EAAEqiB,uBAAyBriB,EAAEuiB,WAAW,GAC3F,MAAMP,EAAQhI,GAAIpY,cAAe,8FACSmC,UAAU9Q,IAAI+M,GAAKA,EAAEwiB,UAAYxiB,EAAEyiB,mBAAmB,GAAGD,mFAC3CT,EAAYC,mEACnBD,EAAYE,+DAChBE,EAAaC,ysCAmBbD,EAAaO,UAAUJ,EAAcI,6NAOlF,SAASM,EAAY3O,GACjB,MAAMzP,EAAYoV,GAAIpY,cAAe,wBACrC,IAAK,MAAMxH,KAAOia,EAAQ,CACtB,MAAM/Z,EAAQ0f,GAAIpY,cAAe,kGAC2BxH,EAAIzH,KAAOyH,EAAIzH,KAAOyH,EAAI0C,4FACvB1C,EAAI4C,2HACwB5C,EAAIE,MAAQF,EAAIE,MAAM0C,QAAU,wDAE3H4H,EAAUtC,OAAOhI,GACbF,EAAIE,OACJA,EAAMsb,iBAAiB,KAAKjT,QAAQsgB,GAAMA,EAAG1gB,iBAAiB,QAAUvC,IACpEA,EAAE+I,iBACFxO,GAAMH,IAAI,iBAAmB,qBAAoBA,EAAIzH,KAAOyH,EAAIzH,KAAOyH,EAAI0C,QAAS1C,EAAIE,UAIpG,OAAOsK,EAGX,MAAMse,EAAO,CAACF,EAAYF,GAAeE,EAAYD,IAErDf,EAAMpM,iBAAiB,iBAAiBjT,QAAQsgB,GAAMA,EAAG1gB,iBAAiB,QAAUvC,IAChFA,EAAE+I,iBACF,MAAMoU,EAAW6E,EAAMne,cAAc,0BACjCsZ,GAAUnD,GAAImJ,YAAYhG,EAAU,YACxCnD,GAAI2I,SAAS3iB,EAAE0Y,OAAQ,YACvB,MAAM0K,EAAWpB,EAAMne,cAAc,aACrCuf,EAASpN,UAAY,GACrBoN,EAAS9gB,OAAO4gB,EAAKlJ,GAAIqJ,MAAMrjB,EAAE0Y,aAGrCsJ,EAAMne,cAAc,kBAAkBtB,iBAAiB,QAAS,KAC5DyX,GAAI2I,SAASX,EAAO,WACpB3kB,WAAW,KAAQ2kB,EAAMvd,UAAa,OAE1Cud,EAAMne,cAAc,gBAAgBtB,iBAAiB,QAAS,KAC1DyX,GAAI2I,SAASX,EAAO,WACpB3kB,WAAW,KAAQ2kB,EAAMvd,UAAa,OAE1CuV,GAAItE,MAAM,cAAcpT,OAAO0f,GAC3Bc,EAAapmB,OAAQslB,EAAMne,cAAc,iBAAiByf,QACzDtB,EAAMpM,iBAAiB,iBAAiB,GAAG0N,QAGpD,0BAA0BriB,EAAU,IAChC,MAAMsiB,EAAarrB,EAAeZ,YAAY,OAAQ,SAAU,MAAO,cACjEksB,EAAmBtrB,EAAeZ,YAAY,QAAS,YACvDmsB,EAAcvrB,EAAeJ,kBAAkB,QAC/C4rB,EAAYxrB,EAAeZ,YAAY,SACvCqsB,EAASzrB,EAAeZ,YAAY,OAAQ,WAC5CssB,EAAY1rB,EAAejB,KAAKzE,GAAKA,EAAE8qB,cAA6C,GAA7B9qB,EAAE8qB,aAAauG,YACtEC,EAAiB5rB,EAAeZ,YAAY,eAAgB,SAClE,KAAKssB,GAAcL,GAAeC,GAAqBC,GAAgBC,GAAcC,GAAWG,GAAgB,OAEhH,MAAM,MACFC,EAAQ,iGADN,YAEFjvB,EAAc,GAFZ,QAGFC,EAAU,GAHR,MAIFC,EAAQ,aAJN,SAKFgvB,EAAY,IAAGpvB,EALb,OAMF8tB,GACAzhB,EACEgjB,EAAKne,GAAKH,MAAM/D,cAChBsiB,EAAiB,CAACD,EAAG,MAAO,CAACtP,IAAKoP,KACpCjvB,GAAaovB,EAAentB,KAAKktB,EAAG,IAAK,KAAMH,EAAehqB,MAAMhF,KACxE,IAAK,IAAIrC,EAAI,EAAGA,EAAIsC,EAAQ2H,OAAQjK,IAAK,CACrC,MAAM0xB,EAAQpvB,EAAQtC,GAChBwC,EAAOuuB,EAAiBW,EAAMlvB,MAAQuuB,EAAiBW,EAAMlvB,MAAQuuB,EAAiB/jB,MACtF2kB,EAAc,GAAL3xB,EAAS+wB,EAAiBa,UAAY,GACrDH,EAAentB,KAAKktB,EAAG,KAAM,CAACpiB,UAAY,GAAE5M,KAAQmvB,KAAYD,EAAMnvB,QACtE,MAAMmkB,EAAO8K,EAAG,KAAM,KAAME,EAAMjvB,MAAMif,IAAI/hB,GAAK6xB,EAAG,KAAM,KAAMH,EAAehqB,MAAM1H,MACrF8xB,EAAentB,KAAKoiB,GAExB,MAAMmL,EAAe,WACjB,OAAOL,EAAGP,EAAUa,MAAO,CAACC,KAAM,EAAGC,OAAQ,GACzCR,EAAGN,EAAOxsB,QAAS,CAACutB,IAAKf,EAAOgB,KAAKC,IAAK5vB,GAC1CivB,EAAGR,EAAY,CAACvQ,KAAMuQ,EAAYoB,MAAMC,MAAOla,MAAO6Y,EAAYsB,OAAOC,SAAUnjB,UAAW2hB,EAAiByB,MAAOjB,KAIxHkB,EAAe,KACjB,MAAMC,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aACpCqtB,EAAgBltB,EAAeZ,YAAY,2BAA6B,CAACslB,OAAQ,gBAAiBC,uBAAwB,iCAC1HwI,EAAqB/B,IACvBA,EAAMva,iBACNua,EAAMgC,kBACN/B,EAAW3W,MACX9G,GAAK0W,WAEH+I,EAAcJ,EAASlB,EAAGkB,EAAQ,CAACta,QAASwa,GAAoB,4BAA8BpB,EAAG,IAAK,CAACpiB,UAAY,GAAEujB,EAAcxI,UAAUwI,EAAcvI,yBAA0BhS,QAASwa,GAAoB,4BAClNG,EAAgBvB,EAAGR,EAAY,CAACvQ,KAAMuQ,EAAYoB,MAAMC,MAAOla,MAAO6Y,EAAYsB,OAAOC,UAAW,iBAAkBO,GAC5H,OAAOtB,EAAGP,EAAUa,MAAO,CAACC,KAAM,EAAGC,OAAQ,GAAI/B,GAAkB8C,IAGvE,OAAOjC,EAAWxsB,MAAK,SAAS8O,GAC5B,OAAOoe,EAAGL,EAAW9wB,OAAOoH,OAAO,CAC/B2H,UAAW2hB,EAAiB5e,UAC5Bif,YAAY,EACZ4B,SAAU3Q,GAAKA,EACf+N,QAAS/N,GAAKA,EACdwP,aAAcA,EACdY,aAAcA,EACd9e,SAAU8d,GACXre,OAiBX,6BAA6B7Q,EAAOgW,EAAS/J,EAAU,IACnD,MAAMykB,EAAextB,EAAeZ,YAAY,YAAa,eACvDquB,EAAWztB,EAAeJ,kBAAkB,YAC5C8tB,EAAoB1tB,EAAeJ,kBAAkB,gBAC3D,IAAK4tB,IAAiBE,IAAsBD,EAAU,OAAOprB,GAAMC,MAAMxF,EAAOgW,GAEhF,MAAM6a,EAAgB,QAChB,UAACtc,EAAYsc,EAAb,SAA4Bvc,EAAWuc,EAAvC,YAAsD1c,EAAc,OAApE,WAA4EC,EAAa,SAAzF,OAAmGC,GAAS,EAA5G,IAAmH1V,GAAmBsN,EAI5I,OAFK6B,MAAM6L,QAAQ3D,KAAUA,EAAU,CAACA,IACxCA,EAAUA,EAAQmJ,IAAI1hB,GAAmB,iBAAPA,EAAkBqT,GAAKH,MAAM/D,cAAc+jB,EAAU,KAAMlzB,GAAKA,GAC3FizB,EAAaI,UAAUjgB,GACnBC,GAAKH,MAAM/D,cAAcgkB,EAAmB9yB,OAAOoH,OAAO,CAC7DkoB,OAAQptB,EACR+wB,IAAK1c,EACLF,YAAaA,EACbC,WAAYA,EACZG,UAAWA,EACXD,SAAUA,GACXzD,GAAQmF,GACZ,CAACgb,SAAUryB,IAGlB,sBACI,OAAOmQ,IAIf,SAASA,GAASjC,GACd,OAAIA,EACGA,EAAUuK,MAAM,KAAKlV,OAAO8I,IAAMA,EAAE6G,WAAW,QAAQhO,KAAK,KAD9CgJ,EAIzBtH,GAAM4C,UAAY5C,GAAM4mB,eAAe5mB,GAAM4C,UAAW,yBAExD5I,OAAOyD,UAAUC,cAAcsC,MAAQA,GC3exB,MAAM0rB,GAEjBjtB,cACIC,KAAKitB,OAAS,GAGlBC,SAASC,EAAOC,GACZptB,KAAKitB,OAAOE,GAASC,EAGzBC,aAAaF,EAAO9E,GAChB,OAAOroB,KAAKitB,OAAOE,GAAO9E,GAG9B,YACI,MAAO,CAAC,CACJtgB,KAAM,yBACN5L,GAAI,QACL,CACC4L,KAAM,UACN5L,GAAI,WACL,CACC4L,KAAM,SACN5L,GAAI,UACL,CACC4L,KAAM,aACN5L,GAAI,cAIZ,cAaI,MAZY,CACR,CACI4L,KAAM,qBACN5L,GAAI,aACL,CACC4L,KAAM,eACN5L,GAAI,UACL,CACC4L,KAAM,eACN5L,GAAI,gBAMhB,iBACI,IAAIF,EAAQ,GACZ,OAAIX,OAAOyD,UAAUuuB,SAASC,SAC9BtxB,EAAM6B,KACF,CACI0vB,QAAS,WAEb,CACIA,QAAS,SACTjlB,MAAO,iBAEX,CACIR,KAAM,qBACN5L,GAAI,iBAGLF,GAdsCA,EAiBjDiR,OAAOmb,GACH,MAAO,CACH,CACImF,QAAS,SACTjlB,MAAO,gBAERvI,KAAKytB,QAAQvS,IAAInU,IACT,CACHymB,QAASzmB,EAAE5K,GACXoM,MAAOxB,EAAEgB,KACTU,QAASzI,KAAKqtB,aAAatmB,EAAE5K,GAAIksB,SAGtCroB,KAAK0tB,WAAWxS,IAAInU,GAChBA,EAAEymB,QAAezmB,EACb,CACHymB,QAASzmB,EAAE5K,GACXoM,MAAOxB,EAAEgB,KACTU,QAASzI,KAAKqtB,aAAatmB,EAAE5K,GAAIksB,KAGzC,CACImF,QAAS,WAEb,CACIA,QAAS,SACT/kB,QAASzI,KAAKqtB,aAAa,wBAE5BrtB,KAAK/D,MAAMif,IAAInU,IACP,CACHymB,QAASzmB,EAAE5K,GACXoM,MAAOxB,EAAEgB,KACTU,QAASzI,KAAKqtB,aAAatmB,EAAE5K,GAAIksB,MAGzC,CACImF,QAAS,aCjGV,WAAI,MACfG,oBACQ3tB,KAAK4tB,mBACJ/gB,GAAKghB,mBAEV7tB,KAAK4tB,kBAAoBtsB,GAAMwsB,YAAYjhB,GAAKghB,iBAAkB,UAAW,CAAC1G,OAASlnB,IACnF,MAAM2M,EAAQ3M,EAAK2nB,gBAAgB,GACnC,IAAKhb,IAAUA,EAAMmhB,uBAAwB,OAC7C,MAAMC,EAAiBphB,EAAMmhB,uBAE7B,IAAKC,EAAehyB,OAASgyB,EAAehyB,KAAKA,MAAgD,kBAAxCgyB,EAAehyB,KAAKA,KAAK8C,YAAiC,OACnH,MAAMmvB,EAAeD,EAAehyB,KAAKA,KACrCiyB,EAAa7F,mBACjB4F,EAAehyB,KAAKA,KAAO,SAAS4Q,GAChC,MAAMob,EAAciG,EAAarhB,GAC3BshB,EAAYrxB,EAAe,aAAc+P,EAAM7I,QAAQoqB,aAAoB,GAEjF,OADAnG,EAAYpb,MAAM3E,MAAQ,CAAC0J,MAAOuc,GAC3BlG,GAGXgG,EAAehyB,KAAKA,KAAKosB,iBAAmB6F,EAC5Cp0B,OAAOoH,OAAO+sB,EAAehyB,KAAKA,KAAMiyB,QAIhDG,oBACI,IAAIC,EAAkBvjB,UAAU9Q,IAAI+M,GAAKA,EAAEunB,QAAQ,GAAGA,OACtD5lB,SAASiU,iBAAiB,IAAI0R,EAAgBlb,MAAM,KAAK,IAAIzJ,QAAQgJ,IACjEA,EAAKzK,MAAMqE,YAAY,QAAS,QC5B7B,OAAI,MACfiiB,eACI,GAAIvuB,KAAKwuB,aAAc,OAEvB,MAAMC,EAAa,IAAI3H,OAAQ,uCACzB4H,EAAWzuB,IACb,IAAKpD,EAAe,YAAa,OACjC,MAAM8xB,EAAU1uB,EAAK+nB,YAAY4G,MAAMH,GACvC,OAAKE,GAA8B,IAAnBA,EAAQlrB,OACL,OAAfkrB,EAAQ,GAAoB1uB,EAAK+nB,YAAc/nB,EAAK+nB,YAAY1U,QAAQqb,EAAQ,GAAK,GAAiB,OAAfA,EAAQ,GAAc,KAAOA,EAAQ,GAAGE,SAAS,EAAG,QAAQF,EAAQ,MACxJ1uB,EAAK+nB,YAAc/nB,EAAK+nB,YAAY1U,QAAQqb,EAAQ,GAAK,GAAiB,OAAfA,EAAQ,GAAc,KAAO5P,SAAS4P,EAAQ,IAAM,MAAMA,EAAQ,WAFpI,GAKEG,EAAaxtB,GAAMwsB,YAAYjhB,GAAKkiB,cAAe,iBAAkB,CAAC3H,MAAOsH,IAC7EM,EAAgB1tB,GAAMwsB,YAAYjhB,GAAKkiB,cAAe,aAAc,CAAC3H,MAAOsH,IAClF1uB,KAAKwuB,aAAe,KAAOM,IAAcE,KAG7CC,eACQjvB,KAAKwuB,cAAcxuB,KAAKwuB,iBCrBrB,MAAMU,WAAiBriB,GAAKsiB,eACvCpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOL,GAAK6D,MAAM/H,cACd,MACA,CAACymB,MAAO,6BAA8Bre,QAAS,YAAa9I,MAAO,CAAC2I,MAAO,OAAQC,OAAQ,SAC3FhE,GAAK6D,MAAM/H,cACP,IACA,CAACC,UAAW,aAAcuI,KAAM,OAAQke,SAAU,WAClDxiB,GAAK6D,MAAM/H,cAAc,OAAQ,CAAClP,EAAG,iBACrCoT,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW,OAAQuI,KAAM,UAAW1X,EAAG,uHCX1E,MAAM61B,WAAkBziB,GAAKsiB,eAExCpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAK4R,QAAU5R,KAAK4R,QAAQjX,KAAKqF,MAGrCkN,SACI,IAAIqiB,EAAczkB,UAAU9Q,IAAI+M,GAAKA,EAAEyoB,gBAAgB,GACnDC,EAAkB3kB,UAAU9Q,IAAI+M,GAAKA,EAAE4E,WAAa5E,EAAE2oB,aAAe3oB,EAAE4oB,iBAAiB,GAC5F,OAAO9iB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,mBAAmB2mB,EAAYC,gBAC9E3iB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,SAAS2mB,EAAYK,OAC7D/iB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW6mB,EAAgB9jB,WACxDkB,GAAK6D,MAAM/H,cAAc,MACrB,CAACC,UAAW,aAAa6mB,EAAgBC,YAAa9d,QAAS5R,KAAK4R,SACpE/E,GAAK6D,MAAM/H,cAAcknB,GAAM,OAEnChjB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,YAAY6mB,EAAgBK,SACxC,UAOpBle,UACQ5R,KAAK4M,MAAMgF,SACX5R,KAAK4M,MAAMgF,UAEf,MAAM8d,EAAchnB,SAASkC,cAAc,IAAIE,UAAU9Q,IAAI+M,GAAKA,EAAE2oB,aAAe3oB,EAAEgpB,aAAa,GAAGL,YAAYvc,MAAM,KAAK,IACxHuc,GAAaA,EAAYrF,SClCtB,MAAM2F,WAA0BnjB,GAAKsiB,eAChDpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOL,GAAK6D,MAAM/H,cACd,KACA,CAACC,UAAW,kDACZ5I,KAAK4M,MAAM7E,OCTR,MAAMkoB,WAA4BpjB,GAAKsiB,eAClDpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOL,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,uDCN5C,MAAMsnB,WAAyBrjB,GAAKsiB,eAC/CpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOL,GAAK6D,MAAM/H,cAAc,MAAM,CAACC,UAAW,qBAAsB5I,KAAK4M,MAAM7E,KAAM/H,KAAK4M,MAAMujB,SCN7F,MAAMC,WAAuBvjB,GAAKsiB,eAE7CpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKqwB,kBACLrwB,KAAK4R,QAAU5R,KAAK4R,QAAQjX,KAAKqF,MAGrCqwB,kBACIrwB,KAAKswB,MAAQ,CACTpM,SAAUlkB,KAAK4M,MAAMsX,WAAY,GAIzChX,SACI,OAAOL,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAY,mBAAiB5I,KAAK4M,MAAMsX,SAAW,YAAc,IAAMtS,QAAS5R,KAAK4R,SACtF5R,KAAK4M,MAAM7E,MAInB6J,UACQ5R,KAAK4M,MAAMgF,SACX5R,KAAK4M,MAAMgF,QAAQ5R,KAAK4M,MAAMzQ,KCxB3B,MAAMo0B,WAAuB1jB,GAAKsiB,eAC7CpvB,YAAY6M,GACRnK,MAAMmK,GACD5M,KAAK4M,MAAM4jB,OAAOC,UAASzwB,KAAK4M,MAAM4jB,OAAOC,QAAUzwB,KAAK4M,MAAM8jB,UACvE1wB,KAAKswB,MAAQ,CACTK,YAAY,EACZC,OAAQ5wB,KAAK4M,MAAMikB,UAAUpgB,SAASzQ,KAAK4M,MAAM4jB,OAAOM,aAIhE5jB,SACI,MAAM,OAACsjB,GAAUxwB,KAAK4M,MACtB,IAAImkB,EAAajmB,UAAU9Q,IAAI+M,GAAKA,EAAEiqB,MAAQjqB,EAAEkqB,aAAa,GACzDC,EAAapmB,UAAU9Q,IAAI+M,GAAKA,EAAEoqB,WAAapqB,EAAEqqB,oBAAoB,GACrEC,EAAavmB,UAAU9Q,IAAI+M,GAAKA,EAAEuqB,SAAWvqB,EAAEwqB,qBAAqB,GACxE,OAAO1kB,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAY,GAAEmoB,EAAWC,QAAQD,EAAWE,eAAenmB,UAAU9Q,IAAI+M,GAAKA,EAAEyqB,eAAe,GAAGA,+BAA+BhB,EAAOiB,OAAS,yBAA2B,MAIzK5kB,GAAK6D,MAAM/H,cAAc,MAAO,CAAC+oB,IAAK,MAAO9oB,UAAW,kBAAmB8S,IAAK8U,EAAOC,QAASkB,QAAS3xB,KAAK4xB,YAAYj3B,KAAKqF,MAAO6xB,WAAW,IACjJhlB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAWsoB,EAAWC,UAAU,sBACjCtkB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAWsoB,EAAWY,WAAW,IAAIT,EAAWC,OAAO,qBACxDzkB,GAAK6D,MAAM/H,cACP,KACA,CAACC,UAAW,6DACZ4nB,EAAO92B,MAEXmT,GAAK6D,MAAM/H,cACP,KACA,CAACC,UAAW,qEACZ4nB,EAAOuB,QACP,aAGRllB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAWsoB,EAAWY,WAAW,IAAIT,EAAWC,QACjDzkB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,2HACZiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,kDACR4nB,EAAO30B,eAIvBgR,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,kHACZiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,kCAAmCX,MAAO,CAAC+pB,KAAM,aAC7DxB,EAAOyB,WAAWryB,KAAK,OAE3BI,KAAKswB,MAAMM,QAAU/jB,GAAK6D,MAAM/H,cAC5B,SACA,CAAC3M,KAAM,SAAU4M,UAAW,iGAAkGX,MAAO,CAACiqB,UAAW,OAAQ9G,UAAW,MAAO+G,gBAAiB,YAC5LtlB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,sBACZ,WAGR4nB,EAAOnvB,OAASwL,GAAK6D,MAAM/H,cACvB,SACA,CAAC3M,KAAM,SAAU4M,UAAW,+FAAgGX,MAAO,CAACiqB,UAAW,OAAQ9G,UAAW,MAAO+G,gBAAiB,YAC1LtlB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,sBACZ,WAGP4nB,EAAOnvB,QAAUrB,KAAKswB,MAAMM,QAAU/jB,GAAK6D,MAAM/H,cAC9C,SACA,CAAC3M,KAAM,SAAU4M,UAAW,+EAAgFX,MAAO,CAACiqB,UAAW,OAAQ9G,UAAW,OAAQxZ,QAAS,KAAO5R,KAAKJ,SAC/KiN,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,sBACZ,YAS5BgpB,cACI5xB,KAAK4M,MAAM4jB,OAAOC,QAAUzwB,KAAK4M,MAAM8jB,SACvC1wB,KAAKoyB,SAAS,CAACzB,YAAY,IAG/B/wB,OACII,KAAK4M,MAAMhN,KAAKI,OCpGT,MAAMqyB,WAAqBxlB,GAAKsiB,eAE3CpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SAEI,IAAIolB,EAAkBxnB,UAAU9Q,IAAI+M,GAAKA,EAAEwrB,oBAAoB,GAC3DC,EAAkB1nB,UAAU9Q,IAAI+M,GAAKA,EAAE0rB,uBAAuB,GAC9DC,EAAgB,GAAEJ,EAAgBK,gBAAgBL,EAAgBM,kBAAkBN,EAAgBO,qBAAqB7yB,KAAK4M,MAAMkmB,KAAO,IAAIR,EAAgBS,aAAe,KAC9KC,EAAgBV,EAAgBnI,SAAS,YACzCnqB,KAAK4M,MAAMyb,UAAS2K,GAAkB,IAAGR,EAAgBC,iDACzDzyB,KAAK4M,MAAMqmB,gBACXD,GAAiB,IAAIR,EAAgBU,sBAAsB,2BAC3DR,EAAgB,GAAEJ,EAAgBK,gBAAgBH,EAAgBW,2DAA2Db,EAAgBM,kBAAkBN,EAAgBc,cAAcd,EAAgBe,iBAEjN,MAAM,SAAClmB,GAAYnN,KAAK4M,MACxB,OAAOC,GAAK6D,MAAM/H,cACd,MACA,CAACjO,IAAK,eAAgBkO,UAAW8pB,GACjC7lB,GAAK6D,MAAM/H,cACP,MACA,CAACjO,IAAK,WAAYg3B,IAAK,WAAY9oB,UAAWoqB,GAC9C7lB,KAMhB,MAAMmmB,GAAiBjB,GAAat3B,UAAUmS,OAC9CrT,OAAOC,eAAeu4B,GAAat3B,UAAW,SAAU,CACpDhB,YAAY,EACZw5B,cAAc,EACdne,IAAK,WAAYhU,QAAQiZ,KAAK,wGAC9BrgB,IAAK,IAAMs5B,KCjCA,MAAME,WAAwB3mB,GAAKsiB,eAE9CpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,MAAM,QAACmb,EAAD,QAAUtW,EAAV,MAAmB6d,GAAS5vB,KAAK4M,MAAMO,SAC7C,OAAON,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAW,uDACZiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,uCACZiE,GAAK6D,MAAM/H,cAAc8qB,GAAU,CAAC/4B,IAAK,kBAAmBg3B,IAAK,kBAAmBrJ,SAAS,EAAMyK,KAAMzK,EAAQyK,OAAQ,EAAMY,KAAMrL,EAAQqL,OAAQ,GAAOrL,EAAQ+E,YAExKvgB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,uCACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,wDACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,8KACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,4GAA6G8oB,IAAK,mBAC1J7kB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,2EAA4EmJ,EAAQqb,WAChIwC,EAAMxC,gBCdnB,MAAMuG,WAA0B9mB,GAAKsiB,eAEhDpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKqwB,kBACLrwB,KAAKoY,MAAQpY,KAAKoY,MAAMzd,KAAKqF,MAC7BA,KAAK4zB,eAAiB5zB,KAAK4zB,eAAej5B,KAAKqF,MAC/CA,KAAKskB,OAAStkB,KAAKskB,OAAO3pB,KAAKqF,MAC/BA,KAAK6zB,cAAgB7zB,KAAK6zB,cAAcl5B,KAAKqF,MAC7CA,KAAK8zB,gBAAkB9zB,KAAK8zB,gBAAgBn5B,KAAKqF,MACjDA,KAAKJ,KAAOI,KAAKJ,KAAKjF,KAAKqF,MAC3BA,KAAK+zB,QAAU/zB,KAAK+zB,QAAQp5B,KAAKqF,MAEjCA,KAAKg0B,WAAannB,GAAK5N,eAAe4jB,uBAAuB,CAAC,cAC9D7iB,KAAKi0B,eAAiBpnB,GAAK5N,eAAe4jB,uBAAuB,CAAC,mBAAoB,oBACtF7iB,KAAKkjB,cAAgBrW,GAAK5N,eAAe4jB,uBAAuB,CAAC,iBACjE7iB,KAAKk0B,iBAAmBrnB,GAAK5N,eAAe4jB,uBAAuB,CAAC,oBAGxEsR,oBACIn0B,KAAK8zB,kBAGTzD,kBACIrwB,KAAKswB,MAAQ,CACT8D,kBAAmB,EACnBr4B,MAAO,aACPs4B,SAAS,EACTC,QAAS,GACTnW,KAAM,KACNoW,WAAY,CACRjE,MAAO,EACPkE,KAAM,OAKlBpc,QACIpY,KAAK4M,MAAMwL,QAGfkM,OAAO7H,EAAO0F,GACV,MAAM5I,EAAOvZ,KACby0B,MAAO,GAAElb,EAAKmb,WAAWjY,IAAQA,EAAQ,cAAgB,gBAAiB,CACtEsK,OAAQ,QACT7Y,KAAK9K,UACJ,GAAkB,MAAf+K,EAAIC,OAAe,YAAYD,EAAIpG,OACtC,IAAI9H,QAAakO,EAAIyF,OAEjB0gB,EAAUr0B,EAAKqG,QAAQif,OAAO,CAACjR,EAAKkc,KACpCA,EAAOI,QAAS,EAChBtc,EAAIxW,KAAK0yB,GAEFlc,GACR,IAEE6N,IACDmS,EAAU/a,EAAK+W,MAAMgE,QAAQ3lB,OAAO2lB,IAMxC,IAAIK,EAAM10B,EAAKga,KAAOha,EAAK6J,KAC3B7J,EAAKke,KAAQ,SAAQwW,EACjBpb,EAAK+W,MAAMsE,OAAM30B,EAAKke,MAAS,SAAQ5E,EAAK+W,MAAMsE,MAClDrb,EAAK+W,MAAM8D,mBAAkBn0B,EAAKke,MAAS,aAAY5E,EAAKsb,gBAAgBtb,EAAK+W,MAAM8D,mBACvFO,GAAO10B,EAAK60B,QACZH,EAAM10B,EAAK60B,MACX70B,EAAKke,KAAO,MAGhB,IAAIpiB,EAAS,aAAY44B,QAAU10B,EAAK60B,oBAAoBvb,EAAKsb,gBAAgBtb,EAAK+W,MAAM8D,oBACxF7a,EAAK+W,MAAMsE,OAAM74B,GAAU,QAAOwd,EAAK+W,MAAMsE,MAEjDrb,EAAK6Y,SAAS,CACViC,SAAS,EACTt4B,MAAOA,EACPu4B,QAASA,EACTnW,KAAMle,EAAKke,OAGXgE,IAEA5I,EAAKwb,KAAKC,IAAID,KAAKE,gBAAgBC,UAAY,KAEpD7iB,MAAOlR,IACNC,QAAQC,MAAMF,GACPoY,EAAK6Y,SAAS,CACjBiC,SAAS,EACTt4B,MAAO,wDAKnB,WAAWo5B,GACP,GAAIA,EAAWvoB,MAAM6kB,OAAQ,OAAOzxB,KAAKkjB,cAAckS,aAAaD,EAAWvoB,MAAMyoB,mBAE/EZ,MAAO,GAAEz0B,KAAKs1B,gBAAgBH,EAAWvoB,MAAM4jB,OAAOM,aAAa,CACrE/J,OAAQ,MACRwO,YAAa,UACbj7B,KAAM,OACNyT,QAAS,CACL,OAAU,mBACV,eAAgB,sBAIxBonB,EAAW/C,SAAS,CAACxB,QAAQ,IAGjCmD,UACI,MAAMxa,EAAOvZ,KACPgI,EAAUuR,EAAKic,cACrBxtB,EAAQgJ,EAAIyU,KAAKgQ,MAAMn6B,OAAOo6B,QAAUp6B,OAAOsqB,WAAa,EAAI5d,EAAQ4I,MAAQ,GAChF5I,EAAQiJ,EAAIwU,KAAKgQ,MAAMn6B,OAAOq6B,QAAUr6B,OAAOuqB,YAAc,EAAI7d,EAAQ6I,OAAS,GAElF0I,EAAKqc,WAAa,IAAKt6B,OAAOH,QAAQ,YAAYmJ,OAAhC,eAAsD0D,GAExEuR,EAAKqc,WAAWC,YAAYrxB,GAAG,eAAgB,CAAC2a,EAAOxR,KACxC,wCAAPA,IACJ4L,EAAKqc,WAAWxd,QAChBmB,EAAKua,qBAETva,EAAKqc,WAAWE,QANJ,+GAShB,oBACI,MAAO,CACHllB,MAAO,IACPC,OAAQ,IACRshB,gBAAiB,UACjB5oB,MAAM,EACNwsB,WAAW,EACXC,aAAa,EACbC,aAAa,EACbC,aAAa,EACblQ,OAAO,EACPmQ,QAAQ,EACRC,eAAgB,CACZC,iBAAiB,IAK7B,eACI,MAwBMxF,EAAY7wB,KAAKk0B,iBAAiBoC,uBAClCC,EAAcv2B,KAAKi0B,eAAeuC,gBACxC,MAAO,CACH3pB,GAAK6D,MAAM/H,cAAc8tB,GAAY,CAACjG,OAf1B,CACZ92B,KAAM,YACNg9B,OAAQ,OACR3E,QAAS,OACTE,WAAY,CAAC,YAAa,cAAe,WACzCp2B,YAAa,4CACbi1B,WAAY,qBACZL,QAAS,mCACTkG,YAAY,EACZtB,YAAa,UACb5D,QAAQ,GAK+CA,QAAQ,EAAM7xB,KAAMI,KAAKJ,KAAMixB,UAAWA,EAAWH,SAAU6F,EAAY9Q,KAAKmR,MAAsB,EAAhBnR,KAAKoR,aAClJhqB,GAAK6D,MAAM/H,cAAc8tB,GAAY,CAACjG,OA5B3B,CACX92B,KAAM,gBACNg9B,OAAQ,SACR3E,QAAS,SACTE,WAAY,CAAC,YAAa,cAAe,WACzCp2B,YAAa,gDACbi1B,WAAY,oBACZL,QAAS,2FACTkG,YAAY,EACZtB,YAAa,mBACb5D,QAAQ,GAkB8CA,QAAQ,EAAM7xB,KAAMI,KAAKJ,KAAMixB,UAAWA,EAAWH,SAAU6F,EAAY9Q,KAAKmR,MAAsB,EAAhBnR,KAAKoR,cAIzJ,eACI,MAAO,oCAGX,mBACI,MAAO,+BAGX,sBACI,MAAO,0CAGX,wBACI,MAAMtd,EAAOvZ,KACb,IACI,MAAM82B,QAAiBrC,MAAO,uCAAsC,CAChE1N,OAAQ,MACRwO,YAAa,UACbj7B,KAAM,OACNyT,QAAS,CACL,OAAU,mBACV,eAAgB,sBAGlBhG,QAAa+uB,EAAS/uB,OAC5B,IAAIA,EAUA,YATAwR,EAAK6Y,SAAS,CACVr2B,MAAO,uCACPs4B,SAAS,EACTD,kBAAmB,EACnBG,WAAY,CACRjE,MAAO,EACPkE,KAAM,QAKlB,MAAMv0B,EAAOU,KAAKE,MAAMkH,GACxBwR,EAAK6Y,SAAS,CACVgC,iBAAkB,EAClBG,WAAY,CACRjE,MAAO,EACPkE,KAAMv0B,KAGdsZ,EAAK+K,OAAO,IAAI,GAEpB,MAAOjjB,GACHD,QAAQC,MAAMA,GACdkY,EAAK6Y,SAAS,CACVr2B,MAAO,uCACPs4B,SAAS,EACTD,kBAAmB,EACnBG,WAAY,CACRjE,MAAO,EACPkE,KAAM,SAMtBtnB,SACI,OAAOL,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAI,iBACxC0Q,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAI,aAAc0Q,GAAK6D,MAAM/H,cAAcouB,GAAa,CAACrF,IAAK,OAAQ1xB,KAAKotB,aAIpH,gBACI,MAAO,CACH/E,QAAS,CACL+E,UAAWptB,KAAKqoB,SAEpBtW,QAAS,CACLqb,UAAWptB,KAAK+R,SAEpB6d,MAAO,CACHxC,UAAWvgB,GAAK6D,MAAM/H,cAAcquB,GAAO,CAACt8B,IAAK,KAAMg3B,IAAK,QAAS9f,QAAS5R,KAAKoY,UAK/F,cACI,OAAOvL,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAW,UAAWlO,IAAK,MAC5BmS,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,mBACZiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,oBAAqBX,MAAO,CAACgvB,SAAU,SACnD,kBAEJpqB,GAAK6D,MAAM/H,cAAcuuB,GAAiB,MAC1Cl3B,KAAKm3B,YACLtqB,GAAK6D,MAAM/H,cAAcuuB,GAAiB,MAC1CrqB,GAAK6D,MAAM/H,cAAcyuB,GAAc,CAACrvB,KAAM,eAC9C/H,KAAK60B,gBAAgB3Z,IAAI,CAAC9gB,EAAOgwB,IACtBvd,GAAK6D,MAAM/H,cAAc0uB,GAAY,CAACl7B,GAAIiuB,EAAOxY,QAAS5R,KAAK4zB,eAAgBl5B,IAAK0vB,EAAOriB,KAAM3N,EAAO8pB,SAAUlkB,KAAKswB,MAAM8D,mBAAqBhK,KAE7Jvd,GAAK6D,MAAM/H,cAAcuuB,GAAiB,MAC1Cl3B,KAAKypB,OACLzpB,KAAKu0B,aAKjB,kBACI,OAAO1nB,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAW,gBACZiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,8BAA+BX,MAAO,CAAC2I,MAAO,QAAS0mB,WAAY,SAC/EzqB,GAAK6D,MAAM/H,cAAc,QAAS,CAAC+oB,IAAK,cAAe6F,UAAWv3B,KAAK6zB,cAAe2D,SAAU,OAAUx7B,KAAM,OAAQ4M,UAAW,gBAAiB6uB,YAAa,YAAaC,UAAW,SAKrM7D,cAAc9sB,GACV,MAAMwS,EAAOvZ,KACb,GAAIuZ,EAAK+W,MAAM+D,SAAuB,KAAZttB,EAAE4wB,MAAc,OAC1Cpe,EAAK6Y,SAAS,CACViC,SAAS,EACTt4B,MAAO,aACP64B,KAAM7tB,EAAE0Y,OAAOrlB,QAEnB,IAAIqiB,EAAS,SAAQ1V,EAAE0Y,OAAOrlB,MACM,IAAhCmf,EAAK+W,MAAM8D,mBACX3X,GAAU,aAAYlD,EAAKsb,gBAAgBtb,EAAK+W,MAAM8D,mBAE1D7a,EAAK+K,OAAO7H,GAAO,GAGvB,sBACI,MAAO,CAAC,MAAO,YAAa,YAAa,iBAAkB,aAAc,YAAa,iBAAkB,gBAAiB,mBAAoB,QAAS,YAAa,WAAY,cAAe,SAGlMmX,eAAez3B,GACX,MAAMod,EAAOvZ,KACTuZ,EAAK+W,MAAM+D,UACf9a,EAAKwb,KAAK6C,YAAYx9B,MAAQ,GAC9Bmf,EAAK6Y,SAAS,CACViC,SAAS,EACTD,iBAAkBj4B,EAClBJ,MAAO,aACP64B,KAAM,OAEC,IAAPz4B,EAIJod,EAAK+K,OAAQ,aAAY/K,EAAKsb,gBAAgB14B,IAAO,GAHjDod,EAAK+K,OAAO,IAAI,IAMxB,cACI,MAAM/K,EAAOvZ,KACP6wB,EAAY7wB,KAAKk0B,iBAAiBoC,uBAClCC,EAAcv2B,KAAKi0B,eAAeuC,gBACxC,GAAoC,IAAhCjd,EAAK+W,MAAMiE,WAAWjE,MAAa,OAAO/W,EAAKse,aACnD,IAAIC,EAAehtB,UAAU9Q,IAAI+M,GAAKA,EAAEgxB,sBAAsB,GAC9D,MAAO,CAAClrB,GAAK6D,MAAM/H,cACf,MACA,CAAC+oB,IAAK,UAAWh3B,IAAK,KAAMkO,UAAWkvB,EAAa7E,cAAc,IAAI6E,EAAa7E,cAAc,2BACjGpmB,GAAK6D,MAAM/H,cAAcqvB,GAAe,CAACjwB,KAAMwR,EAAK+W,MAAMv0B,QAC1Dwd,EAAK0e,SACL1e,EAAK+W,MAAMgE,QAAQpZ,IAAKsV,GACb3jB,GAAK6D,MAAM/H,cAAc8tB,GAAY,CAAC/7B,IAAK81B,EAAOM,WAAYN,OAAQA,EAAQ5wB,KAAM2Z,EAAK3Z,KAAMixB,UAAWA,EAAWH,SAAU6F,EAAY9Q,KAAKmR,MAAsB,EAAhBnR,KAAKoR,cAEtKtd,EAAK+W,MAAMnS,MAAQtR,GAAK6D,MAAM/H,cAC1B,SACA,CAAC3M,KAAM,SAAU4V,QAAS,KACd2H,EAAK+W,MAAM+D,UAAgB9a,EAAK6Y,SAAS,CAACiC,SAAS,IAAQ9a,EAAK+K,OAAO/K,EAAK+W,MAAMnS,MAAM,KAC7FvV,UAAW,oCAAqCX,MAAO,CAAC2I,MAAO,OAAQwa,UAAW,OAAQ8M,aAAc,SAC/GrrB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,sBACZ2Q,EAAK+W,MAAM+D,QAAU,UAAY,cAGzC9a,EAAK+W,MAAMgE,QAAQ7wB,OAAS,GAAKoJ,GAAK6D,MAAM/H,cAAcqvB,GAAe,CAACjwB,KAAMwR,EAAK+W,MAAMv0B,UAInG,mBAGI,IAAI+7B,EAAehtB,UAAU9Q,IAAI+M,GAAKA,EAAEgxB,sBAAsB,GAC9D,MAAO,CAAClrB,GAAK6D,MAAM/H,cACf,MACA,CAACjO,IAAK,MAAOg3B,IAAK,UAAW9oB,UAAWkvB,EAAa7E,cAAc,IAAI6E,EAAa7E,cAAc,2BAClGpmB,GAAK6D,MAAM/H,cACP,KACA,CAACC,UAAW,kDACZ,uCACAiE,GAAK6D,MAAM/H,cACP,SACA,CACIiJ,QAbH5R,KAaiB+zB,QACd/3B,KAAM,SACN4M,UAAW,oCACXX,MAAO,CACHsJ,QAAS,eACT2gB,UAAW,OACXoF,WAAY,OACZa,WAAY,SAGpBtrB,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,sBACZ,aA1BH5I,KA6BDi4B,WAIhB,aACI,OAAOprB,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAW,qBACZiE,GAAK6D,MAAM/H,cACP,IACA,CAAC6H,KAAM,6BAA8BiP,OAAQ,UAC7C,uBAKZ,iBACI,MACM,WAAC8U,GADMv0B,KACaswB,MAC1B,OAAyB,IAArBiE,EAAWjE,MAAoBzjB,GAAK6D,MAAM/H,cAAc,OAAQ,MAE7DkE,GAAK6D,MAAM/H,cACd,OACA,KACAkE,GAAK6D,MAAM/H,cAAcuuB,GAAiB,MAC1CrqB,GAAK6D,MAAM/H,cACP,OACA,CAACV,MAAO,CAAC0J,MAAO,UAAWslB,SAAU,OAAQK,WAAY,SACzD,iBACC,GAAE/C,EAAWC,KAAK4D,YAAY7D,EAAWC,KAAK6D,iBAEnDxrB,GAAK6D,MAAM/H,cACP,MACA,CAACV,MAAO,CAACqwB,QAAS,oBAClBzrB,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC2I,MAAO,OAAQshB,UAAW,QAASl2B,KAAM,SAAU4M,UAAW,qCACvEiE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,qBAAsBgJ,QAtBrC5R,KAsBmD+zB,SAChD,iB,iNC3bT,MAAMwE,WAAuB7rB,MAAMC,UAC9CO,SACI,MAAMN,EAAQ5M,KAAK4M,MAEnB,OACI,8BAAKmE,QAAQ,iBAAoBnE,EAAMkE,IAAvC,CAA4CD,OAAO,SAC/C,4BAAMpX,EAAE,+DAA+D0X,KAAK,sBAC5E,4BAAM1X,EAAE,wJAAwJ0X,KAAK,c,iNCPtK,MAAMqnB,WAAe9rB,MAAMC,UACtCO,SACI,OAAQ,8BAAKkiB,MAAM,6BAA6Bre,QAAQ,aAAiB/Q,KAAK4M,MAAMkE,IAA5E,CAAiFD,OAAO,SACxF,4BACIM,KAAK,UACL1X,EAAE,qDAEN,4BACI0X,KAAK,UACL1X,EAAE,iQAEN,4BACI0X,KAAK,UACL1X,EAAE,sJAEN,8BAAQg/B,GAAG,KAAKC,GAAG,KAAKz+B,EAAE,IAAIkX,KAAK,YACnC,8BAAQsnB,GAAG,KAAKC,GAAG,KAAKz+B,EAAE,IAAIkX,KAAK,YACnC,8BAAQsnB,GAAG,KAAKC,GAAG,KAAKz+B,EAAE,IAAIkX,KAAK,YACnC,8BAAQsnB,GAAG,KAAKC,GAAG,KAAKz+B,EAAE,IAAIkX,KAAK,YACnC,4BAAM1X,EAAE,qDACR,4BACI0X,KAAK,UACL1X,EAAE,kIAEN,4BACI0X,KAAK,UACL1X,EAAE,+IAEN,yBAAG0X,KAAK,WACJ,4BAAM1X,EAAE,6OACR,4BAAMA,EAAE,2ICzBrB,SAASk/B,KACZ,MAAO,uCAAuCrlB,QAAQ,SAAS,SAAS9Z,GACpE,IAAIS,EAAoB,GAAhBwrB,KAAKoR,SAAgB,EAC7B,OADyC,KAALr9B,EAAWS,EAAS,EAAJA,EAAU,GACrD+Y,SAAS,OAI1B,MAAM4lB,GAAyB,GAC/B,IAAIC,GAAgB,GAEL,WAAI,MACf94B,cACIC,KAAK84B,OAAS,CACVC,OAAQ,IAIZz9B,OAAOyD,UAAUC,cAAcg6B,cAAgBh5B,KAGnD,YACI,OAAOA,KAAK84B,OAGhB,UAAU74B,GACN,MAAmB,iBAATA,GAA4C,iBAAhBD,KAAK84B,OAA2B94B,KAAK84B,OAAS74B,EAC7ED,KAAK84B,OAASj/B,OAAOoH,OAAOjB,KAAK84B,OAAQ74B,GAQpD,gBAAgBu0B,GACZ,GAAGx0B,KAAKoN,MAAM2rB,OAAOvE,GAAM,OAAOx0B,KAAKoN,MAAM2rB,OAAOvE,GACpD,GAAGoE,GAAuBpE,GAAM,OAAOoE,GAAuBpE,GAE9D,IAAI9yB,EACJ,MAAMu3B,EAAa,IAAI90B,QAASgK,GAASzM,EAAUyM,GACnDyqB,GAAuBpE,GAAQyE,EAE/B,MAAMF,EAAS,GACf,IAAI,IAAIG,KAASC,GAAUJ,OACpBG,EAAME,aAAa3oB,SAAS+jB,IAAMuE,EAAOj7B,KAAKo7B,GAErD,MAAMG,QAAsB,IAAIl1B,QAASzC,IACrC,IAAI7E,EAAe,eAAe,OAAO6E,EAAQ,IACjDm3B,GAAc/6B,KAAK,CAAC02B,EAAM9yB,IAC1B0C,WAAW,KACP,IAAIk1B,EAAQT,GACQ,IAAjBS,EAAM71B,SACTo1B,GAAgB,GAChBU,GAAcC,GAAOT,OAAQ,OAAQp4B,KAAKC,UAAU04B,EAAMpe,IAAInU,GAAKA,EAAE,MACpEmH,KAAK9K,UACgB,MAAf+K,EAAIC,QACHkrB,EAAM5vB,QAAQzJ,IACVA,EAAK,GAAG,MAGhB,MAAMw5B,QAAqBtrB,EAAIyF,OAE/B,IAAI,IAAI4gB,KAAQiF,EAAa,CACXH,EAAMt7B,KAAK07B,GAAWA,EAAQ,KAAOlF,EAAKmF,SAChD,GAAGnF,EAAKuE,WAErB1mB,MAAOlR,IACDA,aAAey4B,IAAgBx4B,QAAQC,MAAMF,GAClDm4B,EAAM5vB,QAAQzJ,IACVA,EAAK,GAAG,UAGjB,KAEP,IAAI,IAAIi5B,KAASG,EACTF,GAAUJ,OAAO/6B,KAAK+I,GAAKA,EAAE5K,KAAO+8B,KACrCH,EAAO/6B,KAAK+I,GAAKA,EAAE5K,KAAO+8B,IAC7BH,EAAOj7B,KAAKq7B,GAAUJ,OAAO/6B,KAAK+I,GAAKA,EAAE5K,KAAO+8B,KAWpD,OATAl5B,KAAKoN,MAAQ,CACT2rB,OAAQl/B,OAAOoH,OAAOjB,KAAKoN,MAAM2rB,OAAQ,CAAC,CAACvE,GAAOuE,KAEtD30B,WAAW,YACApE,KAAKoN,MAAM2rB,OAAOvE,IAC1B,KAEH9yB,EAAQq3B,UACDH,GAAuBpE,GACvBuE,IAIf,MAAMQ,GAAgB,SAASM,EAAO9S,EAAQ9mB,GAC1C,OAAIpD,EAAe,eAGZiR,IAAW,GAAEqrB,GAAUW,oBAAoBD,IAAS,CACvD9S,SACAhZ,QAAS,CACL,OAAU,YACV,cAAiBzS,OAAOyD,UAAU+V,IAAIilB,eAAiB,sBAEvD95B,EAAO,CACPwK,KAAMxK,GACN,KAVGkE,QAAQ61B,OAAO,IAAIJ,GAAe,+CAcjD,MAAMA,WAAuBvrB,MACzBtO,cACI0C,SAASmX,WACT5Z,KAAKtG,KAAO,kBAIb,MAAMy/B,GAAY,CACrBW,WAAY,+BACZf,OAAQ,CACJ,CACIr/B,KAAM,uBACNyC,GAAI,uCACJi9B,aAAc,CACV,qBACA,sBAEJa,OAAQ,GACR7M,UAAWmL,GACX/nB,KAAM,iEACP,CACC9W,KAAM,UACNyC,GAAI,uCACJi9B,aAAc,CACV,qBACA,qBACA,sBAEJa,OAAQ,GACR7M,UAAWoL,GACXhoB,KAAM,wCAKLgpB,GAAS,CAClBT,OAAS,iB,iNChJE,WAAI,MACfh5B,cACIC,KAAKk6B,OAAS,GACd5+B,OAAOyD,UAAUC,cAAcm7B,OAASn6B,KAG5C,iBACI,QAAS0I,SAASkC,cAAc,uBAGpCwvB,SACI,GAAGp6B,KAAKq6B,WAAW,OACnB,IACIC,GACA,CACAh5B,GAAMuJ,SAAS0vB,GAAGt7B,eAAejB,KAAK+I,GAAKA,EAAEmzB,QAAUnzB,EAAE8B,OAAOqxB,SAEpE,MAAMA,EAASxxB,SAASkC,cAAc,IAAI0vB,GAC1C,IAAKJ,EAAQ,OAAO,EACpB,MAAMM,EAAgBz7B,UAAU+V,IAAIxT,MAAMm5B,UAAUP,EAAQ,GAC5D,IAAIM,EAAc,OAAON,EACzBl6B,KAAKw6B,cAAgBA,EACrB,IAAIttB,EAASstB,EAActtB,OAC3BstB,EAActtB,OAAS,KACnB,IAAI8a,EAAc9a,EAAO5T,KAAKkhC,GAC1BpuB,EAAY4b,EAAYpb,MAAMO,SAAS,GAAGP,MAAMhE,UAAUuK,MAAM,KASpE,OARA/G,EAAUtO,KAAK,UACfsO,EAAUtO,KAAK,YACfkqB,EAAYpb,MAAMO,SAAS,GAAGP,MAAMhE,UAAYwD,EAAUxM,KAAK,KAE/DI,KAAKk6B,OAAOxwB,QAAQb,IAChBmf,EAAYpb,MAAMO,SAAS,GAAGP,MAAMO,SAASrP,KAAK+K,EAAM,MAGrDmf,GAEXwS,EAAcE,cAGlBC,YAAYxtB,EAAUP,EAAQ,IAC1B,IAAIzQ,EAAKw8B,KACL9vB,EAAQ,KAaZ,OAZA7I,KAAKk6B,OAAOp8B,KAAK,CAAC3B,EAAI,oBAAC,GAAD,MAAWyQ,EAAX,CAAkBguB,SAAUC,IAC9ChyB,EAAQgyB,GACTngC,IAAKyB,EAAIA,GAAIA,EAAIqP,OAAQ,KACxB,IAAI4e,EAAQpqB,KAAKk6B,OAAOpa,UAAU/Y,GAAKA,EAAE,KAAO5K,IAClC,IAAXiuB,IACHpqB,KAAKk6B,OAAO52B,OAAO8mB,EAAO,GAC1BvhB,EAAQ,KACL7I,KAAKw6B,eAAcx6B,KAAKw6B,cAAcE,cACzC16B,KAAKo6B,aACLjtB,KACDnN,KAAKw6B,eAAcx6B,KAAKw6B,cAAcE,cACzC16B,KAAKo6B,SACE,CACH5uB,OAAQ,KACJ,GAAI3C,EAQAA,EAAM2C,aARA,CACN,IAAI4e,EAAQpqB,KAAKk6B,OAAOpa,UAAU/Y,GAAKA,EAAE,KAAO5K,GAChD,IAAc,IAAXiuB,EAAa,OAChBpqB,KAAKk6B,OAAO52B,OAAO8mB,EAAO,GAC1BvhB,EAAQ,KACL7I,KAAKw6B,eAAcx6B,KAAKw6B,cAAcE,cACzC16B,KAAKo6B,cAUzB,IAAIU,GACG,MAAMC,WAAcruB,MAAMC,UAC7B5M,cACI0C,SAASmX,WACT5Z,KAAKswB,MAAQ,CACT0K,UAAW,IAAIh7B,KAAK3G,QAAQ,GAAG6E,QAAQ+8B,MAAM,IAEjDj7B,KAAK4M,MAAMguB,SAAS56B,MACpBA,KAAKk7B,QAAUl7B,KAAKk7B,QAAQvgC,KAAKqF,MAGrCk7B,QAAQn0B,GACY,KAAZA,EAAE4wB,OACF33B,KAAKwL,SAIb,cACI,OAAOsvB,KAAiBA,GAAe,CACnCP,GAAGt7B,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ+8B,OAASl0B,EAAE7I,QAAQgR,OAI9EjC,uBACI3R,OAAOqkB,oBAAoB,UAAW3f,KAAKk7B,SAG/C/G,kBAAkBgH,GACd7/B,OAAOgO,iBAAiB,UAAWtJ,KAAKk7B,SAG5C1vB,SACIxL,KAAK4M,MAAMpB,SAGf4vB,mBAAmBD,GACfn7B,KAAK3G,QAAQ,GAAG6E,QAAQ0d,OAAO5b,KAAKswB,MAAM0K,UAAW,CACjDK,QAAS,EACTvf,SAAU,MACX7X,MAAMk3B,GAGbG,mBAAmBH,GACfn7B,KAAK3G,QAAQ,GAAG6E,QAAQ0d,OAAO5b,KAAKswB,MAAM0K,UAAW,CACjDK,QAAS,EACTvf,SAAU,MACX7X,MAAMk3B,GAGbjuB,SACI,IAAIquB,EAAgBv7B,KAAKswB,MAAM0K,UAAUQ,YAAY,CACjDC,WAAY,CAAC,EAAG,GAChBC,YAAa,CAAC,KAAM,KAEpBzzB,EAAQ,CACR0zB,QAAS37B,KAAKswB,MAAM0K,UACpBY,UAAW,CAAC,CACRC,MAAON,KAGXO,EAAM97B,KAAK3G,QAAQ,GAAG6E,QAAQgR,IAClC,OAAO,oBAAC4sB,EAAD,CAAKlzB,UAAW,CAACmzB,mBAAmB7hB,IAAI,CAC3CiY,gBAAgB,4BAChB6J,SAAU,WACV9wB,IAAK,EACL+wB,MAAO,EACPzT,OAAQ,EACRnd,KAAM,EACNkG,QAAS,OACT2qB,SAAU,SACVC,gBAAiB,WACjBC,mBAAoB,SACpBC,gBAAiB,SACjBC,cAAe,SACfC,OAAQ,MACU,UAAnB7/B,QAAQC,SAAmBo/B,mBAAmB7hB,IAAI,CACjDhP,IAAK,QACLsxB,WAAY,SACb,QAASx8B,KAAK4M,MAAMhE,UAAU5I,KAAK4M,MAAMhE,UAAUuK,MAAM,KAAK,IAAKlV,OAAO8I,GAAGA,GAAGnH,KAAK,MAAQ,KAAMqI,MAAOA,GACxGjI,KAAK4M,MAAMO,SAAS,KACjBnN,KAAKwL,aAKrBuvB,GAAM1W,aAAe,CACjBloB,GAAI,KACJgR,SAAU,MC3JC,WAAI,MAEfpN,cACIC,KAAKy8B,cAAgBz8B,KAAKy8B,cAAc9hC,KAAKqF,MAC7C1E,OAAOyD,UAAUC,cAAc09B,iBAAmB18B,KAGtDkN,SACIitB,GAAOQ,YAAaviB,GACTvL,GAAK6D,MAAM/H,cAAcgrB,GAAmB,CAACgJ,OAAQ,gBAAiBvkB,WAIrF,aACI,MAAMwkB,EAAM7b,GAAIpY,cAAe,8BAA6BkE,GAAKgwB,aAAaC,cACzEjgC,EAAe,cAAa+/B,EAAI30B,MAAMsJ,QAAU,QACrD,MAAMhJ,EAAQwY,GAAIpY,cAAe,kCAAiC,kBAAoBkE,GAAKgwB,aAAaE,kCAGxG,OAFAx0B,EAAMe,iBAAiB,QAAS,KAAOtJ,KAAKkN,WAC5C0vB,EAAIvzB,OAAOd,GACJq0B,EAGXH,gBACI,IACIO,GACA,CACA17B,GAAMuJ,SAASC,UAAU9Q,IAAI+M,GAAKA,EAAEk2B,kBAAoBl2B,EAAEm2B,mBAAmB,GAAGA,oBAEpF,GAAInc,GAAItE,MAAM,cAAe,OAC7B,MAAMuH,EAASjD,GAAItE,MAAO,OAAMugB,WAChCjc,GAAIqG,MAAMpD,EAAQhkB,KAAKmwB,QAG3BgN,YACI,GAAIn9B,KAAKo9B,WAAY,OACrB,MAAMC,EAAYC,EAAet/B,KAAKzE,GAAKA,EAAE2E,SAAoC,mBAAzB3E,EAAE2E,QAAQY,aAC5Dy+B,EAAeD,EAAez+B,kBAAkB,UACjDw+B,GAAcE,GAAcj8B,GAAM+Y,KAAK,eAAgB,kCAC5Dra,KAAKo9B,WAAa97B,GAAMwsB,YAAYuP,GAAwBE,EAAaxiC,UAAWsiC,EAAY,UAAY,SAAU,CAACjW,MAAOpnB,KAAKy8B,gBACnIz8B,KAAKy8B,gBAGTe,eACIx9B,KAAKo9B,oBACEp9B,KAAKo9B,WACZ,MAAMjN,EAASpP,GAAItE,MAAM,cACrB0T,GAAQA,EAAO3kB,WCvCZ,WAAI,MACfvH,QACI8c,GAAIK,SAAS,YAhBN,wMAmBXvc,OACIkc,GAAIY,YAAY,eCpBxB,MACM8b,GAAY,IAAI3W,OAAQ,8DAEf,WAAI,MACf/mB,cACIzE,OAAOyD,UAAUC,cAAc0+B,gBAAkB19B,KAErD6E,OACS7E,KAAKoW,aACVpW,KAAK29B,oBAAoB1+B,EAAeb,QAAQ4B,KAAK49B,aAAajjC,KAAKqF,QACvEA,KAAK69B,cAAcn1B,SAASkC,cAAc,eAC1C5K,KAAKoW,YAAa,GAGtBnS,QACQjE,KAAKoW,aACTpW,KAAK89B,kBAAkB7+B,EAAeb,QAAQ4B,KAAK49B,aAAajjC,KAAKqF,QACrEA,KAAK+9B,iBAAiBr1B,SAASkC,cAAc,eAC7C5K,KAAKoW,YAAa,EAClBpW,KAAKg+B,mBAGTF,kBAAkBzkC,GACd,IAAK,MAAMH,KAAUG,EACjB2G,KAAKi+B,iBAxBQ,KAwB2B/kC,GAIhDykC,oBAAoBtkC,GAChB,IAAK,MAAMH,KAAUG,EACjB2G,KAAKk+B,mBA9BQ,KA8B6BhlC,GAIlDilC,aAAa/jC,GACT,OAAKgkC,MAAMhkC,QACPA,EAAMyT,SAAS,OAASzT,EAAMyT,SAAS,OAASzT,EAAMyT,SAAS,OAASzT,EAAMyT,SAAS,WACvFzT,EAAMwT,WAAW,wBACjBxT,EAAMwT,WAAW,MAAyB,GAAhBxT,EAAMqJ,QAA+B,GAAhBrJ,EAAMqJ,YACrDrJ,EAAMqW,SAAS,WAAYrW,EAAMqW,SAAS,YAIlDmtB,aAAa1kC,GACT,GAAsB,iBAAXA,GAAuB2Q,MAAM6L,QAAQxc,GAAS,OAAO,EAChE,GAAIA,EAAOqB,WAAY,OAAO,EAC9B,IAAKV,OAAO2J,KAAKtK,GAAQuK,OAAQ,OAAO,EACxC,IAAK,MAAM46B,KAAiBnlC,EAAQ,CAChC,MAAMkB,EAAQlB,EAAOmlC,GACrB,GAAqB,iBAAVjkC,EAAoB,OAAO,EACtC,IAAI4F,KAAKm+B,aAAa/jC,GAAtB,CACA,GAAgC,IAA5BA,EAAM+Y,MAAM,KAAK1P,OAAc,OAAO,EAC1C,IAAKg6B,GAAUjqB,KAAKpZ,EAAM+Y,MAAM,KAAK,IAAK,OAAO,GAGrD,OAAO,EAGX8qB,iBAAiBK,EAAeC,GAC5B,IAAK,MAAMF,KAAiBE,EAAY,CACpC,MAAMnkC,EAAQmkC,EAAWF,GACzB,GAAIr+B,KAAKm+B,aAAa/jC,GAAQ,SAC9B,MAAMgS,EAAYhS,EAAM+Y,MAAM,KAC9B,IAAK,MAAMqrB,KAAepyB,EAAW,CACjC,MAAMwiB,EAAQ4P,EAAY5P,MAAM6O,IAChC,IAAK7O,IAAUA,EAAMnrB,QAAUmrB,EAAMnrB,OAAS,EAAG,SACjD,MAAMg7B,EAAY7P,EAAM,GAAGzb,MAAM,KAAK+H,IAAI,CAAChgB,EAAG/B,IAAMA,EAAI+B,EAAE,GAAGsM,cAAgBtM,EAAEuM,MAAM,GAAKvM,GAAG0E,KAAK,IAClG2+B,EAAWF,IAAmB,IAAGC,KAAiBG,MAK9DP,mBAAmBI,EAAeC,GAC9B,IAAK,MAAMF,KAAiBE,EAAY,CACpC,MAAMnkC,EAAQmkC,EAAWF,GACzB,GAAIr+B,KAAKm+B,aAAa/jC,GAAQ,SAC9B,IAAIskC,EAAY,GAChB,MAAMtyB,EAAYhS,EAAM+Y,MAAM,KAC9B,IAAK,MAAMqrB,KAAepyB,EAClBoyB,EAAY5wB,WAAc0wB,EAAF,OAC5BI,GAAc,IAAGF,GAErBD,EAAWF,GAAiBK,EAAUnrB,QAI9CwqB,iBAAiBt1B,GACb,KAAMA,aAAmBqY,SAAU,OACnC,MAAMzD,EAAU5U,EAAQ2D,UACxB,IAAK,IAAI5S,EAAI,EAAGmlC,EAAOthB,EAAQ5Z,OAAQjK,EAAImlC,EAAMnlC,IAAK,CAClD,IAAKikC,GAAUjqB,KAAK6J,EAAQ7jB,IAAK,SACjC,MACMolC,EADQvhB,EAAQ7jB,GAAGo1B,MAAM6O,IAAW,GACnBtqB,MAAM,KAAK+H,IAAI,CAAChgB,EAAG/B,IAAMA,EAAI+B,EAAE,GAAGsM,cAAgBtM,EAAEuM,MAAM,GAAKvM,GAAG0E,KAAK,IAC9F6I,EAAQ2D,UAAUC,IAAK,MAAsBuyB,GAEjD,IAAK,MAAMhvB,KAASnH,EAAQ0E,SAAUnN,KAAK+9B,iBAAiBnuB,GAGhEiuB,cAAcp1B,GACV,KAAMA,aAAmBqY,SAAU,OAC/BrY,EAAQ0E,UAAY1E,EAAQ0E,SAAS1J,QAAQzD,KAAK69B,cAAcp1B,EAAQ0E,SAAS,IACjF1E,EAAQyV,oBAAoBle,KAAK69B,cAAcp1B,EAAQyV,oBAC3D,MAAMb,EAAU5U,EAAQ2D,UAClByyB,EAAW,GACjB,IAAK,IAAIrlC,EAAI,EAAGA,EAAI6jB,EAAQ5Z,OAAQjK,IAC5B6jB,EAAQ7jB,GAAGoU,WAAY,QAAwBixB,EAAS/gC,KAAKuf,EAAQ7jB,IAE7EiP,EAAQ2D,UAAUZ,UAAUqzB,GAGhCb,kBACI,MAAM3zB,EAAWy0B,aAAa/jC,UAAUsP,SACxCy0B,aAAa/jC,UAAUsP,SAAW,SAAS00B,GAEvC,OAAOrlB,QAAQC,MAAMtP,EAAUrK,KAAM,CAAC++B,EAAM5rB,MAAM,KAAK,MAI3D,MAAM9G,EAAMyyB,aAAa/jC,UAAUsR,IACnCyyB,aAAa/jC,UAAUsR,IAAM,YAAY2yB,GACrC,IAAK,IAAI3kC,EAAI,EAAGA,EAAI2kC,EAAOv7B,OAAQpJ,IAC/B2kC,EAAO3kC,GAAK2kC,EAAO3kC,GAAG8Y,MAAM,KAAK,GAErC,OAAOuG,QAAQC,MAAMtN,EAAKrM,KAAMg/B,IAGpC,MAAMxzB,EAASszB,aAAa/jC,UAAUyQ,OACtCszB,aAAa/jC,UAAUyQ,OAAS,YAAYwzB,GACxC,IAAK,IAAI3kC,EAAI,EAAGA,EAAI2kC,EAAOv7B,OAAQpJ,IAC/B2kC,EAAO3kC,GAAK2kC,EAAO3kC,GAAG8Y,MAAM,KAAK,GAErC,OAAOuG,QAAQC,MAAMnO,EAAQxL,KAAMg/B,MChIhC,OAAI,MACfj/B,cACIC,KAAKi/B,cAAgBj/B,KAAKi/B,cAActkC,KAAKqF,MAC7CA,KAAKk/B,qBAAuBl/B,KAAKk/B,qBAAqBvkC,KAAKqF,MAG/DiE,QACIjE,KAAKm/B,qBACDtiC,EAAe,cAAcmD,KAAKo/B,oBAG1Cv6B,OACI7E,KAAKq/B,oBACLr/B,KAAKs/B,mBAGTH,qBACIn/B,KAAKq/B,oBACL32B,SAASY,iBAAiB,UAAWtJ,KAAKi/B,eAG9CI,oBACI32B,SAASiX,oBAAoB,UAAW3f,KAAKi/B,eAGjDG,oBACIp/B,KAAKs/B,mBACL52B,SAASY,iBAAiB,cAAetJ,KAAKk/B,sBAGlDI,mBACI52B,SAASiX,oBAAoB,cAAe3f,KAAKk/B,sBAGrDD,cAAcl4B,GACV,GAAgB,MAAZA,EAAE4wB,OAA4B,KAAX5wB,EAAE4wB,MAAc,CACnCv2B,QAAQoE,IAAI,iCAAkC,cAAe,mCAAoC,aAAc,IAC/G,SACAuB,EAAE+I,iBACF/I,EAAEgJ,4BAIVmvB,qBAAqBn4B,GACjB,IACIA,EAAEslB,kBACF,MAAMhQ,EAAWrc,KAAKu/B,YAAYx4B,EAAE0Y,QAEpC,IACI+f,EACAC,GACA,CACA30B,UAAU9Q,IAAK+M,GAAMA,EAAE8B,OAA4B,iBAAZ9B,EAAE8B,OAAsB9B,EAAE+B,uBAAuB,GACxFgC,UAAU9Q,IAAK+M,GAAMA,EAAE24B,MAAM,IAuEjCt7B,YApEA,WACI,IAAIq7B,IAAeD,EAAW32B,MAAM,OAAOzH,QAAQoE,IAAIi6B,EAAYD,EAAW32B,OAE9E,IAAI82B,EAAK5e,GAAItE,MAAM,IAAInb,GAAMuJ,SAAS40B,EAAWC,OACjD,IAAKC,EAAI,CACL,MAAMh0B,EAAYoV,GAAItE,MAAM,iBAAiBnb,GAAMuJ,SAAS20B,EAAWx0B,iBACjE40B,EAAS7e,GAAIpY,cAAe,eAAc62B,EAAW32B,WAC3D82B,EAAK5e,GAAIpY,cAAe,eAAc82B,EAAWC,QAAQD,EAAWI,iBAAiBJ,EAAWK,yDAChGF,EAAOv2B,OAAOs2B,GACdh0B,EAAUtC,OAAOu2B,GACjBA,EAAO33B,MAAMiD,IAAMnE,EAAEg5B,QAAU,KAC/BH,EAAO33B,MAAMoD,KAAOtE,EAAEi5B,QAAU,KAChCJ,EAAOK,aAAa,OAAQ,QAC5BL,EAAOK,aAAa,WAAY,MAChCL,EAAOzjC,GAAK,2BACZyjC,EAAOK,aAAa,aAAc,yBAElC,MAAMC,EAAkBp1B,UAAU9Q,IAAK+M,GAAMA,EAAE4rB,cAAc,GACvDA,EAAe5R,GAAIpY,cAAe,eAAcu3B,EAAgBvN,gBAAgBuN,EAAgBtN,kBAAkBsN,EAAgBrN,8BAClI1I,EAAWpJ,GAAIpY,cAAe,eAAcmC,UAAU9Q,IAAI+M,GAAKA,EAAEojB,UAAU,GAAGA,YAAYsV,EAAWtV,oBAC3GwI,EAAatpB,OAAO8gB,GACpBwV,EAAGt2B,OAAOspB,GAEV,MAAMwN,EAAW,SAASp5B,GAClBA,EAAEq5B,SAAyB,KAAdr5B,EAAEq5B,UACnBR,EAAOp0B,SACP9C,SAASiX,oBAAoB,QAASwgB,GACtCz3B,SAASiX,oBAAoB,cAAewgB,GAC5Cz3B,SAASiX,oBAAoB,QAASwgB,KAE1Cz3B,SAASY,iBAAiB,QAAS62B,GACnCz3B,SAASY,iBAAiB,cAAe62B,GACzCz3B,SAASY,iBAAiB,QAAS62B,GAEvC,MAAMP,EAASD,EAAGlhB,cAEZ0L,EAAWwV,EAAGxwB,WAAW,GAAGA,WAAW,GACvCkxB,EAAMtf,GAAIpY,cAAe,4BAIzB23B,EAAMvf,GAAIpY,cAAe,eAAc82B,EAAWc,QAAQd,EAAWe,kBAAkBf,EAAWgB,sEAexG,GAdAH,EAAIj3B,OAAO0X,GAAIpY,cAAe,eAAc82B,EAAWl3B,+BACvD+3B,EAAIh3B,iBAAiB,QAAS,KAC1BuD,GAAK6zB,aAAaC,KAAKtkB,GACvBujB,EAAO33B,MAAMsJ,QAAU,SAE3B+uB,EAAIh3B,iBAAiB,YAAcvC,IAC/B,IAAI4Z,EAAWI,GAAI6f,SAAS,sBAAsBt/B,GAAMuJ,SAAS40B,EAAWoB,UAC5ElgB,GAAYA,EAASjX,QAAQgJ,GAAQA,EAAKtG,UAAUZ,OAAOi0B,EAAWoB,UACtEP,EAAIl0B,UAAUC,IAAIozB,EAAWoB,WAEjCP,EAAIh3B,iBAAiB,WAAavC,IAC9Bu5B,EAAIl0B,UAAUZ,OAAOi0B,EAAWoB,WAEpCR,EAAIh3B,OAAOi3B,GACRnW,EAAShb,WAAW1L,OAAO,CAC1B,MAAMq9B,EAAY/f,GAAIpY,cAAe,gCAA+B82B,EAAWqB,qBAC/E3W,EAAS9gB,OAAOy3B,GAEpB3W,EAAS9gB,OAAOg3B,GACbT,EAAO3gB,aAAe2gB,EAAOmB,eAC5B3/B,QAAQoE,IAAI,eAAeo6B,EAAO33B,MAAMiD,KACxC00B,EAAO33B,MAAMiD,IAAO00B,EAAO33B,MAAMiD,IAAMm1B,EAAIphB,aAAgB,KAC3D7d,QAAQoE,IAAI,cAAco6B,EAAO33B,MAAMiD,QAI5B,GACtB,MAAMnE,GACH3F,QAAQC,MAAM0F,IAItBw4B,YAAY92B,GACR,GAAIA,EAAQtM,GAAI,MAAQ,IAAGsM,EAAQtM,GAsBnC,OAjBA,SAAkB6tB,GAEd,IADA,IAAIgX,EAAQ,GACLhX,EAAGva,YAAW,CACnB,GAAIua,EAAG7tB,GAAG,CACR6kC,EAAMC,QAAQ,IAAIjX,EAAG7tB,IACrB,MAEA,GAAI6tB,GAAIA,EAAGkX,cAAcvb,gBAAiBqb,EAAMC,QAAQjX,EAAGna,QAAQrH,cAAcqB,MAAMC,KAAKkgB,EAAG5d,UAAU+0B,WAAWjmB,IAAInU,GAAK,IAAIA,GAAGnH,KAAK,SACrI,CACF,IAAK,IAAIpG,EAAE,EAAEuN,EAAEijB,EAAGjjB,EAAEuX,uBAAuBvX,EAAEA,EAAEuX,uBAAuB9kB,KACtEwnC,EAAMC,QAAQjX,EAAGna,QAAQrH,eAAwC,iBAAjBwhB,EAAGphB,WAA0BohB,EAAGphB,WAAc,IAAIuK,MAAM,KAAKlV,OAAO8I,KAAOA,GAAGmU,IAAInU,GAAK,IAAIA,GAAGnH,KAAK,IAAI,cAAcpG,EAAE,KAEzKwwB,EAAGA,EAAGva,WAGV,OAAOuxB,EAAMphC,KAAK,OAEfkG,CAAS2C,KC5JxB,MAAMiE,GAAQG,GAAKH,MAEJ,MAAM00B,WAAe10B,GAAMC,UACtC5M,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CAAC+Q,QAASrhC,KAAK4M,MAAMy0B,SAClCrhC,KAAKw3B,SAAWx3B,KAAKw3B,SAAS78B,KAAKqF,MACnCA,KAAKshC,OAAS,iBAACviC,UAAU+V,IAAIysB,WAAWC,OAAOJ,OAAjC,CAAwC5J,SAAUx3B,KAAKw3B,SAAUp9B,MAAO4F,KAAKswB,MAAM+Q,UAGrG7J,SAASp9B,GACD4F,KAAK4M,MAAMxE,WACfpI,KAAK4M,MAAM4qB,SAASp9B,GACpB4F,KAAKoyB,SAAS,CAACiP,QAASjnC,KAG5B8S,SACI,OAAOlN,KAAKshC,QChBpB,IAAIG,GAAa,GACjB,SAASC,GAAahoC,GAClB,IAAIkP,EAAY64B,GAAWzjC,KAAK+I,GAAKA,EAAE6G,WAAWlU,EAAK,MACvD,OAAGkP,IACHA,EAAYkC,UAAU9Q,IAAI+M,GAAKA,EAAErN,IAAO,GAAGA,GAC3C+nC,GAAW3jC,KAAK8K,GACTA,GAGI,MAAM+4B,WAAmB90B,GAAKsiB,eAEzCpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKw3B,SAAWx3B,KAAKw3B,SAAS78B,KAAKqF,MAGvCw3B,WACIx3B,KAAK4M,MAAMy0B,SAAWrhC,KAAK4M,MAAMy0B,QACjCrhC,KAAK4M,MAAM4qB,SAASx3B,KAAK4M,MAAMzQ,GAAI6D,KAAK4M,MAAMy0B,SAGlDn0B,SACI,IAAI,KAACnF,EAAD,KAAO3L,GAAQ4D,KAAK4M,MAAM3M,KAU9B,OATIwhC,GAAWzjC,KAAK+I,GAAKA,EAAE6G,WAAW,WAClC6zB,GAAW3jC,KAAKgN,UAAU9Q,IAAI+M,GAAKA,EAAE66B,OAAU76B,EAAE4E,YAAc5E,EAAE86B,mBAAoB,GAAGD,MAEzF5hC,KAAK4M,MAAM3M,KAAKxD,eACfL,EAAO,CACHA,EACAsQ,MAAM/D,cAAc,MAAO,CAACC,UAAW84B,GAAa,SAAU,oBAG/D70B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,0FAC/CiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,6EACxCiE,GAAK6D,MAAM/H,cAAc,KAAM,CAACjO,IAAK,QAASkO,UAAW,4DAA6Db,GACtH8E,GAAK6D,MAAM/H,cAAcy4B,GAAQ,CAAC1mC,IAAK,SAAU88B,SAAUx3B,KAAKw3B,SAAU6J,QAASrhC,KAAK4M,MAAMy0B,WAElGx0B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,8CAA+CX,MAAO,CAAC+pB,KAAM,aAAc51B,KCxCnI,ICOI0lC,GACAC,GACAC,GDTAC,GAAen3B,UAAU9Q,IAAI+M,GAAKA,EAAEm7B,aAAa,GAEtC,MAAMC,WAAkBz1B,MAAMC,UACzCO,SAEI,OADI+0B,KAAaA,GAAen3B,UAAU9Q,IAAI+M,GAAKA,EAAEm7B,aAAa,IAC3D,2BAAKt5B,UAAWq5B,GAAaC,eCK7B,MAAME,WAA0Bv1B,GAAKsiB,eAEhDpvB,YAAY6M,GACRnK,MAAMmK,GAEN5M,KAAKswB,MAAQ,CACTjvB,OAAO,GAIfghC,oBACI,MAAM,MAACtmC,EAAD,SAAQG,EAAR,OAAkBi0B,GAAUnwB,KAAK4M,MACjC01B,EAAkBnS,EAAStjB,GAAK6D,MAAM/H,cAAc,SAAU,CAACjO,IAAK,eAAgBkO,UAAW,WAAYgJ,QAASue,EAAOve,SAAUue,EAAOp0B,OAAS,KAC3J,MAAO,CAAC8Q,GAAK6D,MAAM/H,cAAcqvB,GAAe,CAACjwB,KAAMhM,IAC/CumC,EACApmC,EAASgf,IAAIsK,GACF3Y,GAAK6D,MAAM/H,cAAcy4B,GAAQ,CAACjlC,GAAIqpB,EAAQrpB,GAAIzB,IAAK8qB,EAAQrpB,GAAI8D,KAAMulB,EAAS6b,QAASxkC,EAAe2oB,EAAQrpB,IAAKq7B,SAAU,CAACr7B,EAAIklC,KACzIrhC,KAAK4M,MAAM4qB,SAASr7B,EAAIklC,QAK5CkB,kBAAkBphC,EAAKqhC,GACnBphC,QAAQoE,IAAIrE,EAAKqhC,GACjBxiC,KAAKoyB,SAAS,CACV/wB,OAAO,IAIf6L,SACI,GAAGlN,KAAKswB,MAAMjvB,MACV,IACI,OAAOrB,KAAKqiC,oBACf,MAAMt7B,GAEH,OADA3F,QAAQC,MAAM0F,GACP,UAGX,IACQ+6B,KAAWA,GAAaj1B,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE07B,cACxDV,KAAWA,GAAal1B,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAqC,eAA1B6I,EAAE7I,QAAQY,cAC7EkjC,KAAeA,GAAiBn1B,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE66B,OAAU76B,EAAE4E,YAAc5E,EAAE86B,oBAEhG,IAAI10B,EAAW,GAuBf,OAtBGnN,KAAK4M,MAAM/Q,aACVsR,EAASrP,KAAK,oBAACgkC,GAAWY,SAAZ,CAAqB1mC,KAAK,cAAc4uB,YAAY,GAC7D5qB,KAAK4M,MAAM/Q,aACQ,oBAACsmC,GAAD,OAE5Bh1B,EAASrP,QAAQkC,KAAK4M,MAAM1Q,SAASgf,IAAIsK,IACrC,IAAIppB,EAAO,CACPopB,EAAQzd,MAKZ,OAHGyd,EAAQ/oB,cACPL,EAAK0B,KAAK,2BAAK8K,UAAWo5B,GAAeJ,MAA/B,mBAEP,oBAACG,GAAW7jC,QAAZ,CAAoBs5B,SAAW2D,IAClCn7B,KAAK4M,MAAM4qB,SAAShS,EAAQrpB,GAAIg/B,EAAG1b,OAAO4hB,SAC1CrhC,KAAK06B,eACNhgC,IAAK8qB,EAAQrpB,GAAI/B,MAAOyC,EAAe2oB,EAAQrpB,IAAKyM,UAAWmzB,mBAAmB7hB,IAAI,CACrFge,aAAc,SACd9vB,UAAU,EAAOu6B,YAAY,EAC7B1oB,KAAM8nB,GAAW7jC,QAAQ0tB,MAAMgX,QAASzhB,MAAO4gB,GAAW7jC,QAAQ2kC,OAAOD,QAASE,KAAMtd,EAAQppB,MAC/FA,MAGF,oBAAC0lC,GAAWW,YAAZ,CAAwBhX,IAAI,KAAK1vB,MAAOiE,KAAK4M,MAAM7Q,OACrDoR,GAER,MAAMpG,GAOH,OANA3F,QAAQC,MAAM0F,GACdg8B,aAAa,KACT/iC,KAAKoyB,SAAS,CACV/wB,OAAO,MAGR,OCjFR,MAAM2hC,WAAmCn2B,GAAKsiB,eAEzDpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOlN,KAAK4M,MAAMq2B,SAAS/nB,IAAI,CAACsS,EAASr0B,IAC9B,CACG,IAANA,EAAU0T,GAAK6D,MAAM/H,cAAcw5B,GAAW,IAAM,KACpDt1B,GAAK6D,MAAM/H,cAAcu6B,GAAerpC,OAAOoH,OAAO,GAAIusB,EAAS,CAACgK,SAAUx3B,KAAK4M,MAAM4qB,eCb1F,MAAM2L,WAAqBt2B,GAAKsiB,eAC3CpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAK4R,QAAU5R,KAAK4R,QAAQjX,KAAKqF,MACjCA,KAAKqwB,kBAGTA,kBACIrwB,KAAKswB,MAAQ,CACT+Q,QAASrhC,KAAK4M,MAAMy0B,UAAW,GAIvCn0B,SACI,OAAOL,GAAK6D,MAAM/H,cACd,KACA,KACAkE,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,YAAYkC,UAAU9Q,IAAI+M,GAAKA,EAAEq8B,iBAAiB,GAAGC,SAAUzxB,QAAS5R,KAAK4R,SACzF/E,GAAK6D,MAAM/H,cACP,MACA,CAACC,UAAW,kBAAkBkC,UAAU9Q,IAAI+M,GAAKA,EAAEu8B,eAAe,GAAGA,eACrEz2B,GAAK6D,MAAM/H,cAAc,QAAS,CAACC,UAAWkC,UAAU9Q,IAAI+M,GAAKA,EAAEq8B,iBAAiB,GAAGA,gBAAiB/B,QAASrhC,KAAKswB,MAAM+Q,QAAS7J,SAAU,OAAUx7B,KAAM,aAC/J6Q,GAAK6D,MAAM/H,cAAc,OAAQ,OAErCkE,GAAK6D,MAAM/H,cACP,OACA,KACA3I,KAAK4M,MAAM7E,QAM3B6J,UACI5R,KAAK4M,MAAM4qB,SAASx3B,KAAK4M,MAAMzQ,IAAK6D,KAAKswB,MAAM+Q,SAC/CrhC,KAAKoyB,SAAS,CACViP,SAAUrhC,KAAKswB,MAAM+Q,WC/BlB,MAAMkC,WAA8B12B,GAAKsiB,eAEpDpvB,YAAY6M,GACRnK,MAAMmK,GACO5M,KACR4R,QADQ5R,KACO4R,QAAQjX,KADfqF,WAERwjC,UAFQxjC,KAESwjC,UAAU7oC,KAFnBqF,WAGRyjC,QAHQzjC,KAGOyjC,QAAQ9oC,KAHfqF,WAIRw3B,SAJQx3B,KAIQw3B,SAAS78B,KAJjBqF,MAOjBm0B,oBACIpT,GAAI2I,SAAS3I,GAAItE,MAAM,cAAe,sBACtC5P,GAAKkV,gBAAiB,EAEtB/hB,KAAK0jC,OAASC,IAAIz9B,KAAK,gCACvBlG,KAAK0jC,OAAOE,SAAS,qBACrB5jC,KAAK0jC,OAAOG,QAAQC,QAAQ,gBAC5B9jC,KAAK0jC,OAAOK,oBAAmB,GAC/B/jC,KAAK0jC,OAAOM,YAAY,IACxBhkC,KAAK0jC,OAAOl/B,GAAG,SAAU,KAChB3H,EAAe,eACpBmD,KAAKyjC,UACLzjC,KAAKwjC,eAKbv2B,uBACI8T,GAAImJ,YAAYnJ,GAAItE,MAAM,cAAe,sBACzC5P,GAAKkV,gBAAiB,EACtB/hB,KAAK0jC,OAAOO,UAGhBC,kBACI,MAAMC,EAAYnkC,KAAK+0B,KAAK2O,OAAOtpC,MAAM+Y,MAAM,MAAM1P,OACjD0gC,GAAankC,KAAK4M,MAAMw3B,QAC5BpkC,KAAK+0B,KAAKqP,MAAM14B,YAAc7B,MAAMC,KAAK,IAAID,MAAMs6B,GAAY,CAACtoB,EAAG1iB,IAAMA,EAAI,GAAGyG,KAAK,OAAS,IAC9FI,KAAK4M,MAAMw3B,MAAQD,GAGvB,cACI,MAAO,CACHE,aAAa,EACb/pC,KAAM,MACNgqC,WAAY,EACZnjB,MAAO,WACPojB,eAAgB,UAIxB,UACI,MAAMC,EAAQlkC,EAAU8B,UAAU,eAClC,IAAIqiC,EAAO,GAIX,OAHID,GAAmB,KAAVA,IACTC,EAAOj2B,OAAO1E,KAAK06B,EAAO,UAAUxxB,SAAS,SAE1CyxB,EAGX,WACI,MAAMC,EAAQ3jB,GAAItE,MAAM,kCACxB,OAAKioB,IACI1kC,KAAK2kC,aACH3kC,KAAK4kC,aADmB,MAMvCD,aACI,MAAMplC,EAAMwhB,GAAItE,MAAM,UAAUnb,GAAMuJ,SAASC,UAAU9Q,IAAI+M,GAAKA,EAAExH,KAAOwH,EAAEmzB,QAAQ,GAAG36B,MACxF,QAAKA,IACLwhB,GAAI8jB,YAAY9jB,GAAIpY,cAAe,4CAA4CpJ,IACxE,GAGX2N,SACI,MAAMqM,EAAOvZ,KACb,OAAO6M,GAAK6D,MAAM/H,cACd,MACA,CAACC,UAAW,yBAA0BzM,GAAI,8BAC1C0Q,GAAK6D,MAAM/H,cACP,MACA,CAACxM,GAAI,0BACL0Q,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,kBACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAI,+BAAgCyM,UAAW,SAAU8oB,IAAK,UAAWnY,EAAKW,MAEnHrN,GAAK6D,MAAM/H,cACP,MACA,CAACxM,GAAI,gCACL0Q,GAAK6D,MAAM/H,cACP,KACA,CAACC,UAAW,kBACZiE,GAAK6D,MAAM/H,cAAcm8B,GAAU,CAAC3oC,GAAI,cAAe4L,KAAM,cAAeyvB,SAAUje,EAAKie,SAAU6J,QAASxkC,EAAe,gBAEjIgQ,GAAK6D,MAAM/H,cACP,MACA,CAACxM,GAAI,uCACL0Q,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,cAAeC,YAAa,qBAAsBp8B,UAAW,kBAAmBgJ,QAAS,KACxG2H,EAAK3H,QAAQ,YAErB,UAEJ/E,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,IAAKE,WAAY,oBAAqBD,YAAa,qBAAsBp8B,UAAW,kBAAmBgJ,QAAS,KAC/H2H,EAAK3H,QAAQ,UAErB,QAEJ/E,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,cAAeE,WAAY,qBAAsBr8B,UAAW,kBAAmBgJ,QAAS,KACvG2H,EAAK3H,QAAQ,YAErB,UAEJ/E,GAAK6D,MAAM/H,cACP,OACA,CAACV,MAAO,CAACgvB,SAAU,OAAQK,WAAY,QACvC,0CAQxBE,SAASr7B,EAAIklC,GACT,OAAQllC,GACJ,IAAK,cACDU,EAAe,aAAewkC,EAC9B/T,GAAS4X,gBAKrBtzB,QAAQzV,GACJ,MAAMod,EAAOvZ,KACb,OAAQ7D,GACJ,IAAK,SACG4kB,GAAItE,MAAM,qBAAqBlD,EAAK3M,MAAMu4B,SAC9Ct4B,GAAKC,SAASs4B,uBAAuB7rB,EAAK8rB,MAC1C9rB,EAAK8rB,KAAK75B,SACV,MACJ,IAAK,SACD+N,EAAKiqB,YACL,MACJ,IAAK,OACDjqB,EAAKkqB,WAKjBD,YACIziB,GAAIY,YAAY,aAChBZ,GAAIK,SAAS,YAAaphB,KAAK0jC,OAAOG,QAAQyB,YAGlD7B,UACInjC,EAAUY,UAAU,cAAesN,OAAO1E,KAAK9J,KAAK0jC,OAAOG,QAAQyB,WAAY,SAAStyB,SAAS,YChK1F,MAAMuyB,WAAsB14B,GAAKsiB,eAE5CpvB,YAAY6M,GACRnK,MAAMmK,GACO5M,KACR4M,MAAMw3B,MAAQ,EADNpkC,KAERqwB,kBAFQrwB,KAGRmlC,OAHQnlC,KAGMmlC,OAAOxqC,KAHbqF,WAIRwlC,eAAiB34B,GAAK6D,MAAM/H,cAAc46B,GAAuB,CAAC4B,OAJ1DnlC,KAIuEmlC,SAJvEnlC,KAKR4R,QALQ5R,KAKO4R,QAAQjX,KALfqF,WAMRwjC,UANQxjC,KAMSwjC,UAAU7oC,KANnBqF,WAORyjC,QAPQzjC,KAOOyjC,QAAQ9oC,KAPfqF,WAQRylC,OARQzlC,KAQMylC,OAAO9qC,KARbqF,MAWjBqwB,kBACIrwB,KAAKswB,MAAQ,CACToV,SAAU1lC,KAAK4M,MAAM84B,UAAY74B,GAAKkV,gBAI9CoS,oBAEIn0B,KAAK0jC,OAASC,IAAIz9B,KAAK,uBACvBlG,KAAK0jC,OAAOE,SAAS,qBACrB5jC,KAAK0jC,OAAOG,QAAQC,QAAQ,gBAC5B9jC,KAAK0jC,OAAOK,oBAAmB,GAC/B/jC,KAAK0jC,OAAOM,YAAY,IACxBhkC,KAAK0jC,OAAOl/B,GAAG,SAAU,KAChB3H,EAAe,eACpBmD,KAAKyjC,UACLzjC,KAAKwjC,eAIbv2B,uBACIjN,KAAK0jC,OAAOO,UAGhB0B,mBAAmBC,EAAWC,GAC1B,MAAMtsB,EAAOvZ,KACT6lC,EAAUH,WAAansB,EAAK+W,MAAMoV,UAClC74B,GAAKC,SAASs4B,uBAAuB7rB,EAAKqrB,cAIlDkB,cAGA,cACI,MAAO,CACHzB,aAAa,EACb/pC,KAAM,MACNgqC,WAAY,EACZnjB,MAAO,WACPojB,eAAgB,UAIxB,UACI,MAAMC,EAAQlkC,EAAU8B,UAAU,eAClC,IAAIqiC,EAAO,GAIX,OAHID,GAAmB,KAAVA,IACTC,EAAOj2B,OAAO1E,KAAK06B,EAAO,UAAUxxB,SAAS,SAE1CyxB,EAGXP,kBACI,MAAMC,EAAYnkC,KAAK+0B,KAAK2O,OAAOtpC,MAAM+Y,MAAM,MAAM1P,OACjD0gC,GAAankC,KAAK4M,MAAMw3B,QAC5BpkC,KAAK+0B,KAAKqP,MAAM14B,YAAc7B,MAAMC,KAAK,IAAID,MAAMs6B,GAAY,CAACtoB,EAAG1iB,IAAMA,EAAI,GAAGyG,KAAK,OAAS,IAC9FI,KAAK4M,MAAMw3B,MAAQD,GAGvBj3B,SACI,MAAMqM,EAAOvZ,MAEP,SAAC0lC,GAAYnsB,EAAK+W,MACxB,MAAO,CACHoV,GAAY74B,GAAK6D,MAAM/H,cACnB,MACA,CAACxM,GAAI,mBACL0Q,GAAK6D,MAAM/H,cAAcqvB,GAAe,CAACjwB,KAAM,sBAC/C8E,GAAK6D,MAAM/H,cACP,KACA,KACA,mBAEJkE,GAAK6D,MAAM/H,cACP,SACA,CAACC,UAAW,kBAAmBgJ,QAAS,KAChC2H,EAAK4rB,WAEb,YAGPO,GAAY74B,GAAK6D,MAAM/H,cACpB,MACA,KACAkE,GAAK6D,MAAM/H,cAAcqvB,GAAe,CAACjwB,KAAM,sBAC/C8E,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,kBACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAI,sBAAuByM,UAAW,SAAU8oB,IAAK,UAAWnY,EAAKW,MAE1GrN,GAAK6D,MAAM/H,cACP,MACA,CAACxM,GAAI,gCACL0Q,GAAK6D,MAAM/H,cACP,KACA,CAACC,UAAW,kBACZiE,GAAK6D,MAAM/H,cAAcm8B,GAAU,CAAC3oC,GAAI,cAAe4L,KAAM,cAAeyvB,SAAUx3B,KAAKw3B,SAAU6J,QAASxkC,EAAe,gBAEjIgQ,GAAK6D,MAAM/H,cACP,MACA,CAACxM,GAAI,uCACL0Q,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,cAAeC,YAAa,qBAAsBp8B,UAAW,kBAAmBgJ,QAAS,KACxG2H,EAAK3H,QAAQ,YAErB,UAEJ/E,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,IAAKE,WAAY,oBAAqBD,YAAa,qBAAsBp8B,UAAW,kBAAmBgJ,QAAS,KAC/H2H,EAAK3H,QAAQ,UAErB,QAEJ/E,GAAK6D,MAAM/H,cACP,SACA,CAACV,MAAO,CAAC88B,aAAc,cAAeE,WAAY,qBAAsBr8B,UAAW,kBAAmBgJ,QAAS,KACvG2H,EAAK3H,QAAQ,YAErB,UAEJ/E,GAAK6D,MAAM/H,cACP,OACA,CAACV,MAAO,CAACgvB,SAAU,OAAQK,WAAY,QACvC,sCAEJzqB,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,aACxC,SACAiE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW,UAAW,QACxD,IACAiE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW,UAAW,KACxD,iEAQxBgJ,QAAQm0B,GACJ,MAAMxsB,EAAOvZ,KACb,OAAQ+lC,GACJ,IAAK,SACDxsB,EAAKiqB,YACL,MACJ,IAAK,OACDjqB,EAAKkqB,UACL,MACJ,IAAK,SACDlqB,EAAKksB,UAKjBjO,SAASr7B,EAAIklC,GACT,OAAQllC,GACJ,IAAK,cACDU,EAAe,aAAewkC,EAC9B/T,GAAS4X,gBAKrB1B,YACIziB,GAAIY,YAAY,aAChBZ,GAAIK,SAAS,YAAaphB,KAAK0jC,OAAOG,QAAQyB,YAGlD7B,UACInjC,EAAUY,UAAU,cAAesN,OAAO1E,KAAK9J,KAAK0jC,OAAOG,QAAQyB,WAAY,SAAStyB,SAAS,WAGrGyyB,SACiBzlC,KACRoyB,SAAS,CACVsT,UAAU,IAEd,MAAMM,EAJOhmC,KAIM4kC,aACdoB,EAILn5B,GAAKC,SAASI,OATDlN,KASawlC,eAAgBQ,GAHtC5kC,QAAQoE,IAAI,+BAMpB,mBACI,MAAMk/B,EAAQ3jB,GAAItE,MAAM,kCACxB,OAAKioB,IACI1kC,KAAKimC,qBACHjmC,KAAK4kC,aAD2B,MAM/CqB,qBACI,MAAM1mC,EAAMwhB,GAAItE,MAAM,UAAUnb,GAAMuJ,SAASC,UAAU9Q,IAAI+M,GAAKA,EAAExH,KAAOwH,EAAEmzB,QAAQ,GAAG36B,MACxF,QAAKA,IACLwhB,GAAI8jB,YAAY9jB,GAAIpY,cAAe,4CAA4CpJ,IACxE,GAGX4lC,SACiBnlC,KACRoyB,SAAS,CACVsT,UAAU,KCpOP,MAAMQ,WAAwBr5B,GAAKsiB,eAC9CpvB,YAAY6M,GACVnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CAAC6V,UAAU,GAG1B5D,oBACEviC,KAAKoyB,SAAS,CAAC+T,UAAU,IAG3Bj5B,SACE,OAAIlN,KAAKswB,MAAM6V,SAAiBt5B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,eAAgB,mBACrF5I,KAAK4M,MAAMO,UAIxB,MAAMmmB,GAAiB4S,GAAgBnrC,UAAUmS,OACjDrT,OAAOC,eAAeosC,GAAgBnrC,UAAW,SAAU,CACvDhB,YAAY,EACZw5B,cAAc,EACdne,IAAK,WAAYhU,QAAQiZ,KAAK,wGAC9BrgB,IAAK,IAAMs5B,KCrBA,MAAM8S,WAA0Bv5B,GAAKsiB,eAChDpvB,YAAY6M,GACRnK,MAAMmK,GAGV,yBAA0B,MAAO,gBAEjCM,SAEI,IAAInR,EAAQiE,KAAK4M,MAAM7Q,MAAQ8Q,GAAK6D,MAAM/H,cAAc,KAAM,CAACC,UAAW,kDAAmD5I,KAAK4M,MAAM7Q,OAAS,KACjJ,MAAO,CACHA,EACAiE,KAAK4M,MAAMO,WCZR,MAAMk5B,WAAuBx5B,GAAKsiB,eAC7CpvB,YAAY6M,GACRnK,MAAMmK,GAGVM,SACI,OAAOL,GAAK6D,MAAM/H,cAAc,MAAO,CAC/BymB,MAAO,6BACPre,QAAS,YACTI,KAAM,UACNvI,UAAW,aAAe5I,KAAK4M,MAAMhE,UACrCgJ,QAAS5R,KAAK4M,MAAMgF,QACpB3J,MAAO,CAAC2I,MAAO5Q,KAAK4M,MAAMqN,MAAQ,OAAQpJ,OAAQ7Q,KAAK4M,MAAMqN,MAAQ,SAEzEpN,GAAK6D,MAAM/H,cAAc,OAAQ,CAAClP,EAAG,+MACrCoT,GAAK6D,MAAM/H,cAAc,OAAQ,CAACwI,KAAM,OAAQ1X,EAAG,oBCf/D,MAAMiT,GAAQG,GAAKH,MAEJ,MAAM45B,WAAa55B,GAAMC,UACpCO,SACI,MAAM+M,EAAOja,KAAK4M,MAAMqN,MAAQ,OAChC,OAAO,wBAAKrR,UAAW5I,KAAK4M,MAAMhE,WAAa,GAAImI,QAAQ,YAAYI,KAAK,qBAAqBlJ,MAAO,CAAC2I,MAAOqJ,EAAMpJ,OAAQoJ,GAAOrI,QAAS5R,KAAK4M,MAAMgF,SACjJ,yBAAMnY,EAAE,0JACR,yBAAMA,EAAE,gBAAgB0X,KAAK,WCP7C,MAAMzE,GAAQG,GAAKH,MAEJ,MAAM65B,WAAe75B,GAAMC,UACtCO,SACI,MAAM+M,EAAOja,KAAK4M,MAAMqN,MAAQ,OAChC,OAAO,wBAAKrR,UAAW5I,KAAK4M,MAAMhE,WAAa,GAAIuI,KAAK,qBAAqBJ,QAAQ,YAAY9I,MAAO,CAAC2I,MAAOqJ,EAAMpJ,OAAQoJ,GAAOrI,QAAS5R,KAAK4M,MAAMgF,SAC7I,yBAAMT,KAAK,OAAO1X,EAAE,oBAAmB,yBAAMA,EAAE,gNAC/C,yBAAM0X,KAAK,OAAO1X,EAAE,oBCMxC,MAAMiT,GAAQG,GAAKH,MACb85B,GAAgB35B,GAAK25B,cAEZ,MAAMC,WAAuB55B,GAAKsiB,eAE7CpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKw3B,SAAWx3B,KAAKw3B,SAAS78B,KAAKqF,MACnCA,KAAK0mC,aAAe1mC,KAAK0mC,aAAa/rC,KAAKqF,MAC3CA,KAAKqwB,kBACLrwB,KAAK2mC,YAAc3mC,KAAK4M,MAAMg6B,MAAMljC,QAA+D,mBAA9C1D,KAAK4M,MAAMg6B,MAAMljC,OAAOmjC,iBAC7E7mC,KAAK8mC,cAAgB,GAErB9mC,KAAKkG,KAAOlG,KAAKkG,KAAKvL,KAAKqF,MAC3BA,KAAK6F,OAAS7F,KAAK6F,OAAOlL,KAAKqF,MAC/BA,KAAK2E,OAAS3E,KAAK2E,OAAOhK,KAAKqF,MAGnCqwB,kBACIrwB,KAAKswB,MAAQ,CACT+Q,QAASrhC,KAAK4M,MAAM5G,QACpB9J,UAAU,EACV6qC,QAAS,EACTC,SAAS,GAIjBN,eACS1mC,KAAK2mC,aACV3mC,KAAKoyB,SAAS,CAACl2B,UAAU,IAG7B+qC,gBACIjnC,KAAKknC,SAASC,QAAQpqB,UAAY,GAClC/c,KAAKoyB,SAAS,CAACgV,cAAc,IAGjCzB,qBACS3lC,KAAKswB,MAAMp0B,WACkB,iBAAvB8D,KAAK8mC,eACZ9mC,KAAK+0B,KAAKsS,cAAcxmB,YAAY7gB,KAAK8mC,eAGxCjqC,EAAe,cACpBkmC,aAAa,KACT,MAYMplB,EAAW3d,KAAK+0B,KAAKuS,SACrB37B,EAAYgS,EAASgB,QAAQ,wCACnC,IAdiB,EAAChT,EAAWlD,KACzB,IAAIkD,EAEA,OADAvK,QAAQC,MAAM,IAAIgN,MAAO,6BAClB,EAEX,MAAMk5B,EAAO57B,EAAUupB,UACjBsS,EAAUD,EAAO57B,EAAUsT,aAC3BwoB,EAAOh/B,EAAQi/B,UACfC,EAAUF,EAAOh/B,EAAQwW,aAC/B,OAASwoB,EAAOF,GAAQI,EAAUH,GAKjCI,CAASj8B,EAAWgS,GAAW,OACpC,MAAMkqB,EAAiB9mB,GAAI+mB,OAAOnqB,GAC5BoqB,EAAkBhnB,GAAI+mB,OAAOn8B,GAC7Bq8B,EAAWr8B,EAAUupB,UACrBR,EAAWmT,EAAe38B,IAAM68B,EAAgB78B,IAAMS,EAAUupB,UAAY,GAClFnU,GAAI9E,QAAQ,CACRH,SAAU,IACVlN,OAAQ,SAASwN,GACYzQ,EAAUupB,UAA/BR,EAAWsT,EAAgCA,EAAY5rB,GAAYsY,EAAWsT,GACvDA,EAAY5rB,GAAY4rB,EAAWtT,SAO9EuT,UAAU7tC,GACN,OAAKA,EACkB,iBAATA,EAAoBA,EAAQA,EAAM4Y,WAD7B,MAIvB,wBACI,IAAMhT,KAAK8mC,cAAgB9mC,KAAK4M,MAAMg6B,MAAMljC,OAAOmjC,mBACnD,MAAO1lC,GAAOG,GAAMH,IAAI,UAAW,oCAAsCnB,KAAKtG,KAAO,IAAKyH,GAE1F,OAAO0L,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,qDAAsD8oB,IAAK,YACtG7kB,GAAK6D,MAAM/H,cAAc,MAAO,CAACV,MAAO,CAAC,MAAS,QAAS,OAAU,WAAY2J,QAAS,KAClF5R,KAAK+0B,KAAKsS,cAActqB,UAAY,GACpC/c,KAAKoyB,SAAS,CAACl2B,UAAU,MAEjC2Q,GAAK6D,MAAM/H,cAAcknB,GAAM,OAEL,iBAAvB7vB,KAAK8mC,eAA8Bj6B,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAK,mBAAkB6D,KAAKtG,KAAQkP,UAAW,kBAAmB8oB,IAAK,kBACpH,iBAAvB1xB,KAAK8mC,eAA8Bj6B,GAAK6D,MAAM/H,cAAc,MAAO,CAACxM,GAAK,mBAAkB6D,KAAKtG,KAAQkP,UAAW,kBAAmB8oB,IAAK,gBAAiBwW,wBAAyB,CAACC,OAAQnoC,KAAK8mC,kBAIlNsB,WAAW1uC,EAAM+nB,EAAS4mB,GACtB,MAAMtsC,EAAQ,sCAAsCoX,MAAM,mBACpDm1B,EAAYvsC,EAAM+jB,UAAU5kB,GAAU,YAALA,GACnCotC,IAAWvsC,EAAMusC,GAAa57B,GAAM/D,cAAc,OAAQ,CAACC,UAAW,iBAAkBlP,IAC5F,MAAM6uC,EAAexsC,EAAM+jB,UAAU5kB,GAAU,eAALA,GACtCotC,IAAWvsC,EAAMwsC,GAAgB77B,GAAM/D,cAAc,OAAQ,CAACC,UAAW,uBAAwB6Y,IACrG,MAAM+mB,EAAczsC,EAAM+jB,UAAU5kB,GAAU,cAALA,GACzC,GAAIotC,EAAW,CACX,MAAM17B,EAAQ,CAAChE,UAAW,sBACtBy/B,EAAOx2B,MAAQw2B,EAAOlsC,MACtByQ,EAAMhE,WAAc,IAAG49B,GAAc7iB,UAAU6iB,GAAc5iB,yBAC7DhX,EAAM6S,OAAS,SAEX4oB,EAAOx2B,OAAMjF,EAAM4D,KAAO63B,EAAOx2B,MACjCw2B,EAAOlsC,KAAIyQ,EAAMgF,QAAU,KAAO/E,GAAK47B,WAAWC,WAAY77B,GAAK6X,OAAO2jB,EAAOlsC,OAEzFJ,EAAMysC,GAAe97B,GAAM/D,cAAc0/B,EAAOx2B,MAAQw2B,EAAOlsC,GAAK,IAAM,OAAQyQ,EAAOy7B,EAAO3uC,MAEpG,OAAOqC,EAAMuhB,OAGjBqrB,SAAS5sC,EAAO4R,GACZ,MAAMf,EAAQ,CAAChE,UAAW,4BAA6B6W,OAAQ,UAG/D,MAFmB,iBAAR9R,IAAkBf,EAAM4D,KAAO7C,GACvB,mBAARA,IAAoBf,EAAMgF,QAAWuN,IAAWA,EAAMrP,iBAAkBqP,EAAMkN,kBAAmB1e,MACrGd,GAAK6D,MAAM/H,cAAc,IAAKiE,EAAO7Q,GAGhD6sC,WAAW7sC,EAAOoR,EAAU07B,GACxB,OAAO,iBAAC,EAAD,CAAal3B,MAAM,QAAQzJ,KAAK,MAAMH,KAAMhM,GAC/C,wBAAK6M,UAAU,kBAAkBgJ,QAASi3B,GAAS17B,IAI3DF,uBACIjN,KAAK8oC,WAAY,EAGrB,YACI,MAAMC,EAAQ,GACRnC,EAAQ5mC,KAAK4M,MAAMg6B,MAczB,OAbIA,EAAMlsB,SAASquB,EAAMjrC,KAAKkC,KAAK2oC,SAAS,UAAW/B,EAAMlsB,UACzDksB,EAAMnsB,QAAQsuB,EAAMjrC,KAAKkC,KAAK2oC,SAAS,SAAU/B,EAAMnsB,SACvDmsB,EAAMoC,QACND,EAAMjrC,KAAKkC,KAAK2oC,SAAS,iBAAkB,KACvC,MAAMM,EAAS,cACf,IAAIxxB,EAAOmvB,EAAMoC,OACbC,EAAOz1B,KAAKiE,KAAOA,EAAOA,EAAKmX,MAAMqa,GAAQ,IACjDp8B,GAAK47B,WAAWC,WAChB77B,GAAKqW,cAAcC,yCAAyC1L,MAGhEmvB,EAAMsC,QAAQH,EAAMjrC,KAAKkC,KAAK2oC,SAAS,SAAU/B,EAAMsC,SACvDtC,EAAMuC,SAASJ,EAAMjrC,KAAKkC,KAAK2oC,SAAS,UAAW/B,EAAMuC,UACtDJ,EAGX,aACI,MAAMA,EAAQ/oC,KAAK+oC,MACnB,OAAQA,EAAMtlC,QAAUzD,KAAK2mC,cAAgB95B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,6BACrFiE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW,+BACrCmgC,EAAM7tB,IAAI,CAACzS,EAAS2hB,IAAUA,EAAQ2e,EAAMtlC,OAAS,EAAI,CAACgF,EAAS,OAASA,GAAS6U,QAE7Ftd,KAAK2mC,aAAe95B,GAAK6D,MAAM/H,cAAc,SAAU,CAACiJ,QAAS5R,KAAK0mC,aAAc99B,UAAW,gCAAiCR,UAAWpI,KAAKswB,MAAM+Q,SAAU,aAIxK7J,WACIx3B,KAAK4M,MAAMzH,QAAUnF,KAAK4M,MAAMzH,OAAOnF,KAAKtG,MAC5CsG,KAAKoyB,SAAS,CAACiP,SAAUrhC,KAAKswB,MAAM+Q,UAGxCn7B,OAAQlG,KAAK4M,MAAM1G,KAAKlG,KAAKtG,MAC7BmM,SAAU7F,KAAK4M,MAAMpB,OAAOxL,KAAKtG,MACjCiL,SAAU3E,KAAK4M,MAAMjI,OAAO3E,KAAKtG,MAEjC,WAAY,OAAOsG,KAAKioC,UAAUjoC,KAAK4M,MAAMg6B,MAAMljC,OAAS1D,KAAK4M,MAAMg6B,MAAMljC,OAAOC,UAAY3D,KAAK4M,MAAMg6B,MAAMltC,MACjH,aAAc,OAAOsG,KAAKioC,UAAUjoC,KAAK4M,MAAMg6B,MAAMljC,OAAS1D,KAAK4M,MAAMg6B,MAAMljC,OAAO6W,YAAcva,KAAK4M,MAAMg6B,MAAMyB,QACrH,kBAAmB,OAAOroC,KAAKioC,UAAUjoC,KAAK4M,MAAMg6B,MAAMljC,OAAS1D,KAAK4M,MAAMg6B,MAAMljC,OAAO8W,iBAAmBxa,KAAK4M,MAAMg6B,MAAM/qC,aAC/H,cAAe,OAAOmE,KAAKioC,UAAUjoC,KAAK4M,MAAMg6B,MAAMljC,OAAS1D,KAAK4M,MAAMg6B,MAAMljC,OAAOjI,aAAeuE,KAAK4M,MAAMg6B,MAAMnlB,SAEvHvU,SACI,GAAIlN,KAAKswB,MAAMp0B,SAAU,OAAO8D,KAAKopC,kBACrC,MAAM,SAACC,EAAD,WAAWC,GAActpC,KAAK4M,MAAMg6B,MAEpC3+B,EAAQ,GAqBd,OApBGpL,EAAe,eACVmD,KAAKupC,aAUuB,IAAzBvpC,KAAKswB,MAAM1d,YACV3K,EAAMyH,YAAc,WAEI,YAAzB1P,KAAKswB,MAAM1d,YACV3K,EAAMyH,YAAc,sBAbxB1P,KAAKupC,YAAa,EAClB11B,GAAYnS,kBAAQ1B,KAAK4M,MAAMg6B,MAAM9iC,SAAS+J,SAAS,cAAgBqE,GAAejQ,cAAgBiQ,GAAeiF,aAAcnX,KAAK4M,MAAMg6B,MAAM9iC,UAAYmL,IACzJjP,KAAK8oC,WAER9oC,KAAKoyB,SAAS,CACVxf,WAAW3D,EAAOO,SAAU,aAEjC,UAWJ3C,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,uDAAwDX,SACvG4E,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,8BACpCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,kCAAmC5I,KAAKooC,WAAWpoC,KAAKtG,KAAMsG,KAAKyhB,QAAS,CAAC/nB,KAAMsG,KAAKqoC,OAAQlsC,GAAIktC,EAAUx3B,KAAMy3B,KAChKz8B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,kCACxC5I,KAAK4M,MAAM1G,MAAQlG,KAAK4oC,WAAW,OAAQ,iBAACtC,GAAD,CAAU19B,UAAU,YAAc5I,KAAKkG,MAClFlG,KAAK4M,MAAMpB,QAAUxL,KAAK4oC,WAAW,SAAU,iBAACrC,GAAD,CAAY39B,UAAU,YAAc5I,KAAK6F,QACxF7F,KAAK4M,MAAMjI,QAAU3E,KAAK4oC,WAAW,SAAU,iBAAC,GAAD,CAAYhgC,UAAU,YAAc5I,KAAK2E,QACxF+H,GAAM/D,cAAcy4B,GAAQ,CAAC5J,SAAUx3B,KAAKw3B,SAAU6J,QAASrhC,KAAKswB,MAAM+Q,YAGtFx0B,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,4DACxCiE,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAW,6DAA8D5I,KAAKnE,cAEnHmE,KAAKypB,SAKjB,MAAM6J,GAAiBmT,GAAe1rC,UAAUmS,OAChDrT,OAAOC,eAAe2sC,GAAe1rC,UAAW,SAAU,CACtDhB,YAAY,EACZw5B,cAAc,EACdne,IAAK,WAAYhU,QAAQiZ,KAAK,wGAC9BrgB,IAAK,IAAMs5B,KC9Of,MAAM5mB,GAAQG,GAAKH,MAEJ,MAAM88B,WAAkB98B,GAAMC,UACzCO,SACI,MAAM+M,EAAOja,KAAK4M,MAAMqN,MAAQ,OAChC,OAAO,wBAAKrR,UAAW5I,KAAK4M,MAAMhE,WAAa,GAAIuI,KAAK,qBAAqBJ,QAAQ,YAAY9I,MAAO,CAAC2I,MAAOqJ,EAAMpJ,OAAQoJ,IAClH,yBAAMxgB,EAAE,8KCL5B,MAAMiT,GAAQG,GAAKH,MAGJ,MAAM+8B,WAAe/8B,GAAMC,UACtC5M,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CAACoZ,MAAM,EAAOtvC,MAAO4F,KAAK4M,MAAMxS,OAAS4F,KAAK4M,MAAM5E,QAAQ,GAAG5N,OAC5E4F,KAAK2pC,SAAWj9B,GAAMk9B,YACtB5pC,KAAKw3B,SAAWx3B,KAAKw3B,SAAS78B,KAAKqF,MACnCA,KAAK6pC,SAAW7pC,KAAK6pC,SAASlvC,KAAKqF,MACnCA,KAAK8pC,SAAW9pC,KAAK8pC,SAASnvC,KAAKqF,MAGvC6pC,SAAS1qB,GACLA,EAAMrP,iBACN9P,KAAKoyB,SAAS,CAACsX,MAAM,GAAO,KACxBhhC,SAASY,iBAAiB,QAAStJ,KAAK8pC,YAIhDA,WACI9pC,KAAKoyB,SAAS,CAACsX,MAAM,GAAQ,KACzBhhC,SAASiX,oBAAoB,QAAS3f,KAAK8pC,YAInDtS,SAASp9B,GACL4F,KAAKoyB,SAAS,CAACh4B,UACX4F,KAAK4M,MAAM4qB,UAAUx3B,KAAK4M,MAAM4qB,SAASp9B,GAGjD,eAAgB,OAAO4F,KAAK4M,MAAM5E,QAAQhK,KAAKpE,GAAKA,EAAEQ,OAAS4F,KAAKswB,MAAMl2B,OAE1E,cACI,MAAM8pB,EAAWlkB,KAAKkkB,SACtB,OAAO,wBAAKtb,UAAU,qBACjB5I,KAAK4M,MAAM5E,QAAQkT,IAAI6uB,GACpB,wBAAKnhC,UAAY,oBAAkBsb,EAAS9pB,OAAS2vC,EAAI3vC,MAAQ,YAAc,IAAMwX,QAAS5R,KAAKw3B,SAAS78B,KAAKqF,KAAM+pC,EAAI3vC,QAAS2vC,EAAIxhC,SAKpJ2E,SACI,MAAMjF,EAA4B,eAApBjI,KAAK4M,MAAM3E,MAAyB,yBAA2B,GACvE+hC,EAAShqC,KAAKswB,MAAMoZ,KAAO,aAAe,GAChD,OAAQ,wBAAK9gC,UAAY,YAAWX,IAAQ+hC,IAAUp4B,QAAS5R,KAAK6pC,SAAUnY,IAAK1xB,KAAK2pC,UAC5E,wBAAK/gC,UAAU,mBAAmB5I,KAAKkkB,SAAS3b,OAChD,iBAAC,GAAD,CAAOK,UAAU,oBAChB5I,KAAKswB,MAAMoZ,MAAQ1pC,KAAKgI,UCjD7C,MAAM0E,GAAQG,GAAKH,MAEJ,MAAMu9B,WAAev9B,GAAMC,UACtCO,SACI,MAAM+M,EAAOja,KAAK4M,MAAMqN,MAAQ,OAChC,OAAO,wBAAKrR,UAAW5I,KAAK4M,MAAMhE,WAAa,GAAIuI,KAAK,qBAAqBJ,QAAQ,YAAY9I,MAAO,CAAC2I,MAAOqJ,EAAMpJ,OAAQoJ,IAClH,yBAAM9I,KAAK,OAAO1X,EAAE,oBACpB,yBAAMA,EAAE,iPCN5B,MAAMiT,GAAQG,GAAKH,MAEJ,MAAMu9B,WAAev9B,GAAMC,UACtC5M,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CACTuQ,SAAS,GAGjB3zB,SACI,MAAMtE,EAAY,CAAC,qBAEnB,OADG5I,KAAKswB,MAAMuQ,SAAQj4B,EAAU9K,KAAK,WAC9B,wBAAK8K,UAAWA,EAAUhJ,KAAK,MAC1B,0BAAO43B,SAAUx3B,KAAK4M,MAAM4qB,SAAUD,UAAWv3B,KAAK4M,MAAM2qB,UAAWv7B,KAAK,OAC5E4M,UAAU,YAAY6uB,YAAaz3B,KAAK4M,MAAM6qB,YAAaC,UAAU,KACrEwS,QAAS,KACLlqC,KAAKoyB,SAAS,CAACyO,SAAS,KACzBsJ,OAAQ,KACPnqC,KAAKoyB,SAAS,CAACyO,SAAS,OAE5B,iBAAC,GAAD,Q,iNCJpB,MAAM7zB,GAAU/N,EAAeJ,kBAAkB,WAE3C6N,GAAQG,GAAK6D,MAEJ,MAAM05B,WAAiBv9B,GAAKsiB,eACvCpvB,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CAAClO,KAAM,OAAQioB,WAAW,EAAM5tB,MAAO,IACpDzc,KAAKsqC,UAA+B,WAAnBtqC,KAAK4M,MAAM5Q,KAC5BgE,KAAKuqC,OAASvqC,KAAKsqC,UAAY5sC,EAAeC,EAC9CqC,KAAKwqC,QAAUxqC,KAAKsqC,UAAY5yB,EAAeC,GAE/C3X,KAAKoiB,KAAOpiB,KAAKoiB,KAAKznB,KAAKqF,MAC3BA,KAAKyqC,QAAUzqC,KAAKyqC,QAAQ9vC,KAAKqF,MACjCA,KAAKskB,OAAStkB,KAAKskB,OAAO3pB,KAAKqF,MAE/BA,KAAK0qC,eAAiB,WAClB1qC,KAAK06B,eAET16B,KAAK0qC,eAAiB1qC,KAAK0qC,eAAe/vC,KAAKqF,MAGnDm0B,oBACI,MAAMn4B,GAAQgE,KAAKsqC,UAAY,SAAW,SAAW,IACrD9oB,EAAShd,GAAMxI,EAAF,SAAgBgE,KAAK0qC,gBAClClpB,EAAShd,GAAMxI,EAAF,WAAkBgE,KAAK0qC,gBACpClpB,EAAShd,GAAMxI,EAAF,WAAkBgE,KAAK0qC,gBAGxCz9B,uBACI,MAAMjR,GAAQgE,KAAKsqC,UAAY,SAAW,SAAW,IACrD9oB,EAASze,IAAO/G,EAAF,SAAgBgE,KAAK0qC,gBACnClpB,EAASze,IAAO/G,EAAF,WAAkBgE,KAAK0qC,gBACrClpB,EAASze,IAAO/G,EAAF,WAAkBgE,KAAK0qC,gBAGzCC,aACI,MAAMxkC,EAAQhL,EAAQ,GAAYgL,OACrBA,EAAMykC,UAAYzkC,EAAMC,UAChCpG,KAAKsqC,UAAYtoC,GAAeC,cAAgBD,GAAemV,cAGxEjR,KAAKxM,GACD0H,QAAQoE,IAAI9L,GACZsG,KAAKwqC,QAAQtkC,KAAKxM,GAGtB,aAAaA,SACkBsG,KAAK6qC,cAAcnxC,IAE9CsG,KAAKwqC,QAAQ3kC,OAAOnM,GAGxBmxC,cAAcnxC,GACV,OAAO,IAAIyK,QAAQzC,IACfopC,GAAM96B,sBAAsB,gBAAkB,mCAAkCtW,KAAS,CACrF0W,QAAQ,EACRF,YAAa,SACbI,UAAW,KAAO5O,GAAQ,IAC1B2O,SAAU,KAAO3O,GAAQ,QAKrC,kBACI,MAAO,CACH,CAAC6G,MAAO,OAAQnO,MAAO,QACvB,CAACmO,MAAO,SAAUnO,MAAO,UACzB,CAACmO,MAAO,UAAWnO,MAAO,WAC1B,CAACmO,MAAO,iBAAkBnO,MAAO,SACjC,CAACmO,MAAO,gBAAiBnO,MAAO,YAChC,CAACmO,MAAO,YAAanO,MAAO,SAIpC,iBACI,MAAO,CACH,CAACmO,MAAO,YAAanO,OAAO,GAC5B,CAACmO,MAAO,aAAcnO,OAAO,IAIrCqwC,QAAQrwC,GACJ4F,KAAKoyB,SAAS,CAACiY,UAAWjwC,IAG9BgoB,KAAKhoB,GACD4F,KAAKoyB,SAAS,CAAChQ,KAAMhoB,IAGzBkqB,OAAOnF,GACHnf,KAAKoyB,SAAS,CAAC3V,MAAO0C,EAAMM,OAAOrlB,MAAM2wC,sBAG7CC,SAASpE,GACL,MAAO,CACHlsC,IAAKsF,KAAK2D,QAAQijC,GAClB5gC,QAAShG,KAAKuqC,OAAOvqC,KAAK2D,QAAQijC,IAClCzhC,OAAQnF,KAAKwqC,QAAQrlC,OAAOxK,KAAKqF,KAAKwqC,SACtCtkC,KAAMrJ,EAAe,aAAemD,KAAKkG,KAAKvL,KAAKqF,MAAQ,KAC3DwL,OAAQxL,KAAK6F,OAAOlL,KAAKqF,MACzB4mC,MAAOA,EACPt4B,KAAMs4B,EAAMt4B,MAIpB25B,UAAU7tC,GACN,OAAKA,EACkB,iBAATA,EAAoBA,EAAQA,EAAM4Y,WAD7B,MAIvB,WACI,MAA2B,YAApBhT,KAAK4M,MAAM5Q,KAAqBnC,OAAO0L,OAAO9H,GAAa5D,OAAO0L,OAAO/H,GAGpFytC,YACI,MAAMC,EAAelrC,KAAKkgB,KAAKkC,KAAK,CAAC+oB,EAAGC,KACpC,MAAMC,EAAMrrC,KAAKswB,MAAMlO,KAAK/I,OAAO,GAAG7R,cAAgBxH,KAAKswB,MAAMlO,KAAK3a,MAAM,GACtE6jC,EAAQH,EAAEznC,QAAUynC,EAAEznC,OAAQ,MAAK2nC,GAASrrC,KAAKioC,UAAUkD,EAAEznC,OAAQ,MAAK2nC,MAAYrrC,KAAKioC,UAAUkD,EAAEnrC,KAAKswB,MAAMlO,OAClHmpB,EAASH,EAAE1nC,QAAU0nC,EAAE1nC,OAAQ,MAAK2nC,GAASrrC,KAAKioC,UAAUmD,EAAE1nC,OAAQ,MAAK2nC,MAAarrC,KAAKioC,UAAUmD,EAAEprC,KAAKswB,MAAMlO,OAC1H,MAAqB,iBAAVkpB,EAA2BA,EAAMP,oBAAoBS,cAAcD,EAAOR,qBACjFO,EAAQC,EAAe,EACvBA,EAASD,GAAe,EACrB,IAENtrC,KAAKswB,MAAM+Z,WAAWa,EAAaT,UACxC,MAAMgB,EAAW,GACjB,IAAK,IAAIN,EAAI,EAAGA,EAAID,EAAaznC,OAAQ0nC,IAAK,CAC1C,MAAMvE,EAAQsE,EAAaC,GAC3B,GAAInrC,KAAKswB,MAAM7T,MAAO,CAClB,IAAI2B,EAAU,KACd,MAAM1kB,EAAOsG,KAAK2D,QAAQijC,GACpByB,EAASroC,KAAKua,UAAUqsB,GACxB/qC,EAAcmE,KAAKwa,eAAeosB,GAClCnlB,EAAUzhB,KAAKvE,WAAWmrC,GAKhC,GAJIltC,IAAM0kB,EAAU1kB,EAAKqxC,oBAAoBt6B,SAASzQ,KAAKswB,MAAM7T,QAC7D4rB,IAAQjqB,EAAUA,GAAWiqB,EAAO0C,oBAAoBt6B,SAASzQ,KAAKswB,MAAM7T,QAC5E5gB,IAAauiB,EAAUA,GAAWviB,EAAYkvC,oBAAoBt6B,SAASzQ,KAAKswB,MAAM7T,QACtFgF,IAASrD,EAAUA,GAAWqD,EAAQspB,oBAAoBt6B,SAASzQ,KAAKswB,MAAM7T,SAC7E2B,EAAS,SAElB,MAAMxR,EAAQ5M,KAAKgrC,SAASpE,GAC5B6E,EAAS3tC,KAAK,iBAAC,GAAD,KAAe,iBAAC,GAAD,MAAe8O,EAAf,CAAsBjI,QAAS9H,EAAe,cAAgBmD,KAAKwqC,QAAQ7lC,OAAOhK,KAAKqF,KAAKwqC,cAE7H,OAAOiB,EAGX9nC,QAAQijC,GAAQ,OAAO5mC,KAAKioC,UAAUrB,EAAMljC,OAASkjC,EAAMljC,OAAOC,UAAYijC,EAAMltC,MACpF6gB,UAAUqsB,GAAQ,OAAO5mC,KAAKioC,UAAUrB,EAAMljC,OAASkjC,EAAMljC,OAAO6W,YAAcqsB,EAAMyB,QACxF7tB,eAAeosB,GAAQ,OAAO5mC,KAAKioC,UAAUrB,EAAMljC,OAASkjC,EAAMljC,OAAO8W,iBAAmBosB,EAAM/qC,aAClGJ,WAAWmrC,GAAQ,OAAO5mC,KAAKioC,UAAUrB,EAAMljC,OAASkjC,EAAMljC,OAAOjI,aAAemrC,EAAMnlB,SAE1FiqB,qBACI,IAAIpwC,OAAOqwC,mBAAmB,OAAO,KACrC,IAAIrwC,OAAOswC,cAAc,OAAO,KAChC,GAA4C,mBAAlCtwC,OAAOswC,cAAcC,SAAwB,OAAO,KAC9D,IAAI7rC,KAAKsqC,UAAU,OAAO,KAE1B,IACIthC,EADA8iC,GAAmB,EAEvB,OAAO,iBAAC,EAAD,CAAa/jC,KAAK,oFACrB,yBAAME,MAAO,CAACqvB,WAAY,QAASyU,aAAc,KACzCD,GAAmB,EACnB9iC,EAAQsB,SAEZ,iBAACvL,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAjC,CAAwCta,IAAI,oBAAoB/f,MAAM,QAAQs6B,KAAK,SAAShyB,KAAK,MAAMiyB,WAAW,UAAUt6B,QAAS,KACjI,IACItQ,GAAM4C,UAAU,mCAAoC,CAAClI,KAAM,SAC3DV,OAAOswC,cAAcC,WACpB39B,KAAK,KACF5M,GAAM4C,UAAU,gCAAiC,CAAClI,KAAM,cACzDqW,MAAMlR,IACLC,QAAQC,MAAMF,GACdG,GAAM4C,UAAU,0CAA2C,CAAClI,KAAM,YAEzE,MAAM+K,GACH3F,QAAQC,MAAM0F,GACdzF,GAAM4C,UAAU,0CAA2C,CAAClI,KAAM,YAEvE8nB,SAAS,EAAO1b,UAAU,EAAO+jC,aAAc,KAC1CnsC,KAAK+0B,KAAKqX,mBACT9wC,OAAOswC,eAAkBtwC,OAAOswC,cAAcroC,UAChDuoC,IACH9iC,EAAU,IAAInB,EAAgB7H,KAAK+0B,KAAKqX,kBAAkBrX,KAAKiT,SAASjT,KAAK5E,OAAQt2B,OAAO0L,OAAOjK,OAAOswC,cAAcroC,SAAS2X,IAAIjgB,GAAKA,EAAEvB,MAAMkG,KAAK,MAAO,CAC1JsI,KAAM,SACNG,cAAc,IAElBW,EAAQO,OACRuiC,GAAmB,MAvBvB,uBA+BZ5+B,SACI,MAAMm/B,EAAc,iBAACr/B,GAAD,CAAS2E,MAAM,QAAQqqB,SAAS,MAAMj0B,KAAK,eACzD6E,GACF,iBAAC,GAAD,MAAgBA,EAAhB,CAAuBhE,UAAU,qCAAqCqR,KAAK,OAAOrI,QAASxO,UACnFpD,KAAKsqC,UAAW5yB,EAAarR,mBAC5BsR,GAAYmK,kBACjB9hB,KAAK06B,mBAGP4R,EAAatsC,KAAKirC,YAExB,OAAO,iBAAC,GAAD,CAAelvC,MAAQ,GAAEiE,KAAK4M,MAAM5Q,KAAKwL,iBAAiB8kC,EAAW7oC,UACxE,iBAAC1E,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAjC,CAAwCtxC,IAAI,gBAAgBiX,MAAM,QAC9Ds6B,KAAK,SAAShyB,KAAK,MAAMiyB,WAAW,UAAUt6B,QAAS5R,KAAK2qC,WAAWhwC,KAAKqF,MAAO8jB,SAAS,EAC5F7b,MAAO,CACHqvB,WAAY,SAHpB,QAKUt3B,KAAKsqC,UAAY,SAAW,QALtC,WAOCtqC,KAAK0rC,sBACJ7uC,EAAe,cAAgBwvC,EACjC,wBAAKzjC,UAAU,iCACX,iBAAC,GAAD,CAAQ4uB,SAAUx3B,KAAKskB,OAAQmT,YAAc,UAASz3B,KAAK4M,MAAM5Q,YACjE,wBAAK4M,UAAU,sBACX,wBAAKA,UAAU,qBACX,0BAAOA,UAAU,YAAjB,YACA,iBAAC,GAAD,CAAUZ,QAAShI,KAAKusC,YAAa/U,SAAUx3B,KAAKoiB,KAAMna,MAAM,iBAEpE,wBAAKW,UAAU,qBACX,0BAAOA,UAAU,YAAjB,UACA,iBAAC,GAAD,CAAUZ,QAAShI,KAAKwsC,WAAYhV,SAAUx3B,KAAKyqC,QAASxiC,MAAM,mBAK9E,wBAAKW,UAAU,2BAA2B0jC,KAKtD,MAAMhZ,GAAiB8W,GAASrvC,UAAUmS,OAC1CrT,OAAOC,eAAeswC,GAASrvC,UAAW,SAAU,CAChDhB,YAAY,EACZw5B,cAAc,EACdne,IAAK,WAAYhU,QAAQiZ,KAAK,wGAC9BrgB,IAAK,IAAMs5B,KClQf,MAAMmZ,GAAa3hC,UAAU9Q,IAAIT,GAAGA,EAAEmzC,YAAYnzC,EAAE2E,SAAS3E,EAAE2E,QAAQyE,UAAU,GAAGzE,QAC9EyuC,GAAc7hC,UAAU9Q,IAAIT,GAAGA,EAAEozC,aAAa,GAAGA,YAGjDC,GAAMlwC,QAAQkwC,IAEL,WAAI,MACf7sC,cACIC,KAAKgG,SAAU,EAEfhG,KAAK6sC,KAAO/vC,EAGhB,mBACI,IAAIkD,KAAK6sC,KAAK,OAAO,KACrB,IAAoB,IAAjB7sC,KAAKgG,QAAkB,OAAO,KAcjC,MAbW,CACPtM,KAAMsG,KAAK6sC,KAAKnzC,MAAQqD,EAAWrD,KACnCozC,eAAgB9sC,KAAK6sC,KAAKC,gBAAkB/vC,EAAW+vC,eACvDC,QAAS/sC,KAAK6sC,KAAKE,cAAWtuC,EAC9B6xB,MAAOtwB,KAAK6sC,KAAKvc,YAAS7xB,EAC1BuuC,WAAYhtC,KAAK6sC,KAAK,oBAAsB,CACxC5oC,MAAOjE,KAAK6sC,KAAK,0BACjBpuC,EACJwuC,OAAQjtC,KAAK6sC,KAAK,gBAAkB,CAChCK,YAAaltC,KAAK6sC,KAAK,gBACvBM,YAAantC,KAAK6sC,KAAK,sBAAmBpuC,QAC1CA,GAKZ2uC,WACIX,GAAW9pC,SAAS,CAChB3G,KAAM2wC,GAAYU,sBAClBC,SAhCK,yBAiCLV,OACAW,SAAUvtC,KAAKwtC,eAIvBzoC,SACO/E,KAAKgG,UACRhG,KAAKgG,SAAU,EACf5E,QAAQoE,IAAI,gCAEZxF,KAAKoV,IAAItY,GAAejD,OAAOY,OAAOsC,IAEtCiD,KAAKotC,YAGTnoC,UACQjF,KAAKgG,UACThG,KAAKgG,SAAU,EACf5E,QAAQoE,IAAI,iCAEZxF,KAAKotC,YAGT,kBAAkBK,GACd,IAAIR,QAAeniC,UAAU9Q,IAAI+M,GAAKA,EAAE2mC,WAAW,GAAGA,UAAUD,GAChE,GAAGR,EAAOxuC,WAAyC,iBAArBwuC,EAAOxuC,UACjC,MAAM,IAAI4P,MAAM,uBAEpB,OAAO4+B,EAGX73B,IAAIm4B,GACAvtC,KAAK6sC,KAAOU,EAEZvtC,KAAKotC,aC9Db,MAAM1gC,GAAQG,GAAKH,MAEnB,IAAIihC,GACW,MAAMC,WAA6BlhC,GAAMC,UACpD5M,YAAY6M,GACRnK,MAAMmK,GAEN5M,KAAKswB,MAAQ,CACTrwB,KAAM0W,EAAUzU,gBAAgB,QAAUnF,EAC1CkwC,OAAQ,IAGZjtC,KAAK6tC,QAAU,KACf7tC,KAAK8tC,YAAa,EACf9tC,KAAKswB,MAAMrwB,KAAK6sC,gBACf9sC,KAAK+tC,cAGT/tC,KAAKguC,gBAAkB,IAAIC,IAG/BC,kBAAkBC,GACdnuC,KAAKguC,gBAAgB3hC,IAAI8hC,GAO7B3W,SAAShS,EAASprB,GACd,IAAIg0C,EAAiBC,GAASrwC,KAAK+I,GAAKA,EAAE5K,KAAOqpB,EAAQ5Y,MAAMzQ,IAE/D6D,KAAKoyB,SAAS,CACVnyB,KAAMpG,OAAOoH,OAAOnE,EAAakD,KAAKswB,MAAMrwB,KAAM,CAC9C,CAACmuC,EAAejyC,IAAO/B,GAAgB,OAE3C6yC,OAAQjtC,KAAKswB,MAAM2c,SAEC,mBAArBznB,EAAQ5Y,MAAMzQ,IACb6D,KAAK+tC,cAGTp3B,EAAUxU,gBAAgB,MAAOrF,GACjCkD,KAAK6tC,QAAQnT,cACb4T,GAAmBl5B,IAAItY,GAG3BixC,cACI,IAAuB,IAApB/tC,KAAK8tC,WAAoB,CACxB,IAAIvuC,EAAMS,KAAKswB,MAAMrwB,KAAK6sC,eAC1B1oC,WAAW,KACJpE,KAAKswB,MAAMrwB,KAAK6sC,iBAAmBvtC,GAGtCS,KAAK+tC,eACN,KAEP,IAAI/tC,KAAKswB,MAAMrwB,KAAK6sC,eAOhB,OANA9sC,KAAKoyB,SAAS,CACVnyB,KAAMD,KAAKswB,MAAMrwB,KACjBgtC,OAAQ,KAEZjtC,KAAK06B,mBACL16B,KAAKguC,gBAAgBtkC,QAAQ3C,GAAKA,EAAE2zB,eAGxC16B,KAAK8tC,YAAa,EAClBQ,GAAmBP,YAAY/tC,KAAKswB,MAAMrwB,KAAK6sC,gBAC9C5+B,KAAK++B,IACFjtC,KAAK8tC,YAAa,EAClB9tC,KAAKoyB,SAAS,CACVnyB,KAAMD,KAAKswB,MAAMrwB,KACjBgtC,OAAQpzC,OAAO2J,KAAKypC,GAAQ/xB,IAAI3G,IAC5B,IAAIg6B,EAAQtB,EAAO14B,GACnB,MAAO,CACHpY,GAAIoyC,EAAMpyC,GACVzC,KAAM60C,EAAM70C,KACZsC,KAAMuyC,EAAMvyC,UAIxBgE,KAAK06B,cACL16B,KAAKguC,gBAAgBtkC,QAAQ3C,GAAKA,EAAE2zB,iBACrCroB,MAAM,KACLrS,KAAK8tC,YAAa,EAClB9tC,KAAKoyB,SAAS,CACVnyB,KAAMD,KAAKswB,MAAMrwB,KACjBgtC,OAAQ,KAEZjtC,KAAK06B,cACL16B,KAAKguC,gBAAgBtkC,QAAQ3C,GAAKA,EAAE2zB,iBAI5C8T,cAAcvuC,GACVD,KAAKoyB,SAAS,CACVnyB,SAIR,cACI,OAAO0tC,KAAgCA,GAA8B,CACjE7iC,UAAU9Q,IAAI+M,GAAKA,EAAE0nC,gBAAgB,KAI7CvhC,SACI,IACI+0B,GACAjiC,KAAK3G,QACT,MAAO,CACH,iBAAC,GAAD,CAAmB0C,MAAM,wBAAwBG,SAAU8D,KAAK4M,MAAM1Q,SAAUs7B,SAAUx3B,KAAK4M,MAAM4qB,WACrG,iBAAC2K,GAAD,MACA,iBAAC,GAAD,CAAmBp6B,KAAK,iBACxB,4BAEK/H,KAAK0uC,mBAEV,4BACI,iBAACvM,GAAD,MACA,iBAAC,GAAD,CAAmBp6B,KAAK,YAExB,iBAAC4mC,GAAD,CAAYzyC,SAAU8D,QAE1B,wBAAK4I,UAAWq5B,EAAawM,iBAC7B,2BAAQxmC,MAAO,CAAC0zB,QAAS,KAAO/pB,QAAStW,OAAOszC,aAAhD,kBAGA,2BAAQ3mC,MAAO,CAAC0zB,QAAS,KAAO/pB,QAAS,KACrCtN,SAAO6B,MAAMoK,aAAa,iDAD9B,wCAQR,wBACI,OAAOvQ,KAAK6uC,qBAAuB7uC,KAAK6uC,mBAAqBR,GAASnzB,IAAInU,IACtE,GAAc,SAAXA,EAAE/K,KACD,OAAO,iBAAC8yC,GAAD,CAAWtpB,QAASze,EAAGyjC,QAASxqC,KAAM7D,GAAI4K,EAAE5K,KACjD,GAAc,WAAX4K,EAAE/K,KAAkB,CAOzB,MANY,CAAC,iBAAC+yC,GAAD,CAAavpB,QAASze,EAAGyjC,QAASxqC,KAAM7D,GAAI4K,EAAE5K,MAOzD,MAAc,WAAX4K,EAAE/K,KACJ,CAAC,eAAgB,gBAAgByU,SAAS1J,EAAE5K,IACpC,iBAAC6yC,GAAD,CAAaxpB,QAASze,EAAGyjC,QAASxqC,KAAM7D,GAAI4K,EAAE5K,GAAI8yC,QAAS,CAAC,CAAC70C,MAAO,OAAQmO,MAAO,cAAcoG,OAAO3O,KAAKswB,MAAM2c,OAAO/xB,IAAInU,IAC1H,CACH3M,MAAO,SAAS2M,EAAE5K,GAClBoM,MAAOxB,EAAErN,WAIV,uBATT,MAelB,MAAM20C,GAAW,CACb,CACItyC,MAAO,iBACPI,GAAI,iBACJH,KAAM,SACNy7B,YAAa,sBAEjB,CACI17B,MAAO,OACPI,GAAI,OACJH,KAAM,OACNy7B,YAAa,aAEjB,CACI17B,MAAO,UACPI,GAAI,UACJH,KAAM,OACNy7B,YAAa,oBAEjB,CACI17B,MAAO,QACPI,GAAI,QACJH,KAAM,OACNy7B,YAAa,oBAEjB,CACI17B,MAAO,kBACPI,GAAI,mBACJH,KAAM,SACN,kBACI,OAAOgB,KAAKC,QAGpB,CACIlB,MAAO,aACPI,GAAI,eACJH,KAAM,UAEV,CACID,MAAO,aACPI,GAAI,eACJH,KAAM,WAId,IAAIkzC,GAkEAC,GA2EAC,GA5IJ,MAAMN,WAAkBpiC,GAAM2iC,cAC1B,cACI,OAAGH,IAAoBA,GAAiB,GAAUA,GAC3CA,GAAmB,CACtBpkC,UAAU9Q,IAAI+M,GAAKA,EAAEuoC,eAAe,GACpCxkC,UAAU9Q,IAAI+M,GAAKA,EAAE0nC,gBAAgB,GACrC3jC,UAAU9Q,IAAI+M,GAAKA,EAAEwoC,iBAAiB,GACtCzkC,UAAU9Q,IAAI+M,GAAKA,EAAEyoC,eAAe,GACpC1kC,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,GAC7B3kC,UAAU9Q,IAAI+M,GAAKA,EAAE2oC,aAAa,GAClC5kC,UAAU9Q,IAAI+M,GAAKA,EAAE4oC,WAAW,GAChC7kC,UAAU9Q,IAAI+M,GAAKA,EAAE6oC,QAAU7oC,EAAE8oC,QAAQ,IAIjD9vC,YAAY6M,GACRnK,MAAMmK,GACN,IAAI4Y,EAAUxlB,KAAK4M,MAAM4Y,QACzBxlB,KAAKswB,MAAQ,CACTrwB,KAAMD,KAAK4M,MAAM49B,QAAQla,MAAMrwB,KAAKulB,EAAQrpB,KAGhD6D,KAAK8vC,MAAQ,iBAACx0C,OAAOyD,UAAU+V,IAAIysB,WAAWC,OAAOuO,UAAxC,CAAkDtY,YAAajS,EAAQiS,YAAa/9B,KAAM8rB,EAAQrpB,GAAI/B,MAAO4F,KAAKswB,MAAMrwB,KAAMu3B,SAAWp9B,IAClJ4F,KAAKoyB,SAAS,CACVnyB,KAAM7F,KAEN4F,KAAKgwC,YAAchwC,KAAKgwC,WAAahzC,KAAKC,MAAQ,KAClD+C,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAAM5F,GAClC4F,KAAKgwC,WAAahzC,KAAKC,OACjB+C,KAAKiwC,WACXjwC,KAAKiwC,SAAW7rC,WAAW,KACvBpE,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAAMA,KAAKswB,MAAMrwB,MAC7CD,KAAKiwC,SAAW,KAChBjwC,KAAKgwC,WAAahzC,KAAKC,OACxB,OAERjB,KAAK,SAGZkR,SACI,IAAIsY,EAAUxlB,KAAK4M,MAAM4Y,SAGrB0qB,EACAjO,EACAkO,EACAC,EACAC,EACAnf,EACAof,EACAC,GACAvwC,KAAK3G,QAET,OAAQ,wBAAKuP,UAAWsnC,EAAUM,IAAI,IAAIvO,EAAawM,gBACnD,wBAAK7lC,UAAY,GAAEsnC,EAAU3P,QAAQrP,EAAWC,aAC5C,uBAAIvoB,UAAWwnC,EAAYZ,cAAc,IAAIa,EAAWI,OAAO,IAAIN,EAAcO,GAAG,IAAIP,EAAcZ,iBACjG/pB,EAAQzpB,OAEZiE,KAAK8vC,OAEV,iBAACa,GAAD,QAMZ,MAAM5B,WAAoBriC,GAAM2iC,cAC5B,cACI,OAAOF,KAAuBA,GAAqB,CAC/CrkC,UAAU9Q,IAAI+M,GAAKA,EAAEuoC,eAAe,GACpCxkC,UAAU9Q,IAAI+M,GAAKA,EAAE0nC,gBAAgB,GACrC3jC,UAAU9Q,IAAI+M,GAAKA,EAAEwoC,iBAAiB,GACtCzkC,UAAU9Q,IAAI+M,GAAKA,EAAEyoC,eAAe,GACpC1kC,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,GAC7B3kC,UAAU9Q,IAAI+M,GAAKA,EAAE2oC,aAAa,GAClC5kC,UAAU9Q,IAAI+M,GAAKA,EAAE4oC,WAAW,GAChC7kC,UAAU9Q,IAAI+M,GAAKA,EAAE6oC,QAAU7oC,EAAE8oC,QAAQ,GACzC/kC,UAAU9Q,IAAI+M,GAAKA,EAAE6pC,kBAAkB,KAI/C7wC,YAAY6M,GACRnK,MAAMmK,GACN,IAAI4Y,EAAUxlB,KAAK4M,MAAM4Y,QACzBxlB,KAAKswB,MAAQ,CACTrwB,KAAMD,KAAK4M,MAAM49B,QAAQla,MAAMrwB,KAAKulB,EAAQrpB,KAGhD6D,KAAK8vC,MAAQ,iBAACx0C,OAAOyD,UAAU+V,IAAIysB,WAAWC,OAAOuO,UAAxC,CAAkDtY,YAAajS,EAAQiS,YAAa/9B,KAAM8rB,EAAQrpB,GAAI/B,MAAO4F,KAAKswB,MAAMrwB,KAAMjE,KAAK,SAASw7B,SAAU,CAACp9B,EAAOV,EAAMo2C,MAC7K11C,EAAQA,EAAMkZ,QAAQ,UAAW,MACrBtT,KAAKswB,MAAMrwB,OAKnBD,KAAKgwC,YAAchwC,KAAKgwC,WAAahzC,KAAKC,MAAQ,KAClD+C,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAAM5F,GAClC4F,KAAKgwC,WAAahzC,KAAKC,OACjB+C,KAAKiwC,WACXjwC,KAAKiwC,SAAW7rC,WAAW,KACvBpE,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAAMA,KAAKswB,MAAMrwB,MAC7CD,KAAKiwC,SAAW,KAChBjwC,KAAKgwC,WAAahzC,KAAKC,OACxB,MAEP+C,KAAKoyB,SAAS,CACVnyB,KAAM7F,KAfN01C,EAAMe,SAASz2C,IAiBpB4B,KAAK,SAGZkR,SACI,IAAIsY,EAAUxlB,KAAK4M,MAAM4Y,SAGrB0qB,EACAjO,EACAkO,EACAC,EACAC,EACAnf,GACAlxB,KAAK3G,QAGT,OAAQ,wBAAKuP,UAAWsnC,EAAUM,IAAI,IAAIvO,EAAawM,gBACnD,wBAAK7lC,UAAY,GAAEsnC,EAAU3P,QAAQrP,EAAWC,aAC5C,uBAAIvoB,UAAWwnC,EAAYZ,cAAc,IAAIa,EAAWI,OAAO,IAAIN,EAAcO,GAAG,IAAIP,EAAcZ,iBACjG/pB,EAAQzpB,OAEZiE,KAAK8vC,MACU,qBAAftqB,EAAQrpB,GACT,iBAAC4C,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAjC,CAAwCp6B,QAAS,KAC7CrW,cAAcu1C,UAAUnQ,KAAK3jC,KAAKC,MAAM,KACzC0U,MAAM,SAFT,0BAEmF,MAEvF,iBAACg/B,GAAD,QAMZ,MAAM3B,WAAoBtiC,GAAM2iC,cAC5BtvC,YAAY6M,GACRnK,MAAMmK,GACN,IAAI4Y,EAAUxlB,KAAK4M,MAAM4Y,QACzBxlB,KAAKswB,MAAQ,CACTrwB,KAAMD,KAAK4M,MAAM49B,QAAQla,MAAMrwB,KAAKulB,EAAQrpB,IAAM,SAAS6D,KAAK4M,MAAM49B,QAAQla,MAAMrwB,KAAKulB,EAAQrpB,IAAM,QAE3G6D,KAAK4M,MAAM49B,QAAQ0D,kBAAkBluC,MAGzCw3B,SAASv3B,GACL,IAAI7F,EAAQ6F,EAAK7F,OAEb4F,KAAKgwC,YAAchwC,KAAKgwC,WAAahzC,KAAKC,MAAQ,KAClD+C,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAAgB,SAAV5F,EAAmB,KAAOA,EAAMkZ,QAAQ,SAAU,KACpFtT,KAAKgwC,WAAahzC,KAAKC,OACjB+C,KAAKiwC,WACXjwC,KAAKiwC,SAAW7rC,WAAW,KACvBpE,KAAK4M,MAAM49B,QAAQhT,SAASx3B,KAA0B,SAApBA,KAAKswB,MAAMrwB,KAAkB,KAAOD,KAAKswB,MAAMrwB,KAAKqT,QAAQ,SAAU,KACxGtT,KAAKiwC,SAAW,KAChBjwC,KAAKgwC,WAAahzC,KAAKC,OACxB,MAEP+C,KAAKoyB,SAAS,CACVnyB,KAAM7F,IAEV4F,KAAK06B,cAGT,cACI,OAAO0U,KAAuBA,GAAqB,CAC/CtkC,UAAU9Q,IAAI+M,GAAKA,EAAEuoC,eAAe,GACpCxkC,UAAU9Q,IAAI+M,GAAKA,EAAE0nC,gBAAgB,GACrC3jC,UAAU9Q,IAAI+M,GAAKA,EAAEwoC,iBAAiB,GACtCzkC,UAAU9Q,IAAI+M,GAAKA,EAAEyoC,eAAe,GACpC1kC,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,GAC7B3kC,UAAU9Q,IAAI+M,GAAKA,EAAE2oC,aAAa,KAI1CxiC,SACI,IAAIsY,EAAUxlB,KAAK4M,MAAM4Y,SAGrB0qB,EACAjO,EACAkO,EACAC,EACAC,EACAnf,GACAlxB,KAAK3G,QAEL2O,EAAUhI,KAAK4M,MAAM49B,QAAQla,MAAM2c,OAAO/xB,IAAInU,IACvC,CACH3M,MAAO,SAAS2M,EAAE5K,GAClBoM,MAAOxB,EAAErN,QASjB,OALAsO,EAAQi5B,QAAQ,CACZ7mC,MAAO,OACPmO,MAAO,cAGH,wBAAKK,UAAWsnC,EAAUM,IAAI,IAAIvO,EAAawM,gBACnD,wBAAK7lC,UAAY,GAAEsnC,EAAU3P,QAAQrP,EAAWC,aAC5C,uBAAIvoB,UAAWwnC,EAAYZ,cAAc,IAAIa,EAAWI,OAAO,IAAIN,EAAcO,GAAG,IAAIP,EAAcZ,iBACjG/pB,EAAQzpB,OAEb,iBAACT,OAAOyD,UAAU+V,IAAIysB,WAAWC,OAAOuP,SAAxC,CAAiD32C,MAAO4F,KAAKswB,MAAMrwB,KAAM+H,QAASA,EAASwvB,SAAUx3B,KAAKw3B,SAAS78B,KAAKqF,SAG5H,iBAAC2wC,GAAD,QAKZ,IA8GIK,GA2DAC,GACAC,GACAC,GA0EAC,GACAC,GACAC,GACAC,GAxPAC,GAAiB,GACrB,MAAMb,WAAgBjkC,GAAM2iC,cACxB,cACI,OAAOmC,IAAgBA,GAAe,GAAKA,GAAkBA,GAAiB,CAC1E1mC,UAAU9Q,IAAI+M,GAAKA,EAAE0qC,SAAqC,IAA1B53C,OAAO2J,KAAKuD,GAAGtD,QAAc,GAC7DqH,UAAU9Q,IAAI+M,GAAKA,EAAE2qC,gBAAgB,IAI7CxkC,SACI,IACIukC,EACAC,GACA1xC,KAAK3G,QAET,OAAO,wBAAKmZ,MAAQ,GAAEi/B,EAAQA,WAAWC,EAAeA,oBAIpChlC,GAAMC,UAgBlC,MAAMgiC,WAAmBjiC,GAAMC,UAC3B5M,YAAY6M,EAAQ,IAChBnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CACTqhB,OAAQ,WAEZ3xC,KAAKiqB,KAAO,GAEZjqB,KAAK4M,MAAM1Q,SAAS2xC,QAAU7tC,KAGlC4xC,UAAUC,GACW7xC,KAAKswB,MAAMqhB,SACVE,EAAIjlC,MAAMzQ,KAE5B6D,KAAKiqB,KAAKvgB,QAAQ3C,IACdA,EAAE+qC,WAAU,KAEhBD,EAAIC,WAAU,GACd9xC,KAAKoyB,SAAS,CACVuf,OAAQE,EAAIjlC,MAAMzQ,MAI1B+Q,SACI,OAAQ,wBAAKtE,UAAU,iBACnB,wBAAKA,UAAU,YAAYX,MAAO,CAAC+pB,KAAM,aACrC,iBAAC+f,GAAD,CAAKlE,QAAS7tC,KAAMjE,MAAM,eAAeI,GAAG,YAC5C,iBAAC41C,GAAD,CAAKlE,QAAS7tC,KAAMjE,MAAM,cAAcI,GAAG,YAE/C,iBAAC,GAAD,CAAsB0xC,QAAS7tC,KAAK6tC,QAASvd,MAAOtwB,KAAKswB,MAAM0hB,IAAKplC,MAAO,CAACihC,QAAS7tC,MAAOtF,IAAKsF,KAAKswB,MAAMqhB,UAIpHM,SAASJ,GACL,OAAO7xC,KAAKswB,MAAMqhB,SAAWE,EAGjC,cACI,MAAyB,YAAtB7xC,KAAKswB,MAAMqhB,OAA4BO,GACnCC,IAIf,MAAMJ,WAAYrlC,GAAMC,UACpB5M,YAAY6M,GACRnK,MAAMmK,GAEN5M,KAAKswB,MAAQ,CACTqhB,OAAQ/kC,EAAMihC,QAAQoE,SAASrlC,EAAMzQ,KAEzCyQ,EAAMihC,QAAQ5jB,KAAKnsB,KAAKkC,MAG5B8xC,UAAUG,GACNjyC,KAAKoyB,SAAS,CACVuf,SAAUM,IAIlB/kC,SACI,IAAItE,EAAa,aAMjB,OALG5I,KAAKswB,MAAMqhB,OACV/oC,GAAc,oBAEdA,GAAc,sBAEV,wBAAKA,UAAWA,EAAWgJ,QAAS,KACxC5R,KAAK4M,MAAMihC,QAAQ+D,UAAU5xC,QAE5BA,KAAK4M,MAAM7Q,QAMxB,MAAMq2C,WAA6B1lC,GAAMC,UACrC41B,kBAAkBphC,EAAKqhC,GACnBphC,QAAQC,MAAMF,EAAKqhC,GACnBxiC,KAAKoyB,SAAS,CACV/wB,OAAO,IAGf6L,SAMI,GALIlN,KAAKswB,QACLtwB,KAAKswB,MAAQ,CACTjvB,OAAO,IAGXrB,KAAKswB,MAAMjvB,MAYX,OADA2vC,GAAeA,IAAgBnkC,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAEsrC,iBAAmBtrC,EAAEurC,YAChFtB,GAIG,wBAAK/oC,MAAO,CACfkjB,OAAQ,SAER,wBAAKljB,MAAO,CACRkqB,gBAAiB,4BACjBmG,QAAS,YACTyM,aAAc,OACfn8B,UAAY,qBAAoBooC,GAAasB,YAC5C,wBAAK1pC,UAAWooC,GAAaqB,gBAAiBpqC,MAAO,CACjDmjB,UAAW,UAIf,wBAAKxiB,UAAWooC,GAAauB,kBAA7B,oBACA,sBAAG3pC,UAAWooC,GAAawB,mBAA3B,6DAEI,sBAAG5pC,UAAY,GAAEiE,GAAK25B,cAAc7iB,UAAU9W,GAAK25B,cAAc5iB,yBAA0B6uB,KAAK,SAASC,SAAU,EAAG9gC,QAAS,KAC3H/E,GAAK4W,WADT,kBAFJ,kBAjBJniB,GAAM4C,UAAU,qEACT,MAbX,IACI,MAAM2pC,EAAU,IAAI7tC,KAAK4M,MAAMihC,QAAQ7tC,KAAK4M,MAAMA,OAElD,OADAihC,EAAQzb,SAASpyB,KAAK4M,MAAM0jB,OACrBud,EAAQ3gC,SAClB,MAAM/L,GAGH,OAFAC,QAAQC,MAAMF,GACdnB,KAAKswB,MAAMjvB,OAAQ,EACZrB,KAAKkN,WAwC5B,MAAMilC,WAAezlC,GAAMC,UACvB,cACI,OAAOskC,KAAkBA,GAAgB,CACrCpkC,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAqC,eAA1B6I,EAAE7I,QAAQY,aACrD+N,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ4mB,kBAI7DuI,eACI,IACIslB,EACAC,GACA5yC,KAAK3G,QAET,MAAMm7B,EAAOoe,EAAW10C,QAAQ4mB,iBAChC,OAAOpY,GAAM/D,cAAc,KACvB,IAAIkqC,EAAUF,EAAWz0C,QAAQ,CAC7BymB,OAAQ6P,EAAKr4B,GACb22C,QAAS,KACTC,UAAW,KACXC,wBAAwB,IAI5B,OAFA9B,GAAsB2B,EAAQ72C,KAC9Bm1C,GAAc0B,EAAQjmC,MACf5M,KAAKkN,UACb,MAGPA,SACI,IAAIgkC,GAAoB,OAAOlxC,KAAKqtB,eACpC,IACI4lB,EACAL,GACA5yC,KAAK3G,QAET,MAAMm7B,EAAOoe,EAAW10C,QAAQ4mB,iBAEhC,IAAI7kB,EAAOpG,OAAOoH,OAAO,GAAIlE,EAAYiD,KAAK4M,MAAMihC,QAAQjhC,MAAM1Q,SAASo0B,MAAMrwB,MACjF,MAAMstC,EAAY,WACd,IAAIvtC,KAAK6sC,KAAK,OAAO,KAerB,MAdW,CACPnzC,KAAMsG,KAAK6sC,KAAKnzC,MAAQqD,EAAWrD,KACnCozC,eAAgB9sC,KAAK6sC,KAAKC,gBAAkB/vC,EAAW+vC,eACvDC,QAAS/sC,KAAK6sC,KAAKE,cAAWtuC,EAC9B6xB,MAAOtwB,KAAK6sC,KAAKvc,YAAS7xB,EAC1BuuC,WAAYhtC,KAAK6sC,KAAK,oBAAsB,CACxC5oC,MAAOjE,KAAK6sC,KAAK,0BACjBpuC,EACJwuC,OAAQjtC,KAAK6sC,KAAK,gBAAkB,CAChCK,YAAaltC,KAAK6sC,KAAK,gBACvBM,YAAantC,KAAK6sC,KAAK,sBAAmBpuC,QAC1CA,EACJzC,KAAM,IAGX1C,KAAK,CACJuzC,KAAM5sC,IAGJizC,EAAS,IAAIhC,GAAoBr3C,OAAOoH,OAAO,GAAIkwC,GAAa,CAClE5D,SAAUA,EACV5oB,OAAQ6P,EAAKr4B,MACb+Q,SAASN,MAAMO,SAGbxB,EAAY,uBAASrQ,OAAOyD,UAAU+V,IAAI+G,EAAEs3B,kBAAkBD,EAAOtmC,MAAO,CAAC,UAAW,mBAE9F,OAAO,wBAAKhE,UAAU,mCACjB+C,IASb,MAAMumC,WAAgBxlC,GAAMC,UACxB,cACI,OAAOykC,KAAmBA,GAAiB,CACvCvkC,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAqC,gBAA1B6I,EAAE7I,QAAQY,aACrD+N,GAAK5N,eAAejB,KAAK+I,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ4mB,kBAI7D5X,SACI,IACIkmC,EACAR,GACA5yC,KAAK3G,QAET,MAAMm7B,EAAOoe,EAAW10C,QAAQ4mB,iBAChC,IAAIusB,GAAqB,CACrB,MAAMwB,EAAU,IAAIO,EAAYl1C,QAAQ,CACpCs2B,KAAMA,IACPtnB,SACHqkC,GAAwBsB,EAAQ72C,KAChC,MAAMq3C,EAAU,IAAIR,EAAQ72C,KAAK62C,EAAQjmC,OAAOM,SAC1ComC,EAAUD,EAAQr3C,KAAKkR,OAAOmmC,EAAQzmC,MAAO,MAC7C2mC,EAAU,IAAID,EAAQt3C,KAAKs3C,EAAQ1mC,OAAOM,SAChDmkC,GAAuBkC,EAAQv3C,KAEnC,IAAIq1C,GAAqB,MAAM,IAAIhjC,MAAO,qDAE1C,IAAIpO,EAAOpG,OAAOoH,OAAO,GAAIlE,EAAYiD,KAAK4M,MAAMihC,QAAQjhC,MAAM1Q,SAASo0B,MAAMrwB,MACjF,MAAMstC,EAAY,WACd,IAAIvtC,KAAK6sC,KAAK,OAAO,KAerB,MAdW,CACPnzC,KAAMsG,KAAK6sC,KAAKnzC,MAAQqD,EAAWrD,KACnCozC,eAAgB9sC,KAAK6sC,KAAKC,gBAAkB/vC,EAAW+vC,eACvDC,QAAS/sC,KAAK6sC,KAAKE,cAAWtuC,EAC9B6xB,MAAOtwB,KAAK6sC,KAAKvc,YAAS7xB,EAC1BuuC,WAAYhtC,KAAK6sC,KAAK,oBAAsB,CACxC5oC,MAAOjE,KAAK6sC,KAAK,0BACjBpuC,EACJwuC,OAAQjtC,KAAK6sC,KAAK,gBAAkB,CAChCK,YAAaltC,KAAK6sC,KAAK,gBACvBM,YAAantC,KAAK6sC,KAAK,sBAAmBpuC,QAC1CA,EACJzC,KAAM,IAGX1C,KAAK,CACJuzC,KAAM5sC,IAGVqxC,GAAe,IAAIC,GAAsB,CACrC/c,KAAMA,EACNpc,MAAO,SACRlL,SAASN,MACZ,MAAM4mC,EAAU,IAAInC,GAAqBx3C,OAAOoH,OAAO,GAAIqwC,GAAc,CACrE/D,SAAUA,KACVrgC,SAASN,MAAMO,SAMnB,OAJAqmC,EAAQ5mC,MAAM3E,MAAQ,CAClB2I,MAAO,QAGJ,wBAAKhI,UAAU,4BACjB4qC,ICtuBb,MAAM9mC,GAAQG,GAAKH,MAEnB,IAAIyjC,GAAgBrlC,UAAU9Q,IAAI+M,GAAKA,EAAEwoC,iBAAiB,GACtDa,GAActlC,UAAU9Q,IAAI+M,GAAKA,EAAEyoC,eAAe,GAClDa,GAAavlC,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,GAC1CgE,GAAmB3oC,UAAU9Q,IAAI+M,GAAKA,EAAE2sC,wBAAwB,GACpE,MAAMC,GAAc7oC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ01C,WAAW,GAAG11C,QACtE21C,GAAqB/oC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ41C,kBAAkB,GAAG51C,QACpF61C,GAAgBjpC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ81C,aAAa,GAAG91C,QAC1E00C,GAAa9nC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ4mB,gBAAgB,GAAG5mB,QAEjE,MAAM+1C,WAAyBvnC,GAAMC,UAChD5M,YAAY6M,GACRnK,MAAMmK,GAGVM,SAII,OAHIijC,KAAcA,GAAgBrlC,UAAU9Q,IAAI+M,GAAKA,EAAEwoC,iBAAiB,IACpEa,KAAYA,GAActlC,UAAU9Q,IAAI+M,GAAKA,EAAEyoC,eAAe,IAC9Da,KAAWA,GAAavlC,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,IAClD,CACH,iBAAC,GAAD,CAAmB1nC,KAAK,kBACxB,4BACI,uBAAIa,UAAWwnC,GAAYZ,cAAc,IAAIa,GAAWI,OAAO,IAAIN,GAAcO,GAAG,IAAIP,GAAcZ,iBAAtG,WAGA,iBAAC2E,GAAD,CAAaniC,QAAS/R,KAAKm0C,kBAAmBC,SAAS,SACvD,uBAAIxrC,UAAWwnC,GAAYZ,cAAc,IAAIa,GAAWI,OAAO,IAAIN,GAAcO,GAAG,IAAIP,GAAcZ,iBAAtG,cAGA,iBAAC2E,GAAD,CAAaniC,QAAS/R,KAAKq0C,gBAAiBD,SAAS,SACrD,uBAAIxrC,UAAWwnC,GAAYZ,cAAc,IAAIa,GAAWI,OAAO,IAAIN,GAAcO,GAAG,IAAIP,GAAcZ,iBAAtG,sBAGA,iBAAC2E,GAAD,CAAaniC,QAAS/R,KAAKs0C,kBAAmBF,SAAS,UAE3D,wBAAKxrC,UAAWkC,UAAU9Q,IAAI+M,GAAKA,EAAE0nC,gBAAgB,GAAGA,kBAIhE6F,kBACI,MAAMC,EAAcR,GAAcC,cAC5BQ,EAAW36C,OAAO2J,KAAK+wC,GAAat2C,OAAO8I,GAAW,QAANA,GAAamU,IAAInU,GAAKwtC,EAAYxtC,IAExF,OAAuB,IAApBytC,EAAS/wC,OAAoB,qDAEzB+wC,EAASt5B,IAAInU,GACR,SAAQA,EAAE0tC,oBACtB1tC,EAAE2tC,WAAWC,GAAG,GAAGntC,cAAcT,EAAE2tC,WAAWC,GAAGltC,MAAM,iBACnDV,EAAE2tC,WAAWE,qBACb7tC,EAAEqH,yBACErH,EAAE8tC,WAAWpxC,UAClB7D,KAAK,KAAK,IAAIk1C,OAAO,IAAI,MAGhCX,kBACI,MAAM3f,EAAOoe,GAAW9tB,iBAIlBiwB,EAAYvgB,EAAKugB,UAEvB,IAAIC,EAAYxgB,EAAKwgB,UAYrB,OAXGxgB,EAAKygB,QAAUzgB,EAAKygB,OAAOrnC,WAAW,QACrConC,EAAYxgB,EAAK0gB,aAAa,QAG/BF,EAAUpnC,WAAW,OACpBonC,EAAY,sBAAsBA,GAEnCA,EAAUnnC,SAAS,eAClBmnC,EAAYA,EAAU1hC,QAAQ,YAAa,eAGvC,eAAckhB,EAAK4D,8BAChB5D,EAAK6D,yBACf7D,EAAK/I,cACN+I,EAAKr4B,iBACDq4B,EAAKygB,yBACDD,uBACID,EAAUI,UAAWniC,WAAW6b,SAAS,EAAG,SAASkmB,EAAUK,WAAW,GAAGpiC,WAAW6b,SAAS,EAAG,QAASkmB,EAAUM,cAAeriC,WAAW6b,SAAS,EAAG,QAAQkmB,EAAUO,WAAWtiC,WAAW6b,SAAS,EAAG,SAASkmB,EAAUQ,aAAaviC,WAAW6b,SAAS,EAAG,WAAWkmB,EAAUS,2BACtShhB,EAAKihB,uBACDjhB,EAAKkhB,uBAAyB,MAAQ,kBAC1ClhB,EAAKmhB,iBACPnhB,EAAKohB,WAAa,MAAQ,+BACXphB,EAAKqhB,OAAS,MAAQ,kBACnCrhB,EAAKshB,OAAS,uBACXthB,EAAKuhB,sCACQvhB,EAAKwhB,cAG5B3B,gBAEI,MAAMrwB,EAASnqB,OAAO0L,OAAOouC,GAAYC,aACnCqC,EAAYp8C,OAAO2J,KAAKqwC,GAAmBC,oBAC3CoC,EAAUD,EAAUh4C,OAAO8I,GAAK8sC,GAAmBsC,SAASpvC,IAC5DqvC,EAAUH,EAAUh4C,OAAO8I,GAAK8sC,GAAmBwC,UAAUtvC,IAEnE,MAAQ,mBAAkBid,EAAOvgB,gCAC1BwyC,EAAUxyC,sCACNyyC,EAAQzyC,0CACF2yC,EAAQ3yC,wBAKjC,IAAI6yC,GAAexrC,UAAU9Q,IAAI+M,GAAKA,EAAEwvC,WAAW,GAC/CC,GAAiB1rC,UAAU9Q,IAAI+M,GAAKA,EAAEunB,QAAQ,GAC9CmoB,GAAiB3rC,UAAU9Q,IAAI+M,GAAKA,EAAEinB,gBAAgB,GAE1D,MAAMkmB,WAAoBxnC,GAAMC,UAC5BO,SAKI,OAJIspC,KAAeA,GAAiB1rC,UAAU9Q,IAAI+M,GAAKA,EAAEunB,QAAQ,IAC7DmoB,KAAeA,GAAiB3rC,UAAU9Q,IAAI+M,GAAKA,EAAEinB,gBAAgB,IACrEylB,KAAiBA,GAAmB3oC,UAAU9Q,IAAI+M,GAAKA,EAAE2sC,wBAAwB,IACjF4C,KAAaA,GAAexrC,UAAU9Q,IAAI+M,GAAKA,EAAE2vC,eAAe,IAC5D,wBAAKlkC,MAAQ,GAAEgkC,GAAeloB,UAAUmoB,GAAezoB,kBAC3D,4BACI,yBAAMxb,MAAUihC,GAAiBC,uBAAnB,QAAkDxL,wBAAyB,CAACC,OAAQmO,GAAaC,UAAUv2C,KAAK4M,MAAMwnC,SAAUp0C,KAAK4M,MAAMmF,SAAS3X,UAItK,wBAAKwO,UAAWkC,UAAU9Q,IAAI+M,GAAKA,EAAEyqB,eAAe,GAAGA,kBC9HnE,MAAMib,GAAanxC,OAAOyD,UAAU43C,eAAelK,WAC7CmK,GAAgB9rC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ24C,YAAc9vC,EAAE7I,QAAQ44C,YAAY,GAAG54C,QACvG,IAAI21C,GAAqB/oC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ64C,iBAAiB,GAChFC,GAAWlsC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ+4C,qBAAqB,GAE9E,MAAMb,GAAU,GAEhB,IAAIxD,GAAa9nC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ4mB,gBAAgB,GAM5D,WAAI,MACf/kB,cACIC,KAAKk3C,OAASl3C,KAAKk3C,OAAOv8C,KAAKqF,MAC/BA,KAAKgG,SAAU,EAGnBjB,SACO/E,KAAKgG,UACRhG,KAAKgG,SAAU,EAEfymC,GAAWlsB,UAAU,iBAAkBvgB,KAAKk3C,SAGhDjyC,UACQjF,KAAKgG,UACThG,KAAKgG,SAAU,EAEfymC,GAAWnsB,YAAY,iBAAkBtgB,KAAKk3C,SAGlDA,OAAO/b,GACH,IAAIA,EAAGp3B,QAAQskC,OAAO8O,IAAI,OAC1B,GAAGhc,EAAGp3B,QAAQskC,OAAOlsC,MA1BtBy2C,GAAkBA,GAAW10C,QAAQ4mB,iBACjC,MAyB0C3oB,IAC1Cg/B,EAAGp3B,QAAQqzC,SAAS,OAEvB,MAAMC,EAAUT,GAAcC,WAAW1b,EAAGp3B,QAAQuzC,YAsB5D,IAAqBvzC,EArBTszC,IAEgB,IAAjBA,EAAQr7C,OAERo6C,GAAQjb,EAAGp3B,QAAQskC,OAAOlsC,MAiBhB4H,EAfEo3B,EAAGp3B,SAgBnB,kEAAkEyP,KAAKzP,EAAQgO,UAC/EwlC,GAAexzC,EAAS,gBAAkBwzC,GAAexzC,EAAS,wBAA0BwzC,GAAexzC,EAAS,6BAhB/GqyC,GAAQjb,EAAGp3B,QAAQskC,OAAOlsC,KAAM,EAChCmF,GAAM4C,UAAW,sBAAqBi3B,EAAGp3B,QAAQskC,OAAOjQ,YAAY+C,EAAGp3B,QAAQskC,OAAOhQ,gBAAiB,CACnG,KAAQ,YAERwb,KAAmBA,GAAqB/oC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ64C,iBAAiB,IACvGlD,GAAmB31C,QAAQ64C,gBAAgB5b,EAAGp3B,QAAQskC,OAAOlsC,GAAI,CAC7Dq7C,SAAU,eACX,GACCR,KAASA,GAAWlsC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ+4C,qBAAqB,IACvFD,GAAS94C,QAAQ+4C,oBAAoBI,EAAQl7C,IAAI,SAW7D,SAASo7C,GAAexzC,EAASugB,GAC7B,IAAImzB,EAAS1zC,EAAQ0zC,QAAU,GAC/B,OAAqB,IAAlBA,EAAOh0C,QACHg0C,EAAOv8B,IAAIw8B,GACI,SAAfA,EAAM17C,UACL07C,EAAM37C,OAAS,IAAI0U,SAAS6T,QAC5BozB,EAAM77C,aAAe,IAAI4U,SAAS6T,SACjCozB,EAAMjuB,OAAiBiuB,EAAMjuB,OAAO1hB,KAApB,KAA4B,IAAI0I,SAAS6T,OAC1DozB,EAAMC,QAAU,IAAIz8B,IAAInU,GACjBA,EAAE3M,MAAMqW,SAAS6T,IAAWvd,EAAErN,KAAK+W,SAAS6T,IACpD7T,UAAS,OAGbA,UAAS,GC1EhB,IAAImnC,GACJ,MAAM/sC,GAAWvJ,GAAMuJ,SAkBR,WAAI,MACf9K,cACIC,KAAKgG,SAAU,EAGnBjB,SACO/E,KAAKgG,UACRhG,KAAKgG,SAAU,EACf4xC,GAAYA,IAzBpB,WACI,IAAIC,EAAsB/sC,UAAU9Q,IAAI+M,GAAKA,EAAE8wC,qBAAqB,GACpE,IAAIA,EAAoB,OAAO,KAC/B,IAAIC,EAAmBjtC,GAASgtC,EAAoBA,qBAChDE,EAAU,GACVC,EAAsBltC,UAAU9Q,IAAI+M,GAAKA,EAAEixC,qBAAqB,GACpE,MAAM7qC,EAAWrC,UAAU9Q,IAAI+M,GAA2B,iBAAfA,EAAEoG,UAAuB,GAQpE,OAPA4qC,EAAQj6C,KAAM,eAAcg6C,oBAAmCjtC,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAElL,aAAwC,iBAAlBkL,EAAElL,aAA4BkL,EAAElL,YAAY4U,SAAS,aAAa,GAAG5U,gBACxLk8C,EAAQj6C,KAAM,eAAcg6C,MAAqBjtC,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAEkxC,kBAAkB,GAAGA,sBAAsBptC,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAEmxC,SAAWnxC,EAAEoxC,oBAAoB,GAAGD,YACzLF,IACCD,EAAQj6C,KAAM,eAAcg6C,MAAqBjtC,GAASmtC,EAAoBA,2DAA2DntC,GAASC,UAAU9Q,IAAI+M,GAAKA,EAAEqxC,UAAU,GAAGA,aACpLL,EAAQj6C,KAAM,IAAG+M,GAASmtC,EAAoBK,0BAA0BxtC,GAASsC,EAASA,iCAE9F/L,QAAQoE,IAAIuyC,GACLA,EAWsBO,GAErBV,IAAUx2C,QAAQC,MAAM,IAAIgN,MAAM,4DACtCkN,GAAS6F,SAAS,cAAgB,KACxCw2B,GAAUh4C,KAAK,sHAMfg4C,GAAU18B,IAAInU,GAAKA,EAAE,UAAUnH,KAAK,8GAOlCqF,UACQjF,KAAKgG,UACThG,KAAKgG,SAAU,EACfuV,GAASoG,YAAY,kBCtDd,OAAI,MACf5hB,cACIzE,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQq6C,aAC/DrqC,KAAKsqC,IACF,IAAIj/B,EAAOvZ,KACX,MAAMu4C,EAAcC,EAAat6C,QAAQq6C,YACzCC,EAAat6C,QAAQq6C,YAAc,WAC/B,GAAGh/B,EAAKnR,SAAS,OAAOmwC,EAAYj/C,KAAK0G,QAAS4Z,YAEtD,MAAM6+B,EAAaD,EAAat6C,QAAQu6C,WACxCD,EAAat6C,QAAQu6C,WAAa,WAC9B,GAAGl/B,EAAKnR,SAAS,OAAOqwC,EAAWn/C,KAAK0G,QAAS4Z,YAErD5Z,KAAKoI,UAAW,IAEpB9M,OAAOyD,UAAUC,cAAc05C,cAAgB14C,KAGnDiF,UACIjF,KAAKoI,UAAW,EAGpBrD,SACI/E,KAAKoI,UAAW,ICfxB,IAAI05B,GACW,MAAM6W,WAAmBjsC,MAAM2iC,cAC1CtvC,cACI0C,SAASmX,WACT5Z,KAAKswB,MAAQ,CACTsoB,OAAQ,IAIhB1rC,SACQ40B,KAAWA,GAAaxE,EAAet/B,KAAK+I,GAAKA,EAAE07B,cAIvD,MAAMoW,EAAgB,IAAI,IAAI5K,IAAIp0C,OAAO2J,KAAKlI,OAAOyD,UAAU+V,IAAIysB,YAAYrmB,IAAInU,GACxElN,OAAO2J,KAAKlI,OAAOyD,UAAU+V,IAAIysB,WAAWx6B,IAAImU,IAAI3G,GAAKjZ,OAAOyD,UAAU+V,IAAIysB,WAAWx6B,GAAGwN,KACpG+I,SACH,MAAO,CACH,oBAAC,GAAWmlB,YAAZ,CAAwBhX,IAAI,KAAK1vB,MAAM,yCACnC,oBAAC,GAAW2mC,SAAZ,CAAqB1mC,KAAK,cAAc4M,UAAU,GAAGgiB,YAAY,GAAjE,6GAEI,2BAAK3iB,MAAO,CAACmjB,UAAW,UACxB,oBAACrsB,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAlC,CAA2C/8C,KAAK,QAAhD,yGACA,oBAAC+C,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAlC,CAA2C/8C,KAAK,QAAhD,6GAEJ,oBAACmmC,GAAD,MACA,oBAACpjC,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAjC,CAAwCr6B,MAAM,QAAQs6B,KAAK,WAAWhyB,KAAK,SAASiyB,WAAW,QAAQt6B,QAAS,KAC5GtN,SAAO6B,MAAMoK,aAAa,mDAC3BuT,SAAS,GAFZ,kBAMJ+0B,EAAc39B,IAAIizB,IACd,MAAM6K,EAAW7K,EAAKrvC,aAAeqvC,EAAKz0C,KACpCu/C,EAAY,4BAA2Bp/C,OAAO2J,KAAKlI,OAAOyD,UAAU+V,IAAIysB,YAAYvjC,KAAK+I,GAAKzL,OAAOyD,UAAU+V,IAAIysB,WAAWx6B,GAAGiyC,OAAcA,IACrJ,OAAO,oBAACE,GAAD,CAAkBx+C,IAAKu+C,EAAU9K,KAAMA,OAK1D,gBAKJ,MAAM+K,WAAyBxsC,MAAMC,UACjC5M,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAKswB,MAAQ,CACTuhB,IAAK,UACLn/B,KAAM9F,EAAMuhC,KACZnmC,QAAS,IAIjBkF,SACI,MAAMihC,EAAOnuC,KAAK4M,MAAMuhC,KACxB,IAAIgL,EAAc,GACfhL,EAAKgL,cAAYA,EAAchL,EAAKgL,aACvC,IAAI7oB,EAAQtwB,KAAKswB,MACb0a,EAAW,KACX,IAAIn2B,EAAQ,GAOZ,OANAskC,EAAYzvC,QAAQlN,IAChBqY,EAAMhb,OAAO2J,KAAKhH,EAAS,IAAI,IAAMA,EAAS,GAAG3C,OAAO2J,KAAKhH,EAAS,IAAI,MAE9E3C,OAAO2J,KAAK8sB,EAAMtoB,SAAS0B,QAAQhP,IAC/Bma,EAAMna,GAAOy+C,EAAYn7C,KAAK+I,GAAKA,EAAE/I,KAAK+I,GAAKA,EAAErM,KAAO41B,EAAMtoB,QAAQtN,IAAMA,KAEzEma,GAuCPukC,EAAgB,CAACh/C,EAAO6+C,EAAUI,KAClC,GAAoB,iBAAVj/C,EACN,OAAOA,EACL,GAAoB,kBAAVA,EACZ,OAAOk/C,OAAOl/C,GACZ,GAAoB,mBAAVA,EACZ,OAAOA,EAAM4Y,WACX,GAAoB,iBAAV5Y,EAAmB,CAC/B,GAAGA,GAASA,EAAMm/C,WAAan/C,EAAMm/C,WAAar/C,OAAOs/C,IAAI,kBAAuC,QAAnBp/C,EAAMm/C,UAAqB,CACxG,GAAgB,0CAAbN,EAAqD,CACpD,GAAY,UAATI,EACC,MAAQ,uVAWN,GAAY,QAATA,EACL,MAAQ,8UAahB,MAAO,wBAEX,OAAO14C,KAAKC,UAAUxG,EAAO,KAAM,QACjC,OACKk/C,OAAOl/C,IAIlBq/C,EAAe,SAASJ,GACxB,MAAML,EAAW7K,EAAKrvC,aAAeqvC,EAAKz0C,KAE1C,MACMu/C,EAAY,4BAFDp/C,OAAO2J,KAAKlI,OAAOyD,UAAU+V,IAAIysB,YAClBvjC,KAAK+I,GAAKzL,OAAOyD,UAAU+V,IAAIysB,WAAWx6B,GAAGiyC,OAChBA,IACvDpsC,EAAQo+B,IAEd,GAAY,QAATqO,EAAe,CACd,IAeIK,EAfAC,EAAc,GACdC,EAAe,KAenB,GAdA//C,OAAO2J,KAAKoJ,GAAOlD,QAAQhP,IACvB,GAAU,YAAPA,EACCk/C,EAAeR,EAAcxsC,EAAMlS,GAAMu+C,EAAUI,OAClD,CACD,IAAIQ,EAAMn/C,EAAI,IACW,iBAAfkS,EAAMlS,GACZm/C,GAAOl5C,KAAKC,UAAUgM,EAAMlS,IAE5Bm/C,GAAQ,IAAGT,EAAcxsC,EAAMlS,GAAMu+C,EAAUI,MAEnDM,EAAY77C,KAAK+7C,MAItBD,EAAa,CAGZ,OAFAF,EAAW,IAAGT,KAAYU,EAAY/5C,KAAK,QAEnC,GAAE85C,UAAgBE,MADV,KAAIX,OAIpB,OADAS,EAAW,IAAGT,KAAYU,EAAY/5C,KAAK,SACpC85C,EAET,GAAY,UAATL,EAAiB,CACtB,IAAIlsC,EAAWP,EAAMO,UAAY,YAC1BP,EAAMO,SACVA,GAAYA,EAASosC,WAAapsC,EAASosC,WAAar/C,OAAOs/C,IAAI,kBAA0C,QAAtBrsC,EAASosC,YAC/FpsC,EAAWisC,EAAcjsC,EAAU8rC,EAAUI,IAEjD,IAAIM,EAAc,GAClB9/C,OAAO2J,KAAKoJ,GAAOlD,QAAQhP,IACvB,IACIm/C,GADa,YAAYrmC,KAAK9Y,GAAOiG,KAAKC,UAAUlG,GAAOA,GAC1C,KACI,iBAAfkS,EAAMlS,GACZm/C,GAAOl5C,KAAKC,UAAUgM,EAAMlS,IAE5Bm/C,GAAOT,EAAcxsC,EAAMlS,GAAMu+C,EAAUI,GAAMlmC,MAAM,MAAM+H,IAAI,CAAC2+B,EAAK1gD,IAC1D,IAANA,EAAe0gD,EACX,OAASA,GACjBj6C,KAAK,MAEZ+5C,EAAY77C,KAAK+7C,KAErB,IAAIC,EAAa,IACdH,EAAYl2C,OACXk2C,EAAYjwC,QAAQ,CAACmwC,EAAK1gD,KACtB,IAAI4gD,EAAS5gD,IAAMwgD,EAAYl2C,OAAS,EACpB,IAANtK,IAEV2gD,GAAc,KAElBA,GAAc,SACdA,GAAcD,EACXE,IACCD,GAAa,SAIrBA,GAAc,IAElB,IAAIE,EAAmC,iBAAb7sC,GAAyBA,EAASS,WAAW,uBAAyBT,EAAWxM,KAAKC,UAAUuM,GAC1H,MAAQ,uBAAsB8rC,MAAaa,MAAeE,OAG9DC,EAAO9L,EAAK8L,MAAQ,GACpB79C,EAAO69C,EAAK79C,KAAO,oBAACd,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAzC,CAAkD/8C,KAAK,QACzEi+C,EAAK79C,MAC4C,KAClDie,EAAO4/B,EAAK5/B,KAAO,oBAAC/e,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAzC,CAAkD/8C,KAAK,QACzEi+C,EAAK5/B,MAC4C,KAClDjK,EAAS6pC,EAAK7pC,OAAS,oBAAC9U,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAzC,CAAkD/8C,KAAK,UAC7Ei+C,EAAK7pC,QAC4C,KAClD/O,EAAQ44C,EAAK54C,MAAQ,oBAAC/F,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAzC,CAAkD/8C,KAAK,SAC3Ei+C,EAAK54C,OAC4C,KAClD64C,EAAUD,EAAKC,QAAU,oBAAC5+C,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQC,SAAzC,CAAkD/8C,KAAK,WAC/Ei+C,EAAKC,SAC4C,KACtD,OAAQ,+BACJ,oBAAC5+C,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQ9gB,cAAzC,KACKmW,EAAKrvC,aAAeqvC,EAAKz0C,MAE7B0C,EACA89C,EACA7/B,EACAhZ,EACA+O,EACA+oC,EAAYj+B,IAAI1e,IACb,GAAGA,EAAS,GAAGoV,QAAQ,OAAO,KAC9B,GAAGpV,EAAS,GAAGuL,KAAK,OAAO,KAC3B,GAAGvL,EAAS,GAAG2Q,SAAS,OAAO,KAC/B,GAAuB,IAApB3Q,EAASiH,OAAa,OAAO,KAEhC,IAAI/I,EAAMb,OAAO2J,KAAKhH,EAAS,IAAI,GACnC,MAAO,CACH,oBAAClB,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQqB,gBAAzC,KACKz/C,GAEL,oBAACY,OAAOyD,UAAU+V,IAAIysB,WAAWC,OAAOuP,SAAxC,CAAiD/oC,QAASxL,EAAS0e,IAAI,CAACnU,EAAGqjB,KAChE,CACHhwB,MAAO,OAAOgwB,EACd7hB,MAAO5H,KAAKC,UAAUmG,EAAElN,OAAO2J,KAAKuD,GAAG,QAE3C3M,MAAO,QAAQk2B,EAAMtoB,QAAQtN,IAAQ,KAAM88B,SAAWp9B,IACtD4F,KAAKoyB,SAAS,CACVpqB,QAASnO,OAAOoH,OAAO,GAAIqvB,EAAMtoB,QAAS,CACtC,CAACtN,IAAON,EAAMA,OAAS,KAAKkZ,QAAQ,OAAQ,SAGrD8mC,YAAY,IACf,2BAAKnyC,MAAO,CAACiwB,aAAc,YAGnC,oBAAC58B,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQuB,KAAzC,CAA8CpwB,KAAM,CAAC,CAAC1hB,MAAO,UAAWpM,GAAI,WAAY,CAACoM,MAAO,OAAQpM,GAAI,SACxGw1C,OAAQrhB,EAAMuhB,IAAK1kC,SAAwB,YAAdmjB,EAAMuhB,IA7MhC,2BAAK5pC,MAAO,CAACkjB,OAAQ,SACxB,2BAAKljB,MAAO,CACRkqB,gBAAiB,8BACjBmG,QAAS,YACTyM,aAAc,OACfn8B,UAAU,qBACR8D,MAAM/D,cAAcwlC,EAAMnD,OAK5B,2BAAK/iC,MAAO,CAACkjB,OAAQ,SACxB,2BAAKljB,MAAO,CACRkqB,gBAAiB,8BACjBmG,QAAS,YACTyM,aAAc,OACfn8B,UAAU,qBACT,oBAACtN,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQqB,gBAAzC,YAGA,oBAAC7+C,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQwB,aAAzC,KACK5tC,MAAM/D,cAAc,IACV,oBAACrN,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQyB,UAAzC,CAAmDnG,SAAS,MAAMriC,QAAS0nC,EAAa,WAGvG,oBAACn+C,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQqB,gBAAzC,cAGA,oBAAC7+C,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQwB,aAAzC,KACK5tC,MAAM/D,cAAc,IACV,oBAACrN,OAAOyD,UAAU+V,IAAIysB,WAAWuX,QAAQyB,UAAzC,CAAmDnG,SAAS,KAAKriC,QAAS0nC,EAAa,eA+KnBjiB,SAAWqa,IAC9F7xC,KAAKoyB,SAAS,CACVyf,aCvRxB,MAAMnlC,GAAQG,GAAKH,MAEJ,MAAM8tC,WAAgB9tC,GAAMC,UACvCO,SACI,MAAM+M,EAAOja,KAAK4M,MAAMqN,MAAQ,OAChC,OAAO,wBAAKlJ,QAAQ,YAAYI,KAAK,qBAAqBvI,UAAW5I,KAAK4M,MAAMhE,WAAa,GAAIX,MAAO,CAAC2I,MAAOqJ,EAAMpJ,OAAQoJ,GAAOrI,QAAS5R,KAAK4M,MAAMgF,SACrJ,yBAAMnY,EAAE,gBAAgB0X,KAAK,SAC7B,yBAAM1X,EAAE,uOCVL,WAAI,MACfsG,cAIIC,KAAKy6C,QAAU,IAAIC,IACnB16C,KAAKgG,SAAU,EACfhG,KAAK26C,OAGT,aACI,IAAIC,QAAqBt/C,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ28C,WACzFv/C,OAAOyD,UAAU43C,eAAelK,WAAWlsB,UAAU,qBAAuB4a,IACxE4H,aAAa,KAIT,MAAMznC,EAASs/C,EAAa18C,QAAQ28C,UAAU1f,EAAGzgC,KACjDsF,KAAKy6C,QAAQrlC,IAAI+lB,EAAGzgC,IAAKY,GAEzB,IAAI8Q,EAAY9Q,EAAOoN,SAAS+B,KAAK2B,UACrCA,EAAUC,IAAI,iBACdD,EAAUC,IAAI,aACdD,EAAUC,IAAI,aAEdrM,KAAK4O,OAAOusB,EAAGzgC,SAGvBY,OAAOyD,UAAU43C,eAAelK,WAAWlsB,UAAU,sBAAwB4a,IACzE4H,aAAa,KACT/iC,KAAKy6C,QAAQ50C,OAAOs1B,EAAGzgC,SAG/B8mB,EAAShd,GAAG,gBAAiB,KACzBxE,KAAK4O,WAET4S,EAAShd,GAAG,iBAAkB,KAC1BxE,KAAK4O,WAET4S,EAAShd,GAAG,iBAAkB,KAC1BxE,KAAK4O,WAET4S,EAAShd,GAAG,iBAAkB,KAC1BxE,KAAK4O,WAET4S,EAAShd,GAAG,eAAgB,KACxBxE,KAAK4O,WAIb7J,SACI/E,KAAKgG,SAAU,EACfhG,KAAK4O,SAGT3J,UACIjF,KAAKgG,SAAU,EACfhG,KAAK4O,SAGTA,OAAOlU,GACH,GAAIsF,KAAKy6C,QAAQxgC,KACjB,OAAIja,KAAKgG,QAGEhG,KAAK86C,YAAYpgD,GAFjBsF,KAAK+6C,aAAargD,GAMjCqgD,aAAargD,GACT,IAAGsF,KAAKgG,QACR,GAAGtL,EAAI,CACH,IAAIY,EAAS0E,KAAKy6C,QAAQzgD,IAAIU,GAC9B,IAAIY,EAAO,OACX,IAAIoN,EAAWpN,EAAOoN,SAEtB,IAAI,IAAIT,KAASS,EAASiU,iBAAiB,oCACvC1U,EAAMuD,cAGV,IAAI,IAAI9Q,KAAOsF,KAAKy6C,QAAQj3C,OACxBxD,KAAK+6C,aAAargD,GAK9BogD,YAAYpgD,GACR,GAAIsF,KAAKgG,QACT,GAAGtL,EAAI,CACH,IAAIY,EAAS0E,KAAKy6C,QAAQzgD,IAAIU,GAC9B,IAAIY,EAAO,OACX,IAAIoN,EAAWpN,EAAOoN,SAEtB,IAAI,IAAIT,KAASS,EAASiU,iBAAiB,oCACvC1U,EAAMg4B,aAAa,cAAe,QAGtCpmC,OAAO2J,KAAKhG,UACXkM,QAAQsxC,IACL,IAAIr9C,EAAYq9C,GAAW,OAC3B,MAAM75B,EAAQ3jB,SAASw9C,GACvB,IAAI75B,EAAM,OAEV,IAAI85B,EAAWvyC,EAASkC,cAAc,oCAAoCmW,GAAIpG,SAASwG,EAAMhlB,KAC7F,GAAG8+C,EACCA,EAASl+B,UAAYsE,SAASF,EAAMjH,KACpC+gC,EAASC,gBAAgB,mBACxB,CACD,MAAMjzC,EAAQS,EAASC,cAAc,SACrCV,EAAM9L,GAAK4kB,GAAIpG,SAASwG,EAAMhlB,IAC9B8L,EAAM8U,UAAYsE,SAASF,EAAMjH,KACjCjS,EAAMg4B,aAAa,uBAAwB,QAC3Cv3B,EAAS8S,KAAKnS,OAAOpB,MAI7B,IAAI,IAAIA,KAASS,EAASiU,iBAAiB,2BACvC1U,EAAMuD,cAGV,IAAI,IAAI9Q,KAAOsF,KAAKy6C,QAAQj3C,OACxBxD,KAAK86C,YAAYpgD,KC3FjC,MAAMygD,WAAwBzuC,MAAM2iC,cAChCniC,SACI,IAAIkuC,EAAoB9d,EAAet/B,KAAK+I,GAAKA,EAAEs0C,WAAat0C,EAAEu0C,QAAUv0C,EAAEw0C,MAE9E,MAAMC,EAAkB9uC,MAAM/D,cAAcgI,EAAa,CAACgB,MAAO,QAASzJ,KAAM,MAAOH,KAAM,aACzF2E,MAAM/D,cAAc,OAAQ,CAACV,MAAO,CAACuJ,MAAO,QAASc,OAAQ,WAAY1J,UAAW,sBAAuBgJ,QAAS,KAAOtQ,GAAMm6C,mBAAmB7/C,gBAChJ8Q,MAAM/D,cAAc6xC,GAAS,CAAC5xC,UAAW,UAAWqR,KAAM,WAOlE,OAJe,IAAImhC,EAAkBE,OAAO,CACxCnuC,SAAUT,MAAM/D,cAAc,OAAQ,KAAM,cAAe6yC,GAC3D5yC,UAAW,uBAMvB,IAAI8yC,IAAkB,EAEP,WAAI,MAEf37C,cACIC,KAAKw3B,SAAWx3B,KAAKw3B,SAAS78B,KAAKqF,MACnCA,KAAK27C,eAAiB37C,KAAK27C,eAAehhD,KAAKqF,MAC/CA,KAAKqoB,QAAU,IAAI2E,GAEnBhtB,KAAK47C,qBAGTA,qBAEI57C,KAAKqoB,QAAQ6E,SAAS,YAAa2uB,GAAc77C,KAAK87C,mBAAmBnhD,KAAKqF,QAC9EA,KAAKqoB,QAAQ6E,SAAS,SAAU2uB,GAAc77C,KAAK+7C,kBAAkBphD,KAAKqF,QAC1EA,KAAKqoB,QAAQ6E,SAAS,cAAe2uB,GAAc77C,KAAKg8C,sBAAsBrhD,KAAKqF,QACnFA,KAAKqoB,QAAQ6E,SAAS,eAAgB2uB,GAAc77C,KAAKi8C,oBAAoBthD,KAAKqF,QAGlFA,KAAKqoB,QAAQ6E,SAAS,mBAAoB2uB,GAAc,KAC7C,IAAIV,IAAkBjuC,WAEjClN,KAAKqoB,QAAQ6E,SAAS,OAAQ2uB,GAAc77C,KAAKk8C,cAAcvhD,KAAKqF,QACpEA,KAAKqoB,QAAQ6E,SAAS,YAAa2uB,GAAc77C,KAAKm8C,mBAAmBxhD,KAAKqF,QAC9EA,KAAKqoB,QAAQ6E,SAAS,UAAW2uB,GAAc77C,KAAKo8C,gBAAgB,aACpEp8C,KAAKqoB,QAAQ6E,SAAS,SAAU2uB,GAAc77C,KAAKo8C,gBAAgB,YAGvE,mBACI,MAAMlgD,EAAW8D,KAAKq8C,YAAY,QAGlC,MAFmB,IAAI,IAAIpO,IAAI/xC,EAASgf,IAAIhgB,GAAKA,EAAEsB,YACvB0e,IAAI1hB,IAAa,CAACuC,MAAOvC,EAAG0C,SAAUA,EAAS+B,OAAO/C,GAAKA,EAAEsB,UAAYhD,MAIzG,wBACI,MAAM0C,EAAW8D,KAAKq8C,YAAY,aAGlC,MAFmB,IAAI,IAAIpO,IAAI/xC,EAASgf,IAAIhgB,GAAKA,EAAEsB,YACvB0e,IAAI1hB,IAAa,CAACuC,MAAOvC,EAAG0C,SAAUA,EAAS+B,OAAO/C,GAAKA,EAAEsB,UAAYhD,MAIzG,uBACI,OAAOwG,KAAKq8C,YAAY,UAG5BA,YAAY7/C,GACR,OAAO3C,OAAO2J,KAAKtH,GAAUqpB,OAAO,CAACjR,EAAK5Z,KACtC,MAAM8qB,EAAUtpB,EAASxB,GAKzB,OAJI8qB,EAAQjpB,MAAQC,GAAYgpB,EAAQnpB,cAAgBmpB,EAAQlpB,SAC5DkpB,EAAQzd,KAAOrN,EACf4Z,EAAIxW,KAAK0nB,IAENlR,GACR,IAIPkjB,SAASr7B,EAAIklC,EAAShZ,GAClBroB,KAAK27C,eAAex/C,EAAIklC,EAAShZ,GAGrCszB,eAAex/C,EAAI6J,EAASqiB,GA6ExB,GA5EI,CAAC,cAAe,kBAAmB,mBAAoB,gBAAgB5X,SAAStU,KAAIU,EAAeV,GAAM6J,GAEnG,YAAN7J,IACI6J,EAAS+a,GAAI2I,SAAShhB,SAAS+B,KAAM,cACpCsW,GAAImJ,YAAYxhB,SAAS+B,KAAM,eAG9B,YAANtO,IACI6J,EAAS+a,GAAI2I,SAAShhB,SAAS+B,KAAM,mBACpCsW,GAAImJ,YAAYxhB,SAAS+B,KAAM,oBAG9B,YAANtO,IACI6J,EAASs2C,GAAoBnf,YAC5Bmf,GAAoB9e,gBAGnB,YAANrhC,IACI6J,EAASu2C,GAAUt4C,QAClBs4C,GAAU13C,QAGT,YAAN1I,IACI6J,EAAS+a,GAAI2I,SAAS3I,GAAItE,MAAM,cAAe,YAC9CsE,GAAImJ,YAAYnJ,GAAItE,MAAM,cAAe,aAG9CzW,GAAiB,YAAN7J,GAAkBqgD,GAAOjuB,eAE9B,YAANpyB,IACI6J,EAASy2C,GAAY9uB,oBACpB8uB,GAAYruB,qBAGX,aAANjyB,IACI6J,EAAS03B,GAAgBz5B,QACxBy5B,GAAgB74B,QAGf,aAAN1I,IACI6J,GACAhE,GAAe+U,aAAa,UAC5B/U,GAAe+U,aAAa,WAG5B/U,GAAemW,eAAe,UAC9BnW,GAAemW,eAAe,WAI5B,aAANhc,IACAmF,GAAMo7C,oBAAoB,cAAe12C,GACrCA,EAAS1E,GAAMo7C,oBAAoB,kBAAmB,MACrDp7C,GAAMo7C,oBAAoB,kBAAmB,YAI5C,YAANvgD,IACI6J,EAAS22C,GAAMxd,qBACdwd,GAAMtd,qBAGL,aAANljC,IACI6J,EAAS22C,GAAMvd,oBACdud,GAAMrd,oBAGJ,gBAAPnjC,IACab,OAAOyD,UAAUuuB,SAASC,UAAnCvnB,EAEJqiB,EAAQqS,eAED,gBAAPv+B,IACab,OAAOyD,UAAUuuB,SAASsvB,kBAAnC52C,GAGG,yBAAP7J,EACA,GAAI6J,EAAS,CACTsoC,GAAmBvpC,SACnB,MAAM83C,EAAgB/xC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAgC,iBAAd6I,EAAE7I,SAAwB,oBAAqB6I,EAAE7I,SAAS,GACpH2+C,IAAkBA,EAAc3+C,QAAQ4+C,iBACvChyC,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ6+C,sBAAsB,GAAG7+C,QAAQ6+C,qBAAqB,CAC5FD,iBAAiB,SAIxBxO,GAAmBrpC,UA2B5B,GAzBW,gBAAP9I,IACI6J,EAAS1B,SAAO04C,mBAAmBC,gBAAe,GACjD34C,SAAO04C,mBAAmBC,gBAAe,IAEvC,gBAAP9gD,IACG6J,EACCk3C,GAASn4C,SAETm4C,GAASj4C,WAGN,gBAAP9I,IACG6J,EACCm3C,GAAYp4C,SAEZo4C,GAAYl4C,WAGT,gBAAP9I,IACG6J,EACCo3C,GAAcr4C,SAEdq4C,GAAcn4C,WAGX,gBAAP9I,EAAqB,CACrB,IAAIkhD,EAAc/4C,SAAOg5C,UAAU,eACnCD,EAAYjoC,IAAI,SAAUpP,GAC1Bq3C,EAAY7oC,OACZlQ,SAAO/E,IAAIg+C,WACXj5C,SAAO/E,IAAIi+C,OAKf,GAHW,gBAAPrhD,GACAshD,GAAaz3C,EAAU,SAAW,aAE3B,iBAAP7J,EAAJ,CAIA,GAAW,oBAAPA,EAAyB,CACzB,IAAIkhD,EAAc/4C,SAAOg5C,UAAU,eACnCD,EAAYjoC,IAAI,mBAAoBpP,GAEpCq3C,EAAYx3C,OAAO,gBACnBw3C,EAAYx3C,OAAO,gBACnBw3C,EAAYx3C,OAAO,iBAEnBw3C,EAAY7oC,OACZlQ,SAAO/E,IAAIg+C,WACXj5C,SAAO/E,IAAIi+C,OAEf,GAAW,qBAAPrhD,EAA0B,CAC1B,IAAIkhD,EAAc/4C,SAAOg5C,UAAU,eACnCD,EAAYjoC,IAAI,YAAapP,GAC7Bq3C,EAAY7oC,OACZlQ,SAAO/E,IAAIg+C,WACXj5C,SAAO/E,IAAIi+C,OAGfx9C,KAAKklC,oBAvBDwY,GAAKC,QAAQC,qBAAqB53C,GA0B1C,2BACQnJ,EAAe,aAAakkB,GAAI2I,SAAShhB,SAAS+B,KAAM,cACxD5N,EAAe,aAAakkB,GAAI2I,SAAShhB,SAAS+B,KAAM,mBACxD5N,EAAe,aAAay/C,GAAoBnf,YAChDtgC,EAAe,aAAa0/C,GAAUt4C,QACtCpH,EAAe,aAAakkB,GAAI2I,SAAS3I,GAAItE,MAAM,cAAe,YAClE5f,EAAe,aAAa2/C,GAAOjuB,eACnC1xB,EAAe,aAAa4/C,GAAY9uB,oBACxC9wB,EAAe,cAAc6gC,GAAgBz5B,QAC7CpH,EAAe,iBAAgBvB,OAAOyD,UAAUuuB,SAASC,SAAU,GACnE1wB,EAAe,iBAAgBvB,OAAOyD,UAAUuuB,SAASsvB,iBAAkB,GAC3E//C,EAAe,yBAAyByxC,GAAmBvpC,SAC3DlI,EAAe,gBAAgByH,SAAO04C,mBAAmBC,gBAAe,GACxEpgD,EAAe,gBAAgBqgD,GAASn4C,SACxClI,EAAe,gBAAgBsgD,GAAYp4C,SAC3ClI,EAAe,gBAAgBugD,GAAcr4C,SAC7ClI,EAAe,gBAAgB4gD,GAAa14C,SAE5ClI,EAAe,eACfmF,GAAe+U,aAAa,UAC5B/U,GAAe+U,aAAa,UAG5Bla,EAAe,aAAa8/C,GAAMxd,qBAClCtiC,EAAe,cAAc8/C,GAAMvd,oBAEvCp/B,KAAKklC,eAGTA,eACI5kC,EAAU6B,gBAAgB,WAAYtF,GACtCyD,EAAU6B,gBAAgB,MAAOrF,GACjCwD,EAAU6B,gBAAgB,qBAAsBjF,GAGpD2gD,eACIhkD,OAAOoH,OAAOpE,EAAgByD,EAAU4B,gBAAgB,aACxDrI,OAAOoH,OAAOnE,EAAawD,EAAU4B,gBAAgB,QACrDd,QAAQoE,IAAItI,EAAmBoD,EAAU4B,gBAAgB,uBACzDrI,OAAOoH,OAAO/D,EAAmBoD,EAAU4B,gBAAgB,uBAG/D47C,cAAcz1B,GACV,OAAOroB,KAAKqoB,QAAQnb,OAAOmb,GAG/B6zB,gBACI,OAAOrvC,GAAK6D,MAAM/H,cAAco1C,GAAwB,CAACrjD,IAAK,UAAW88B,SAAUx3B,KAAKw3B,SAAUyL,SAAUjjC,KAAKg+C,eAGrHlC,mBAAmBzzB,EAASqS,GACxB,IAAI2iB,EAAc/4C,SAAOg5C,UAAU,eACnC,MAAO,CACHt9C,KAAK9C,kBAAkBge,IAAI,CAACsS,EAASr0B,IAC1B,CACI,IAANA,EAAU,KAAO0T,GAAK6D,MAAM/H,cAAcw5B,IAC3Ct1B,GAAK6D,MAAM/H,cAAc,KAAM,CAACC,UAAW,kDAAmD4kB,EAAQzxB,OACtGyxB,EAAQtxB,SAASgf,IAAIsK,IACjB,IAAIy4B,EAAYphD,EAAe2oB,EAAQrpB,IACrB,gBAAfqpB,EAAQrpB,KAAqB8hD,EAAYZ,EAAYrjD,IAAI,UAAU,IACpD,oBAAfwrB,EAAQrpB,KAAyB8hD,EAAYZ,EAAYrjD,IAAI,oBAAoB,IAClE,qBAAfwrB,EAAQrpB,KAA0B8hD,EAAYZ,EAAYrjD,IAAI,aAAa,IAC5D,iBAAfwrB,EAAQrpB,KAAsB8hD,GAAaZ,EAAYrjD,IAAI,yBAAyB,IACvF,IAAIguB,EAAcnb,GAAK6D,MAAM/H,cAAcy4B,GAAQ,CAACjlC,GAAIqpB,EAAQrpB,GAAIzB,IAAK8qB,EAAQrpB,GAAI8D,KAAMulB,EAAS6b,QAAS4c,EAAWzmB,SAAU,CAACr7B,EAAIklC,KACnIrhC,KAAKw3B,SAASr7B,EAAIklC,EAAShZ,MAE/B,MAAiB,eAAd7C,EAAQrpB,IAAuB8hD,EACvB,CACHj2B,EACAtb,MAAM/D,cAAc5J,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAQ,CACxDr6B,MAAO,QACPs6B,KAAM,WACNhyB,KAAM,QACNiyB,WAAY,QACZt6B,QAAS,KACLrW,cAAc2iD,IAAIC,KAAK,YAE3Br6B,SAAS,EACT1b,UAAU,GACX,mBAGJ4f,MAInBnb,GAAK6D,MAAM/H,cAAcrN,OAAOyD,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAQ,CACpEr6B,MAAO,SACPs6B,KAAM,QACNhyB,KAAM,SACNiyB,WAAY,MACZt6B,UACIxQ,QAAQoE,IAAI,mBACZlB,SAAO/E,IAAIg+C,SAAS,CAChB16C,KAAMyB,SAAO5H,QAAQ0hD,KAAK32C,MAAM,GAAGkH,OAAO,CAAC,8BAE/CrK,SAAO/E,IAAI8+C,QAEfv6B,SAAS,GACV,kCACHpX,MAAM/D,cAAc5J,UAAU+V,IAAIysB,WAAWC,OAAOwK,OAAQ,CACxDr6B,MAAO,SACPs6B,KAAM,QACNhyB,KAAM,SACNiyB,WAAY,MACZt6B,QAAS,KACF8pC,KACHA,IAAkB,EAClBp6C,GAAM4C,UAAU,oBAAqB,CACjClI,KAAM,SAEV0+B,IACAp2B,SAAOC,wBAAwBs/B,QAAQya,aACtCpwC,KAAK,KACF5M,GAAM4C,UAAU,qBAAsB,CAClClI,KAAM,YAEV0/C,IAAkB,EAClBhhB,MACDroB,MAAMlR,IACLC,QAAQC,MAAMF,GACdG,GAAM4C,UAAU,yDAA0D,CACtElI,KAAM,UAEV0/C,IAAkB,EAClBhhB,QAGR5W,SAAS,EACT1b,SAAUszC,IACX,gBAIXK,oBACI,OAAOlvC,GAAK6D,MAAM/H,cAAcilC,GAAsB,CAClDlzC,IAAK,WACL88B,SAAUx3B,KAAKw3B,SACft7B,SAAU8D,KAAKu+C,mBAIvBvC,wBACI,OAAOnvC,GAAK6D,MAAM/H,cAAcsrC,GAAkB,CAC9Cv5C,IAAK,aAIbuhD,sBACI,OAAOpvC,GAAK6D,MAAM/H,cAAcgwC,GAAY,CACxCj+C,IAAK,eAIbyhD,qBACI,OAAOtvC,GAAK6D,MAAM/H,cAAc61C,GAAW,CAAC9jD,IAAK,cAGrD0hD,gBAAgBpgD,GAKZ,MAAMyiD,UAAoB5xC,GAAK6D,MAAM/D,UACjC5M,YAAY6M,GACRnK,MAAMmK,GACN5M,KAAK0+C,OAAS1+C,KAAK4M,MAAM5Q,KAAKsX,QAAQ,IAAK,IAG/CkkB,WACIx3B,KAAK4M,MAAM4qB,SAASx3B,KAAK4M,MAAM5Q,MAGnCkR,SAAU,OAAOlN,KAAK4M,MAAMO,UAEhC,MAAMmmB,EAAiBmrB,EAAY1jD,UAAUmS,OAO7C,OANArT,OAAOC,eAAe2kD,EAAY1jD,UAAW,SAAU,CACnDhB,YAAY,EACZw5B,cAAc,EACdne,IAAK,WAAYhU,QAAQiZ,KAAK,wGAC9BrgB,IAAK,IAAMs5B,IAER,WACH,OAAOzmB,GAAK6D,MAAM/H,cAAc81C,EAAa,CAACziD,QAAO6Q,GAAK6D,MAAM/H,cAAcyhC,GAAU,CAACpuC,aASrG,SAAS6/C,GAAc1uC,GACnB,MAAMwxC,UAAyBjyC,MAAMC,UACjCO,SACI,OAAOC,EAASkb,EAAS,IAAMroB,KAAK06B,gBAG5C,IAAIrS,EACJ,OAAQntB,IACJmtB,EAAUntB,EACHyjD,GChdA,MAAMC,WAAe/xC,GAAKsiB,eACrCjiB,SACI,OAAOL,GAAK6D,MAAM/H,cACd,MACA,CAACkI,OAAQ,OAAQD,MAAO5Q,KAAK4M,MAAMqN,MAAQ,OAAQrR,UAAW,WAAa5I,KAAK4M,MAAMhE,UAAWX,MAAO,CAAConB,SAAU,UAAWwvB,SAAU,UAAWC,cAAe,QAASC,eAAgB,SAAUhuC,QAAS,iBAC9MlE,GAAK6D,MAAM/H,cAAc,WAAY,MACrCkE,GAAK6D,MAAM/H,cAAc,OAAQ,KAC7BkE,GAAK6D,MAAM/H,cAAc,SAAU,CAACxM,GAAI,WAAY0Q,GAAK6D,MAAM/H,cAAc,eAAgB,CAAC,GAAM,KAAM,GAAM,IAAK,aAAgB,KAAM,cAAe,sBAC1JkE,GAAK6D,MAAM/H,cAAc,SAAU,CAACxM,GAAI,WAAY0Q,GAAK6D,MAAM/H,cAAc,eAAgB,CAAC,GAAM,KAAM,GAAM,IAAK,aAAgB,KAAM,cAAe,4BAC1JkE,GAAK6D,MAAM/H,cAAc,SAAU,CAACxM,GAAI,WAAY0Q,GAAK6D,MAAM/H,cAAc,eAAgB,CAAC,GAAM,KAAM,GAAM,IAAK,aAAgB,KAAM,cAAe,uBAE9JkE,GAAK6D,MAAM/H,cAAc,IAAK,KAC1BkE,GAAK6D,MAAM/H,cAAc,OAAQ,CAACV,MAAO,CAAChK,OAAQ,iBAAkBxE,EAAG,6jBAA8jB0X,KAAM,UAAWwqB,QAAS,MAC/pB9uB,GAAK6D,MAAM/H,cAAc,OAAQ,CAACV,MAAO,CAAChK,OAAQ,iBAAkBxE,EAAG,8bAA+b0X,KAAM,UAAWwqB,QAAS,MAChiB9uB,GAAK6D,MAAM/H,cAAc,OAAQ,CAACV,MAAO,CAAChK,OAAQ,iBAAkBxE,EAAG,ukBAAwkB0X,KAAM,UAAWwqB,QAAS,S,iNChB1qB,MAAMqjB,WAAsBtyC,MAAMC,UAC7CO,SACI,MAAMN,EAAQ5M,KAAK4M,MACnB,OACI,8BAAKmE,QAAQ,kBAAqBnE,EAAlC,CAAyCiE,OAAO,OAAOD,MAAOhE,EAAMqN,OAChE,gCACI,sCAAgB9d,GAAG,YAAY8iD,GAAI,KAAMC,IAAK,MAAOC,GAAI,KAAMC,IAAK,OAAQC,kBAAkB,0BAA0BC,cAAc,kBAClI,4BAAMxX,OAAQ,EAAGyX,UAAU,YAC3B,4BAAMzX,OAAQ,EAAGyX,UAAU,aAE/B,sCAAgBpjD,GAAG,YAAY8iD,GAAI,MAAOC,IAAK,MAAOC,GAAI,MAAOC,IAAK,OAAQC,kBAAkB,0BAA0BC,cAAc,kBACpI,4BAAMxX,OAAQ,EAAGyX,UAAU,YAC3B,4BAAMzX,OAAQ,EAAGyX,UAAU,aAE/B,sCAAgBpjD,GAAG,YAAY8iD,GAAI,GAAIC,IAAK,IAAKC,GAAI,GAAIC,IAAK,OAAQC,kBAAkB,0BAA0BC,cAAc,kBAC5H,4BAAMxX,OAAQ,EAAGyX,UAAU,YAC3B,4BAAMzX,OAAQ,EAAGyX,UAAU,cAGnC,4BAAMpuC,KAAK,OAAO1X,EAAE,+BACpB,4BAAMA,EAAE,2FAA2F0X,KAAK,oBACxG,4BAAM1X,EAAE,4FAA4F0X,KAAK,oBACzG,4BAAM1X,EAAE,wlBAAwlB0X,KAAK,sBCnBrnB,MAAMgoB,GAAY,CACdqmB,WAAY,uBAGhB,IAAIC,GAAoB30C,UAAU9Q,IAAI+M,GAAKA,EAAE24C,aAAa,GACtDC,GAAiB70C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ0hD,oBAAoB,GAC/EC,GAAqB/0C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAqC,iBAA1B6I,EAAE7I,QAAQY,aAAgC,GAC/FghD,GAA0Bh1C,UAAU9Q,IAAI+M,GAAKA,EAAEg5C,wBAAwB,GACvEC,GAAmBl1C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ+hD,mBAAmB,GAChFC,GAAWp1C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQgiD,UAAYn5C,EAAE7I,QAAQgiD,SAASC,gBAAgB,GACpGC,GAAct1C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQmiD,UAAYt5C,EAAE7I,QAAQ01C,YAAc7sC,EAAE7I,QAAQoiD,YAAY,GAClHC,GAAcz1C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQsiD,8BAE7C,WAAI,MACfzgD,cACIC,KAAK26C,OAAOtoC,MAAMlR,GAAOG,GAAMH,IAAI,cAAe,mBAAoBA,IAG1E,aASI,GAPI0+C,KAAmBA,SAA2BvkD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAqC,iBAA1B6I,EAAE7I,QAAQY,cAC9GghD,KAAwBA,SAAgCxkD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAEg5C,yBACnGC,KAAiBA,SAAyB1kD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ+hD,oBAC1GC,KAASA,SAAiB5kD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQgiD,UAAYn5C,EAAE7I,QAAQgiD,SAASC,iBACzHC,KAAYA,SAAoB9kD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQmiD,UAAYt5C,EAAE7I,QAAQ01C,YAAc7sC,EAAE7I,QAAQoiD,aAC9IC,KAAYA,SAAoBjlD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQsiD,+BAEjGX,IAAsBC,IAA2BE,IAAoBE,IAAYE,IAAeG,GAAY,CAC3Gn/C,QAAQoE,IAAK,6DAA6Ds6C,IAC1E,MAAMC,EAAyBD,GAAwBC,uBACvDD,GAAwBC,uBAAyB,SAASh5C,EAAG1M,EAAGO,EAAGX,EAAGkxC,GAClE,MAAM/wC,EAAQ2lD,EAAuBzmD,KAAK0G,QAAS4Z,WAsCnD,OArCAxf,EAAMqmD,iBAAmB,CACrBriC,QAAQsiC,EAAMC,GACV,IAAIC,EAAYD,EAAKl9C,OAAS,GAAK,MAAQi9C,EAE3C,OADAG,GAAeD,GACRA,GAEXE,aAAazmD,GACK2lD,GAAiB9hD,QAAQ+hD,kBAAkB5lD,EAAG0M,GAGhEg6C,cAAa,CAACh6C,EAAG1M,EAAGO,EAAGX,EAAGkxC,IACf6V,GAAEj6C,EAAG1M,EAAG8wC,EAAE8V,OAAQrmD,EAAGX,EAAGimD,GAAShiD,QAAQgiD,SAASC,eAAgBD,GAAShiD,QAAQgiD,SAASgB,MAAOrB,GAAmB3hD,QAAQijD,OAAQ,SAASp6C,GAClJ,MAAO,CACHq6C,MAAOr6C,EACPrM,IAAKqM,EAAE5K,IAAM4K,EAAEs6C,YAAct6C,EAAErN,KAC/B4nD,SAAU,IACVC,MAAO,MAAQx6C,EAAE+rC,QAAUsN,GAAYliD,QAAQmiD,SAASt5C,EAAE+rC,SAAW,SAExE,SAAS/rC,GACV,MAAO,IAAMA,EAAI,OAGzBy6C,aAAarlD,EAAIolD,GACb,IAAIN,EAASM,EAAMN,OACnB,GAAI,MAAQA,GAAU,MAAQA,EAAO9kD,GAAK,MAAO,GACjD,IAAIilD,EAAQH,EAAO9kD,GACfslD,EAAaL,EAAMM,SAAW,IAAM,GACxC,OAAON,EAAMO,SAAW,MAAQP,EAAMjlD,GAAK,IAAMilD,EAAM1nD,KAAO,IAAM,IAAM+nD,EAAa,KAAOL,EAAMQ,cAAgBR,EAAM1nD,MAAQ,IAAM0nD,EAAMjlD,GAAK,KAEvJ0lD,WAAW1lD,EAAIolD,GACX,IAAIN,EAASM,EAAMN,OACnB,GAAI,MAAQA,GAAU,MAAQA,EAAO9kD,GAAK,MAAO,GACjD,IAAIilD,EAAQH,EAAO9kD,GACfslD,EAAaL,EAAMM,SAAW,IAAM,GACxC,OAAON,EAAMO,SAAW,MAAQP,EAAMjlD,GAAK,IAAMilD,EAAM1nD,KAAO,IAAM,IAAM+nD,EAAa,KAAOL,EAAMQ,cAAgBR,EAAM1nD,MAAQ,IAAM0nD,EAAMjlD,GAAK,MAGpJ/B,QAGXgH,QAAQC,MAAM,IAAIgN,MAAM,yDAI5B,MAAQxB,GAAKghB,wBAAwB,IAAI1pB,QAAQzC,GAAW0C,WAAW1C,EAAS,MAE3E1B,KAAK8hD,oBACN9hD,KAAK+hD,kBAAoBzgD,GAAMwsB,YAAYjhB,GAAKghB,iBAAkB,UAAW,CAAC1G,OAASlnB,IAEnF,IADgBqB,GAAM0gD,cAAc/hD,EAAK2nB,gBAAgB,GAAI,wCACjD,OACZ,MAAM7V,EAAUzQ,GAAM0gD,cAAc/hD,EAAK2nB,gBAAgB,GAAI,wCAC7D,IAAI7V,IAAYA,EAAQtO,OAAO,OAU/B,IAAIw9C,EAAS,GAEb,MAAMgB,EAAa,GACnB,IAAI,IAAIn6C,KAAQiK,EAAQ,CACpB,GAAqB,iBAAVjK,EAAoB,CAC3Bm6C,EAAWnkD,KAAKgK,GAChB,SAEJ,IAAI+Q,EACAqpC,GAAY,EAEhB,GAEI,GADArpC,EAASsgB,GAAUqmB,WAAW2C,KAAKr6C,GAC/B+Q,EAAQ,CACRqpC,GAAY,EACRvC,KAAeA,GAAiB70C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQ0hD,oBAAoB,IAClG,MAAMwB,EAAQzB,GAAezhD,QAAQ0hD,mBAAmB/mC,EAAO,IAC5DuoC,EACCH,EAAOnjD,KAAK,CACR4jD,SAAUN,EAAMM,SAChBhoD,KAAM0nD,EAAM1nD,KACZyC,GAAIilD,EAAMjlD,GACVimD,IAAKvpC,EAAO,KAGhBooC,EAAOnjD,KAAK,CACR4jD,SAAU7oC,EAAO,GAAGjL,WAAW,MAC/BlU,KAAMmf,EAAO,GACb1c,GAAI0c,EAAO,GACXupC,IAAKvpC,EAAO,YAInBA,GAET,GAAGqpC,EAAU,CACT,MAAMG,EAAQv6C,EAAKqL,MAAM,KAAK+H,IAAI,CAAConC,EAAMl4B,EAAO9V,KAC5C,IAAIguC,EAAK,MAAO,GAChB,MAAMlB,EAAQH,EAAOjjD,KAAK+I,GAAKA,EAAEq7C,KAAOE,GACxC,OAAIlB,GACA3B,KAAkBA,GAAoB30C,UAAU9Q,IAAI+M,GAAKA,EAAE24C,aAAa,IACrEhzC,MAAM/D,cAAc82C,GAAkBC,YAAa,CACtD0B,MAAO,CACH1nD,KAAO,IAAG0nD,EAAM1nD,QAChB6oD,QAASnB,EAAMjlD,GACfulD,SAAUN,EAAMM,SAChBc,UAA0B,IAAfluC,EAAI7Q,QAAmC,IAAnBsO,EAAQtO,WAP9B6+C,IAUlB/8B,OAAO,CAAClH,EAAU8oB,IACM,IAApB9oB,EAAS5a,OAAoB,CAAC0jC,GACX,iBAAZA,EACsC,iBAAlC9oB,EAASA,EAAS5a,OAAS,IACjC4a,EAASA,EAAS5a,OAAS,IAAO,IAAG0jC,EAC9B9oB,IAEXA,EAASvgB,KAAK,IAAIqpC,GACX9oB,IAEXA,EAASvgB,KAAK,IAAKqpC,GACZ9oB,GACR,IACH4jC,EAAWnkD,QAAQukD,QAEnBJ,EAAWnkD,KAAKgK,GAGxB,KAAM7H,EAAK2nB,gBAAgB,GAAGmG,uBAAuBnhB,MAAMmF,QAAQ,IAC/D9R,EAAK2nB,gBAAgB,GAAGmG,uBAAuBnhB,MAAMmF,QAAQ0wC,QAEjE,KAAMR,EAAW,IACbhiD,EAAK2nB,gBAAgB,GAAGmG,uBAAuBnhB,MAAMmF,QAAQjU,KAAKmkD,EAAWQ,aA8B7Fx9C,UACSjF,KAAK+hD,oBACV/hD,KAAK+hD,oBACL/hD,KAAK+hD,kBAAoB,MAG7B99C,WAKJ,SAAS+8C,GAAEj6C,EAAG1M,EAAGO,EAAGX,EAAGL,EAAGT,EAAG+B,EAAGwnD,EAAGtpD,EAAGI,GAClC,GAAI,MAAQoB,GAAK,IAAMA,EAAE6I,OAAQ,OAAO,KACxC,IAAIhK,EAAImB,EAAEsgB,KAAK,SAASnU,EAAGnM,GACvB,OAAO8R,MAAM/D,cAAc+5C,EAAG7oD,OAAOoH,OAAO,CACxC2Q,QAAShY,EACT+oD,QAAS1oD,EACTiqB,SAAU7pB,IAAMO,EAChBwvB,MAAOxvB,GACRxB,EAAE2N,EAAGnM,QAEZ,MAAO,CAACgoD,GAAEzpD,EAAG+B,EAAG6L,EAAGvN,GAAIC,GAG3B,SAASmpD,GAAE77C,EAAG1M,EAAGO,EAAGX,GAChB,IAAIkxC,EAAKvwC,EAAE6I,OAAS,EAAIsD,EAAEgS,OAAO,CAC7B2lC,OAAQzkD,EAAEW,KACTP,EAML,OALGwP,MAAM6L,QAAQy1B,GACbA,EAAElK,QAAQv0B,MAAM/D,cAAc,SAAU,GAAI,iBAE5CwiC,EAAI,eAAeA,EAEhBz+B,MAAM/D,cAAck3C,GAAmB3hD,QAAQ2kD,MAAO,CACzD9mD,MAAOovC,GACRA,GAEPyX,GAAE9jD,YAAc,eAEhB,ICvNI6+C,GAoQAmF,GACAC,GACAC,GD/CAC,GAAoBn4C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQglD,iBAAiB,GAC/EA,GAAkBD,IAAqBA,GAAkB/kD,QAAQglD,gBACjEC,IAAW,EACX/sC,IAAa,EAEjB,SAASyqC,GAAeuC,GACpBD,GAAWC,EACRhtC,KACC6sC,KAAkBA,GAAoBn4C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQglD,iBAAiB,IACjGD,KACAC,KAAgBA,GAAkBD,GAAkB/kD,QAAQglD,iBAEhE9sC,IAAa,EACb6sC,GAAkB/kD,QAAQglD,gBAAkB,SAAS9B,GACjD,OAAG+B,MACI/B,EAAMiC,aAAcjC,EAAMkC,WAG1BJ,GAAgB5pD,KAAK0G,QAAS4Z,cCxO7C,SAAS2pC,MAGTA,GAAKxoD,UAAUyoD,UAAY,SAASC,GAC5BzjD,KAAK0jD,YACT7pD,OAAOoH,OAAO3D,EAAUmmD,IAG5B5pD,OAAOC,eAAeypD,GAAKxoD,UAAW,UAAW,CAC7Cf,IAAG,IACQ2jD,KAIf4F,GAAKxoD,UAAU4oD,WAAa,SAASpqD,GAC7ByG,KAAK0jD,aACT/F,GAAUpkD,IAGdgqD,GAAKxoD,UAAU4/C,KAAOv3C,iBAClB,GAAIpD,KAAK0jD,WAAY,OAGrB,GAFA1jD,KAAK0jD,YAAa,GAEb75C,MAAM9O,UAAUuiB,KAEjB,YADAhc,GAAMC,MAAM,gBAAiB,kBAAoB5F,EAAa,uCAAyCN,EAAwB,4EAInI,GAAIiC,EAASmkB,QAAU/lB,EAEnB,YADA4F,GAAMC,MAAM,gBAAiB,kBAAoBjE,EAASmkB,QAA7B,sDAAoG9lB,EAAa,uJAIlJ,GAAIL,OAAOsoD,GAEP,YADAtiD,GAAMC,MAAM,gBAAiB,gFAIjC,GAAIjG,OAAOuoD,WAAavoD,OAAOuoD,UAAUnqD,MAAQ4B,OAAOuoD,UAAUnqD,KAAK+W,SAAS,WAE5E,YADAnP,GAAMC,MAAM,gBAAiB,0EAIjCD,GAAM4mB,eAAeloB,KAAK8jD,gBAAgBnpD,KAAKqF,MAAO,4BAAtDsB,GAEAA,GAAMkE,IAAI,UAAW,yBACrBxF,KAAK+jD,qBAEC/jD,KAAKgkD,iBACXn3C,GAAKtM,aACLe,GAAMkE,IAAI,UAAW,qBACrBshC,GAAcmd,qBAEd3iD,GAAMkE,IAAI,UAAW,8BACf0M,GAAewE,0BAErBpV,GAAMkE,IAAI,UAAW,yBACfkS,EAAavU,cAEnB7B,GAAMkE,IAAI,UAAW,wBACfmS,GAAY2D,aAElByF,GAAIK,SAAS,YAAa5S,OAAO1E,KAAKxJ,EAAU8B,UAAU,eAAgB,UAAU4Q,SAAS,SAE7F1X,OAAOgO,iBAAiB,gBAAgB,WAChCzM,EAAe,aAAa6L,SAASkC,cAAc,uBAAuByf,WAGlF/c,GAAgBrJ,QAEhB3C,GAAMkE,IAAI,UAAW,yBACjBkD,SAASw7C,uBAAuB,eAAezgD,QAAQiF,SAASw7C,uBAAuB,eAAe,GAAG14C,SAC7GlK,GAAMkE,IAAI,UAAW,8BACrBxF,KAAKmkD,eAGDtnD,EAAe,eACfyE,GAAMkE,IAAI,UAAW,6BACrBlE,GAAMgE,kBAAkB,CAAC/B,QAASnG,EAAgB8jB,OAAQ7jB,KAG9D,MAAM+mD,EAAkB9jD,EAAU8B,UAAU,WAgB5C,GAfIzG,EAAayoD,IACTxoD,GAAcoE,KAAKy7C,mBAAmB7/C,GAC1C0E,EAAUY,UAAU,UAAWvF,IAGnC0oD,GAAYpgD,QAEZ3C,GAAM4mB,eAAeloB,KAAKskD,YAAY3pD,KAAKqF,MAAO,kBAAlDsB,GACAA,GAAM4mB,eAAeloB,KAAKukD,gBAAgB5pD,KAAKqF,MAAO,uBAAtDsB,GACAA,GAAM4mB,eAAeloB,KAAKwkD,oBAAoB7pD,KAAKqF,MAAO,4BAA1DsB,GACAA,GAAM4mB,eAAeloB,KAAKykD,oBAAoB9pD,KAAKqF,MAAO,2BAA1DsB,GACAA,GAAM4mB,eAAeloB,KAAK0kD,mBAAmB/pD,KAAKqF,MAAO,sBAAzDsB,GACAA,GAAM4mB,eAAeloB,KAAK2kD,gBAAgBhqD,KAAKqF,MAAO,6BAAtDsB,GACAA,GAAM4mB,eAAeloB,KAAK4kD,gBAAgBjqD,KAAKqF,MAAO,4BAAtDsB,GAEGhE,EAASunD,qBAAqB,CAC7B,IAAItjD,EAAQD,GAAMC,MAAM,qBAAsB,+KACxC,IAAI4C,QAASzC,IACfH,EAAMqoB,QAAQloB,KAGtB,MAAMojD,EAAOp8C,SAASkC,cAAc,wXACjCk6C,IACCA,EAAK78C,MAAMiD,IAAM,MACjB45C,EAAK/nC,UAAa,y+CAQ1BwmC,GAAKxoD,UAAU+oD,gBAAkB1gD,iBAC7B,IAAI2hD,EAAgB,GAKpB,IAJA/kD,KAAKglD,sBAAwB,WACzBD,EAAcr7C,QAAQ3C,GAAKA,OAGxBwzB,GAAG1M,wBAAuB,IAAI1pB,QAAQzC,GAAW0C,WAAW1C,EAAS,MAG5E,MAAMwqB,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aAC1CxD,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAqC,eAA1B6I,EAAE7I,QAAQY,aAC/DoP,KAAK+2C,IACF,IAAIC,EAAiBD,EAAW/mD,QAChC+mD,EAAW/mD,QAAU,SAAS0O,GAC1B,IAAIob,EAAck9B,EAAet4C,GAE7BzQ,EAAKw8B,KAELwsB,EAAWt4C,GAAKH,MAAM/D,cAAc,MAAO,CAC3CV,MAAO,CACHsJ,QAAS,SACT6Z,UAAW,QAEhBve,GAAKH,MAAM/D,cAAc,OAAQ,CAChCxM,GAAI,UAAUA,EACdzB,IAAK,UAAUyB,EACf8L,MAAO,CACHsJ,QAAS,cAIbpE,EAAW,CAAC6a,GAEM,uBAAlBpb,EAAM4nB,KAAKr4B,GACXgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,wBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,gBAAiB4H,KAAM,8CAA+CzU,MAAO,aAAc0jB,OAAQ,UAC5I5S,GAAKH,MAAM/D,cAAci2C,GAAQ,CAAC3kC,KAAM,OAAQrR,UAAW,eAI9C,uBAAlBgE,EAAM4nB,KAAKr4B,IAAiD,uBAAlByQ,EAAM4nB,KAAKr4B,IAC5DgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,uBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,gBAAiB4H,KAAM,yCAA0CzU,MAAO,YAAa0jB,OAAQ,UACtI5S,GAAKH,MAAM/D,cAAcq2C,GAAe,CAAC/kC,KAAM,OAAQrR,UAAW,eAMlFuE,EAASrP,KAAKqnD,GACd,IAAIj2C,EAAMrC,GAAKH,MAAM/D,cAAc,MAAO,CACtCV,MAAO,CACHsJ,QAAS,UAEdpE,GAGH,OAFAk4C,GAAYlpD,EAAIyQ,EAAM4nB,MAAM,GAErBtlB,KAIf61C,EAAcjnD,KAAKwD,GAAMwsB,YAAYyM,GAAG1M,iBAAkB,UAAW,CAACzG,MAAQnnB,IACvEA,EAAK2nB,gBAAgB,GAAGmG,uBAAuBnhB,MAAM7I,UACpD9D,EAAK+nB,YAAYpb,MAAM,mBAAqB3M,EAAK2nB,gBAAgB,GAAGmG,uBAAuBnhB,MAAM7I,QAAQ5H,SASrHonD,GAAKxoD,UAAUipD,eAAiB,WAC5B,IAAIsB,EAAe,EACnB,OAAO,IAAInhD,QAAQzC,IACf,MAAMsiD,EAAiB,WACnB,MAAMlgC,EAAUjX,GAAKgwB,aAAa/Y,QAAQ3Q,MAAM,KAAK,GACjDzK,SAASiU,iBAAkB,IAAGmH,GAAWrgB,OAAS,GAAG6hD,IACzD,MAAM/D,EAAQ10C,GAAKgwB,aAAaC,SAAS3pB,MAAM,KAAK,GAC9CoyC,EAAO14C,GAAKgwB,aAAazY,cAAcjR,MAAM,KAAK,GACxD,OAAIzK,SAASiU,iBAAkB,IAAGmH,MAAYy9B,MAAUgE,KAAQ9hD,OAAS,GAChE6hD,GAAgB,GAD0D5jD,EAAQpE,EAASkoD,aAAc,QAElHphD,WAAW4/C,EAAgB,MAEJ,WAAvBt7C,SAAS+8C,YAAyBrhD,WAAW4/C,EAAgB,KACjEt7C,SAASY,iBAAiB,mBAAoB,KAAOlF,WAAW4/C,EAAgB,UAIxFT,GAAKxoD,UAAU2qD,gBAAkBtiD,mBAIjCmgD,GAAKxoD,UAAUgpD,aAAe,WAE1B,GADAzjD,EAAUC,cACND,EAAU4B,gBAAgB,sBAC1B,IAAI,IAAIxH,KAAOwC,SACJA,EAAkBxC,GAMjC,GAHI4F,EAAU4B,gBAAgB,QAC1BrI,OAAOoH,OAAOnE,EAAaC,GAE3BuD,EAAU4B,gBAAgB,YAGvB,CACH4kC,GAAc+W,eACd,IAAK,MAAMr4B,KAAW5oB,EACa6B,MAA3B5B,EAAe2oB,KACf3oB,EAAe2oB,GAAW5oB,EAAc4oB,GACxCshB,GAAc5B,qBAPlBrrC,OAAOoH,OAAOpE,EAAgBD,GAClCkqC,GAAc5B,eAUlB5pC,OAAOyD,UAAU+V,IAAIC,eAAehO,GAAKA,EAAE7I,SAAW6I,EAAE7I,QAAQnD,WAAagM,EAAE7I,QAAQnD,UAAU4qD,sBAChGz3C,KAAK03C,IAEF,IAAID,EAAuBC,EAAc1nD,QAAQnD,UAAU4qD,qBAC3DC,EAAc1nD,QAAQnD,UAAU4qD,qBAAuB,WACnD,IAAI12C,EAAS02C,EAAqBrsD,KAAK0G,QAAS4Z,WAEhD,IAAI3K,EAAO,GAAG,OAAOA,EACrB,GAAyB,eAAtBA,EAAO,GAAGue,QAAyB,CAClC,IAAIq4B,EAAQ,GASZ,IAPAA,EAAM/nD,KAAKmR,EAAO0E,OAClBkyC,EAAM/nD,KAAKmR,EAAO0E,OAClBkyC,EAAM/nD,KAAKmR,EAAO0E,OAClBkyC,EAAM/nD,KAAKmR,EAAO0E,OAElB1E,EAAOnR,QAAQgpC,GAAcgX,cAAc99C,OAErC6lD,EAAM,IACR52C,EAAOnR,KAAK+nD,EAAMlyC,OAG1B,OAAO1E,MAUnBs0C,GAAKxoD,UAAUopD,aAAe,WACL,IAAI36C,iBAAkBC,IACvC,IAAK,IAAItQ,EAAI,EAAG2sD,EAAOr8C,EAAUhG,OAAQtK,EAAI2sD,EAAM3sD,IAAK,CACpD,MAAMwQ,EAAWF,EAAUtQ,GAI3B,QAH4B,IAAjBue,GAA8BA,EAAa5Q,YAAY6C,KAG7DA,EAAS6W,WAAW/c,QAAYkG,EAAS6W,WAAW,aAAcM,SAAU,SAEjF,MAAMhZ,EAAO6B,EAAS6W,WAAW,GAE7BsiC,KAAeA,GAAiBh4C,UAAU9Q,IAAK+M,GAAMA,EAAE8B,OAA4B,iBAAZ9B,EAAE8B,OAAsB9B,EAAEg/C,WAAW,GAAGl9C,OAC/Gk6C,KAAqBA,GAAuBj4C,UAAU9Q,IAAK+M,GAAMA,EAAEi/C,aAAwC,iBAAlBj/C,EAAEi/C,aAA0B,GAAGA,aACxHhD,KAAeA,GAAiBl4C,UAAU9Q,IAAK+M,GAAMA,EAAEgiB,OAA4B,iBAAZhiB,EAAEgiB,OAAsBhiB,EAAEiiB,OAA4B,iBAAZjiB,EAAEiiB,QAAuBjiB,EAAEqiB,uBAAuB,GAAGL,OAEtKjhB,EAAKsE,UAAU/B,SAASy4C,MACgB,mBAApCh7C,EAAKm+C,aAAa,gBAClBn+C,EAAKm4B,aAAa,WAAY,mBAC9Bn4B,EAAKm4B,aAAa,KAAM,oBAGxBn4B,EAAKo8C,uBAAuBnB,IAAsBt/C,SAClDqE,EAAKm4B,aAAa,WAAY,iBAC9Bn4B,EAAKm4B,aAAa,KAAM,mBAI5Bn4B,EAAK2W,eAAiB/V,SAAS+B,MAAQ3C,EAAK8C,cAAc,uBAAsB9C,EAAK3L,GAAK,iCASzFqO,QAAQ9B,SAAU,CAC3BiC,WAAW,EACXD,SAAS,KAIjB64C,GAAKxoD,UAAU0gD,mBAAqB,SAASzzC,EAAU,IACnD,OAAO1G,GAAMm6C,mBAAmBzzC,IAGpCu7C,GAAKxoD,UAAUwG,MAAQ,SAASxF,EAAOgW,GACnC,OAAOzQ,GAAMC,MAAMxF,EAAOgW,IAG9BwxC,GAAKxoD,UAAUupD,YAAc,WACzB,GAAItkD,KAAKkmD,YAAa,OACtB,MAAMC,EAASlnD,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aACpCotB,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aACrCqnD,IACLnmD,KAAKkmD,YAAc5kD,GAAMwsB,YAAYq4B,EAAOprD,UAAW,SAAU,CAACqsB,MAAQnnB,IACtE,MAAMkN,EAAWlN,EAAK+nB,YAAYpb,MAAMO,SACxC,IAAKA,IAAaA,EAAS1J,QAAU0J,EAAS1J,OAAS,EAAG,OAC1D,GAAuD,cAAnD0J,EAASA,EAAS1J,OAAS,GAAGzH,KAAK8C,YAA6B,OACpE,IAAKqO,EAASA,EAAS1J,OAAS,GAAGzH,KAAKgX,WAAWvC,SAAS,eAAgB,OAC5E,GAAIyb,EAAQ,CACR,IAAIk6B,EAAgBt7C,UAAU9Q,IAAI+M,GAAKA,EAAEi/C,aAAa,GACtD,MAAMhe,EAAW76B,EAASA,EAAS1J,OAAS,GAAGzH,KACzCqqD,EAAS,WACX,MAAMC,EAAYte,KAAYpuB,WAe9B,OAdA0sC,EAAU15C,MAAMO,SAASrP,KACrB+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,aACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,kBAAkBw9C,EAAcv0C,KAAMrB,KAAM,yCAA0CzU,MAAO,YAAa0jB,OAAQ,UAC3J5S,GAAKH,MAAM/D,cAAcq2C,GAAe,CAAC/kC,KAAM,OAAQrR,UAAW,sBAI9E09C,EAAU15C,MAAMO,SAASrP,KACrB+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,cACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,kBAAkBw9C,EAAcv0C,KAAMrB,KAAM,8CAA+CzU,MAAO,aAAc0jB,OAAQ,UACjK5S,GAAKH,MAAM/D,cAAci2C,GAAQ,CAAC3kC,KAAM,OAAQrR,UAAW,sBAIhE09C,GAEXn5C,EAASA,EAAS1J,OAAS,GAAGzH,KAAOqqD,EAGzC,IACIE,EACAC,EACAC,GACA,CACA37C,UAAU9Q,IAAI+M,GAAKA,EAAE2/C,YAAY,GAAGA,WACpC57C,UAAU9Q,IAAI+M,GAAKA,EAAE0oC,QAAQ,GAC7B3kC,UAAU9Q,IAAI+M,GAAKA,EAAE4/C,aAAa,GAAGA,aAGzC,MAAMA,EAAe,IAAGrpD,EAASgR,KAAOhR,EAASgR,KAAKqK,UAAU,EAAG,GAAKrb,EAASspD,UAC3EC,EAAa,CACfh6C,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAY,GAAE29C,KAAuBC,EAAMM,UAAY,aAAY94C,SAASsvC,UAAU,aAAa77B,WAAY5U,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW69C,EAAqB,mBAAqB,KAAIz4C,SAASsvC,UAAU,aAAayJ,QAAU,WAAWt/C,MAAM,EAAG,QACzSoF,GAAK6D,MAAM/H,cAAc,MAAO,CAACC,UAAY,GAAE29C,KAAuBC,EAAMM,UAAY,OAAMnrD,KAAekR,GAAK6D,MAAM/H,cAAc,OAAQ,CAACC,UAAW69C,EAAqB,mBAAoBE,KAIjMK,EAAmB75C,EAASA,EAAS1J,OAAS,GAAGzH,KACvDmR,EAASA,EAAS1J,OAAS,GAAGzH,KAAO,WACjC,MAAMsqD,EAAYU,KAAoBptC,WAEtC,OADA0sC,EAAU15C,MAAMO,SAAS7J,OAAO,EAAG,EAAGujD,GAC/BP,QAiInB,SAASjB,GAAYlpD,EAAIq4B,EAAMyyB,GAC3BvqD,QAAQ+Q,SAAS,KACb,MAAMyB,EAAMxG,SAASgF,eAAe,UAAUvR,GAC9C,IAAI+S,GAAOA,EAAIC,WAAW1L,OAAS,EAAE,OACrC,GAAGyL,EAAIC,WAAW1L,OAAO,OACzB,IAAIyjD,EAAWx+C,SAASC,cAAc,OACtCu+C,EAASj/C,MAAMsJ,QAAU,OACzBrC,EAAI2R,YAAYqmC,GAEhB,MAAMh7B,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aAE1CqoD,GAAQC,UAAU5yB,EAAKr4B,IACtB+R,KAAK6qB,IACFA,EAAOrvB,QAAQwvB,IACX,MAAMtsB,EAAQ,CACVkE,IAAK,CACDmJ,KAAM,OACNrR,UAAW,UACXgI,MAAO,SAGfsoB,EAAMe,OAAOvwB,QAAQ29C,IACJ,SAAVA,IACCz6C,EAAM4nB,KAAOA,KAGjB0E,EAAM1oB,OACN5D,EAAMsf,OAASA,EACftf,EAAM4D,KAAO,CACT5H,UAAWq+C,EAAO,gBAAkB,kBACpClrD,MAAOm9B,EAAMx/B,KACb+lB,OAAQ,WAGhB,MAAMhX,EAAUoE,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAMmxB,EAAMx/B,MAC5Fw/B,EAAM1oB,KAAO3D,GAAK6D,MAAM/H,cAAcujB,EAAQ,CAC1C1b,KAAM0oB,EAAM1oB,KACZ5H,UAAWq+C,EAAO,gBAAkB,kBACpClrD,MAAOm9B,EAAMx/B,KACb+lB,OAAQ,UACT5S,GAAKH,MAAM/D,cAAcuwB,EAAM9L,UAAWxgB,IAAUC,GAAKH,MAAM/D,cAAcuwB,EAAM9L,UAAWxgB,IAE/F06C,EAAO5+C,SAASC,cAAc,OACpCkE,GAAKC,SAASI,OAAOzE,EAAS6+C,GAC9BA,EAAKn4C,WAAWzF,QAAQ5B,IACpBoH,EAAI2R,YAAY/Y,WAlKpCy7C,GAAKxoD,UAAUypD,oBAAsB,WACjC,GAAIxkD,KAAKunD,oBAAqB,OAC9B,MAAMC,EATc,WACpB,MAAM3jC,EAAgB5kB,EAAeZ,YAAY,UAAW,qBACtD2lB,EAAS/kB,EAAeZ,YAAY,cAAe,YACnD8lB,EAAOllB,EAAeZ,YAAY,iBACxC,OAAOxE,OAAOoH,OAAO,GAAI4iB,EAAeG,EAAQG,GAK3BsjC,GACfC,EAAgBF,EAAa1qB,SAAS3pB,MAAM,KAAK,GACjDw0C,EAAYH,EAAapjC,cAAcjR,MAAM,KAAK,GAElDy0C,EADgB/6C,GAAKkW,oBAAoBra,SAASkC,cAAe,IAAG88C,MAAkBC,KAAalpC,eACpEopC,OAAO7rD,KACvC4rD,IACL5nD,KAAKunD,oBAAsBjmD,GAAMwsB,YAAY85B,EAAe7sD,UAAW,SAAU,CAACqsB,MAAQnnB,IACtF,GAAIA,EAAK+nB,aAAe/nB,EAAK0nB,WAAY,CACrC,MAAMK,EAAc/nB,EAAK+nB,YACnB8/B,EAAY7nD,EAAK0nB,WAAW/a,MAClC,IAAIhE,EAAYof,EAAYpb,MAAMhE,UASlC,OARAA,GAAa,YACTk/C,EAAUC,SAAQn/C,GAAa,cAC/Bk/C,EAAU5jC,WAAUtb,GAAa,gBACjCk/C,EAAUE,QAAOp/C,GAAa,aAC9Bk/C,EAAUG,QAAOr/C,GAAa,aAC9Bk/C,EAAU5uB,QAAOtwB,GAAa,aAC9Bk/C,EAAUI,aAAYt/C,GAAa,kBACvCof,EAAYpb,MAAMhE,UAAYA,EACvBof,QAKnBu7B,GAAKxoD,UAAUwpD,gBAAkB,WAC7B,GAAIvkD,KAAKmoD,eAAgB,OACzB,MAAMC,EAAYnpD,EAAejB,KAAKzE,GAAKA,EAAE2E,UAAY3E,EAAE2E,QAAQY,aAAevF,EAAE2E,QAAQ8U,UAAYzZ,EAAE2E,QAAQ8U,WAAWvC,SAAS,gBACjI23C,IACLpoD,KAAKmoD,eAAiB7mD,GAAMwsB,YAAYs6B,EAAW,UAAW,CAAChhC,MAAQnnB,IACnE,MAAM2M,EAAQ3M,EAAK2nB,gBAAgB,GAInC,OAHIhb,EAAMm7C,SAAQ9nD,EAAK+nB,YAAYpb,MAAMhE,WAAa,cAClDgE,EAAMsX,WAAUjkB,EAAK+nB,YAAYpb,MAAMhE,WAAa,gBACpDgE,EAAMy7C,UAASpoD,EAAK+nB,YAAYpb,MAAMhE,WAAa,eAChD3I,EAAK+nB,iBAIpBu7B,GAAKxoD,UAAU0pD,oBAAsB,WACjC,GAAIzkD,KAAKsoD,oBAAqB,OAC9B,MAAMC,EAAStpD,EAAeJ,kBAAkB,UAC1C2pD,EAAkBvpD,EAAeZ,YAAY,kBACnD,IAAKmqD,IAAoBD,EAAQ,OACjC,MAAME,EAAiB,WACnB,MAAMzgC,EAAcwgC,EAAgBnN,aAAazhC,WAEjD,OADAoO,EAAYpb,MAAMhE,WAAa,sBACxBof,GAEXhoB,KAAKsoD,oBAAsBhnD,GAAMwsB,YAAYy6B,EAAOxtD,UAAW,SAAU,CAACqsB,MAAQnnB,IAC9EA,EAAK+nB,YAAYpb,MAAMO,SAAS,GAAGP,MAAMO,SAAS,GAAGnR,KAAOysD,MAIpElF,GAAKxoD,UAAU6pD,gBAAkB,WAC7B,GAAI5kD,KAAK0oD,gBAAiB,OAC1B,MAAMC,EAAa79C,UAAU9Q,IAAI+M,GAAKA,EAAE7I,SAAqC,eAA1B6I,EAAE7I,QAAQY,aAA8B,GAC5EG,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,cAC1B6pD,GAAeA,EAAWzqD,UAC1C8B,KAAK0oD,gBAAkBpnD,GAAMwsB,YAAY66B,EAAY,UAAW,CAACvhC,MAAQnnB,IACrE,IAAIpD,EAAe,aAAa,OAChC,MAAM2Q,EAAavN,EAAK2nB,gBAAgB,IAAM,KACxCza,EAAW7L,GAAM0gD,cAAc/hD,EAAK+nB,YAAa,kBAEvD,IAAK7a,IAAaK,IAAeA,EAAWG,IAAI,OAChD,IAAK9D,MAAM6L,QAAQvI,GAAW,OAE9B,MAAMhR,EAAKw8B,KACXxrB,EAASrP,KAAK+O,GAAK6D,MAAM/H,cAAc,OAAQ,CAC3CxM,GAAI,aAAaA,KAErBmR,GAAgBC,MAAMC,EAAY,aAAarR,QAIvDonD,GAAKxoD,UAAU2pD,mBAAqB,WAChC,GAAI1kD,KAAK4oD,mBAAoB,OAC7B,MAAMC,EAAgB5pD,EAAeZ,YAAY,oBAC3C6tB,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aACrCotB,GAAW28B,GAAkBA,EAAc3qD,UAChD8B,KAAK4oD,mBAAqBtnD,GAAMwsB,YAAY+6B,EAAe,UAAW,CAACzhC,MAAQnnB,IAC3E,MAAMooC,EAAS/mC,GAAM0gD,cAAc/hD,EAAK2nB,gBAAgB,GAAI,kBAEtDza,EAAW7L,GAAM0gD,cAAc/hD,EAAK+nB,YAAa,oDACvD,IAAK7a,IAAak7B,IAAWA,EAAOlsC,GAAG,OAEvC,IAAK0N,MAAM6L,QAAQvI,GAAW,OACZ,uBAAdk7B,EAAOlsC,GACPgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,wBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,gBAAiB4H,KAAM,8CAA+CzU,MAAO,aAAc0jB,OAAQ,UAC5I5S,GAAKH,MAAM/D,cAAci2C,GAAQ,CAAC3kC,KAAM,OAAQrR,UAAW,eAIlD,uBAAdy/B,EAAOlsC,IAA6C,uBAAdksC,EAAOlsC,IACpDgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,uBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,gBAAiB4H,KAAM,yCAA0CzU,MAAO,YAAa0jB,OAAQ,UACtI5S,GAAKH,MAAM/D,cAAcq2C,GAAe,CAAC/kC,KAAM,OAAQrR,UAAW,eAKlF,MAAMzM,EAAKw8B,KACXxrB,EAASrP,KACL+O,GAAKH,MAAM/D,cAAc,MAAO,CAC5BxM,GAAI,UAAUA,EACd8L,MAAO,CACHsJ,QAAS,aAIrB8zC,GAAYlpD,EAAIksC,GAAQ,QAwDhCkb,GAAKxoD,UAAU4pD,gBAAkB,WAC7B,GAAI3kD,KAAK8oD,gBAAiB,OAC1B,MAAMC,EAAiB9pD,EAAeJ,kBAAkB,kBAClDqtB,EAASjtB,EAAejB,KAAKzE,GAAsB,UAAjBA,EAAEuF,aACrCotB,GAAW68B,GAAmBA,EAAehuD,WAAcguD,EAAehuD,UAAUiuD,mBACzFhpD,KAAK8oD,gBAAkBxnD,GAAMwsB,YAAYi7B,EAAehuD,UAAW,mBAAoB,CAACqsB,MAAQnnB,IAC5F,MAAMu0B,EAAOlzB,GAAM0gD,cAAc/hD,EAAK0nB,WAAY,cAC5Cxa,EAAW7L,GAAM0gD,cAAc/hD,EAAK+nB,YAAa,kBACvD,IAAK7a,IAAaqnB,IAASA,EAAKr4B,GAAG,OAEnC,IAAK0N,MAAM6L,QAAQvI,GAAW,OACd,uBAAZqnB,EAAKr4B,GACLgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,wBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,kBAAmB4H,KAAM,8CAA+CzU,MAAO,aAAc0jB,OAAQ,UAC9I5S,GAAKH,MAAM/D,cAAci2C,GAAQ,CAAC3kC,KAAM,OAAQrR,UAAW,eAIpD,uBAAZ4rB,EAAKr4B,IAA2C,uBAAZq4B,EAAKr4B,IAChDgR,EAASrP,KACL+O,GAAKH,MAAM/D,cAAcy8C,EAAa,CAACzzC,MAAO,QAASzJ,KAAM,MAAOH,KAAM,uBACtE8E,GAAKH,MAAM/D,cAAcujB,EAAQ,CAACtjB,UAAW,kBAAmB4H,KAAM,yCAA0CzU,MAAO,YAAa0jB,OAAQ,UACxI5S,GAAKH,MAAM/D,cAAcq2C,GAAe,CAAC/kC,KAAM,OAAQrR,UAAW,eAKlF,MAAMzM,EAAKw8B,KACXxrB,EAASrP,KACL+O,GAAKH,MAAM/D,cAAc,MAAO,CAACxM,GAAI,UAAUA,KAEnDkpD,GAAYlpD,EAAIq4B,GAAM,QAI9B+uB,GAAKxoD,UAAUkuD,eAAiB7lD,iBAK5B,IADsB9C,EAAUqB,cACZ,OAAO,GAsFhB,WAAI4hD,GChrBnB,MAAMzY,GAAQ,CACV,YAAc,OAAOj+B,GAAKH,OAC1B,eAAiB,OAAOG,GAAKq8C,UAC7B,qBAAsB,OAAOr8C,GAAKs8C,gBAClC,uBAAwB,OAAO7nD,GAAM8nD,kBACrC,eAAgB,OAAOltD,GACvB,aAAc,OAAO,MACrB,kBAAoB,OAAOupB,KAAKC,IAAIhd,SAASid,gBAAgB3G,YAAa1jB,OAAOsqB,YAAc,IAC/F,mBAAqB,OAAOH,KAAKC,IAAIhd,SAASid,gBAAgB1G,aAAc3jB,OAAOuqB,aAAe,IAGtGilB,wBAAgC,WAC5B,OAAOxpC,GAAM+nD,2BAGjBve,oBAA4B,SAASpwC,GACjC,OAAO4G,GAAMgoD,oBAAoB5uD,IAGrCowC,oBAA4B,SAASpwC,EAAKN,GACtC,OAAOkH,GAAMo7C,oBAAoBhiD,EAAKN,IAM1C0wC,UAAkB,SAAU3uC,EAAI+d,GAC5B6G,GAAIK,SAASL,GAAIpG,SAASxe,GAAK+d,IAKnC4wB,SAAiB,SAAU3uC,GACvB4kB,GAAIY,YAAYZ,GAAIpG,SAASxe,KAMjC2uC,OAAe,SAAU3uC,EAAIwR,GACzBoT,GAAIwoC,UAAUxoC,GAAIpG,SAASxe,GAAKwR,IAKpCm9B,SAAiB,SAAU3uC,GACvB4kB,GAAIyoC,aAAazoC,GAAIpG,SAASxe,KAKlC2uC,UAAkB,SAAUpxC,GACxB,OAAI+D,EAAUzC,eAAetB,GAClB+D,EAAU/D,GAAMgK,OAEpB,MAIXonC,QAAgB,WAEZ,OADAxpC,GAAM+Y,KAAK,qBAAuB,uDAC3BovC,IAQX3e,MAAc,SAAU/uC,EAAOgW,GAC3B,OAAOzQ,GAAM0O,sBAAsBjU,EAAOgW,EAAS,CAAC5B,WAAY,QAgBpE26B,sBAA8B,SAAU/uC,EAAOgW,EAAS/J,EAAU,IAC9D,OAAO1G,GAAM0O,sBAAsBjU,EAAOgW,EAAS/J,IAIvD8iC,UAAkB,SAAS/4B,EAAS/J,EAAU,IAC1C1G,GAAM4C,UAAU6N,EAAS/J,IAI7B8iC,WAAmB,SAAS7sC,GACxB,OAAO4O,GAAK5N,eAAejB,KAAKC,IAIpC6sC,eAAuB,SAAS7sC,GAC5B,OAAO4O,GAAK5N,eAAeb,QAAQH,IAIvC6sC,kBAA0B,YAAYl+B,GAClC,OAAOC,GAAK5N,eAAe4jB,uBAAuBjW,IAGtDk+B,uBAA+B,YAAY4e,GACvC,OAAO78C,GAAK5N,eAAeP,iBAAiBgrD,IAGhD5e,wBAAgC,SAASpxC,GACrC,OAAOmT,GAAK5N,eAAeJ,kBAAkBnF,IAIjDoxC,oBAA4B,SAAShjC,GACjC,GAAMA,aAAgBxM,OAAOgN,QAAaR,aAAgBgZ,QAE1D,OADIhZ,aAAgBQ,SAAQR,EAAOA,EAAK,IACjC+E,GAAKkW,oBAAoBjb,IAIpCgjC,SAAiB,SAAS/oC,EAAYrH,GAClC,OAAO4F,EAAU+B,cAAcN,EAAYrH,KAG/CowC,GAAM6e,QAAU7e,GAAM8e,SAGtB9e,GAAM+e,SAAW,SAAS9nD,EAAYrH,EAAKuF,GACvC,OAAOK,EAAUgC,cAAcP,EAAYrH,EAAKuF,IAGpD6qC,GAAMgf,QAAUhf,GAAM+e,SAGtB/e,GAAMif,WAAa,SAAShoD,EAAYrH,GACpC,OAAO4F,EAAUiC,iBAAiBR,EAAYrH,IAIlDowC,GAAMhd,YAAc,SAAS7G,EAAMC,EAAYlf,GAC3C,OAAO1G,GAAMwsB,YAAY7G,EAAMC,EAAYlf,IAI/C8iC,GAAMkf,UAAY,SAASliD,EAAMuX,GAC7B,OAAO/d,GAAM0oD,UAAUliD,EAAMuX,IAIjCyrB,GAAM5iB,eAAiB,SAASnB,EAAQhjB,GACpC,OAAOzC,GAAM4mB,eAAenB,EAAQhjB,IAIxC+mC,GAAMhyB,SAAW,SAAS7Y,GACtB,OAAOqB,GAAMwX,SAAS7Y,IAG1B6qC,GAAMmf,gBAAkB,SAASvwD,GAC7B,QAASgE,EAAahE,IAG1BoxC,GAAMof,eAAiB,SAASxwD,GAC5B,QAASiE,EAAYjE,IAGzBoxC,GAAMqf,iBAAmB,SAAShuD,GAC9B,QAASU,EAAeV,IAG5B2uC,GAAMsf,cAAgB,SAASjuD,GAC3B,OAAO2qC,GAActP,SAASr7B,GAAI,IAGtC2uC,GAAMuf,eAAiB,SAASluD,GAC5B,OAAO2qC,GAActP,SAASr7B,GAAI,IAGtC2uC,GAAMwf,cAAgB,SAASnuD,GAC3B,OAAO2qC,GAActP,SAASr7B,GAAKU,EAAeV,KAItD2uC,GAAM1oC,UAAY,SAAS1H,GACvB,OAAO4F,EAAU8B,UAAU1H,IAI/BowC,GAAM5pC,UAAY,SAASxG,EAAKuF,GAC5B,OAAOK,EAAUY,UAAUxG,EAAKuF,IAKpC,MAAMsqD,GAAe,CAAChgB,EAAQrqB,EAAMsqB,IAAY,IAAI,MAEhD,aAAc,OAAOA,EAAQggB,OAE7BC,UAAU/wD,GACN,QAAS6wC,EAAO7wC,GAGpBqL,OAAOrL,GACH,OAAO8wC,EAAQzlC,OAAOrL,GAG1BuL,QAAQvL,GACJ,OAAO8wC,EAAQvlC,QAAQvL,GAG3ByL,OAAOzL,GACC6wC,EAAO7wC,GAAOsG,KAAKiF,QAAQvL,GAC1BsG,KAAK+E,OAAOrL,GAGrBiL,OAAOjL,GACH,OAAO8wC,EAAQ7lC,OAAOjL,GAG1BM,IAAIN,GACA,OAAIwmB,EAAKllB,eAAetB,GAChBwmB,EAAKxmB,GAAMgK,OAAewc,EAAKxmB,GAAMgK,OAClCwc,EAAKxmB,GAET,KAGXgxD,SACI,OAAO7wD,OAAO2J,KAAK0c,GAAMhF,IAAI3G,GAAKvU,KAAKhG,IAAIua,IAAItW,OAAOktC,GAAKA,KAInEL,GAAM6f,QAAUJ,GAAa7sD,EAAcD,EAAWia,GACtDozB,GAAMjI,OAAS0nB,GAAa5sD,EAAaH,EAAUma,IAEpCmzB,UAEfxvC,OAAOyD,UAAUC,cAAc8rC,MAAQA,GC7PxB,WACX,MAAM8f,EAAsB/wD,OAAO6oB,yBAAyBmoC,kBAAkB9vD,UAAW,iBAAiBf,IAC1GH,OAAOC,eAAe+wD,kBAAkB9vD,UAAW,gBAAiB,CAChEf,IAAK,WACD,MAAM8wD,EAAgBpxC,QAAQC,MAAMixC,EAAqB5qD,KAAM4Z,WAC/D,OAAO,IAAI6I,MAAMqoC,EAAe,CAC5BpoC,yBAA0B,SAASrO,EAAK7V,GACpC,GAAa,iBAATA,EACJ,OAAO3E,OAAO6oB,yBAAyBrO,EAAK7V,IAEhDxE,IAAK,SAASqa,EAAK7V,GACf,GAAa,iBAATA,EAAyB,OAAO,KACpC,MAAM+W,EAAMlB,EAAI7V,GAChB,MAAmB,mBAAR+W,EAA2BA,EAAI5a,KAAK0Z,GACxCkB,QAOvB1b,OAAOC,eAAe4f,QAAS,QAAS,CAACtf,MAAOsf,QAAQC,MAAOoxC,UAAU,EAAOx3B,cAAc,IAC9F15B,OAAOC,eAAekxD,SAASjwD,UAAW,OAAQ,CAACX,MAAO4wD,SAASjwD,UAAUJ,KAAMowD,UAAU,EAAOx3B,cAAc,IAElH,MAAM03B,EAAQC,eAAenwD,UAAU2uC,KACvCwhB,eAAenwD,UAAU2uC,KAAO,WAC5B,MAAM/7B,EAAMiM,UAAU,GACtB,OAAIjM,EAAInF,cAAciI,SAAS,gBAAwB,KAChDiJ,QAAQC,MAAMsxC,EAAOjrD,KAAM4Z,YC1B1CuxC,GCFe,MACX,MAAMC,EAAW1iD,SAASC,cAAc,OACxCyiD,EAASxiD,UAAY,cACrBwiD,EAASrvD,MAAQ,2BACjB2M,SAAS+B,KAAKoW,YAAYuqC,IDD9BC,GAEA,MAAMC,GAAkB,CAAC5wD,EAAKN,KAC1BP,OAAOC,eAAewB,OAAQZ,EAAK,CAC/BV,IAAG,KACCsH,GAAM+Y,KAAK,oBAAsB,IAAG3f,iEAC7BN,MAQbmxD,GAAa1xD,OAAO2J,KAAKgoD,GAC/B,IAAK,MAAM9wD,KAAO6wD,GAAYD,GAAgB5wD,EAAK8wD,EAAQ9wD,IAc3D4wD,GAAgB,OAAQz+C,IACxBy+C,GAAgB,eAAgB5zC,GAChC4zC,GAAgB,cAAe3zC,IAC/B2zC,GAAgB,QAAShqD,IACzBgqD,GAAgB,WAAY5oD,GAC5B4oD,GAAgB,gBAAiBxkB,IACjCwkB,GAAgB,YAAahrD,GAC7BgrD,GAAgB,iBAAkBtpD,IAClCspD,GAAgB,kBAAmB5tB,IAEnCpiC,OAAOwvC,MAAQA,GAGfwgB,GAAgB,WAAY/H,IAGb,MAAMkI,GACjB1rD,YAAYzC,EAAUqgD,GAClB4F,GAAKC,UAAUlmD,GACfimD,GAAKI,WAAWhG,GAGpBhD,OAEI4I,GAAK5I","file":"index.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\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\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 = \"https://rawcdn.githack.com/Lightcord/Lightcord/68cee85508c6296826f3907cc9e9888d63e80d2b/LightcordApi/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = require(\"electron\");","module.exports = require(\"path\");","module.exports = require(\"fs\");","module.exports = require(\"crypto\");","module.exports = require(\"node-fetch\");","module.exports = require(\"events\");","module.exports = require(\"module\");","export const minimumDiscordVersion = \"0.0.307\";\r\nexport const currentDiscordVersion = (window.DiscordNative && window.DiscordNative.remoteApp && window.DiscordNative.remoteApp.getVersion && window.DiscordNative.remoteApp.getVersion()) || \"0.0.307\";\r\nexport const minSupportedVersion = \"0.3.0\";\r\nexport const bbdVersion = \"0.3.5\";\r\nexport const bbdChangelog = {\r\n description: \"Big things are coming.\",\r\n changes: [\r\n {\r\n title: \"Bug Fixes\",\r\n type: \"fixed\",\r\n items: [\r\n \"Some fixes related to showing modals in the `BdApi`.\",\r\n \"Fixed the open folder buttons for plugins and themes\"\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nexport const settings = {\r\n \"Custom css live update\": {id: \"bda-css-0\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\r\n \"Custom css auto udpate\": {id: \"bda-css-1\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\r\n \"BetterDiscord Blue\": {id: \"bda-gs-b\", info: \"Replace Discord blue with BD Blue\", implemented: false, hidden: false, cat: \"core\"},\r\n\r\n /* Core */\r\n /* ====== */\r\n \"Public Servers\": {id: \"bda-gs-1\", info: \"Display public servers button\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Minimal Mode\": {id: \"bda-gs-2\", info: \"Hide elements and reduce the size of elements.\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Voice Mode\": {id: \"bda-gs-4\", info: \"Only show voice chat\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Hide Channels\": {id: \"bda-gs-3\", info: \"Hide channels in minimal mode\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Dark Mode\": {id: \"bda-gs-5\", info: \"Make certain elements dark by default(wip)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Voice Disconnect\": {id: \"bda-dc-0\", info: \"Disconnect from voice server when closing Discord\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"24 Hour Timestamps\": {id: \"bda-gs-6\", info: \"Replace 12hr timestamps with proper ones\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Colored Text\": {id: \"bda-gs-7\", info: \"Make text color the same as role color\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n \"Normalize Classes\": {id: \"fork-ps-4\", info: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\r\n\r\n /* Content */\r\n \"Content Error Modal\": {id: \"fork-ps-1\", info: \"Shows a modal with plugin/theme errors\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Scan Plugins\": {id: \"fork-ps-6\", info: \"Scan plugins for any threat that can be hidden inside.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Show Toasts\": {id: \"fork-ps-2\", info: \"Shows a small notification for important information\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Scroll To Settings\": {id: \"fork-ps-3\", info: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Automatic Loading\": {id: \"fork-ps-5\", info: \"Automatically loads, reloads, and unloads plugins and themes\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Enable Edit Button\": {id: \"fork-ps-7\", info: \"Enable an Edit Button on the plugin and theme panel.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\r\n \"Themes in Popout Window\": {id: \"lightcord-9\", info: \"Enable themes in Popout Window. (For example, when detaching screenshare.)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\", experimental: true},\r\n\r\n /* Developer */\r\n \"Developer Mode\": \t {id: \"bda-gs-8\", info: \"Developer Mode Toggle\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\r\n \"Copy Selector\":\t\t\t {id: \"fork-dm-1\", info: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\r\n\r\n /** Lightcord */\r\n \"Disable BetterDiscord\": {id: \"bd-disable\", info: \"Disable Betterdiscord (plugins, themes, etc) (Not implemented).\", implemented: false, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Blur Personal Information\": {id: \"lightcord-6\", info: \"Blur sensitive informations like email, payment infos and more.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Calling Ring Beat\": {id: \"lightcord-2\", info: \"Enable Discord's special calling beat.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Developer Options\": {id: \"lightcord-1\", info: \"Enable Discord's & Lightcord's Internal Developer Options. This allow the \\\"Experiments\\\" tab, the \\\"Developer Options\\\" tab and the \\\"Lightcord Api\\\" section.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Ad Block\": {id: \"lightcord-4\", info: \"Block any BOT that dms you with an invite link. Even in an embed.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Enable Lightcord Servers\": {id: \"lightcord-5\", info: \"Enable Lightcord's servers. Disabling this will disable custom badges.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Disable typing\": {id: \"lightcord-7\", info: \"Don't let other see you're typing.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\r\n \"Lightcord Tabs\": {id: \"lightcord-8\", info: \"Allows you to launch multiple instances of Lightcord in the same window.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\", experimental: true},\r\n \"Use Notification Shim\": {id: \"lightcord-10\", info: \"Basically don't use Windows's Notifications.\", implemented: true, hidden: process.platform !== \"win32\", cat: \"lightcord\", category: \"Lightcord\", experimental: false},\r\n\r\n /** Lightcord Window */\r\n \"Always-on-Top\": {id: \"lightcord-3\", info: \"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\r\n \"No Window Bounds\": {id: \"no_window_bound\", info: \"Disable Window Bounds. Can be useful if you use a window manager.\", implemented: true, hidden: process.platform !== \"linux\", cat: \"lightcord\", category: \"Window\"},\r\n \"Enable Glasstron\": {id: \"enable_glasstron\", info: \"Enable Glasstron. If you're not using transparent themes, this can reduce lag.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\r\n \r\n /** RichPresence */\r\n \"Enable\": {id: \"lightcord-presence-1\", info: \"Enable RichPresence below.\", implemented: true, hidden: false, cat: \"status\"}\r\n};\r\n\r\nexport const defaultCookie = {\r\n \"bda-gs-1\": true,\r\n \"bda-gs-2\": false,\r\n \"bda-gs-3\": false,\r\n \"bda-gs-4\": false,\r\n \"bda-gs-5\": true,\r\n \"bda-gs-6\": false,\r\n \"bda-gs-7\": false,\r\n \"bda-gs-8\": false,\r\n \"bda-es-0\": true,\r\n \"bda-es-1\": true,\r\n \"bda-es-2\": true,\r\n \"bda-es-4\": false,\r\n \"bda-es-6\": true,\r\n \"bda-es-7\": true,\r\n \"bda-gs-b\": false,\r\n \"bda-es-8\": true,\r\n \"bda-dc-0\": false,\r\n \"bda-css-0\": false,\r\n \"bda-css-1\": false,\r\n \"bda-es-9\": true,\r\n \"fork-dm-1\": false,\r\n \"fork-ps-1\": true,\r\n \"fork-ps-2\": true,\r\n \"fork-ps-3\": true,\r\n \"fork-ps-4\": true,\r\n \"fork-ps-5\": true,\r\n \"fork-ps-6\": true,\r\n \"fork-ps-7\": false,\r\n \"fork-es-2\": false,\r\n \"fork-es-3\": true,\r\n \"fork-wp-1\": false,\r\n \"fork-wp-2\": false,\r\n \"fork-beta\": true,\r\n \"lightcord-1\": false,\r\n \"lightcord-2\": true,\r\n \"lightcord-presence-1\": false,\r\n \"lightcord-3\": false,\r\n \"lightcord-4\": false,\r\n \"lightcord-5\": true,\r\n \"lightcord-6\": true,\r\n \"lightcord-7\": false,\r\n \"lightcord-8\": false,\r\n \"lightcord-9\": false,\r\n \"lightcord-10\": false,\r\n \"no_window_bound\": false,\r\n};\r\n\r\n\r\nexport const settingsCookie = {};\r\n\r\nexport const settingsRPC = {};\r\nexport const defaultRPC = {\r\n \"name\": \"Lightcord\",\r\n \"application_id\": \"711416957718757418\",\r\n \"state\": \"Lightcord Client\",\r\n \"details\": \"Browsing Discord\",\r\n \"timestamps.start\": Date.now(),\r\n \"assets.small\": null,\r\n \"assets.large\": \"712323821037682791\"\r\n}\r\n\r\nexport const lightcordSettings = {};\r\nexport const defaultLightcordSettings = {};\r\n\r\nexport const bdpluginErrors = [];\r\nexport const bdthemeErrors = []; // define for backwards compatibility\r\n\r\nexport const bdConfig = Object.create(BetterDiscordConfig);\r\n\r\nexport const bdthemes = {};\r\nexport const bdplugins = {};\r\n\r\nexport const pluginCookie = {};\r\nexport const themeCookie = {};","const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\r\ndelete req.m.__extra_id__;\r\ndelete req.c.__extra_id__;\r\nconst find = (filter) => {\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) return m.default;\r\n if (m && filter(m))\treturn m;\r\n }\r\n }\r\n // console.warn(\"Cannot find loaded module in cache\");\r\n return null;\r\n};\r\n\r\nconst findAll = (filter) => {\r\n const modules = [];\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(m.default);\r\n else if (m && filter(m)) modules.push(m);\r\n }\r\n }\r\n return modules;\r\n};\r\n\r\nconst findByProps = (...propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\r\nconst findByPrototypes = (...protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\r\nconst findByDisplayName = (displayName) => find(module => module.displayName === displayName);\r\n\r\nlet mod = {find, findAll, findByProps, findByPrototypes, findByDisplayName};\r\nexport default mod\r\n\r\nwindow.Lightcord.BetterDiscord.WebpackModules = mod","const __non_webpack_require__ = window.require\r\n\r\nimport Utils from \"./utils\";\r\nimport ContentManager from \"./contentManager\";\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst releaseChannel = DiscordNative.globals ? DiscordNative.globals.releaseChannel : DiscordNative.app ? DiscordNative.app.getReleaseChannel() : \"stable\";\r\n\r\nlet dataPath = \"\";\r\nif (process.platform === \"win32\") dataPath = process.env.APPDATA;\r\nelse if (process.platform === \"darwin\") dataPath = path.join(process.env.HOME, \"Library\", \"Preferences\");\r\nelse dataPath = process.env.XDG_CONFIG_HOME ? process.env.XDG_CONFIG_HOME : path.join(process.env.HOME, \".config\");\r\ndataPath = path.join(dataPath, \"BetterDiscord\");\r\n\r\nexport default new class DataStore {\r\n constructor() {\r\n this.data = {settings: {stable: {}, canary: {}, ptb: {}}};\r\n this.pluginData = {};\r\n window.Lightcord.BetterDiscord.DataStore = this\r\n }\r\n\r\n initialize() {\r\n try {\r\n if (!fs.existsSync(this.BDFile)) fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\r\n const data = JSON.parse(fs.readFileSync(this.BDFile, \"utf-8\"))\r\n if (data.hasOwnProperty(\"settings\")) this.data = data;\r\n if (!fs.existsSync(this.settingsFile)) return;\r\n let settings = __non_webpack_require__(this.settingsFile);\r\n fs.unlinkSync(this.settingsFile);\r\n if (settings.hasOwnProperty(\"settings\")) settings = Object.assign({stable: {}, canary: {}, ptb: {}}, {[releaseChannel]: settings});\r\n else settings = Object.assign({stable: {}, canary: {}, ptb: {}}, settings);\r\n this.setBDData(\"settings\", settings);\r\n }\r\n catch (err) {\r\n console.error(err);\r\n Utils.alert(\"Corrupt Storage\", \"The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.\");\r\n }\r\n }\r\n\r\n get injectionPath() {\r\n return this._injectionPath = null;\r\n if (this._injectionPath) return this._injectionPath;\r\n const electron = require(\"electron\").remote.app;\r\n const base = electron.getAppPath();\r\n const roamingBase = electron.getPath(\"userData\");\r\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\");\r\n const location = path.resolve(base, \"..\", \"app\");\r\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\r\n if (!realLocation) return this._injectionPath = null;\r\n return this._injectionPath = realLocation;\r\n }\r\n\r\n get configFile() {return this._configFile || (this._configFile = path.resolve(this.injectionPath, \"betterdiscord\", \"config.json\"));}\r\n get BDFile() {return this._BDFile || (this._BDFile = path.resolve(dataPath, \"bdstorage.json\"));}\r\n get settingsFile() {return this._settingsFile || (this._settingsFile = path.resolve(dataPath, \"bdsettings.json\"));}\r\n getPluginFile(pluginName) {return path.resolve(ContentManager.pluginsFolder, pluginName + \".config.json\");}\r\n\r\n getSettingGroup(key) {\r\n return this.data.settings[releaseChannel][key] || null;\r\n }\r\n\r\n setSettingGroup(key, data) {\r\n this.data.settings[releaseChannel][key] = data;\r\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\r\n }\r\n\r\n getBDData(key) {\r\n return this.data[key] || \"\";\r\n }\r\n\r\n setBDData(key, value) {\r\n this.data[key] = value;\r\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\r\n }\r\n\r\n getPluginData(pluginName, key) {\r\n if (this.pluginData[pluginName] !== undefined) return this.pluginData[pluginName][key];\r\n if (!fs.existsSync(this.getPluginFile(pluginName))) return undefined;\r\n this.pluginData[pluginName] = JSON.parse(fs.readFileSync(this.getPluginFile(pluginName)));\r\n return this.pluginData[pluginName][key];\r\n }\r\n\r\n setPluginData(pluginName, key, value) {\r\n if (value === undefined) return;\r\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\r\n this.pluginData[pluginName][key] = value;\r\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\r\n }\r\n\r\n deletePluginData(pluginName, key) {\r\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\r\n delete this.pluginData[pluginName][key];\r\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\r\n }\r\n};","/* BDEvents */\r\nconst EventEmitter = require(\"events\");\r\nexport default new class BDEvents extends EventEmitter {\r\n constructor(){\r\n super()\r\n window.Lightcord.BetterDiscord.BDEvents = this\r\n }\r\n dispatch(eventName, ...args) {this.emit(eventName, ...args);}\r\n off(eventName, eventAction) {this.removeListener(eventName, eventAction);}\r\n};","import {bdpluginErrors, pluginCookie, settingsCookie, bdplugins} from \"../0globals\";\nimport ContentManager from \"./contentManager\";\nimport DataStore from \"./dataStore\";\nimport BDEvents from \"./bdEvents\";\nimport Utils from \"./utils\";\n\nclass PluginModule {\n constructor(){\n window.Lightcord.BetterDiscord.PluginModule = this\n }\n get folder() {return ContentManager.pluginsFolder;}\n}\n\nPluginModule.prototype.loadPlugins = async function () {\n this.loadPluginData();\n bdpluginErrors.splice(0, 0, ...(await ContentManager.loadPlugins()));\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n let plugin, name;\n\n try {\n plugin = bdplugins[plugins[i]].plugin;\n name = plugin.getName();\n if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be loaded.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"load() could not be fired.\", error: {message: err.message, stack: err.stack}});\n continue;\n }\n\n if (!pluginCookie[name]) pluginCookie[name] = false;\n\n if (pluginCookie[name]) {\n try {\n plugin.start();\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} has started.`);\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be started.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"start() could not be fired.\", error: {message: err.message, stack: err.stack}});\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n this.savePluginData();\n\n require(\"electron\").remote.getCurrentWebContents().on(\"did-navigate-in-page\", this.channelSwitch.bind(this));\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"plugin\");\n};\n\nPluginModule.prototype.startPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.start();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has started.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be started.`, {type: \"error\"});\n pluginCookie[plugin] = false;\n this.savePluginData();\n Utils.err(\"Plugins\", plugin + \" could not be started.\", err);\n }\n};\n\nPluginModule.prototype.stopPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.stop();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has stopped.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be stopped.`, {type: \"error\"});\n Utils.err(\"Plugins\", bdplugins[plugin].plugin.getName() + \" could not be stopped.\", err);\n }\n};\n\nPluginModule.prototype.enablePlugin = function (plugin, reload = false) {\n if (pluginCookie[plugin]) return;\n pluginCookie[plugin] = true;\n this.savePluginData();\n this.startPlugin(plugin, reload);\n};\n\nPluginModule.prototype.enable = function (plugin, reload = false) {\n return this.enablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.disablePlugin = function (plugin, reload = false) {\n if (!pluginCookie[plugin]) return;\n pluginCookie[plugin] = false;\n this.savePluginData();\n this.stopPlugin(plugin, reload);\n};\n\nPluginModule.prototype.disable = function (plugin, reload = false) {\n return this.disablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.togglePlugin = function (plugin) {\n if (pluginCookie[plugin]) this.disablePlugin(plugin);\n else this.enablePlugin(plugin);\n};\n\nPluginModule.prototype.toggle = function (plugin, reload = false) {\n return this.togglePlugin(plugin, reload);\n};\n\nPluginModule.prototype.loadPlugin = async function(filename) {\n const error = await ContentManager.loadContent(filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\n }\n const plugin = Object.values(bdplugins).find(p => (console.log(p.filename, filename)) || p.filename == filename).plugin;\n try { if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();}\n catch (err) {if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [err]});}\n Utils.log(\"ContentManager\", `${plugin.getName()} v${plugin.getVersion()} was loaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} was loaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-loaded\", plugin.getName());\n};\n\nPluginModule.prototype.unloadPlugin = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const plugin = bdplugin.plugin.getName();\n if (pluginCookie[plugin]) this.disablePlugin(plugin, true);\n const error = ContentManager.unloadContent(bdplugins[plugin].filename, \"plugin\");\n delete bdplugins[plugin];\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be unloaded. It may have not been loaded yet.`, error);\n }\n Utils.log(\"ContentManager\", `${plugin} was unloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} was unloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-unloaded\", plugin);\n};\n\nPluginModule.prototype.delete = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n this.unloadPlugin(bdplugin.filename);\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n require(\"fs\").unlinkSync(fullPath);\n};\n\nPluginModule.prototype.reloadPlugin = async function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return this.loadPlugin(filenameOrName);\n const plugin = bdplugin.plugin.getName();\n const enabled = pluginCookie[plugin];\n if (enabled) this.stopPlugin(plugin, true);\n const error = await ContentManager.reloadContent(bdplugins[plugin].filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be reloaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be reloaded.`, error);\n }\n if (bdplugins[plugin].plugin.load && typeof(bdplugins[plugin].plugin.load) == \"function\") bdplugins[plugin].plugin.load();\n if (enabled) this.startPlugin(plugin, true);\n Utils.log(\"ContentManager\", `${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-reloaded\", plugin);\n};\n\nPluginModule.prototype.reload = function(name) {\n return this.reloadPlugin(name);\n};\n\nPluginModule.prototype.edit = function(filenameOrName) {\n console.log(\"Edit \" + filenameOrName);\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n console.log(\"Edit \" + fullPath);\n require(\"electron\").shell.openItem(`${fullPath}`);\n};\n\nPluginModule.prototype.updatePluginList = function() {\n const results = ContentManager.loadNewContent(\"plugin\");\n for (const filename of results.added) this.loadPlugin(filename);\n for (const name of results.removed) this.unloadPlugin(name);\n};\n\nPluginModule.prototype.loadPluginData = function () {\n const saved = DataStore.getSettingGroup(\"plugins\");\n if (saved) {\n Object.assign(pluginCookie, saved);\n }\n};\n\nPluginModule.prototype.savePluginData = function () {\n DataStore.setSettingGroup(\"plugins\", pluginCookie);\n};\n\nPluginModule.prototype.newMessage = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onMessage === \"function\") {\n try { plugin.onMessage(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onMessage for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.channelSwitch = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onSwitch === \"function\") {\n try { plugin.onSwitch(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onSwitch for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.rawObserver = function(e) {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.observer === \"function\") {\n try { plugin.observer(e); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire observer for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nexport default new PluginModule();","/**\r\n * Tooltip that automatically show and hide themselves on mouseenter and mouseleave events.\r\n * Will also remove themselves if the node to watch is removed from DOM through\r\n * a MutationObserver.\r\n *\r\n * Note this is not using Discord's internals but normal DOM manipulation and emulates\r\n * Discord's own tooltips as closely as possible.\r\n *\r\n * @module EmulatedTooltip\r\n * @version 0.0.1\r\n */\r\n\r\nimport Utils from \"../modules/utils\";\r\nimport WebpackModules from \"../modules/webpackModules\";\r\nlet TooltipClasses\r\nfunction getTooltipClasses(){\r\n\tif(TooltipClasses)return TooltipClasses\r\n\treturn TooltipClasses = WebpackModules.findByProps(\"tooltip\", \"tooltipBlack\");\r\n}\r\nlet TooltipLayers\r\nfunction getTooltipLayers(){\r\n\tif(TooltipLayers)return TooltipLayers\r\n\treturn TooltipLayers = WebpackModules.findByProps(\"layer\", \"layerContainer\");\r\n}\r\n\r\nconst getClass = function(sideOrColor) {\r\n const upperCase = sideOrColor[0].toUpperCase() + sideOrColor.slice(1);\r\n const tooltipClass = getTooltipClasses()[`tooltip${upperCase}`];\r\n if (tooltipClass) return tooltipClass;\r\n return null;\r\n};\r\n\r\nconst classExists = function(sideOrColor) {\r\n return getClass(sideOrColor) ? true : false;\r\n};\r\n\r\nconst toPx = function(value) {\r\n return `${value}px`;\r\n};\r\n\r\nexport default class EmulatedTooltip {\r\n\t/**\r\n\t *\r\n\t * @constructor\r\n\t * @param {(HTMLElement|jQuery)} node - DOM node to monitor and show the tooltip on\r\n\t * @param {string} tip - string to show in the tooltip\r\n\t * @param {object} options - additional options for the tooltip\r\n\t * @param {string} [options.style=black] - correlates to the discord styling/colors (black, brand, green, grey, red, yellow)\r\n\t * @param {string} [options.side=top] - can be any of top, right, bottom, left\r\n\t * @param {boolean} [options.preventFlip=false] - prevents moving the tooltip to the opposite side if it is too big or goes offscreen\r\n * @param {boolean} [options.disabled=false] - whether the tooltip should be disabled from showing on hover\r\n * @param {boolean} [options.attachEvents=true] - whether the tooltip should listen to mouseenter and mouseleave events.\r\n\t */\r\n\tconstructor(node, text, options = {}) {\r\n\t\tconst {style = \"black\", side = \"top\", preventFlip = false, disabled = false, attachEvents = true} = options;\r\n\t\tthis.node = node instanceof jQuery ? node[0] : node;\r\n this.label = text;\r\n this.style = style.toLowerCase();\r\n\t\tthis.side = side.toLowerCase();\r\n this.preventFlip = preventFlip;\r\n this.disabled = disabled;\r\n\r\n if (!classExists(this.side)) return Utils.err(\"EmulatedTooltip\", `Side ${this.side} does not exist.`);\r\n\t\tif (!classExists(this.style)) return Utils.err(\"EmulatedTooltip\", `Style ${this.style} does not exist.`);\r\n\t\t\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.className = getTooltipLayers().layer + \" \" + getTooltipLayers().disabledPointerEvents;\r\n\r\n\t\tthis.tooltipElement = document.createElement(\"div\");\r\n\t\tthis.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\r\n\r\n\t\tthis.labelElement = document.createElement(\"div\");\r\n\t\tthis.labelElement.className = getTooltipClasses().tooltipContent\r\n\r\n\t\tconst pointerElement = document.createElement(\"div\");\r\n\t\tpointerElement.className = getTooltipClasses().tooltipPointer;\r\n\r\n\t\tthis.tooltipElement.append(pointerElement);\r\n\t\tthis.tooltipElement.append(this.labelElement);\r\n\t\tthis.element.append(this.tooltipElement);\r\n\r\n\t\tif(attachEvents){\r\n\t\t\tthis.node.addEventListener(\"mouseenter\", () => {\r\n\t\t\t\tif (this.disabled) return;\r\n\t\t\t\tthis.show();\r\n\t\r\n\t\t\t\tconst observer = new MutationObserver((mutations) => {\r\n\t\t\t\t\tmutations.forEach((mutation) => {\r\n\t\t\t\t\t\tconst nodes = Array.from(mutation.removedNodes);\r\n\t\t\t\t\t\tconst directMatch = nodes.indexOf(this.node) > -1;\r\n\t\t\t\t\t\tconst parentMatch = nodes.some(parent => parent.contains(this.node));\r\n\t\t\t\t\t\tif (directMatch || parentMatch) {\r\n\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\tobserver.disconnect();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\r\n\t\t\t\tobserver.observe(document.body, {subtree: true, childList: true});\r\n\t\t\t});\r\n\t\r\n\t\t\tthis.node.addEventListener(\"mouseleave\", () => {\r\n\t\t\t\tthis.hide();\r\n\t\t\t});\r\n\t\t}\r\n }\r\n\r\n /** Container where the tooltip will be appended. */\r\n get container() { \r\n\t\treturn document.querySelector(\".\"+Utils.removeDa(BDModules.get(e => e.popouts)[0].popouts)+\" ~ .\"+Utils.removeDa(BDModules.get(e => e.layerContainer)[0].layerContainer)); \r\n\t}\r\n /** Boolean representing if the tooltip will fit on screen above the element */\r\n get canShowAbove() { return this.node.getBoundingClientRect().top - this.element.offsetHeight >= 0; }\r\n /** Boolean representing if the tooltip will fit on screen below the element */\r\n get canShowBelow() { return this.node.getBoundingClientRect().top + this.node.offsetHeight + this.element.offsetHeight <= Utils.screenHeight; }\r\n /** Boolean representing if the tooltip will fit on screen to the left of the element */\r\n get canShowLeft() { return this.node.getBoundingClientRect().left - this.element.offsetWidth >= 0; }\r\n /** Boolean representing if the tooltip will fit on screen to the right of the element */\r\n\tget canShowRight() { return this.node.getBoundingClientRect().left + this.node.offsetWidth + this.element.offsetWidth <= Utils.screenWidth; }\r\n\r\n /** Hides the tooltip. Automatically called on mouseleave. */\r\n\thide() {\r\n this.element.remove();\r\n this.tooltipElement.className = this._className;\r\n\t}\r\n\r\n /** Shows the tooltip. Automatically called on mouseenter. Will attempt to flip if position was wrong. */\r\n\tshow() {\r\n this.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\r\n\t\tthis.labelElement.textContent = this.label;\r\n\t\tthis.container.append(this.element);\r\n\r\n\t\tif (this.side == \"top\") {\r\n\t\t\tif (this.canShowAbove || (!this.canShowAbove && this.preventFlip)) this.showAbove();\r\n\t\t\telse this.showBelow();\r\n\t\t}\r\n\r\n\t\tif (this.side == \"bottom\") {\r\n\t\t\tif (this.canShowBelow || (!this.canShowBelow && this.preventFlip)) this.showBelow();\r\n\t\t\telse this.showAbove();\r\n\t\t}\r\n\r\n\t\tif (this.side == \"left\") {\r\n\t\t\tif (this.canShowLeft || (!this.canShowLeft && this.preventFlip)) this.showLeft();\r\n\t\t\telse this.showRight();\r\n\t\t}\r\n\r\n\t\tif (this.side == \"right\") {\r\n\t\t\tif (this.canShowRight || (!this.canShowRight && this.preventFlip)) this.showRight();\r\n\t\t\telse this.showLeft();\r\n\t\t}\r\n\t}\r\n\r\n /** Force showing the tooltip above the node. */\r\n\tshowAbove() {\r\n\t\tthis.tooltipElement.classList.add(getClass(\"top\"));\r\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top - this.element.offsetHeight - 10));\r\n\t\tthis.centerHorizontally();\r\n\t}\r\n\r\n /** Force showing the tooltip below the node. */\r\n\tshowBelow() {\r\n\t\tthis.tooltipElement.classList.add(getClass(\"bottom\"));\r\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top + this.node.offsetHeight + 10));\r\n\t\tthis.centerHorizontally();\r\n\t}\r\n\r\n /** Force showing the tooltip to the left of the node. */\r\n\tshowLeft() {\r\n\t\tthis.tooltipElement.classList.add(getClass(\"left\"));\r\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left - this.element.offsetWidth - 10));\r\n\t\tthis.centerVertically();\r\n\t}\r\n\r\n /** Force showing the tooltip to the right of the node. */\r\n\tshowRight() {\r\n\t\tthis.tooltipElement.classList.add(getClass(\"right\"));\r\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left + this.node.offsetWidth + 10));\r\n\t\tthis.centerVertically();\r\n\t}\r\n\r\n\tcenterHorizontally() {\r\n const nodecenter = this.node.getBoundingClientRect().left + (this.node.offsetWidth / 2);\r\n this.element.style.setProperty(\"left\", toPx(nodecenter - (this.element.offsetWidth / 2)));\r\n\t}\r\n\r\n\tcenterVertically() {\r\n\t\tconst nodecenter = this.node.getBoundingClientRect().top + (this.node.offsetHeight / 2);\r\n\t\tthis.element.style.setProperty(\"top\", toPx(nodecenter - (this.element.offsetHeight / 2)));\r\n\t}\r\n}","import BDV2 from \"../modules/v2\";\r\nimport Tooltip from \"./tooltip\";\r\n\r\nexport default class extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n async componentDidMount() {\r\n const {style = \"black\", side = \"top\", text = \"\"} = this.props;\r\n this.node = BDV2.reactDom.findDOMNode(this);\r\n this.tooltip = new Tooltip(this.node, text, {style, side});\r\n }\r\n\r\n componentWillUnmount() {\r\n this.tooltip.hide();\r\n delete this.tooltip;\r\n }\r\n\r\n render() {\r\n return this.props.children;\r\n }\r\n}","import nodeFetch from \"node-fetch\"\r\nimport * as electron from \"electron\"\r\nimport * as crypto from \"crypto\"\r\nimport BDV2 from \"./v2\"\r\nimport tooltipWrap from \"../ui/tooltipWrap\"\r\nimport Utils from \"./utils\"\r\nimport { createReadStream, writeFileSync } from \"fs\"\r\nimport { basename, join } from \"path\"\r\nimport contentManager from \"./contentManager\"\r\nimport { addonCache } from \"./contentManager\"\r\n\r\nconst cache = {}\r\nconst cache2 = {}\r\n\r\nexport default new class PluginCertifier {\r\n constructor(){\r\n window.Lightcord.BetterDiscord.PluginCertifier = this\r\n }\r\n\r\n patch(attachment, id){\r\n process.nextTick(() => {\r\n processAttachment(attachment, id)\r\n })\r\n }\r\n\r\n start(){\r\n\r\n }\r\n\r\n isTrusted(hash){\r\n return cache[hash] && !cache[hash].suspect\r\n }\r\n}\r\n\r\nexport function checkViruses(hash, data, resultCallback, removeCallback, filename){\r\n data = data.toString(\"utf8\")\r\n let isHarmful = false\r\n for(let keyword of data.split(/[^\\w\\d]+/g)){\r\n for(let oof of [\r\n \"token\",\r\n \"email\",\r\n \"phone\",\r\n \"MFA\",\r\n \"2fa\",\r\n \"child_process\",\r\n \"localStorage\",\r\n \"eval\",\r\n \"getGlobal\",\r\n \"BrowserWindow\"\r\n ]){\r\n if(keyword.toLowerCase().includes(oof.toLowerCase()) && !keyword.toLowerCase() === \"domtokenlist\"){\r\n console.log(oof, keyword)\r\n isHarmful = \"token stealer/virus\"\r\n break\r\n } \r\n }\r\n if(isHarmful)break\r\n }\r\n\r\n if(!isHarmful){\r\n /**\r\n * @type {string}\r\n */\r\n const no_comments = data.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, \"\").trim()// removing the META comment from plugins\r\n if((/var [\\w\\d_$]+=\\[\"/gi).test(no_comments)){\r\n isHarmful = \"obfuscation/hidden code\"\r\n }\r\n\r\n if(!isHarmful){\r\n const regexps = [\r\n /** hexadecimal */\r\n /_0x\\w{4}\\('0x[\\dabcdef]+'\\)/g,\r\n /_0x\\w{4}\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g, // _0x8db7('0x0', 'x1]f')\r\n /** mangled */\r\n /\\w+\\('0x[\\dabcdef]+'\\)/g, // b('0x0')\r\n /\\w+\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g, // b('0x0', 'x1]f')\r\n ]\r\n for(let regex of regexps){\r\n if(isHarmful)break\r\n if(regex.test(no_comments))isHarmful = \"obfuscation/hidden code\"\r\n }\r\n }\r\n }\r\n\r\n if(!isHarmful)return removeCallback(hash)\r\n cache[hash] = {\r\n suspect: true,\r\n name: hashToUrl[hash].split(\"/\").pop(),\r\n type: hashToUrl[hash].endsWith(\".js\") ? \"Plugin\" : \"Theme\",\r\n harm: isHarmful,\r\n hash: hash,\r\n filename\r\n }\r\n \r\n console.log(`Found potentially dangerous ${cache[hash].type.toLowerCase()}: ${cache[hash].name}`)\r\n\r\n resultCallback(cache[hash])\r\n}\r\n\r\nconst hashToUrl = {}\r\n\r\nexport function checkHash(hash, data, filename, resultCallback, removeCallback){\r\n console.log(`File: ${filename} hash: ${hash}`)\r\n if(!cache[hash]){\r\n nodeFetch(\"https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/\"+hash, { // Using node-fetch to bypass cors\r\n headers: {\r\n \"User-Agent\": electron.remote.getCurrentWebContents().userAgent // have to set user-agent\r\n }\r\n }).then(async res => {\r\n if(res.status !== 200){\r\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\r\n checkViruses(hash, data, resultCallback, removeCallback, filename)\r\n return\r\n }\r\n const result = await res.json()\r\n result.hash = hash\r\n result.filename = filename\r\n\r\n cache[hash] = result\r\n\r\n resultCallback(result)\r\n }).catch((err) => {\r\n console.error(`Could not read from github. ${err}`)\r\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\r\n checkViruses(hash, data, resultCallback, removeCallback, filename)\r\n })\r\n }else{\r\n const result = cache[hash]\r\n\r\n resultCallback(result)\r\n }\r\n}\r\n\r\nexport function processFile(__path, resultCallback, removeCallback = (hash) => {}, isFromLoader = false){ \r\n const hash = crypto.createHash(\"sha256\")\r\n let data = Buffer.alloc(0)\r\n\r\n createReadStream(__path).on(\"data\", chunk => {\r\n data = Buffer.concat([data, chunk])\r\n hash.update(chunk)\r\n }).on(\"end\", () => {\r\n const hashResult = hash.digest(\"hex\")\r\n\r\n hashToUrl[hashResult] = __path\r\n\r\n if(isFromLoader && addonCache[hashResult]){\r\n let value = addonCache[hashResult]\r\n if(value.timestamp < (Date.now() - 6.048e+8)){\r\n delete addonCache[hashResult]\r\n contentManager.saveAddonCache()\r\n }else{\r\n resultCallback(value.result)\r\n return\r\n }\r\n }\r\n\r\n checkHash(hashResult, data, basename(__path), resultCallback, removeCallback)\r\n })\r\n}\r\n\r\nexport function processAttachment(attachment, id){\r\n if(!document.getElementById(id))return\r\n if(!attachment.url.startsWith(\"https://cdn.discordapp.com/\"))return document.getElementById(id).remove()\r\n if(!attachment.filename.endsWith(\".plugin.js\") && !attachment.filename.endsWith(\".theme.css\"))return document.getElementById(id).remove()\r\n\r\n nodeFetch(attachment.url, {\r\n headers: {\r\n \"User-Agent\": electron.remote.getCurrentWebContents().userAgent\r\n }\r\n }).then(res => {\r\n if(res.status !== 200)throw new Error(\"File doesn't exist.\")\r\n const hash = crypto.createHash(\"sha256\")\r\n let data = Buffer.alloc(0)\r\n res.body.on(\"data\", chunk => {\r\n data = Buffer.concat([data, chunk])\r\n hash.update(chunk)\r\n })\r\n res.body.on(\"end\", () => {\r\n const hashResult = hash.digest(\"hex\")\r\n\r\n cache2[attachment.url] = hashResult\r\n hashToUrl[hashResult] = attachment.url\r\n\r\n checkHash(hashResult, data, attachment.filename, (result) => {\r\n renderToElements(id, result, attachment.filename)\r\n }, () => {\r\n let elem = document.getElementById(id)\r\n if(elem)elem.remove()\r\n })\r\n })\r\n }).catch(()=>{})\r\n}\r\n\r\nlet flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\r\nlet childModule = BDModules.get(e => e.childContainer)[0]\r\n\r\n/**\r\n * \r\n * @param {HTMLDivElement[]} elements \r\n * @param {{type: \"Theme\"|\"Plugin\", name: string, official?: boolean}|{suspect:true, type: \"Theme\"|\"Plugin\", name: string, harm: string}} result\r\n */\r\nfunction renderToElements(id, result, filename){\r\n const div = document.getElementById(id)\r\n if(!div || div.childNodes.length > 0)return // already certified/div does not exist anymore.\r\n\r\n if(!flowerStarModule)flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\r\n if(!childModule)childModule = BDModules.get(e => e.childContainer)[0]\r\n \r\n if(result.suspect){\r\n try{\r\n div.parentNode.style.borderColor = \"rgb(240, 71, 71)\"\r\n /**\r\n * \r\n * @param {HTMLElement} node \r\n */\r\n let nextNode = (node) => {\r\n for(let child of node.children){\r\n if(child.tagName === \"A\"){\r\n child.addEventListener(\"click\", (e) => {\r\n e.preventDefault()\r\n e.stopImmediatePropagation()\r\n\r\n Utils.showConfirmationModal(\r\n \"Are you sure you want to download this ?\", \r\n \"The \"+result.type.toLowerCase()+\" **\"+filename+\"** might be dangerous **(\"+result.harm+\")**. \\n\\n**We don't recommand to download it**. However, you can still do it below.\", \r\n {\r\n confirmText: \"Download Anyway\",\r\n cancelText: \"Don't !\",\r\n danger: true,\r\n onCancel: () => {},\r\n onConfirm: () => {\r\n electron.remote.shell.openExternal(child.href)\r\n }\r\n }\r\n )\r\n })\r\n }else if([\"div\"].includes(child.tagName.toLowerCase())){\r\n nextNode(child)\r\n }\r\n }\r\n }\r\n nextNode(div.parentNode)\r\n }catch(e){\r\n console.error(e)\r\n }\r\n BDV2.reactDom.render(BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is potentially dangerous.\"}, \r\n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}},\r\n BDV2.react.createElement(\"svg\", {className: BDModules.get(e => e.svg)[0].svg, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 40 32\"},\r\n BDV2.react.createElement(\"rect\", {\r\n x:\"0\",\r\n y:\"0\",\r\n width:\"32\",\r\n height:\"32\",\r\n mask:\"url(#svg-mask-avatar-status-round-32)\",\r\n fill:\"#f04747\",\r\n mask:\"url(#svg-mask-status-dnd)\",\r\n className:BDModules.get(e => e.pointerEvents)[0].pointerEvents\r\n })\r\n )\r\n )\r\n ), div)\r\n }else if(!result.official){\r\n div.parentNode.style.borderColor = \"#4087ed\"\r\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\r\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is certified by Lightcord.\"}, \r\n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\r\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"},\r\n BDV2.react.createElement(\"path\", {fill:\"#4f545c\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\r\n ),\r\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \r\n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \r\n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\"})\r\n )\r\n )\r\n )\r\n ),\r\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \r\n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\r\n Utils.showConfirmationModal(\r\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \r\n \"Lightcord will automatically install and launch this \"+result.type.toLowerCase()+\". You don't have anything to do.\", \r\n {\r\n confirmText: \"Download and Install\",\r\n cancelText: \"I've changed my mind\",\r\n danger: false,\r\n onCancel: () => {},\r\n onConfirm: () => {\r\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\r\n console.log(link)\r\n nodeFetch(link)\r\n .then(async res => {\r\n if(res.status !== 200)throw new Error(\"Status was not 200\")\r\n let content = await res.buffer()\r\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\r\n console.log(installPath)\r\n writeFileSync(installPath, content)\r\n Utils.showToast(result.type+\" succesfully installed.\")\r\n }).catch(err => {\r\n err = err instanceof Error ? err : new Error(err)\r\n Utils.showToast(err.message, {\r\n type: \"error\"\r\n })\r\n })\r\n }\r\n }\r\n )\r\n }},\r\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\r\n color: \"rgb(67, 181, 129)\",\r\n cursor: \"pointer\"\r\n }},\r\n \r\n \r\n \r\n \r\n )\r\n )\r\n )\r\n ])\r\n BDV2.reactDom.render(span, div)\r\n }else{\r\n div.parentNode.style.borderColor = \"#4087ed\"\r\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\r\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" was made by the developers of Lightcord.\", style:\"brand\"}, \r\n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\r\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\",stroke:\"#36393f\",style:{color:\"#4087ed\"}},\r\n BDV2.react.createElement(\"path\", {fill:\"currentColor\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\r\n ),\r\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \r\n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \r\n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z\"})\r\n )\r\n )\r\n )\r\n ),\r\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \r\n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\r\n Utils.showConfirmationModal(\r\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \r\n \"Lightcord will automatically download and load this \"+result.type.toLowerCase()+\". You must enable it in the settings.\", \r\n {\r\n confirmText: \"Download and Install\",\r\n cancelText: \"I've changed my mind\",\r\n danger: false,\r\n onCancel: () => {},\r\n onConfirm: () => {\r\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\r\n \r\n nodeFetch(link)\r\n .then(async res => {\r\n if(res.status !== 200)throw new Error(\"Status was not 200\")\r\n let content = await res.buffer()\r\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\r\n \r\n writeFileSync(installPath, content)\r\n Utils.showToast(result.type+\" succesfully installed.\")\r\n }).catch(err => {\r\n err = err instanceof Error ? err : new Error(err)\r\n Utils.showToast(err.message, {\r\n type: \"error\"\r\n })\r\n })\r\n }\r\n }\r\n )\r\n }},\r\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\r\n color: \"rgb(67, 181, 129)\",\r\n cursor: \"pointer\"\r\n }},\r\n \r\n \r\n \r\n \r\n )\r\n )\r\n )\r\n ])\r\n BDV2.reactDom.render(span, div)\r\n }\r\n}\r\n\r\nfunction getKeyedArray(obj){\r\n let arr = []\r\n Object.keys(obj).forEach(k => {\r\n arr.push([k, obj[k]])\r\n })\r\n return arr\r\n}\r\n\r\nlet key = null\r\nlet save = null\r\n\r\nwindow.Lightcord.Api.ensureExported(m=>m.ObjectStorage)\r\n.then(localStorageModule => {\r\n let localStorage = localStorageModule.impl\r\n save = function(){\r\n localStorage.set(\"PluginCertifierKeyEncryption__\", btoa(JSON.stringify(key)))\r\n }\r\n setInterval(() => {\r\n save()\r\n }, 100000);\r\n try{\r\n let val = safeJSONParse(atob(localStorage.get(\"PluginCertifierKeyEncryption__\")))\r\n if(val instanceof Error || !Array.isArray(val) || val.length !== 2 || val.find(e => typeof e !== \"string\") || Buffer.from(val[0], \"base64\").length !== 16 || Buffer.from(val[1], \"base64\").length !== 32){\r\n generateKey()\r\n save()\r\n return\r\n }\r\n key = val\r\n }catch(e){\r\n generateKey()\r\n save()\r\n }\r\n})\r\n\r\nfunction generateKey(){\r\n key = [crypto.randomBytes(16).toString(\"base64\"), crypto.randomBytes(32).toString(\"base64\")]\r\n}\r\n\r\nfunction safeJSONParse(json){\r\n try{\r\n return JSON.parse(json)\r\n }catch(e){\r\n return e instanceof Error ? new Error(e) : e\r\n }\r\n}\r\n\r\nexport function decryptSettingsCache(data){\r\n try{\r\n let decipher = crypto.createDecipheriv(\"aes-256-cbc\", Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\"))\r\n let decrypted = decipher.update(Buffer.from(data, \"base64\"));\r\n decrypted = Buffer.concat([decrypted, decipher.final()]);\r\n return decrypted.toString(\"utf8\")\r\n }catch(e){\r\n return \"{}\"\r\n }\r\n}\r\nexport function encryptSettingsCache(data){\r\n let args = [Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\")]\r\n \r\n let cipher = crypto.createCipheriv('aes-256-cbc', ...args);\r\n let encrypted = cipher.update(Buffer.from(data, \"utf8\"));\r\n encrypted = Buffer.concat([encrypted, cipher.final()]);\r\n return encrypted.toString(\"base64\")\r\n}","import {bdConfig, bdplugins, bdthemes, settingsCookie} from \"../0globals\";\r\nimport pluginModule from \"./pluginModule\";\r\nimport themeModule from \"./themeModule\";\r\nimport Utils from \"./utils\";\r\nimport dataStore from \"./dataStore\";\r\nimport { encryptSettingsCache, decryptSettingsCache, processFile } from \"./pluginCertifier\";\r\n\r\nconst path = require(\"path\");\r\nconst fs = require(\"fs\");\r\nconst Module = require(\"module\").Module;\r\nModule.globalPaths.push(path.resolve(require(\"electron\").remote.app.getAppPath(), \"node_modules\"));\r\nclass MetaError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = \"MetaError\";\r\n }\r\n}\r\nconst originalJSRequire = Module._extensions[\".js\"];\r\nconst originalCSSRequire = Module._extensions[\".css\"] ? Module._extensions[\".css\"] : () => {return null;};\r\nconst splitRegex = /[^\\S\\r\\n]*?(?:\\r\\n|\\n)[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\r\nconst escapedAtRegex = /^\\\\@/;\r\n\r\nexport let addonCache = {}\r\n\r\nlet hasPatched = false\r\nexport default new class ContentManager {\r\n\r\n constructor() {\r\n this.timeCache = {};\r\n this.watchers = {};\r\n }\r\n\r\n patchExtensions(){\r\n if(hasPatched)return\r\n hasPatched = true\r\n Module._extensions[\".js\"] = this.getContentRequire(\"plugin\");\r\n Module._extensions[\".css\"] = this.getContentRequire(\"theme\");\r\n }\r\n\r\n get pluginsFolder() {return this._pluginsFolder || (this._pluginsFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"plugins/\")));}\r\n get themesFolder() {return this._themesFolder || (this._themesFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"themes/\")));}\r\n\r\n loadAddonCertifierCache(){\r\n if(typeof dataStore.getSettingGroup(\"PluginCertifierHashes\") !== \"string\"){\r\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\r\n }else{\r\n try{\r\n addonCache = JSON.parse(decryptSettingsCache(dataStore.getSettingGroup(\"PluginCertifierHashes\")))\r\n }catch(e){\r\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\r\n addonCache = {}\r\n }\r\n }\r\n Object.keys(addonCache)\r\n .forEach(key => {\r\n let value = addonCache[key]\r\n if(!value || typeof value !== \"object\" || Array.isArray(value))return delete addonCache[key]\r\n\r\n let props = [{\r\n key: \"timestamp\",\r\n type: \"number\"\r\n }, {\r\n key: \"result\",\r\n type: \"object\"\r\n }, {\r\n key: \"hash\",\r\n type: \"string\"\r\n }]\r\n for(let prop of props){\r\n if(!(prop.key in value) || typeof value[prop.key] !== prop.type){\r\n delete addonCache[key]\r\n return\r\n }\r\n }\r\n if(value.hash !== key){\r\n delete addonCache[key]\r\n return\r\n }\r\n if(value.result.suspect){ // refetch from remote to be sure you're up to date.\r\n delete addonCache[key]\r\n return\r\n }\r\n })\r\n this.saveAddonCache()\r\n }\r\n\r\n saveAddonCache(){\r\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(JSON.stringify(addonCache)))\r\n }\r\n\r\n watchContent(contentType) {\r\n if (this.watchers[contentType]) return;\r\n const isPlugin = contentType === \"plugin\";\r\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\r\n this.watchers[contentType] = fs.watch(baseFolder, {persistent: false}, async (eventType, filename) => {\r\n if (!eventType || !filename || !filename.endsWith(fileEnding)) return;\r\n await new Promise(r => setTimeout(r, 50));\r\n try {fs.statSync(path.resolve(baseFolder, filename));}\r\n catch (err) {\r\n if (err.code !== \"ENOENT\") return;\r\n delete this.timeCache[filename];\r\n if (isPlugin) return pluginModule.unloadPlugin(filename);\r\n return themeModule.unloadTheme(filename);\r\n }\r\n if (!fs.statSync(path.resolve(baseFolder, filename)).isFile()) return;\r\n const stats = fs.statSync(path.resolve(baseFolder, filename));\r\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\r\n if (typeof(stats.mtime.getTime()) !== \"number\") return;\r\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\r\n this.timeCache[filename] = stats.mtime.getTime();\r\n if (eventType == \"rename\") {\r\n if (isPlugin) await pluginModule.loadPlugin(filename);\r\n else await themeModule.loadTheme(filename);\r\n }\r\n if (eventType == \"change\") {\r\n if (isPlugin) await pluginModule.reloadPlugin(filename);\r\n else await themeModule.reloadTheme(filename);\r\n }\r\n });\r\n }\r\n\r\n unwatchContent(contentType) {\r\n if (!this.watchers[contentType]) return;\r\n this.watchers[contentType].close();\r\n delete this.watchers[contentType];\r\n }\r\n\r\n extractMeta(content) {\r\n const firstLine = content.split(\"\\n\")[0];\r\n const hasOldMeta = firstLine.includes(\"//META\");\r\n if (hasOldMeta) return this.parseOldMeta(content);\r\n const hasNewMeta = firstLine.includes(\"/**\");\r\n if (hasNewMeta) return this.parseNewMeta(content);\r\n throw new MetaError(\"META was not found.\");\r\n }\r\n\r\n parseOldMeta(content) {\r\n const meta = content.split(\"\\n\")[0];\r\n const rawMeta = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\r\n if (meta.indexOf(\"META\") < 0) throw new MetaError(\"META was not found.\");\r\n const parsed = Utils.testJSON(rawMeta);\r\n if (!parsed) throw new MetaError(\"META could not be parsed.\");\r\n if (!parsed.name) throw new MetaError(\"META missing name data.\");\r\n parsed.format = \"json\";\r\n return parsed;\r\n }\r\n\r\n parseNewMeta(content) {\r\n const block = content.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\r\n const out = {};\r\n let field = \"\";\r\n let accum = \"\";\r\n for (const line of block.split(splitRegex)) {\r\n if (line.length === 0) continue;\r\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\r\n out[field] = accum;\r\n const l = line.indexOf(\" \");\r\n field = line.substr(1, l - 1);\r\n accum = line.substr(l + 1);\r\n }\r\n else {\r\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\r\n }\r\n }\r\n out[field] = accum.trim();\r\n delete out[\"\"];\r\n out.format = \"jsdoc\";\r\n return out;\r\n }\r\n\r\n getContentRequire(type) {\r\n const isPlugin = type === \"plugin\";\r\n const self = this;\r\n const originalRequire = isPlugin ? originalJSRequire : originalCSSRequire;\r\n return function(module, filename) {\r\n const baseFolder = isPlugin ? self.pluginsFolder : self.themesFolder;\r\n const possiblePath = path.resolve(baseFolder, path.basename(filename));\r\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\r\n let content = fs.readFileSync(filename, \"utf8\");\r\n content = Utils.stripBOM(content);\r\n\r\n const stats = fs.statSync(filename);\r\n const meta = self.extractMeta(content);\r\n meta.filename = path.basename(filename);\r\n meta.added = stats.atimeMs;\r\n meta.modified = stats.mtimeMs;\r\n meta.size = stats.size;\r\n if (!isPlugin) {\r\n meta.css = content;\r\n if (meta.format == \"json\") meta.css = meta.css.split(\"\\n\").slice(1).join(\"\\n\");\r\n content = `module.exports = ${JSON.stringify(meta)};`;\r\n }\r\n if (isPlugin) {\r\n module._compile(content, module.filename);\r\n const didExport = !Utils.isEmpty(module.exports);\r\n if (didExport) {\r\n meta.type = module.exports;\r\n module.exports = meta;\r\n content = \"\";\r\n }\r\n else {\r\n Utils.warn(\"Module Not Exported\", `${meta.name}, please start setting module.exports`);\r\n content += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\r\n }\r\n }\r\n module._compile(content, filename);\r\n };\r\n }\r\n\r\n makePlaceholderPlugin(data) {\r\n return {plugin: {\r\n start: () => {},\r\n getName: () => {return data.name || data.filename;},\r\n getAuthor: () => {return \"???\";},\r\n getDescription: () => {return data.message ? data.message : \"This plugin was unable to be loaded. Check the author's page for updates.\";},\r\n getVersion: () => {return \"???\";}\r\n },\r\n name: data.name || data.filename,\r\n filename: data.filename,\r\n source: data.source ? data.source : \"\",\r\n website: data.website ? data.website : \"\"\r\n };\r\n }\r\n\r\n async loadContent(filename, type) {\r\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\r\n const isPlugin = type === \"plugin\";\r\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n\r\n if(settingsCookie[\"fork-ps-6\"]){\r\n let result = await new Promise(resolve => {\r\n processFile(path.resolve(baseFolder, filename), (result) => {\r\n console.log(result)\r\n resolve(result)\r\n }, (hash) => {\r\n resolve({\r\n suspect: false,\r\n hash: hash,\r\n filename: filename,\r\n name: filename\r\n })\r\n }, true)\r\n })\r\n if(result){\r\n addonCache[result.hash] = {\r\n timestamp: Date.now(),\r\n hash: result.hash,\r\n result: result\r\n }\r\n this.saveAddonCache()\r\n if(result.suspect){\r\n return {\r\n name: filename,\r\n file: filename,\r\n message: \"This plugin might be dangerous (\"+result.harm+\").\",\r\n error: new Error(\"This plugin might be dangerous (\"+result.harm+\").\")\r\n }\r\n }\r\n }\r\n }\r\n\r\n try {window.require(path.resolve(baseFolder, filename));}\r\n catch (error) {return {name: filename, file: filename, message: \"Could not be compiled.\", error: {message: error.message, stack: error.stack}};}\r\n const content = window.require(path.resolve(baseFolder, filename));\r\n if(!content.name)return {name: filename, file: filename, message: \"Cannot escape the ID.\", error: new Error(\"Cannot read property 'replace' of undefined\")}\r\n content.id = Utils.escapeID(content.name);\r\n //if(!id)return {name: filename, file: filename, message: \"Invalid ID\", error: new Error(\"Please fix the name of \"+filename+\". BetterDiscord can't escape an ID.\")}\r\n if (isPlugin) {\r\n if (!content.type) return;\r\n try {\r\n content.plugin = new content.type();\r\n delete bdplugins[content.plugin.getName()];\r\n bdplugins[content.plugin.getName()] = content;\r\n }\r\n catch (error) {return {name: filename, file: filename, message: \"Could not be constructed.\", error: {message: error.message, stack: error.stack}};}\r\n }\r\n else {\r\n delete bdthemes[content.name];\r\n bdthemes[content.name] = content;\r\n }\r\n } \r\n\r\n unloadContent(filename, type) {\r\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\r\n const isPlugin = type === \"plugin\";\r\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n try {\r\n delete window.require.cache[window.require.resolve(path.resolve(baseFolder, filename))];\r\n }\r\n catch (err) {return {name: filename, file: filename, message: \"Could not be unloaded.\", error: {message: err.message, stack: err.stack}};}\r\n }\r\n\r\n isLoaded(filename, type) {\r\n const isPlugin = type === \"plugin\";\r\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n try {window.require.cache[window.require.resolve(path.resolve(baseFolder, filename))];}\r\n catch (err) {return false;}\r\n return true;\r\n }\r\n\r\n async reloadContent(filename, type) {\r\n const cantUnload = this.unloadContent(filename, type);\r\n if (cantUnload) return cantUnload;\r\n return await this.loadContent(filename, type);\r\n }\r\n\r\n loadNewContent(type) {\r\n const isPlugin = type === \"plugin\";\r\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\r\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n const files = fs.readdirSync(basedir);\r\n const contentList = Object.values(isPlugin ? bdplugins : bdthemes);\r\n const removed = contentList.filter(t => !files.includes(t.filename)).map(c => isPlugin ? c.plugin.getName() : c.name);\r\n const added = files.filter(f => !contentList.find(t => t.filename == f) && f.endsWith(fileEnding) && fs.statSync(path.resolve(basedir, f)).isFile());\r\n return {added, removed};\r\n }\r\n\r\n async loadAllContent(type) {\r\n this.patchExtensions()\r\n const isPlugin = type === \"plugin\";\r\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\r\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\r\n const errors = [];\r\n const files = fs.readdirSync(basedir);\r\n\r\n for (const filename of files) {\r\n if (!fs.statSync(path.resolve(basedir, filename)).isFile() || !filename.endsWith(fileEnding)) continue;\r\n const error = await this.loadContent(filename, type);\r\n if (error) errors.push(error);\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n loadPlugins() {return this.loadAllContent(\"plugin\");}\r\n loadThemes() {return this.loadAllContent(\"theme\");}\r\n};\r\n\r\n/**\r\n * Don't expose contentManager - could be dangerous for now\r\n */","/**\r\n * Copyright 2018 Zachary Rauen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the \"Software\"),\r\n * to deal in the Software without restriction, including without limitation the\r\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is furnished\r\n * to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n * \r\n * From: https://github.com/rauenzi/BDPluginLibrary\r\n */\r\n\r\n/**\r\n * @interface\r\n * @name Offset\r\n * @property {number} top - Top offset of the target element.\r\n * @property {number} right - Right offset of the target element.\r\n * @property {number} bottom - Bottom offset of the target element.\r\n * @property {number} left - Left offset of the target element.\r\n * @property {number} height - Outer height of the target element.\r\n * @property {number} width - Outer width of the target element.\r\n */\r\n\r\n /**\r\n * Function that automatically removes added listener.\r\n * @callback module:DOMTools~CancelListener\r\n */\r\n \r\nexport default class DOMTools {\r\n\r\n static escapeID(id) {\r\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\r\n }\r\n\r\n /**\r\n\t * Adds a style to the document.\r\n\t * @param {string} id - identifier to use as the element id\r\n\t * @param {string} css - css to add to the document\r\n\t */\r\n\tstatic addStyle(id, css) {\r\n\t\tdocument.head.append(DOMTools.createElement(``));\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a style from the document.\r\n\t * @param {string} id - original identifier used\r\n\t */\r\n\tstatic removeStyle(id) {\r\n\t\tconst element = document.getElementById(id);\r\n\t\tif (element) element.remove();\r\n\t}\r\n\r\n\t/**\r\n\t * Adds/requires a remote script to be loaded\r\n\t * @param {string} id - identifier to use for this script\r\n\t * @param {string} url - url from which to load the script\r\n\t * @returns {Promise} promise that resolves when the script is loaded\r\n\t */\r\n\tstatic addScript(id, url) {\r\n\t\treturn new Promise(resolve => {\r\n\t\t\tconst script = document.createElement(\"script\");\r\n\t\t\tscript.id = id;\r\n\t\t\tscript.src = url;\r\n\t\t\tscript.type = \"text/javascript\";\r\n\t\t\tscript.onload = resolve;\r\n\t\t\tdocument.head.append(script);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a remote script from the document.\r\n\t * @param {string} id - original identifier used\r\n\t */\r\n\tstatic removeScript(id) {\r\n id = this.escapeID(id);\r\n\t\tconst element = document.getElementById(id);\r\n\t\tif (element) element.remove();\r\n }\r\n \r\n // https://javascript.info/js-animation\r\n static animate({timing = _ => _, update, duration}) {\r\n const start = performance.now();\r\n \r\n requestAnimationFrame(function animate(time) {\r\n // timeFraction goes from 0 to 1\r\n let timeFraction = (time - start) / duration;\r\n if (timeFraction > 1) timeFraction = 1;\r\n \r\n // calculate the current animation state\r\n const progress = timing(timeFraction);\r\n \r\n update(progress); // draw it\r\n \r\n if (timeFraction < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n \r\n });\r\n }\r\n\r\n /**\r\n * This is my shit version of not having to use `$` from jQuery. Meaning\r\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\r\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\r\n * @see module:DOMTools.parseHTML\r\n * @see module:DOMTools.query\r\n * @param {string} selector - Selector to query or HTML to parse\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\r\n */\r\n static Q(selector) {\r\n const element = this.parseHTML(selector);\r\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\r\n if (isHTML) return element;\r\n return this.query(selector);\r\n }\r\n\r\n /**\r\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {(Element|null)} - The found element or null if not found\r\n */\r\n static query(selector, baseElement = document) {\r\n return baseElement.querySelector(selector);\r\n }\r\n\r\n /**\r\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {Array} - Array of all found elements\r\n */\r\n static queryAll(selector, baseElement = document) {\r\n return baseElement.querySelectorAll(selector);\r\n }\r\n\r\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n * \r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\r\n static parseHTML(html, fragment = false) {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n const node = template.content.cloneNode(true);\r\n if (fragment) return node;\r\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\r\n }\r\n\r\n /** Alternate name for {@link module:DOMTools.parseHTML} */\r\n static createElement(html, fragment = false) {return this.parseHTML(html, fragment);}\r\n \r\n /**\r\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\r\n * @param {String} html - html to be escaped\r\n */\r\n static escapeHTML(html) {\r\n const textNode = document.createTextNode(\"\");\r\n const spanElement = document.createElement(\"span\");\r\n spanElement.append(textNode);\r\n textNode.nodeValue = html;\r\n return spanElement.innerHTML;\r\n }\r\n\r\n /**\r\n * Adds a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to add\r\n * @returns {Element} - `element` to allow for chaining\r\n */\r\n static addClass(element, ...classes) {\r\n classes = classes.flat().filter(c => c);\r\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\r\n classes = classes.flat().filter(c => c);\r\n element.classList.add(...classes);\r\n return element;\r\n }\r\n\r\n /**\r\n * Removes a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to remove\r\n * @returns {Element} - `element` to allow for chaining\r\n */\r\n static removeClass(element, ...classes) {\r\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\r\n classes = classes.flat().filter(c => c);\r\n element.classList.remove(...classes);\r\n return element;\r\n }\r\n\r\n /**\r\n * When only one argument is present: Toggle class value;\r\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\r\n * When a second argument is present:\r\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to toggle\r\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\r\n * @returns {Element} - `element` to allow for chaining\r\n */\r\n static toggleClass(element, classname, indicator) {\r\n classname = classname.toString().split(\" \").filter(c => c);\r\n if (typeof(indicator) !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));\r\n else classname.forEach(c => element.classList.toggle(c));\r\n return element;\r\n }\r\n\r\n /**\r\n * Checks if an element has a specific class\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to check\r\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\r\n */\r\n static hasClass(element, classname) {\r\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\r\n }\r\n\r\n /**\r\n * Replaces one class with another\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} oldName - Name of class to replace\r\n * @param {string} newName - New name for the class\r\n * @returns {Element} - `element` to allow for chaining\r\n */\r\n static replaceClass(element, oldName, newName) {\r\n element.classList.replace(oldName, newName);\r\n return element;\r\n }\r\n\r\n /**\r\n * Appends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be appended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be appended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\r\n static appendTo(thisNode, thatNode) {\r\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\r\n if (!thatNode) return null;\r\n thatNode.append(thisNode);\r\n return thisNode;\r\n }\r\n\r\n /**\r\n * Prepends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be prepended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\r\n static prependTo(thisNode, thatNode) {\r\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\r\n if (!thatNode) return null;\r\n thatNode.prepend(thisNode);\r\n return thisNode;\r\n }\r\n\r\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} targetNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\r\n static insertAfter(thisNode, targetNode) {\r\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\r\n return thisNode;\r\n }\r\n\r\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} newNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\r\n static after(thisNode, newNode) {\r\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\r\n return thisNode;\r\n }\r\n\r\n /**\r\n * Gets the next sibling element that matches the selector.\r\n * @param {Element} element - Element to get the next sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\r\n static next(element, selector = \"\") {\r\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\r\n }\r\n\r\n /**\r\n * Gets all subsequent siblings.\r\n * @param {Element} element - Element to get next siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\r\n static nextAll(element) {\r\n return element.querySelectorAll(\"~ *\");\r\n }\r\n\r\n /**\r\n * Gets the subsequent siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the following siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\r\n static nextUntil(element, selector) {\r\n const next = []; \r\n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\r\n return next;\r\n }\r\n\r\n /**\r\n * Gets the previous sibling element that matches the selector.\r\n * @param {Element} element - Element to get the previous sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\r\n static previous(element, selector = \"\") {\r\n const previous = element.previousElementSibling;\r\n if (selector) return previous && previous.matches(selector) ? previous : null;\r\n return previous;\r\n }\r\n\r\n /**\r\n * Gets all preceeding siblings.\r\n * @param {Element} element - Element to get preceeding siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\r\n static previousAll(element) {\r\n const previous = [];\r\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\r\n return previous;\r\n }\r\n\r\n /**\r\n * Gets the preceeding siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the preceeding siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\r\n static previousUntil(element, selector) {\r\n const previous = []; \r\n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\r\n return previous;\r\n }\r\n\r\n /**\r\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\r\n * @param {HTMLElement} node - The node to find its index in parent\r\n * @returns {number} Index of the node\r\n */\r\n static indexInParent(node) {\r\n const children = node.parentNode.childNodes;\r\n let num = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n if (children[i] == node) return num;\r\n if (children[i].nodeType == 1) num++;\r\n }\r\n return -1;\r\n }\r\n\r\n /** Shorthand for {@link module:DOMTools.indexInParent} */\r\n static index(node) {return this.indexInParent(node);}\r\n\r\n /**\r\n * Gets the parent of the element if it matches the selector,\r\n * otherwise returns null.\r\n * @param {Element} element - Element to get parent of\r\n * @param {string} [selector=\"\"] - Selector to match parent\r\n * @returns {(Element|null)} - The sibling element or null\r\n */\r\n static parent(element, selector = \"\") {\r\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\r\n }\r\n\r\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\r\n static findChild(element, selector) {\r\n return element.querySelector(\":scope > \" + selector);\r\n }\r\n\r\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\r\n static findChildren(element, selector) {\r\n return element.querySelectorAll(\":scope > \" + selector);\r\n }\r\n\r\n /**\r\n * Gets all ancestors of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all parents of\r\n * @param {string} [selector=\"\"] - Selector to match the parents to\r\n * @returns {Array} - The list of parents\r\n */\r\n static parents(element, selector = \"\") {\r\n const parents = [];\r\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));\r\n else while (element.parentElement) parents.push(element = element.parentElement);\r\n return parents;\r\n }\r\n\r\n /**\r\n * Gets the ancestors until an element matches the selector.\r\n * @param {Element} element - Element to get the ancestors of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of parents\r\n */\r\n static parentsUntil(element, selector) {\r\n const parents = [];\r\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\r\n return parents;\r\n }\r\n\r\n /**\r\n * Gets all siblings of the element that match the selector.\r\n * @param {Element} element - Element to get all siblings of\r\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\r\n * @returns {Array} - The list of siblings\r\n */\r\n static siblings(element, selector = \"*\") {\r\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\r\n }\r\n\r\n /**\r\n * Sets or gets css styles for a specific element. If `value` is provided\r\n * then it sets the style and returns the element to allow for chaining,\r\n * otherwise returns the style. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} attribute - Attribute to get or set\r\n * @param {string} [value] - Value to set for attribute\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\r\n static css(element, attribute, value) {\r\n if (typeof(value) == \"undefined\") return global.getComputedStyle(element)[attribute];\r\n element.style[attribute] = value;\r\n return element;\r\n }\r\n\r\n /**\r\n * Sets or gets the width for a specific element. If `value` is provided\r\n * then it sets the width and returns the element to allow for chaining,\r\n * otherwise returns the width. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Width to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\r\n static width(element, value) {\r\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).width);\r\n element.style.width = value;\r\n return element;\r\n }\r\n\r\n /**\r\n * Sets or gets the height for a specific element. If `value` is provided\r\n * then it sets the height and returns the element to allow for chaining,\r\n * otherwise returns the height. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Height to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\r\n static height(element, value) {\r\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).height);\r\n element.style.height = value;\r\n return element;\r\n }\r\n\r\n /**\r\n * Sets the inner text of an element if given a value, otherwise returns it.\r\n * @param {Element} element - Element to set the text of\r\n * @param {string} [text] - Content to set\r\n * @returns {string} - Either the string set by this call or the current text content of the node.\r\n */\r\n static text(element, text) {\r\n if (typeof(text) == \"undefined\") return element.textContent;\r\n return element.textContent = text;\r\n }\r\n\r\n /**\r\n * Returns the innerWidth of the element.\r\n * @param {Element} element - Element to retrieve inner width of\r\n * @return {number} - The inner width of the element.\r\n */\r\n static innerWidth(element) {\r\n return element.clientWidth;\r\n }\r\n\r\n /**\r\n * Returns the innerHeight of the element.\r\n * @param {Element} element - Element to retrieve inner height of\r\n * @return {number} - The inner height of the element.\r\n */\r\n static innerHeight(element) {\r\n return element.clientHeight;\r\n }\r\n\r\n /**\r\n * Returns the outerWidth of the element.\r\n * @param {Element} element - Element to retrieve outer width of\r\n * @return {number} - The outer width of the element.\r\n */\r\n static outerWidth(element) {\r\n return element.offsetWidth;\r\n }\r\n\r\n /**\r\n * Returns the outerHeight of the element.\r\n * @param {Element} element - Element to retrieve outer height of\r\n * @return {number} - The outer height of the element.\r\n */\r\n static outerHeight(element) {\r\n return element.offsetHeight;\r\n }\r\n\r\n /**\r\n * Gets the offset of the element in the page.\r\n * @param {Element} element - Element to get offset of\r\n * @return {Offset} - The offset of the element\r\n */\r\n static offset(element) {\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n static get listeners() { return this._listeners || (this._listeners = {}); }\r\n\r\n /**\r\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\r\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\r\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element`.\r\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element` that only fires once.\r\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\r\n static on(element, event, delegate, callback) {\r\n const [type, namespace] = event.split(\".\");\r\n const hasDelegate = delegate && callback;\r\n if (!callback) callback = delegate;\r\n const eventFunc = !hasDelegate ? callback : function(event) {\r\n if (event.target.matches(delegate)) {\r\n callback(event);\r\n }\r\n };\r\n\r\n element.addEventListener(type, eventFunc);\r\n const cancel = () => {\r\n element.removeEventListener(type, eventFunc);\r\n };\r\n if (namespace) {\r\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\r\n const newCancel = () => {\r\n cancel();\r\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\r\n };\r\n this.listeners[namespace].push({\r\n event: type,\r\n element: element,\r\n cancel: newCancel\r\n });\r\n return newCancel;\r\n }\r\n return cancel;\r\n }\r\n\r\n /**\r\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\r\n * and removes the listener upon the first firing of the desired event.\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\r\n static once(element, event, delegate, callback) {\r\n const [type, namespace] = event.split(\".\");\r\n const hasDelegate = delegate && callback;\r\n if (!callback) callback = delegate;\r\n const eventFunc = !hasDelegate ? function(event) {\r\n callback(event);\r\n element.removeEventListener(type, eventFunc);\r\n } : function(event) {\r\n if (!event.target.matches(delegate)) return;\r\n callback(event);\r\n element.removeEventListener(type, eventFunc);\r\n };\r\n\r\n element.addEventListener(type, eventFunc);\r\n const cancel = () => {\r\n element.removeEventListener(type, eventFunc);\r\n };\r\n if (namespace) {\r\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\r\n const newCancel = () => {\r\n cancel();\r\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\r\n };\r\n this.listeners[namespace].push({\r\n event: type,\r\n element: element,\r\n cancel: newCancel\r\n });\r\n return newCancel;\r\n }\r\n return cancel;\r\n }\r\n\r\n static __offAll(event, element) {\r\n const [type, namespace] = event.split(\".\");\r\n let matchFilter = listener => listener.event == type, defaultFilter = _ => _;\r\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\r\n const listeners = this.listeners[namespace] || [];\r\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\r\n for (let c = 0; c < list.length; c++) list[c].cancel();\r\n }\r\n \r\n /**\r\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\r\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\r\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\r\n * \r\n * The following will remove a click listener (without namespace) from `element`.\r\n * `DOMTools.off(element, \"click\", onClick);`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from `element`.\r\n * `DOMTools.off(element, \".myPlugin\");`\r\n * \r\n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\"click.myPlugin\");`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\".myPlugin\");`\r\n * \r\n * @param {(Element|string)} element - Element to remove listener from\r\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {Element} - The original element to allow for chaining\r\n */\r\n static off(element, event, delegate, callback) {\r\n if (typeof(element) == \"string\") return this.__offAll(element);\r\n const [type, namespace] = event.split(\".\");\r\n if (namespace) return this.__offAll(event, element);\r\n\r\n const hasDelegate = delegate && callback;\r\n if (!callback) callback = delegate;\r\n const eventFunc = !hasDelegate ? callback : function(event) {\r\n if (event.target.matches(delegate)) {\r\n callback(event);\r\n }\r\n };\r\n\r\n element.removeEventListener(type, eventFunc);\r\n return element;\r\n }\r\n\r\n /**\r\n * Adds a listener for when the node is added/removed from the document body.\r\n * The listener is automatically removed upon firing.\r\n * @param {HTMLElement} node - node to wait for\r\n * @param {callable} callback - function to be performed on event\r\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\r\n */\r\n static onMountChange(node, callback, onMount = true) {\r\n const wrappedCallback = () => {\r\n this.observer.unsubscribe(wrappedCallback);\r\n callback();\r\n };\r\n this.observer.subscribe(wrappedCallback, mutation => {\r\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\r\n const directMatch = nodes.indexOf(node) > -1;\r\n const parentMatch = nodes.some(parent => parent.contains(node));\r\n return directMatch || parentMatch;\r\n });\r\n return node;\r\n }\r\n\r\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\r\n static onMount(node, callback) { return this.onMountChange(node, callback); }\r\n\r\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\r\n static onUnmount(node, callback) { return this.onMountChange(node, callback, false); }\r\n\r\n /** Alias for {@link module:DOMTools.onMount} */\r\n static onAdded(node, callback) { return this.onMount(node, callback); }\r\n\r\n /** Alias for {@link module:DOMTools.onUnmount} */\r\n static onRemoved(node, callback) { return this.onUnmount(node, callback, false); }\r\n\r\n /**\r\n * Helper function which combines multiple elements into one parent element\r\n * @param {Array} elements - array of elements to put into a single parent\r\n */\r\n static wrap(elements) {\r\n const domWrapper = this.parseHTML(`
`);\r\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\r\n return domWrapper;\r\n }\r\n\r\n /**\r\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\r\n * @param {(jQuery|Element)} node - node to resolve\r\n */\r\n static resolveElement(node) {\r\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\r\n return node instanceof jQuery ? node[0] : node;\r\n }\r\n}\r\n\r\nwindow.Lightcord.BetterDiscord.DOM = DOMTools","import {bdthemeErrors, themeCookie, settingsCookie, bdthemes} from \"../0globals\";\r\nimport ContentManager from \"./contentManager\";\r\nimport DataStore from \"./dataStore\";\r\nimport BDEvents from \"./bdEvents\";\r\nimport Utils from \"./utils\";\r\nimport DOM from \"./domtools\";\r\nimport bdEvents from \"./bdEvents\";\r\n\r\nclass ThemeModule {\r\n constructor(){\r\n window.Lightcord.BetterDiscord.ThemeModule = this\r\n }\r\n get folder() {return ContentManager.themesFolder;}\r\n}\r\n\r\nThemeModule.prototype.loadThemes = async function () {\r\n this.loadThemeData();\r\n bdthemeErrors.splice(0, 0, ...(await ContentManager.loadThemes()));\r\n const themes = Object.keys(bdthemes);\r\n\r\n for (let i = 0; i < themes.length; i++) {\r\n const theme = bdthemes[themes[i]];\r\n if (!themeCookie[theme.name]) themeCookie[theme.name] = false;\r\n if (themeCookie[theme.name]) DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\r\n\r\n await new Promise((resolve) => setTimeout(resolve, 10))\r\n }\r\n for (const theme in themeCookie) {\r\n if (!bdthemes[theme]) delete themeCookie[theme];\r\n }\r\n this.saveThemeData();\r\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"theme\");\r\n};\r\n\r\nThemeModule.prototype.enableTheme = function(name, reload = false) {\r\n themeCookie[name] = true;\r\n this.saveThemeData();\r\n const theme = bdthemes[name];\r\n DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\r\n bdEvents.dispatch(\"theme-enabled\")\r\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been applied.`);\r\n};\r\n\r\nThemeModule.prototype.enable = function (name, reload = false) {\r\n return this.enableTheme(name, reload);\r\n};\r\n\r\nThemeModule.prototype.disableTheme = function(name, reload = false) {\r\n themeCookie[name] = false;\r\n this.saveThemeData();\r\n const theme = bdthemes[name];\r\n DOM.removeStyle(DOM.escapeID(theme.id));\r\n bdEvents.dispatch(\"theme-disabled\")\r\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been disabled.`);\r\n};\r\n\r\nThemeModule.prototype.disable = function (name, reload = false) {\r\n return this.disableTheme(name, reload);\r\n};\r\n\r\nThemeModule.prototype.toggleTheme = function(theme) {\r\n if (themeCookie[theme]) this.disableTheme(theme);\r\n else this.enableTheme(theme);\r\n};\r\n\r\nThemeModule.prototype.toggle = function (name) {\r\n return this.toggleTheme(name);\r\n};\r\n\r\nThemeModule.prototype.loadTheme = async function(filename) {\r\n const error = await ContentManager.loadContent(filename, \"theme\");\r\n if (error) {\r\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded. It may not have been loaded.`, {type: \"error\"});\r\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\r\n }\r\n const theme = Object.values(bdthemes).find(p => p.filename == filename);\r\n Utils.log(\"ContentManager\", `${theme.name} v${theme.version} was loaded.`);\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme.name} v${theme.version} was loaded.`, {type: \"success\"});\r\n BDEvents.dispatch(\"theme-loaded\", theme.name);\r\n};\r\n\r\nThemeModule.prototype.unloadTheme = function(filenameOrName) {\r\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\r\n if (!bdtheme) return;\r\n const theme = bdtheme.name;\r\n if (themeCookie[theme]) this.disableTheme(theme, true);\r\n const error = ContentManager.unloadContent(bdthemes[theme].filename, \"theme\");\r\n delete bdthemes[theme];\r\n if (error) {\r\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\r\n return Utils.err(\"ContentManager\", `${theme} could not be unloaded. It may have not been loaded yet.`, error);\r\n }\r\n Utils.log(\"ContentManager\", `${theme} was unloaded.`);\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} was unloaded.`, {type: \"success\"});\r\n BDEvents.dispatch(\"theme-unloaded\", theme);\r\n};\r\n\r\nThemeModule.prototype.delete = function(filenameOrName) {\r\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\r\n if (!bdtheme) return;\r\n this.unloadTheme(bdtheme.filename);\r\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdtheme.filename);\r\n require(\"fs\").unlinkSync(fullPath);\r\n};\r\n\r\nThemeModule.prototype.reloadTheme = async function(filenameOrName) {\r\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\r\n if (!bdtheme) return this.loadTheme(filenameOrName);\r\n const theme = bdtheme.name;\r\n const error = await ContentManager.reloadContent(bdthemes[theme].filename, \"theme\");\r\n if (themeCookie[theme]) this.disableTheme(theme, true), this.enableTheme(theme, true);\r\n if (error) {\r\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be reloaded.`, {type: \"error\"});\r\n return Utils.err(\"ContentManager\", `${theme} could not be reloaded.`, error);\r\n }\r\n Utils.log(\"ContentManager\", `${theme} v${bdthemes[theme].version} was reloaded.`);\r\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} v${bdthemes[theme].version} was reloaded.`, {type: \"success\"});\r\n BDEvents.dispatch(\"theme-reloaded\", theme);\r\n};\r\n\r\nThemeModule.prototype.reload = function(name) {\r\n return this.reloadTheme(name);\r\n};\r\n\r\nThemeModule.prototype.edit = function(filenameOrName) {\r\n const bdplugin = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\r\n if (!bdplugin) return;\r\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdplugin.filename);\r\n require(\"electron\").shell.openItem(`${fullPath}`);\r\n};\r\n\r\nThemeModule.prototype.updateThemeList = function() {\r\n const results = ContentManager.loadNewContent(\"theme\");\r\n for (const filename of results.added) this.loadTheme(filename);\r\n for (const name of results.removed) this.unloadTheme(name);\r\n};\r\n\r\nThemeModule.prototype.loadThemeData = function() {\r\n const saved = DataStore.getSettingGroup(\"themes\");\r\n if (saved) {\r\n Object.assign(themeCookie, saved);\r\n }\r\n};\r\n\r\nThemeModule.prototype.saveThemeData = function () {\r\n DataStore.setSettingGroup(\"themes\", themeCookie);\r\n};\r\n\r\nexport default new ThemeModule();","import {settings} from \"../0globals\";\r\nimport themeModule from \"./themeModule\";\r\n\r\nexport default new class V2 {\r\n\r\n constructor() {\r\n this.editorDetached = false;\r\n this.WebpackModules = (() => {\r\n const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\r\n delete req.m.__extra_id__;\r\n delete req.c.__extra_id__;\r\n\r\n const shouldProtect = theModule => {\r\n if (theModule.remove && theModule.set && theModule.clear && theModule.get && !theModule.sort) return true;\r\n if (theModule.getToken || theModule.getEmail || theModule.showToken) return true;\r\n return false;\r\n };\r\n\r\n const protect = (theModule, isDefault) => {\r\n let mod = !isDefault ? theModule.default : theModule\r\n if(!mod)return theModule\r\n if (mod.remove && mod.set && mod.clear && mod.get && !mod.sort) return null;\r\n if (!mod.getToken && !mod.getEmail && !mod.showToken)return theModule\r\n\r\n const proxy = new Proxy(mod, {\r\n getOwnPropertyDescriptor: function(obj, prop) {\r\n if (prop === \"getToken\" || prop === \"getEmail\" || prop === \"showToken\") return undefined;\r\n return Object.getOwnPropertyDescriptor(obj, prop);\r\n },\r\n get: function(obj, func) {\r\n if (func == \"getToken\" && obj.getToken) return () => \"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa\";\r\n if (func == \"getEmail\" && obj.getEmail) return () => \"puppet11112@gmail.com\";\r\n if (func == \"showToken\" && obj.showToken) return () => true;\r\n if (func == \"__proto__\" && obj.__proto__) return proxy;\r\n \r\n return obj[func];\r\n }\r\n });\r\n\r\n if(!isDefault){\r\n return Object.assign({}, theModule, {default: proxy})\r\n }\r\n\r\n return proxy;\r\n };\r\n\r\n const find = (filter) => {\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) return protect(m.default, true);\r\n if (m && filter(m))\treturn protect(m, false);\r\n }\r\n }\r\n // console.warn(\"Cannot find loaded module in cache\");\r\n return null;\r\n };\r\n\r\n const findAll = (filter) => {\r\n const modules = [];\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(protect(m.default, true));\r\n else if (m && filter(m)) modules.push(protect(m, false));\r\n }\r\n }\r\n return modules;\r\n };\r\n\r\n const findByUniqueProperties = (propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\r\n const findByPrototypes = (protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\r\n const findByDisplayName = (displayName) => find(module => module.displayName === displayName);\r\n\r\n return {find, findAll, findByUniqueProperties, findByPrototypes, findByDisplayName};\r\n })();\r\n\r\n this.internal = {\r\n react: this.WebpackModules.findByUniqueProperties([\"Component\", \"PureComponent\", \"Children\", \"createElement\", \"cloneElement\"]),\r\n reactDom: this.WebpackModules.findByUniqueProperties([\"findDOMNode\"])\r\n };\r\n this.getInternalInstance = e => e[Object.keys(e).find(k => k.startsWith(\"__reactInternalInstance\"))];\r\n window.Lightcord.BetterDiscord.V2 = this\r\n }\r\n\r\n initialize() {\r\n\r\n }\r\n\r\n joinBD1() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"0Tmfo5ZbORCRqbAd\");}\r\n leaveBD1() {this.GuildActions.leaveGuild(\"86004744966914048\");}\r\n\r\n joinBD2() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");}\r\n leaveBD2() {this.GuildActions.leaveGuild(\"280806472928198656\");}\r\n\r\n joinLC() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"7eFff2A\");}\r\n leaveLC() {this.GuildActions.leaveGuild(\"705908350218666117\");}\r\n\r\n /**\r\n * @type {typeof React}\r\n */\r\n get react() {return this.internal.react;}\r\n /**\r\n * @type {typeof React}\r\n */\r\n get React() {return this.internal.react;}\r\n /**\r\n * @type {typeof import(\"react-dom\")}\r\n */\r\n get reactDom() {return this.internal.reactDom;}\r\n /**\r\n * @type {typeof import(\"react-dom\")}\r\n */\r\n get ReactDom() {return this.internal.reactDom;}\r\n /**\r\n * @type {typeof React.Component}\r\n */\r\n get reactComponent() {return this.internal.react.Component;}\r\n /**\r\n * @type {typeof React.Component}\r\n */\r\n get ReactComponent() {return this.internal.react.Component;}\r\n\r\n get anchorClasses() {return this.WebpackModules.findByUniqueProperties([\"anchorUnderlineOnHover\"]) || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};}\r\n get slateEditorClasses() {return this.WebpackModules.findByUniqueProperties([\"slateTextArea\"]);}\r\n get messageClasses() {return this.WebpackModules.findByUniqueProperties([\"message\", \"containerCozy\"]);}\r\n get guildClasses() {\r\n\t\tconst guildsWrapper = BDModules.get(e => e.wrapper && e.unreadMentionsBar)[0];\r\n const guilds = BDModules.get(e => e.guildsError && e.selected)[0]\r\n const pill = BDModules.get(e => e.blobContainer)[0]\r\n return Object.assign({}, guildsWrapper, guilds, pill);\r\n\t}\r\n\r\n get MessageContentComponent() {return this.WebpackModules.find(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));}\r\n get MessageComponent() {return this.WebpackModules.find(m => m.default && m.default.displayName && m.default.displayName == \"Message\");}\r\n get TimeFormatter() {return this.WebpackModules.findByUniqueProperties([\"dateFormat\"]);}\r\n get TooltipWrapper() {return this.WebpackModules.findByDisplayName(\"Tooltip\");}\r\n get NativeModule() {return this.WebpackModules.findByUniqueProperties([\"setBadge\"]);}\r\n get InviteActions() {return this.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);}\r\n get GuildActions() {return this.WebpackModules.findByUniqueProperties([\"leaveGuild\"]);}\r\n get Tooltips() {return this.WebpackModules.find(m => m.hide && m.show && !m.search && !m.submit && !m.search && !m.activateRagingDemon && !m.dismiss);}\r\n get KeyGenerator() {return this.WebpackModules.find(m => m.toString && /\"binary\"/.test(m.toString()));}\r\n get LayerStack() {return this.WebpackModules.findByUniqueProperties([\"popLayer\"]);}\r\n get UserStore() {return this.WebpackModules.findByUniqueProperties([\"getCurrentUser\"]);}\r\n get ChannelStore() {return this.WebpackModules.findByUniqueProperties([\"getChannel\"]);}\r\n get ChannelActions() {return this.WebpackModules.findByUniqueProperties([\"openPrivateChannel\"]);}\r\n get PrivateChannelActions() {return this.WebpackModules.findByUniqueProperties([\"selectPrivateChannel\"]);}\r\n\r\n openDM(userId) {\r\n const selfId = this.UserStore.getCurrentUser().id;\r\n if (selfId == userId) return;\r\n const privateChannelId = this.ChannelStore.getDMFromUserId(userId);\r\n if (privateChannelId) return this.PrivateChannelActions.selectPrivateChannel(privateChannelId);\r\n this.ChannelActions.openPrivateChannel(selfId, userId);\r\n }\r\n\r\n parseSettings(cat) {\r\n return Object.keys(settings).reduce((arr, key) => {\r\n const setting = settings[key];\r\n if (setting.cat === cat && setting.implemented && !setting.hidden) {\r\n setting.text = key;\r\n arr.push(setting);\r\n } return arr;\r\n }, []);\r\n }\r\n\r\n};","import {bbdVersion} from \"../0globals\";\nimport WebpackModules from \"./webpackModules\";\nimport BDV2 from \"./v2\";\nimport DOM from \"./domtools\";\nexport default class Utils {\n /** Document/window width */\n static get screenWidth() { return Math.max(document.documentElement.clientWidth, window.innerWidth || 0); }\n /** Document/window height */\n static get screenHeight() { return Math.max(document.documentElement.clientHeight, window.innerHeight || 0); }\n\n static get WindowConfigFile() {\n return this._windowConfigFile = null;\n }\n\n static getAllWindowPreferences() {\n return {\n transparent: true,\n frame: false\n };\n }\n \n static getWindowPreference(key) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n \n static setWindowPreference(key, value) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n }\n\n static getTextArea() {\n return DOM.query(\".\"+removeDa(BDModules.get(e => e.channelTextArea && e.titleWrapper)[0].channelTextArea)+\" textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static log(moduleName, message) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #3a71c1; font-weight: 700;\", \"color: #3a71c1;\", \"\");\n }\n\n static warn(moduleName, message) {\n console.warn(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #E8A400; font-weight: 700;\", \"color: #E8A400;\", \"\");\n }\n\n static err(moduleName, message, error) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: red; font-weight: 700;\", \"color: red;\", \"\");\n if (error) {\n console.groupCollapsed(\"%cError: \" + error.message, \"color: red;\");\n console.error(error.stack);\n console.groupEnd();\n }\n }\n\n /**\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\n * would return \"Hello, Zerebos\".\n * @param {string} string - string to format\n * @param {object} values - object literal of placeholders to replacements\n * @returns {string} the properly formatted string\n */\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof(replacement) === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n return string;\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n }\n catch (err) {\n return false;\n }\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof(obj) !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n return true;\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try { return method(...params);\t}\n catch (e) { this.err(\"SuppressedError\", \"Error occurred in \" + message, e); }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {before, after, instead, once = false, silent = false, force = false} = options;\n const displayName = options.displayName || what.displayName || what[methodName].displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n if (!what[methodName]) {\n if (force) what[methodName] = function() {};\n else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n const origMethod = what[methodName];\n let canceled = false\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n //what[methodName] = origMethod;\n canceled = true // this allow to monkeypatch more than one time.\n };\n what[methodName] = function() {\n if(canceled){\n return origMethod.call(this, ...arguments)\n }\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n if (instead) {\n const tempRet = Utils.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n }\n else {\n if (before) Utils.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utils.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n if (once) cancel();\n return data.returnValue;\n };\n Object.assign(what[methodName], origMethod);\n what[methodName].__monkeyPatched = true;\n what[methodName].displayName = displayName;\n if (!what[methodName].__originalMethod) {\n what[methodName].__originalMethod = origMethod;\n what[methodName].toString = function() {return origMethod.toString();};\n }\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver((mutations) => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n\n observer.observe(document.body, {subtree: true, childList: true});\n }\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function(obj, prop) {\n return obj && obj[prop];\n }, obj);\n }\n\n /**\n * This shows a toast similar to android towards the bottom of the screen.\n *\n * @param {string} content The string to show in the toast.\n * @param {object} options Options object. Optional parameter.\n * @param {string} options.type Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\n * @param {boolean} options.icon Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\n * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\n */\n static showToast(content, options = {}) {\n if (!document.querySelector(\".bd-toasts\")) {\n const container = document.querySelector(\".\"+removeDa(BDModules.get(e => e.sidebar && e.hasNotice)[0].sidebar)+\" + div\") || null;\n const form = container ? container.querySelector(\"form\") : null;\n const bottom = form ? form.offsetHeight : 80;\n const toastWrapper = document.createElement(\"div\");\n toastWrapper.classList.add(\"bd-toasts\");\n toastWrapper.style.setProperty(\"bottom\", bottom+\"px\");\n document.querySelector(\"#app-mount\").appendChild(toastWrapper);\n }\n const toastWrapper = document.querySelector(\".bd-toasts\")\n const {type = \"\", icon = true, timeout = 3000} = options;\n const toastElem = document.createElement(\"div\");\n toastElem.classList.add(\"bd-toast\");\n if (type) toastElem.classList.add(\"toast-\" + type);\n if (type && icon) toastElem.classList.add(\"icon\");\n toastElem.innerText = content;\n toastWrapper.appendChild(toastElem);\n toastWrapper.style.setProperty(\"left\", `calc(50% - ${toastWrapper.offsetWidth / 2}px)`);\n setTimeout(() => {\n toastElem.classList.add(\"closing\");\n setTimeout(() => {\n toastElem.remove();\n if (!document.querySelectorAll(\".bd-toasts .bd-toast\").length) document.querySelector(\".bd-toasts\").remove();\n }, 300);\n }, timeout);\n }\n\n static alert(title, content) {\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n const closingListeners = []\n return {\n close: () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n },\n onClose: (listener) => {\n closingListeners.push(listener)\n }\n }\n }\n\n static showContentErrors({plugins: pluginErrors = [], themes: themeErrors = []}) {\n if (!pluginErrors || !themeErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`);\n \n function generateTab(errors) {\n const container = DOM.createElement(`
`);\n for (const err of errors) {\n const error = DOM.createElement(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n if (err.error) {\n error.querySelectorAll(\"a\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n Utils.err(\"ContentManager\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n }));\n }\n }\n return container;\n }\n \n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n \n modal.querySelectorAll(\".tab-bar-item\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const selected = modal.querySelector(\".tab-bar-item.selected\");\n if (selected) DOM.removeClass(selected, \"selected\");\n DOM.addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[DOM.index(e.target)]);\n }));\n \n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n if (pluginErrors.length) modal.querySelector(\".tab-bar-item\").click();\n else modal.querySelectorAll(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = WebpackModules.findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = WebpackModules.findByProps(\"fixed\", \"improved\");\n const TextElement = WebpackModules.findByDisplayName(\"Text\");\n const FlexChild = WebpackModules.findByProps(\"Child\");\n const Titles = WebpackModules.findByProps(\"Tags\", \"default\");\n const Changelog = WebpackModules.find(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = WebpackModules.findByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n \n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\", \n description = \"\", \n changes = [], \n title = \"BandagedBD\", \n subtitle = `v${bbdVersion}`, \n footer\n } = options;\n const ce = BDV2.React.createElement;\n const changelogItems = [ce(\"img\", {src: image})];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {className: `${type} ${margin}`,}, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n const renderHeader = function() {\n return ce(FlexChild.Child, {grow: 1, shrink: 1},\n ce(Titles.default, {tag: Titles.Tags.H4}, title),\n ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD, className: ChangelogClasses.date}, subtitle)\n );\n };\n \n const renderFooter = () => {\n const Anchor = WebpackModules.find(m => m.displayName == \"Anchor\");\n const AnchorClasses = WebpackModules.findByProps(\"anchorUnderlineOnHover\") || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};\n const joinSupportServer = (click) => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n BDV2.joinBD2();\n };\n const supportLink = Anchor ? ce(Anchor, {onClick: joinSupportServer}, \"Join our Discord Server.\") : ce(\"a\", {className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`, onClick: joinSupportServer}, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD}, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {grow: 1, shrink: 1}, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(function(props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n\n /**\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\n * @param {string} title - title of the modal\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Every string is wrapped in Discord's `Markdown` component so strings will show and render properly.\n * @param {object} [options] - options to modify the modal\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\n * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\n * @returns {string} - the key used for this modal\n */\n static showConfirmationModal(title, content, options = {}) {\n const ModalActions = WebpackModules.findByProps(\"openModal\", \"updateModal\");\n const Markdown = WebpackModules.findByDisplayName(\"Markdown\");\n const ConfirmationModal = WebpackModules.findByDisplayName(\"ConfirmModal\");\n if (!ModalActions || !ConfirmationModal || !Markdown) return Utils.alert(title, content);\n\n const emptyFunction = () => {};\n const {onConfirm = emptyFunction, onCancel = emptyFunction, confirmText = \"Okay\", cancelText = \"Cancel\", danger = false, key = undefined} = options;\n\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof(c) === \"string\" ? BDV2.React.createElement(Markdown, null, c) : c);\n return ModalActions.openModal(props => {\n return BDV2.React.createElement(ConfirmationModal, Object.assign({\n header: title,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, props), content);\n }, {modalKey: key});\n }\n\n static get removeDa(){\n return removeDa\n }\n}\n\nfunction removeDa(className){\n if(!className)return className\n return className.split(\" \").filter(e => !e.startsWith(\"da-\")).join(\" \")\n}\n\nUtils.showToast = Utils.suppressErrors(Utils.showToast, \"Could not show toast.\");\n\nwindow.Lightcord.BetterDiscord.Utils = Utils","export default class V2_SettingsPanel_Sidebar {\r\n\r\n constructor() {\r\n this.panels = {}\r\n }\r\n\r\n register(panel, component){\r\n this.panels[panel] = component\r\n }\r\n\r\n getComponent(panel, sidebar){\r\n return this.panels[panel](sidebar)\r\n }\r\n\r\n get items() {\r\n return [{\r\n text: \"BetterDiscord Settings\", \r\n id: \"core\"\r\n }, {\r\n text: \"Plugins\", \r\n id: \"plugins\"\r\n }, {\r\n text: \"Themes\", \r\n id: \"themes\"\r\n }, {\r\n text: \"Custom CSS\", \r\n id: \"customcss\"\r\n }];\r\n }\r\n\r\n get LCitems(){\r\n let items = [\r\n {\r\n text: \"Lightcord Settings\",\r\n id: \"lightcord\"\r\n }, {\r\n text: \"RichPresence\", \r\n id: \"status\"\r\n }, {\r\n text: \"Account Info\",\r\n id: \"accountinfo\"\r\n }\r\n ]\r\n return items\r\n }\r\n\r\n get LCDevItems(){\r\n let items = []\r\n if(!window.Lightcord.Settings.devMode)return items\r\n items.push(...[\r\n {\r\n section: \"DIVIDER\"\r\n },\r\n {\r\n section: \"HEADER\",\r\n label: \"Lightcord Api\"\r\n },\r\n {\r\n text: \"Components Preview\",\r\n id: \"lcapipreview\"\r\n }\r\n ])\r\n return items\r\n }\r\n\r\n render(sidebar) {\r\n return [\r\n {\r\n section: \"HEADER\",\r\n label: \"Lightcord\"\r\n },\r\n ...this.LCitems.map(e => {\r\n return {\r\n section: e.id,\r\n label: e.text,\r\n element: this.getComponent(e.id, sidebar)\r\n }\r\n }),\r\n ...this.LCDevItems.map(e => {\r\n if(e.section)return e\r\n return {\r\n section: e.id,\r\n label: e.text,\r\n element: this.getComponent(e.id, sidebar)\r\n }\r\n }),\r\n {\r\n section: \"DIVIDER\"\r\n },\r\n {\r\n section: \"CUSTOM\",\r\n element: this.getComponent(\"BDChangelogTitle\")\r\n },\r\n ...this.items.map(e => {\r\n return {\r\n section: e.id,\r\n label: e.text,\r\n element: this.getComponent(e.id, sidebar)\r\n }\r\n }),\r\n {\r\n section: \"DIVIDER\"\r\n }\r\n ]\r\n }\r\n}\r\n\r\n/**\r\n * No need to export settingsPanelSidebar on window\r\n */","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class ColoredText {\r\n injectColoredText() {\r\n if (this.cancelColoredText) return;\r\n if (!BDV2.MessageComponent) return;\r\n\r\n this.cancelColoredText = Utils.monkeyPatch(BDV2.MessageComponent, \"default\", {before: (data) => {\r\n const props = data.methodArguments[0];\r\n if (!props || !props.childrenMessageContent) return;\r\n const messageContent = props.childrenMessageContent;\r\n\r\n if (!messageContent.type || !messageContent.type.type || messageContent.type.type.displayName != \"MessageContent\") return;\r\n const originalType = messageContent.type.type;\r\n if (originalType.__originalMethod) return; // Don't patch again\r\n messageContent.type.type = function(props) {\r\n const returnValue = originalType(props);\r\n const roleColor = settingsCookie[\"bda-gs-7\"] ? props.message.colorString || \"\" : \"\";\r\n returnValue.props.style = {color: roleColor};\r\n return returnValue;\r\n };\r\n\r\n messageContent.type.type.__originalMethod = originalType;\r\n Object.assign(messageContent.type.type, originalType);\r\n }});\r\n }\r\n\r\n removeColoredText() {\r\n let classNameMarkup = BDModules.get(e => e.markup)[0].markup\r\n document.querySelectorAll(\".\"+classNameMarkup.split(\" \")[0]).forEach(elem => {\r\n elem.style.setProperty(\"color\", \"\");\r\n });\r\n }\r\n};","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class TFHour {\r\n inject24Hour() {\r\n if (this.cancel24Hour) return;\r\n\r\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\r\n const convert = (data) => {\r\n if (!settingsCookie[\"bda-gs-6\"]) return;\r\n const matched = data.returnValue.match(twelveHour);\r\n if (!matched || matched.length !== 4) return;\r\n if (matched[3] === \"AM\") return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\r\n return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\r\n };\r\n\r\n const cancelCozy = Utils.monkeyPatch(BDV2.TimeFormatter, \"calendarFormat\", {after: convert}); // Called in Cozy mode\r\n const cancelCompact = Utils.monkeyPatch(BDV2.TimeFormatter, \"dateFormat\", {after: convert}); // Called in Compact mode\r\n this.cancel24Hour = () => {cancelCozy(); cancelCompact();}; // Cancel both\r\n }\r\n\r\n remove24Hour() {\r\n if (this.cancel24Hour) this.cancel24Hour();\r\n }\r\n};","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_XSvg extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"svg\",\r\n {xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 12 12\", style: {width: \"18px\", height: \"18px\"}},\r\n BDV2.react.createElement(\r\n \"g\",\r\n {className: \"background\", fill: \"none\", fillRule: \"evenodd\"},\r\n BDV2.react.createElement(\"path\", {d: \"M0 0h12v12H0\"}),\r\n BDV2.react.createElement(\"path\", {className: \"fill\", fill: \"#dcddde\", d: \"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6\"})\r\n )\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nimport XSvg from \"./xSvg\";\r\n\r\nexport default class V2C_Tools extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.onClick = this.onClick.bind(this);\r\n }\r\n\r\n render() {\r\n let toolsModule = BDModules.get(e => e.toolsContainer)[0]\r\n let containerModule = BDModules.get(e => e.container && e.closeButton && e.closeButtonBold)[0]\r\n return BDV2.react.createElement(\"div\", {className: \"tools-container \"+toolsModule.toolsContainer},\r\n BDV2.react.createElement(\"div\", {className: \"tools \"+toolsModule.tools},\r\n BDV2.react.createElement(\"div\", {className: containerModule.container},\r\n BDV2.react.createElement(\"div\",\r\n {className: \"btn-close \"+containerModule.closeButton, onClick: this.onClick},\r\n BDV2.react.createElement(XSvg, null)\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"esc-text \"+containerModule.keybind},\r\n \"ESC\"\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n onClick() {\r\n if (this.props.onClick) {\r\n this.props.onClick();\r\n }\r\n const closeButton = document.querySelector(\".\"+BDModules.get(e => e.closeButton && e.keybindBold)[0].closeButton.split(\" \")[0]);\r\n if (closeButton) closeButton.click();\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_SettingsTitle extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n//h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi da-h2 da-title da-size16 da-height20 da-weightSemiBold defaultColor-1_ajX0 da-defaultColor marginTop60-3PGbtK da-marginTop60 marginBottom20-32qID7 da-marginBottom20\r\n render() {\r\n return BDV2.react.createElement(\r\n \"h2\",\r\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\r\n this.props.text\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_TabBarSeparator extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"div\", {className: \"ui-tab-bar-separator margin-top-8 margin-bottom-8\"});\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_TabBarHeader extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"div\",{className: \"ui-tab-bar-header\"}, this.props.text, this.props.button);\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_TabBarItem extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.setInitialState();\r\n this.onClick = this.onClick.bind(this);\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n selected: this.props.selected || false\r\n };\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: `ui-tab-bar-item${this.props.selected ? \" selected\" : \"\"}`, onClick: this.onClick},\r\n this.props.text\r\n );\r\n }\r\n\r\n onClick() {\r\n if (this.props.onClick) {\r\n this.props.onClick(this.props.id);\r\n }\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nexport default class V2C_ServerCard extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n if (!this.props.server.iconUrl) this.props.server.iconUrl = this.props.fallback;\r\n this.state = {\r\n imageError: false,\r\n joined: this.props.guildList.includes(this.props.server.identifier)\r\n };\r\n }\r\n\r\n render() {\r\n const {server} = this.props;\r\n let cardModule = BDModules.get(e => e.card && e.cardPrimary)[0]\r\n let flexModule = BDModules.get(e => e.flexChild && e._horizontalReverse)[0]\r\n let wrapModule = BDModules.get(e => e.noWrap && !e.streamerModeEnabled)[0]\r\n return BDV2.react.createElement(\r\n \"div\", // cardPrimary-1Hv-to\r\n {className: `${cardModule.card} ${cardModule.cardPrimary} ${BDModules.get(e => e.marginBottom8)[0].marginBottom8} bd-server-card${server.pinned ? \" bd-server-card-pinned\" : \"\"}`},\r\n // BDV2.react.createElement(\r\n // \"div\",\r\n // { className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY flex-1O1GKY directionRow-3v3tfG justifyStart-2yIZo0 alignStretch-1hwxMa noWrap-3jynv6\" },\r\n BDV2.react.createElement(\"img\", {ref: \"img\", className: \"bd-server-image\", src: server.iconUrl, onError: this.handleError.bind(this), draggable: false}),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.flexChild+\" bd-server-content\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap+\" bd-server-header\"},\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name\"},\r\n server.name\r\n ),\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count\"},\r\n server.members,\r\n \" Members\"\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scroller-2FKFPG scroller bd-server-description\"},\r\n server.description\r\n )\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flexChild-faoVW3 bd-server-tags\", style: {flex: \"1 1 auto\"}},\r\n server.categories.join(\", \")\r\n ),\r\n this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#3ac15c\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Joined\"\r\n )\r\n ),\r\n server.error && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#c13a3a\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Error\"\r\n )\r\n ),\r\n !server.error && !this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN\", style: {minHeight: \"12px\", marginTop: \"4px\"}, onClick: () => {this.join();}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Join\"\r\n )\r\n )\r\n )\r\n )\r\n // )\r\n );\r\n }\r\n\r\n handleError() {\r\n this.props.server.iconUrl = this.props.fallback;\r\n this.setState({imageError: true});\r\n }\r\n\r\n join() {\r\n this.props.join(this);\r\n //this.setState({joined: true});\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_Scroller extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n //scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y\r\n let scrollerModule1 = BDModules.get(e => e.scrollerHorizontal)[0]\r\n let scrollerModule2 = BDModules.get(e => e.sidebarRegionScroller)[0]\r\n let wrapperClass = `${scrollerModule1.scrollerWrap} ${scrollerModule1.scrollerThemed} ${scrollerModule1.themeGhostHairline}${this.props.fade ? \" \"+scrollerModule1.scrollerFade : \"\"}`;\r\n let scrollerClass = scrollerModule1.scroller+\" scroller\"; /* fuck */\r\n if (this.props.sidebar) scrollerClass += ` ${scrollerModule2.sidebarRegionScroller} sidebar-region-scroller`\r\n if (this.props.contentColumn) {\r\n scrollerClass += \" \"+scrollerModule2.contentRegionScroller+\" content-region-scroller\"; /* fuck */\r\n wrapperClass = `${scrollerModule1.scrollerWrap} ${scrollerModule2.contentRegionScrollerWrap} content-region-scroller-wrap ${scrollerModule1.scrollerThemed} ${scrollerModule1.themeGhost} ${scrollerModule1.scrollerTrack}`;\r\n }\r\n const {children} = this.props;\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {key: \"scrollerwrap\", className: wrapperClass},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {key: \"scroller\", ref: \"scroller\", className: scrollerClass},\r\n children\r\n )\r\n );\r\n }\r\n}\r\n\r\nconst originalRender = V2C_Scroller.prototype.render;\r\nObject.defineProperty(V2C_Scroller.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n}); ","import BDV2 from \"../../modules/v2\";\r\n\r\nimport Scroller from \"../scroller\";\r\n\r\nexport default class V2C_SidebarView extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const {sidebar, content, tools} = this.props.children;\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: \"standardSidebarView-3F1I7i ui-standard-sidebar-view\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"sidebarRegion-VFTUkN sidebar-region\"},\r\n BDV2.react.createElement(Scroller, {key: \"sidebarScroller\", ref: \"sidebarScroller\", sidebar: true, fade: sidebar.fade || true, dark: sidebar.dark || true}, sidebar.component)\r\n ),\r\n BDV2.react.createElement(\"div\", {className: \"contentRegion-3nDuYy content-region\"},\r\n BDV2.react.createElement(\"div\", {className: \"contentTransitionWrap-3hqOEW content-transition-wrap\"},\r\n BDV2.react.createElement(\"div\", {className: \"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv\"},\r\n BDV2.react.createElement(\"div\", {className: \"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller\", ref: \"contentScroller\"},\r\n BDV2.react.createElement(\"div\", {className: \"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default\"}, content.component),\r\n tools.component\r\n )\r\n )\r\n )\r\n )\r\n );\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nimport Tools from \"../tools\";\r\nimport SettingsTitle from \"../settingsTitle\";\r\nimport TabBarSeparator from \"../tabBarSeparator\";\r\nimport TabBarHeader from \"../tabBarHeader\";\r\nimport TabBarItem from \"../tabBarItem\";\r\n\r\nimport ServerCard from \"./serverCard\";\r\nimport SidebarView from \"./sidebarView\";\r\n\r\nexport default class V2C_PublicServers extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.setInitialState();\r\n this.close = this.close.bind(this);\r\n this.changeCategory = this.changeCategory.bind(this);\r\n this.search = this.search.bind(this);\r\n this.searchKeyDown = this.searchKeyDown.bind(this);\r\n this.checkConnection = this.checkConnection.bind(this);\r\n this.join = this.join.bind(this);\r\n this.connect = this.connect.bind(this);\r\n\r\n this.GuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getGuilds\"]);\r\n this.AvatarDefaults = BDV2.WebpackModules.findByUniqueProperties([\"getUserAvatarURL\", \"DEFAULT_AVATARS\"]);\r\n this.InviteActions = BDV2.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);\r\n this.SortedGuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getSortedGuilds\"]);\r\n }\r\n\r\n componentDidMount() {\r\n this.checkConnection();\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n selectedCategory: -1,\r\n title: \"Loading...\",\r\n loading: true,\r\n servers: [],\r\n next: null,\r\n connection: {\r\n state: 0,\r\n user: null\r\n }\r\n };\r\n }\r\n\r\n close() {\r\n this.props.close()\r\n }\r\n\r\n search(query, clear) {\r\n const self = this;\r\n fetch(`${self.endPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`, {\r\n method: \"get\"\r\n }).then(async res => {\r\n if(res.status !== 200)throw await res.text()\r\n let data = await res.json()\r\n \r\n let servers = data.results.reduce((arr, server) => {\r\n server.joined = false;\r\n arr.push(server);\r\n // arr.push();\r\n return arr;\r\n }, []);\r\n\r\n if (!clear) {\r\n servers = self.state.servers.concat(servers);\r\n }\r\n else {\r\n //servers.unshift(self.bdServer);\r\n }\r\n\r\n let end = data.size + data.from;\r\n data.next = `?from=${end}`;\r\n if (self.state.term) data.next += `&term=${self.state.term}`;\r\n if (self.state.selectedCategory) data.next += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\r\n if (end >= data.total) {\r\n end = data.total;\r\n data.next = null;\r\n }\r\n\r\n let title = `Showing 1-${end} of ${data.total} results in ${self.categoryButtons[self.state.selectedCategory]}`;\r\n if (self.state.term) title += ` for ${self.state.term}`;\r\n\r\n self.setState({\r\n loading: false,\r\n title: title,\r\n servers: servers,\r\n next: data.next\r\n });\r\n\r\n if (clear) {\r\n //console.log(self);\r\n self.refs.sbv.refs.contentScroller.scrollTop = 0;\r\n }\r\n }).catch((err) => {\r\n console.error(err)\r\n return self.setState({\r\n loading: false,\r\n title: \"Failed to load servers. Check console for details\"\r\n });\r\n })\r\n }\r\n\r\n async join(serverCard) {\r\n if (serverCard.props.pinned) return this.InviteActions.acceptInvite(serverCard.props.invite_code);\r\n\r\n await fetch(`${this.joinEndPoint}/${serverCard.props.server.identifier}`,{\r\n method: \"GET\",\r\n credentials: \"include\",\r\n mode: \"cors\",\r\n headers: {\r\n \"Accept\": \"application/json\",\r\n \"Content-Type\": \"application/json\"\r\n }\r\n });\r\n\r\n serverCard.setState({joined: true});\r\n }\r\n\r\n connect() {\r\n const self = this;\r\n const options = self.windowOptions;\r\n options.x = Math.round(window.screenX + window.innerWidth / 2 - options.width / 2);\r\n options.y = Math.round(window.screenY + window.innerHeight / 2 - options.height / 2);\r\n\r\n self.joinWindow = new (window.require(\"electron\").remote.BrowserWindow)(options);\r\n const url = \"https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info\";\r\n self.joinWindow.webContents.on(\"did-navigate\", (event, url) => {\r\n if (url != \"https://auth.discordservers.com/info\") return;\r\n self.joinWindow.close();\r\n self.checkConnection();\r\n });\r\n self.joinWindow.loadURL(url);\r\n }\r\n\r\n get windowOptions() {\r\n return {\r\n width: 500,\r\n height: 550,\r\n backgroundColor: \"#282b30\",\r\n show: true,\r\n resizable: false,\r\n maximizable: false,\r\n minimizable: false,\r\n alwaysOnTop: true,\r\n frame: false,\r\n center: false,\r\n webPreferences: {\r\n nodeIntegration: false\r\n }\r\n };\r\n }\r\n\r\n get bdServer() {\r\n const server = {\r\n name: \"BetterDiscord\",\r\n online: \"30000+\",\r\n members: \"70000+\",\r\n categories: [\"community\", \"programming\", \"support\"],\r\n description: \"Official BetterDiscord server for support etc\",\r\n identifier: \"86004744966914048\",\r\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\r\n nativejoin: true,\r\n invite_code: \"0Tmfo5ZbORCRqbAd\",\r\n pinned: true\r\n };\r\n const server2 = {\r\n name: \"Lightcord\",\r\n online: \"100+\",\r\n members: \"300+\",\r\n categories: [\"community\", \"programming\", \"support\"],\r\n description: \"Official Lightcord server for support etc\",\r\n identifier: \"705908350218666117\",\r\n iconUrl: \"https://github.com/lightcord.png\",\r\n nativejoin: true,\r\n invite_code: \"7eFff2A\",\r\n pinned: true\r\n };\r\n const guildList = this.SortedGuildStore.getFlattenedGuildIds();\r\n const defaultList = this.AvatarDefaults.DEFAULT_AVATARS;\r\n return [\r\n BDV2.react.createElement(ServerCard, {server: server2, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]}),\r\n BDV2.react.createElement(ServerCard, {server: server, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]})\r\n ]\r\n }\r\n\r\n get endPoint() {\r\n return \"https://search.discordservers.com\";\r\n }\r\n\r\n get joinEndPoint() {\r\n return \"https://j.discordservers.com\";\r\n }\r\n\r\n get connectEndPoint() {\r\n return \"https://join.discordservers.com/connect\";\r\n }\r\n\r\n async checkConnection() {\r\n const self = this;\r\n try {\r\n const response = await fetch(`https://auth.discordservers.com/info`,{\r\n method: \"GET\",\r\n credentials: \"include\",\r\n mode: \"cors\",\r\n headers: {\r\n \"Accept\": \"application/json\",\r\n \"Content-Type\": \"application/json\"\r\n }\r\n });\r\n const text = await response.text()\r\n if(!text){\r\n self.setState({\r\n title: \"Not connected to discordservers.com!\",\r\n loading: true,\r\n selectedCategory: -1,\r\n connection: {\r\n state: 1,\r\n user: null\r\n }\r\n });\r\n return\r\n }\r\n const data = JSON.parse(text)\r\n self.setState({\r\n selectedCategory: 0,\r\n connection: {\r\n state: 2,\r\n user: data\r\n }\r\n });\r\n self.search(\"\", true);\r\n }\r\n catch (error) {\r\n console.error(error)\r\n self.setState({\r\n title: \"Not connected to discordservers.com!\",\r\n loading: true,\r\n selectedCategory: -1,\r\n connection: {\r\n state: 1,\r\n user: null\r\n }\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"div\", {id: \"pubslayerroot\"}, \r\n BDV2.react.createElement(\"div\", {id: \"pubslayer\"}, BDV2.react.createElement(SidebarView, {ref: \"sbv\"}, this.component))\r\n );\r\n }\r\n\r\n get component() {\r\n return {\r\n sidebar: {\r\n component: this.sidebar\r\n },\r\n content: {\r\n component: this.content\r\n },\r\n tools: {\r\n component: BDV2.react.createElement(Tools, {key: \"pt\", ref: \"tools\", onClick: this.close})\r\n }\r\n };\r\n }\r\n\r\n get sidebar() {\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: \"sidebar\", key: \"ps\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-tab-bar SIDE\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-tab-bar-header\", style: {fontSize: \"16px\"}},\r\n \"Public Servers\"\r\n ),\r\n BDV2.react.createElement(TabBarSeparator, null),\r\n this.searchInput,\r\n BDV2.react.createElement(TabBarSeparator, null),\r\n BDV2.react.createElement(TabBarHeader, {text: \"Categories\"}),\r\n this.categoryButtons.map((value, index) => {\r\n return BDV2.react.createElement(TabBarItem, {id: index, onClick: this.changeCategory, key: index, text: value, selected: this.state.selectedCategory === index});\r\n }),\r\n BDV2.react.createElement(TabBarSeparator, null),\r\n this.footer,\r\n this.connection\r\n )\r\n );\r\n }\r\n\r\n get searchInput() {\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-form-item\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-text-input flex-vertical\", style: {width: \"172px\", marginLeft: \"10px\"}},\r\n BDV2.react.createElement(\"input\", {ref: \"searchinput\", onKeyDown: this.searchKeyDown, onChange: () => {}, type: \"text\", className: \"input default\", placeholder: \"Search...\", maxLength: \"50\"})\r\n )\r\n );\r\n }\r\n\r\n searchKeyDown(e) {\r\n const self = this;\r\n if (self.state.loading || e.which !== 13) return;\r\n self.setState({\r\n loading: true,\r\n title: \"Loading...\",\r\n term: e.target.value\r\n });\r\n let query = `?term=${e.target.value}`;\r\n if (self.state.selectedCategory !== 0) {\r\n query += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\r\n }\r\n self.search(query, true);\r\n }\r\n\r\n get categoryButtons() {\r\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\r\n }\r\n\r\n changeCategory(id) {\r\n const self = this;\r\n if (self.state.loading) return;\r\n self.refs.searchinput.value = \"\";\r\n self.setState({\r\n loading: true,\r\n selectedCategory: id,\r\n title: \"Loading...\",\r\n term: null\r\n });\r\n if (id === 0) {\r\n self.search(\"\", true);\r\n return;\r\n }\r\n self.search(`?category=${self.categoryButtons[id]}`, true);\r\n }\r\n\r\n get content() {\r\n const self = this;\r\n const guildList = this.SortedGuildStore.getFlattenedGuildIds();\r\n const defaultList = this.AvatarDefaults.DEFAULT_AVATARS;\r\n if (self.state.connection.state === 1) return self.notConnected;\r\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\r\n return [BDV2.react.createElement(\r\n \"div\",\r\n {ref: \"content\", key: \"pc\", className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\r\n BDV2.react.createElement(SettingsTitle, {text: self.state.title}),\r\n self.bdServer,\r\n self.state.servers.map((server) => {\r\n return BDV2.react.createElement(ServerCard, {key: server.identifier, server: server, join: self.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]});\r\n }),\r\n self.state.next && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", onClick: () => {\r\n if (self.state.loading) return;self.setState({loading: true}); self.search(self.state.next, false);\r\n }, className: \"ui-button filled brand small grow\", style: {width: \"100%\", marginTop: \"10px\", marginBottom: \"10px\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n self.state.loading ? \"Loading\" : \"Load More\"\r\n )\r\n ),\r\n self.state.servers.length > 0 && BDV2.react.createElement(SettingsTitle, {text: self.state.title})\r\n )];\r\n }\r\n\r\n get notConnected() {\r\n const self = this;\r\n //return BDV2.react.createElement(SettingsTitle, { text: self.state.title });\r\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\r\n return [BDV2.react.createElement(\r\n \"div\",\r\n {key: \"ncc\", ref: \"content\", className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\r\n BDV2.react.createElement(\r\n \"h2\",\r\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\r\n \"Not connected to discordservers.com!\",\r\n BDV2.react.createElement(\r\n \"button\",\r\n {\r\n onClick: self.connect,\r\n type: \"button\",\r\n className: \"ui-button filled brand small grow\",\r\n style: {\r\n display: \"inline-block\",\r\n minHeight: \"18px\",\r\n marginLeft: \"10px\",\r\n lineHeight: \"14px\"\r\n }\r\n },\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Connect\"\r\n )\r\n )\r\n ), self.bdServer\r\n )];\r\n }\r\n\r\n get footer() {\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-tab-bar-header\"},\r\n BDV2.react.createElement(\r\n \"a\",\r\n {href: \"https://discordservers.com\", target: \"_blank\"},\r\n \"Discordservers.com\"\r\n )\r\n );\r\n }\r\n\r\n get connection() {\r\n const self = this;\r\n const {connection} = self.state;\r\n if (connection.state !== 2) return BDV2.react.createElement(\"span\", null);\r\n\r\n return BDV2.react.createElement(\r\n \"span\",\r\n null,\r\n BDV2.react.createElement(TabBarSeparator, null),\r\n BDV2.react.createElement(\r\n \"span\",\r\n {style: {color: \"#b9bbbe\", fontSize: \"10px\", marginLeft: \"10px\"}},\r\n \"Connected as: \",\r\n `${connection.user.username}#${connection.user.discriminator}`\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {style: {padding: \"5px 10px 0 10px\"}},\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {width: \"100%\", minHeight: \"20px\"}, type: \"button\", className: \"ui-button filled brand small grow\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\", onClick: self.connect},\r\n \"Reconnect\"\r\n )\r\n )\r\n )\r\n );\r\n}\r\n}","export default class BugHunterBadge extends React.Component {\r\n render(){\r\n const props = this.props\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","export default class Circus extends React.Component {\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","import BugHunterBadge from \"../svg/bug_hunter\"\r\nimport nodeFetch from \"node-fetch\"\r\nimport { settingsCookie } from \"../0globals\";\r\nimport Circus from \"../svg/circus\";\r\n\r\nexport function uuidv4() { // Generate UUID (No crypto rng)\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n} \r\n\r\nconst awaitingBadgesPromises = {}\r\nlet badgesToFetch = []\r\n\r\nexport default new class DistantServer {\r\n constructor(){\r\n this._cache = {\r\n badges: {\r\n\r\n }\r\n }\r\n window.Lightcord.BetterDiscord.DistantServer = this\r\n }\r\n\r\n get cache(){\r\n return this._cache\r\n }\r\n\r\n set cache(data){\r\n if(typeof data !== \"object\" || typeof this._cache !== \"object\")return this._cache = data\r\n return this._cache = Object.assign(this._cache, data)\r\n }\r\n\r\n /**\r\n * Get custom badges from the user ID.\r\n * @param {string} user The user ID \r\n * @returns {Promise}\r\n */\r\n async getBadges(user){\r\n if(this.cache.badges[user])return this.cache.badges[user]\r\n if(awaitingBadgesPromises[user])return awaitingBadgesPromises[user]\r\n\r\n let resolve\r\n const newPromise = new Promise((res) => (resolve = res))\r\n awaitingBadgesPromises[user] = newPromise\r\n\r\n const badges = []\r\n for(let badge of Constants.badges){\r\n if(badge.defaultUsers.includes(user))badges.push(badge)\r\n }\r\n const fetchedBadges = await new Promise((resolve) => {\r\n if(!settingsCookie[\"lightcord-5\"])return resolve([])\r\n badgesToFetch.push([user, resolve])\r\n setTimeout(() => {\r\n let users = badgesToFetch\r\n if(users.length === 0)return\r\n badgesToFetch = []\r\n handleRequest(Routes.badges, \"POST\", JSON.stringify(users.map(e => e[0])))\r\n .then(async res => {\r\n if(res.status !== 200){// Couldn't fetch badges: server error\r\n users.forEach(data => {\r\n data[1]([])// resolve no badge fetched\r\n })\r\n }\r\n const responseBody = await res.json()\r\n \r\n for(let user of responseBody){\r\n let promise = users.find(promise => promise[0] === user.user_id)\r\n promise[1](user.badges)\r\n }\r\n }).catch((err) => {// Couldn't fetch badges: error\r\n if(!(err instanceof LightcordError))console.error(err)\r\n users.forEach(data => {\r\n data[1]([])// resolve no badge fetched\r\n })\r\n })\r\n }, 0)\r\n })\r\n for(let badge of fetchedBadges){\r\n if(!Constants.badges.find(e => e.id === badge))continue // We do not have the Component, skip it.\r\n if(badges.find(e => e.id === badge))continue // Already inserted.\r\n badges.push(Constants.badges.find(e => e.id === badge))\r\n }\r\n this.cache = {\r\n badges: Object.assign(this.cache.badges, {[user]: badges})\r\n }\r\n setTimeout(() => {\r\n delete this.cache.badges[user]\r\n }, 600000);\r\n\r\n resolve(badges)\r\n delete awaitingBadgesPromises[user]\r\n return badges\r\n }\r\n}\r\n\r\nconst handleRequest = function(route, method, data){\r\n if(!settingsCookie[\"lightcord-5\"]){\r\n return Promise.reject(new LightcordError(\"The current settings blocked the request.\"))\r\n }\r\n return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, {\r\n method,\r\n headers: {\r\n \"CLIENT\": \"Lightcord\",\r\n \"Authorization\": window.Lightcord.Api.Authorization || \"None::Anonymous\"\r\n },\r\n ...(data ? {\r\n body: data\r\n } : {})\r\n })\r\n}\r\n\r\nclass LightcordError extends Error {\r\n constructor(){\r\n super(...arguments)\r\n this.name = \"LightcordError\"\r\n }\r\n}\r\n\r\nexport const Constants = {\r\n SERVER_URL: \"https://lightcord.deroku.xyz\",\r\n badges: [ // TODO: Add more badges + server side svg\r\n {\r\n name: \"Lightcord Bug Hunter\",\r\n id: \"f04698f5-816b-41e3-bd01-92291193d7a5\",\r\n defaultUsers: [\r\n \"696481194443014174\",\r\n \"696003456611385396\"\r\n ],\r\n scopes: [],\r\n component: BugHunterBadge,\r\n href: \"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter\"\r\n }, {\r\n name: \"Buffoon\",\r\n id: \"06904d31-65b4-41ec-a50c-8658bbd1af96\",\r\n defaultUsers: [\r\n \"389016895543705602\",\r\n \"664600134528663565\",\r\n \"625350657829896224\"\r\n ],\r\n scopes: [],\r\n component: Circus,\r\n href: \"https://youtu.be/EJtb6z-dlT8?t=145\"\r\n }\r\n ]\r\n}\r\n\r\nexport const Routes = {\r\n badges: `/users/badges`\r\n}","import Utils from \"./utils\";\r\nimport v2 from \"./v2\";\r\nimport { uuidv4 } from \"./distant\";\r\nimport { timingSafeEqual } from \"crypto\";\r\n\r\nexport default new class Layers {\r\n constructor(){\r\n this.layers = []\r\n window.Lightcord.BetterDiscord.Layers = this\r\n }\r\n\r\n get isInjected(){\r\n return !!document.querySelector(\"div.Layers.injected\")\r\n }\r\n\r\n inject(){\r\n if(this.isInjected)return\r\n let [\r\n classNameLayers\r\n ] = [\r\n Utils.removeDa(v2.WebpackModules.find(e => e.layers && e.layer).layers)\r\n ]\r\n const layers = document.querySelector(\".\"+classNameLayers);\r\n if (!layers) return false;\r\n const ReactInstance = Lightcord.Api.Utils.FindReact(layers, 1)\r\n if(!ReactInstance)return layers\r\n this.ReactInstance = ReactInstance\r\n let render = ReactInstance.render\r\n ReactInstance.render = () => {\r\n let returnValue = render.call(ReactInstance)\r\n let classList = returnValue.props.children[1].props.className.split(\" \")\r\n classList.push(\"Layers\")\r\n classList.push(\"injected\")\r\n returnValue.props.children[1].props.className = classList.join(\" \")\r\n\r\n this.layers.forEach(layer => {\r\n returnValue.props.children[1].props.children.push(layer[1])\r\n })\r\n\r\n return returnValue\r\n }\r\n ReactInstance.forceUpdate()\r\n }\r\n\r\n createLayer(children, props = {}){\r\n let id = uuidv4()\r\n let layer = null\r\n this.layers.push([id, {\r\n layer = lay\r\n }} key={id} id={id} remove={() => {\r\n let index = this.layers.findIndex(e => e[0] === id)\r\n if(index === -1)return\r\n this.layers.splice(index, 1)\r\n layer = null\r\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\r\n this.inject()\r\n }}>{children}])\r\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\r\n this.inject()\r\n return {\r\n remove: () => {\r\n if(!layer){\r\n let index = this.layers.findIndex(e => e[0] === id)\r\n if(index === -1)return\r\n this.layers.splice(index, 1)\r\n layer = null\r\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\r\n this.inject()\r\n }else{\r\n layer.remove()\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nlet LayerModules\r\nexport class Layer extends React.Component {\r\n constructor(){\r\n super(...arguments)\r\n this.state = {\r\n animation: new this.modules[0].default.Value(0)\r\n } \r\n this.props.getLayer(this)\r\n this.keydown = this.keydown.bind(this)\r\n }\r\n\r\n keydown(e){\r\n if (e.which === 27) {\r\n this.remove()\r\n }\r\n }\r\n\r\n get modules(){\r\n return LayerModules || (LayerModules = [\r\n v2.WebpackModules.find(e => e.default && e.default.Value && e.default.div)\r\n ])\r\n }\r\n\r\n componentWillUnmount(){\r\n window.removeEventListener(\"keydown\", this.keydown)\r\n }\r\n\r\n componentDidMount(ev){\r\n window.addEventListener(\"keydown\", this.keydown)\r\n }\r\n\r\n remove(){\r\n this.props.remove()\r\n }\r\n\r\n componentWillEnter(ev){\r\n this.modules[0].default.timing(this.state.animation, {\r\n toValue: 1,\r\n duration: 100\r\n }).start(ev)\r\n }\r\n\r\n componentWillLeave(ev){\r\n this.modules[0].default.timing(this.state.animation, {\r\n toValue: 0,\r\n duration: 100\r\n }).start(ev)\r\n }\r\n\r\n render(){\r\n let interpolation = this.state.animation.interpolate({\r\n inputRange: [0, 1],\r\n outputRange: [1.07, 1]\r\n })\r\n let style = {\r\n opacity: this.state.animation,\r\n transform: [{\r\n scale: interpolation\r\n }]\r\n }\r\n let Div = this.modules[0].default.div\r\n return
e).join(\" \") || null} style={style}>\r\n {this.props.children(() => {\r\n this.remove()\r\n })}\r\n
\r\n }\r\n}\r\nLayer.defaultProps = {\r\n id: null,\r\n children: null\r\n}","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport webpackModules from \"./webpackModules\";\r\nimport Utils from \"./utils\";\r\nimport DOM from \"./domtools\";\r\n\r\nimport V2C_PublicServers from \"../ui/publicservers/publicServers\";\r\nimport Layers from \"./Layers\";\r\n\r\nexport default new class V2_PublicServers {\r\n\r\n constructor() {\r\n this._appendButton = this._appendButton.bind(this);\r\n window.Lightcord.BetterDiscord.V2_PublicServers = this\r\n }\r\n\r\n render() {\r\n Layers.createLayer((close) => {\r\n return BDV2.react.createElement(V2C_PublicServers, {rootId: \"pubslayerroot\", close})\r\n })\r\n }\r\n\r\n get button() {\r\n const btn = DOM.createElement(`
`);\r\n if (!settingsCookie[\"bda-gs-1\"]) btn.style.display = \"none\";\r\n const label = DOM.createElement(`
public
`);\r\n label.addEventListener(\"click\", () => {this.render();});\r\n btn.append(label);\r\n return btn;\r\n }\r\n\r\n _appendButton() {\r\n let [\r\n classNametutorialContainer\r\n ] = [\r\n Utils.removeDa(BDModules.get(e => e.downloadProgress && e.tutorialContainer)[0].tutorialContainer)\r\n ]\r\n if (DOM.query(\"#bd-pub-li\")) return;\r\n const guilds = DOM.query(`div.${classNametutorialContainer} > div`);\r\n DOM.after(guilds, this.button);\r\n }\r\n\r\n addButton() {\r\n if (this.guildPatch) return;\r\n const GuildList = webpackModules.find(m => m.default && m.default.displayName == \"NavigableGuilds\");\r\n const GuildListOld = webpackModules.findByDisplayName(\"Guilds\");\r\n if (!GuildList && !GuildListOld) Utils.warn(\"PublicServer\", \"Can't find GuildList component\");\r\n this.guildPatch = Utils.monkeyPatch(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", {after: this._appendButton});\r\n this._appendButton();\r\n }\r\n\r\n removeButton() {\r\n this.guildPatch();\r\n delete this.guildPatch;\r\n const button = DOM.query(\"#bd-pub-li\");\r\n if (button) button.remove();\r\n }\r\n};","import DOM from \"./domtools\";\r\n\r\nconst style = `\r\n .container-2Rl01u {\r\n display: none!important;\r\n }\r\n\r\n .chat-3bRxxu {\r\n display: none!important;\r\n }\r\n\r\n .sidebar-2K8pFh {\r\n flex-grow: 1!important;\r\n }\r\n`;\r\n\r\nexport default new class VoiceMode {\r\n start() {\r\n DOM.addStyle(\"VoiceMode\", style);\r\n }\r\n\r\n stop() {\r\n DOM.removeStyle(\"VoiceMode\");\r\n }\r\n};","import WebpackModules from \"./webpackModules\";\r\n\r\nconst normalizedPrefix = \"da\";\r\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\r\n\r\nexport default new class ClassNormalizer {\r\n constructor(){\r\n window.Lightcord.BetterDiscord.ClassNormalizer = this\r\n }\r\n stop() {\r\n if (!this.hasPatched) return;\r\n this.unpatchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\r\n this.revertElement(document.querySelector(\"#app-mount\"));\r\n this.hasPatched = false;\r\n }\r\n\r\n start() {\r\n if (this.hasPatched) return;\r\n this.patchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\r\n this.normalizeElement(document.querySelector(\"#app-mount\"));\r\n this.hasPatched = true;\r\n this.patchDOMMethods();\r\n }\r\n\r\n patchClassModules(modules) {\r\n for (const module of modules) {\r\n this.patchClassModule(normalizedPrefix, module);\r\n }\r\n }\r\n\r\n unpatchClassModules(modules) {\r\n for (const module of modules) {\r\n this.unpatchClassModule(normalizedPrefix, module);\r\n }\r\n }\r\n\r\n shouldIgnore(value) {\r\n if (!isNaN(value)) return true;\r\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\r\n if (value.startsWith(\"layerContainer-\")) return true;\r\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\r\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\r\n return false;\r\n }\r\n\r\n moduleFilter(module) {\r\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\r\n if (module.__esModule) return false;\r\n if (!Object.keys(module).length) return false;\r\n for (const baseClassName in module) {\r\n const value = module[baseClassName];\r\n if (typeof value !== \"string\") return false;\r\n if (this.shouldIgnore(value)) continue;\r\n if (value.split(\"-\").length === 1) return false;\r\n if (!randClass.test(value.split(\" \")[0])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n patchClassModule(componentName, classNames) {\r\n for (const baseClassName in classNames) {\r\n const value = classNames[baseClassName];\r\n if (this.shouldIgnore(value)) continue;\r\n const classList = value.split(\" \");\r\n for (const normalClass of classList) {\r\n const match = normalClass.match(randClass);\r\n if (!match || !match.length || match.length < 2) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\r\n const camelCase = match[1].split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\r\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\r\n }\r\n }\r\n }\r\n\r\n unpatchClassModule(componentName, classNames) {\r\n for (const baseClassName in classNames) {\r\n const value = classNames[baseClassName];\r\n if (this.shouldIgnore(value)) continue;\r\n let newString = \"\";\r\n const classList = value.split(\" \");\r\n for (const normalClass of classList) {\r\n if (normalClass.startsWith(`${componentName}-`)) continue;\r\n newString += ` ${normalClass}`;\r\n }\r\n classNames[baseClassName] = newString.trim();\r\n }\r\n }\r\n\r\n normalizeElement(element) {\r\n if (!(element instanceof Element)) return;\r\n const classes = element.classList;\r\n for (let c = 0, clen = classes.length; c < clen; c++) {\r\n if (!randClass.test(classes[c])) continue;\r\n const match = classes[c].match(randClass)[1];\r\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\r\n element.classList.add(`${normalizedPrefix}-${newClass}`);\r\n }\r\n for (const child of element.children) this.normalizeElement(child);\r\n }\r\n\r\n revertElement(element) {\r\n if (!(element instanceof Element)) return;\r\n if (element.children && element.children.length) this.revertElement(element.children[0]);\r\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\r\n const classes = element.classList;\r\n const toRemove = [];\r\n for (let c = 0; c < classes.length; c++) {\r\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\r\n }\r\n element.classList.remove(...toRemove);\r\n }\r\n\r\n patchDOMMethods() {\r\n const contains = DOMTokenList.prototype.contains;\r\n DOMTokenList.prototype.contains = function(token) {\r\n // const tokens = token.split(\" \");\r\n return Reflect.apply(contains, this, [token.split(\" \")[0]]);\r\n // return tokens.every(t => contains.call(this, t));\r\n };\r\n\r\n const add = DOMTokenList.prototype.add;\r\n DOMTokenList.prototype.add = function(...tokens) {\r\n for (let t = 0; t < tokens.length; t++) {\r\n tokens[t] = tokens[t].split(\" \")[0];\r\n }\r\n return Reflect.apply(add, this, tokens);\r\n };\r\n\r\n const remove = DOMTokenList.prototype.remove;\r\n DOMTokenList.prototype.remove = function(...tokens) {\r\n for (let t = 0; t < tokens.length; t++) {\r\n tokens[t] = tokens[t].split(\" \")[0];\r\n }\r\n return Reflect.apply(remove, this, tokens);\r\n };\r\n }\r\n\r\n};","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport DOM from \"./domtools\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class DevMode {\r\n constructor() {\r\n this.debugListener = this.debugListener.bind(this);\r\n this.copySelectorListener = this.copySelectorListener.bind(this);\r\n }\r\n\r\n start() {\r\n this.startDebugListener();\r\n if (settingsCookie[\"fork-dm-1\"]) this.startCopySelector();\r\n }\r\n \r\n stop() {\r\n this.stopDebugListener();\r\n this.stopCopySelector();\r\n }\r\n\r\n startDebugListener() {\r\n this.stopDebugListener();\r\n document.addEventListener(\"keydown\", this.debugListener);\r\n }\r\n\r\n stopDebugListener() {\r\n document.removeEventListener(\"keydown\", this.debugListener);\r\n }\r\n\r\n startCopySelector() {\r\n this.stopCopySelector();\r\n document.addEventListener(\"contextmenu\", this.copySelectorListener);\r\n }\r\n\r\n stopCopySelector() {\r\n document.removeEventListener(\"contextmenu\", this.copySelectorListener);\r\n }\r\n\r\n debugListener(e) {\r\n if (e.which === 119 || e.which == 118) {//F8\r\n console.log(\"%c[%cDevMode%c] %cBreak/Resume\", \"color: red;\", \"color: #303030; font-weight:700;\", \"color:red;\", \"\");\r\n debugger; // eslint-disable-line no-debugger\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n\r\n copySelectorListener(e) {\r\n try{\r\n e.stopPropagation();\r\n const selector = this.getSelector(e.target);\r\n \r\n let [\r\n classLayer, \r\n classItems\r\n ] = [\r\n BDModules.get((e) => e.layer && typeof e.layer === \"string\" && e.disabledPointerEvents)[0],\r\n BDModules.get((e) => e.menu)[0]\r\n ]\r\n \r\n function attach() {\r\n if(!classItems || !classLayer.layer)return console.log(classItems, classLayer.layer)\r\n\r\n let cm = DOM.query(\".\"+Utils.removeDa(classItems.menu));\r\n if (!cm) {\r\n const container = DOM.query(\"#app-mount > .\"+Utils.removeDa(classLayer.layerContainer));\r\n const cmWrap = DOM.createElement(`
`);\r\n cm = DOM.createElement(`
`);\r\n cmWrap.append(cm);\r\n container.append(cmWrap);\r\n cmWrap.style.top = e.clientY + \"px\";\r\n cmWrap.style.left = e.clientX + \"px\";\r\n cmWrap.setAttribute(\"role\", \"menu\")\r\n cmWrap.setAttribute(\"tabindex\", \"-1\")\r\n cmWrap.id = \"bd-copy-selector-context\"\r\n cmWrap.setAttribute(\"aria-label\", \"Copy Selector Actions\")\r\n\r\n const scrollerClasses = BDModules.get((e) => e.scrollerWrap)[0]\r\n const scrollerWrap = DOM.createElement(`
`)\r\n const scroller = DOM.createElement(`
e.scroller)[0].scroller} ${classItems.scroller}\">
`)\r\n scrollerWrap.append(scroller)\r\n cm.append(scrollerWrap)\r\n\r\n const removeCM = function(e) {\r\n if (e.keyCode && e.keyCode !== 27) return;\r\n cmWrap.remove();\r\n document.removeEventListener(\"click\", removeCM);\r\n document.removeEventListener(\"contextmenu\", removeCM);\r\n document.removeEventListener(\"keyup\", removeCM);\r\n };\r\n document.addEventListener(\"click\", removeCM);\r\n document.addEventListener(\"contextmenu\", removeCM);\r\n document.addEventListener(\"keyup\", removeCM);\r\n }\r\n const cmWrap = cm.parentElement\r\n \r\n const scroller = cm.childNodes[0].childNodes[0]\r\n const cmg = DOM.createElement(`
`);\r\n /**\r\n * @type {HTMLElement}\r\n */\r\n const cmi = DOM.createElement(`
`);\r\n cmi.append(DOM.createElement(`
Copy Selector
`));\r\n cmi.addEventListener(\"click\", () => {\r\n BDV2.NativeModule.copy(selector);\r\n cmWrap.style.display = \"none\"\r\n });\r\n cmi.addEventListener(\"mouseover\", (e) => {\r\n let elements = DOM.queryAll(\"div[role=menuitem].\"+Utils.removeDa(classItems.focused))\r\n elements && elements.forEach(elem => elem.classList.remove(classItems.focused))\r\n cmi.classList.add(classItems.focused)\r\n })\r\n cmi.addEventListener(\"mouseout\", (e) => {\r\n cmi.classList.remove(classItems.focused)\r\n })\r\n cmg.append(cmi);\r\n if(scroller.childNodes.length){ // apend a separator\r\n const separator = DOM.createElement(`
`)\r\n scroller.append(separator)\r\n }\r\n scroller.append(cmg);\r\n if(cmWrap.clientHeight < cmWrap.scrollHeight){\r\n console.log(\"overflowing \"+cmWrap.style.top)\r\n cmWrap.style.top = (cmWrap.style.top - cmg.clientHeight) + \"px\";\r\n console.log(\"overflowing\"+cmWrap.style.top)\r\n }\r\n }\r\n \r\n setTimeout(attach, 1);\r\n }catch(e){\r\n console.error(e)\r\n }\r\n }\r\n\r\n getSelector(element) {\r\n if (element.id) return `#${element.id}`;\r\n /**\r\n * \r\n * @param {HTMLElement} el \r\n */\r\n function fullPath(el){\r\n var names = [];\r\n while (el.parentNode){\r\n if (el.id){\r\n names.unshift('#'+el.id);\r\n break;\r\n }else{\r\n if (el==el.ownerDocument.documentElement) names.unshift(el.tagName.toLowerCase()+Array.from(el.classList.entries()).map(e => \".\"+e).join(\"\"));\r\n else{\r\n for (var c=1,e=el;e.previousElementSibling;e=e.previousElementSibling,c++);\r\n names.unshift(el.tagName.toLowerCase()+((typeof el.className === \"string\" && el.className) || \"\").split(\" \").filter(e => !!e).map(e => \".\"+e).join(\"\")+\":nth-child(\"+c+\")\");\r\n }\r\n el=el.parentNode;\r\n }\r\n }\r\n return names.join(\" > \");\r\n }\r\n return fullPath(element)\r\n }\r\n};","import BDV2 from \"../../modules/v2\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class Switch extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {checked: this.props.checked};\r\n this.onChange = this.onChange.bind(this);\r\n this.switch = \r\n }\r\n\r\n onChange(value) {\r\n if (this.props.disabled) return;\r\n this.props.onChange(value);\r\n this.setState({checked: value});\r\n }\r\n\r\n render() {\r\n return this.switch\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\nimport Switch from \"./components/switch\";\r\n\r\nlet classnames = []\r\nfunction getClassName(name){\r\n let className = classnames.find(e => e.startsWith(name+\"-\"))\r\n if(className)return className\r\n className = BDModules.get(e => e[name])[0][name]\r\n classnames.push(className)\r\n return className\r\n}\r\n\r\nexport default class SwitchItem extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.onChange = this.onChange.bind(this);\r\n }\r\n\r\n onChange() {\r\n this.props.checked = !this.props.checked;\r\n this.props.onChange(this.props.id, this.props.checked);\r\n }\r\n\r\n render() {\r\n let {text, info} = this.props.data;\r\n if(!classnames.find(e => e.startsWith(\"beta-\"))){\r\n classnames.push(BDModules.get(e => e.beta && (!e.container && !e.userSettingsVoice))[0].beta)\r\n }\r\n if(this.props.data.experimental){\r\n info = [\r\n info,\r\n React.createElement(\"sup\", {className: getClassName(\"beta\")}, \"(EXPERIMENTAL)\")\r\n ]\r\n }\r\n return BDV2.react.createElement(\"div\", {className: \"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item\"},\r\n BDV2.react.createElement(\"div\", {className: \"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap\"},\r\n BDV2.react.createElement(\"h3\", {key: \"title\", className: \"ui-form-title h3 margin-reset margin-reset ui-flex-child\"}, text),\r\n BDV2.react.createElement(Switch, {key: \"switch\", onChange: this.onChange, checked: this.props.checked})\r\n ),\r\n BDV2.react.createElement(\"div\", {className: \"ui-form-text style-description margin-top-4\", style: {flex: \"1 1 auto\"}}, info)\r\n );\r\n }\r\n}","let marginModule = BDModules.get(e => e.marginTop60)[0]\r\n\r\nexport default class MarginTop extends React.Component {\r\n render(){\r\n if(!marginModule)marginModule = BDModules.get(e => e.marginTop60)[0]\r\n return
\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"../modules/v2\";\r\n\r\nimport SettingsTitle from \"./settingsTitle\";\r\nimport Switch from \"./switch\";\r\nimport MarginTop from \"./margintop\";\r\n\r\nlet formModule\r\nlet switchItem\r\nlet betaClassNames\r\nexport default class V2C_SettingsGroup extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n error: false\r\n }\r\n }\r\n\r\n renderOldSettings() {\r\n const {title, settings, button} = this.props;\r\n const buttonComponent = button ? BDV2.react.createElement(\"button\", {key: \"title-button\", className: \"bd-pfbtn\", onClick: button.onClick}, button.title) : null;\r\n return [BDV2.react.createElement(SettingsTitle, {text: title}),\r\n buttonComponent,\r\n settings.map(setting => {\r\n return BDV2.react.createElement(Switch, {id: setting.id, key: setting.id, data: setting, checked: settingsCookie[setting.id], onChange: (id, checked) => {\r\n this.props.onChange(id, checked);\r\n }});\r\n })];\r\n }\r\n\r\n componentDidCatch(err, errInfo){\r\n console.log(err, errInfo)\r\n this.setState({\r\n error: true\r\n })\r\n }\r\n\r\n render(){\r\n if(this.state.error){\r\n try{\r\n return this.renderOldSettings()\r\n }catch(e){\r\n console.error(e)\r\n return null\r\n }\r\n }else{\r\n try{\r\n if(!formModule)formModule = BDV2.WebpackModules.find(e => e.FormSection)\r\n if(!switchItem)switchItem = BDV2.WebpackModules.find(e => e.default && e.default.displayName === \"SwitchItem\")\r\n if(!betaClassNames)betaClassNames = BDV2.WebpackModules.find(e => e.beta && (!e.container && !e.userSettingsVoice))\r\n \r\n let children = []\r\n if(this.props.description){\r\n children.push(\r\n {this.props.description}\r\n , )\r\n }\r\n children.push(...this.props.settings.map(setting => {\r\n let info = [\r\n setting.text\r\n ]\r\n if(setting.experimental){\r\n info.push((EXPERIMENTAL))\r\n }\r\n return {\r\n this.props.onChange(setting.id, ev.target.checked);\r\n this.forceUpdate()\r\n }} key={setting.id} value={settingsCookie[setting.id]} className={__SECRET_EMOTION__.css({\r\n marginBottom: \"20px\"\r\n })} disabled={false} hideBorder={false}\r\n size={switchItem.default.Sizes.DEFAULT} theme={switchItem.default.Themes.DEFAULT} note={setting.info}>\r\n {info}\r\n \r\n }))\r\n return \r\n {children}\r\n \r\n }catch(e){\r\n console.error(e)\r\n setImmediate(()=>{\r\n this.setState({\r\n error: true\r\n })\r\n })\r\n return null\r\n }\r\n }\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nimport SettingsGroup from \"./settingsGroup\";\r\nimport MarginTop from \"./margintop\";\r\n\r\nexport default class V2C_SectionedSettingsPanel extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return this.props.sections.map((section, i) => {\r\n return [\r\n i !== 0 ? BDV2.react.createElement(MarginTop, {}) : null,\r\n BDV2.react.createElement(SettingsGroup, Object.assign({}, section, {onChange: this.props.onChange}))\r\n ]\r\n })\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_Checkbox extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.onClick = this.onClick.bind(this);\r\n this.setInitialState();\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n checked: this.props.checked || false\r\n };\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"li\",\r\n null,\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox \"+BDModules.get(e => e.checkboxElement)[0].checkbox, onClick: this.onClick},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox-inner \"+BDModules.get(e => e.checkboxInner)[0].checkboxInner},\r\n BDV2.react.createElement(\"input\", {className: BDModules.get(e => e.checkboxElement)[0].checkboxElement, checked: this.state.checked, onChange: () => {}, type: \"checkbox\"}),\r\n BDV2.react.createElement(\"span\", null)\r\n ),\r\n BDV2.react.createElement(\r\n \"span\",\r\n null,\r\n this.props.text\r\n )\r\n )\r\n );\r\n }\r\n\r\n onClick() {\r\n this.props.onChange(this.props.id, !this.state.checked);\r\n this.setState({\r\n checked: !this.state.checked\r\n });\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\r\nimport Settings from \"../modules/settingsPanel\";\r\nimport BDV2 from \"../modules/v2\";\r\nimport DataStore from \"../modules/dataStore\";\r\nimport DOM from \"../modules/domtools\";\r\nimport Utils from \"../modules/utils\"\r\n\r\nimport Checkbox from \"./checkbox\";\r\n\r\nexport default class V2C_CssEditorDetached extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n const self = this;\r\n self.onClick = self.onClick.bind(self);\r\n self.updateCss = self.updateCss.bind(self);\r\n self.saveCss = self.saveCss.bind(self);\r\n self.onChange = self.onChange.bind(self);\r\n }\r\n\r\n componentDidMount() {\r\n DOM.addClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\r\n BDV2.editorDetached = true;\r\n // this.updateLineCount();\r\n this.editor = ace.edit(\"bd-customcss-editor-detached\");\r\n this.editor.setTheme(\"ace/theme/discord\");\r\n this.editor.session.setMode(\"ace/mode/css\");\r\n this.editor.setShowPrintMargin(false);\r\n this.editor.setFontSize(14);\r\n this.editor.on(\"change\", () => {\r\n if (!settingsCookie[\"bda-css-0\"]) return;\r\n this.saveCss();\r\n this.updateCss();\r\n });\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n DOM.removeClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\r\n BDV2.editorDetached = false;\r\n this.editor.destroy();\r\n }\r\n\r\n updateLineCount() {\r\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\r\n if (lineCount == this.props.lines) return;\r\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\r\n this.props.lines = lineCount;\r\n }\r\n\r\n get options() {\r\n return {\r\n lineNumbers: true,\r\n mode: \"css\",\r\n indentUnit: 4,\r\n theme: \"material\",\r\n scrollbarStyle: \"simple\"\r\n };\r\n }\r\n\r\n get css() {\r\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\r\n let ccss = \"\";\r\n if (_ccss && _ccss !== \"\") {\r\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\r\n }\r\n return ccss;\r\n }\r\n\r\n get root() {\r\n const _root = DOM.query(\"#bd-customcss-detach-container\");\r\n if (!_root) {\r\n if (!this.injectRoot()) return null;\r\n return this.detachedRoot;\r\n }\r\n return _root;\r\n }\r\n\r\n injectRoot() {\r\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\r\n if (!app) return false;\r\n DOM.insertAfter(DOM.createElement(`
`), app);\r\n return true;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: \"bd-detached-css-editor\", id: \"bd-customcss-detach-editor\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {id: \"bd-customcss-innerpane\"},\r\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\r\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor-detached\", className: \"editor\", ref: \"editor\"}, self.css)\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {id: \"bd-customcss-attach-controls\"},\r\n BDV2.react.createElement(\r\n \"ul\",\r\n {className: \"checkbox-group\"},\r\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: self.onChange, checked: settingsCookie[\"bda-css-0\"]})\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {id: \"bd-customcss-detach-controls-button\"},\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"update\");\r\n }},\r\n \"Update\"\r\n ),\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"save\");\r\n }},\r\n \"Save\"\r\n ),\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"attach\");\r\n }},\r\n \"Attach\"\r\n ),\r\n BDV2.react.createElement(\r\n \"span\",\r\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\r\n \"Unsaved changes are lost on attach\"\r\n )\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n onChange(id, checked) {\r\n switch (id) {\r\n case \"live-update\":\r\n settingsCookie[\"bda-css-0\"] = checked;\r\n Settings.saveSettings();\r\n break;\r\n }\r\n }\r\n\r\n onClick(id) {\r\n const self = this;\r\n switch (id) {\r\n case \"attach\":\r\n if (DOM.query(\"#editor-detached\")) self.props.attach();\r\n BDV2.reactDom.unmountComponentAtNode(self.root);\r\n self.root.remove();\r\n break;\r\n case \"update\":\r\n self.updateCss();\r\n break;\r\n case \"save\":\r\n self.saveCss();\r\n break;\r\n }\r\n }\r\n\r\n updateCss() {\r\n DOM.removeStyle(\"customcss\");\r\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\r\n }\r\n\r\n saveCss() {\r\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\r\nimport Settings from \"../modules/settingsPanel\";\r\nimport BDV2 from \"../modules/v2\";\r\nimport DataStore from \"../modules/dataStore\";\r\nimport DOM from \"../modules/domtools\";\r\nimport Utils from \"../modules/utils\"\r\n\r\nimport SettingsTitle from \"./settingsTitle\";\r\nimport Checkbox from \"./checkbox\";\r\nimport V2C_CssEditorDetached from \"./cssEditorDetached\";\r\n\r\nexport default class V2C_CssEditor extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n const self = this;\r\n self.props.lines = 0;\r\n self.setInitialState();\r\n self.attach = self.attach.bind(self);\r\n self.detachedEditor = BDV2.react.createElement(V2C_CssEditorDetached, {attach: self.attach});\r\n self.onClick = self.onClick.bind(self);\r\n self.updateCss = self.updateCss.bind(self);\r\n self.saveCss = self.saveCss.bind(self);\r\n self.detach = self.detach.bind(self);\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n detached: this.props.detached || BDV2.editorDetached\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n // this.updateLineCount();\r\n this.editor = ace.edit(\"bd-customcss-editor\");\r\n this.editor.setTheme(\"ace/theme/discord\");\r\n this.editor.session.setMode(\"ace/mode/css\");\r\n this.editor.setShowPrintMargin(false);\r\n this.editor.setFontSize(14);\r\n this.editor.on(\"change\", () => {\r\n if (!settingsCookie[\"bda-css-0\"]) return;\r\n this.saveCss();\r\n this.updateCss();\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.editor.destroy();\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const self = this;\r\n if (prevState.detached && !self.state.detached) {\r\n BDV2.reactDom.unmountComponentAtNode(self.detachedRoot);\r\n }\r\n }\r\n\r\n codeMirror() {\r\n }\r\n\r\n get options() {\r\n return {\r\n lineNumbers: true,\r\n mode: \"css\",\r\n indentUnit: 4,\r\n theme: \"material\",\r\n scrollbarStyle: \"simple\"\r\n };\r\n }\r\n\r\n get css() {\r\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\r\n let ccss = \"\";\r\n if (_ccss && _ccss !== \"\") {\r\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\r\n }\r\n return ccss;\r\n }\r\n\r\n updateLineCount() {\r\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\r\n if (lineCount == this.props.lines) return;\r\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\r\n this.props.lines = lineCount;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n\r\n const {detached} = self.state;\r\n return [\r\n detached && BDV2.react.createElement(\r\n \"div\",\r\n {id: \"editor-detached\"},\r\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\r\n BDV2.react.createElement(\r\n \"h3\",\r\n null,\r\n \"Editor Detached\"\r\n ),\r\n BDV2.react.createElement(\r\n \"button\",\r\n {className: \"btn btn-primary\", onClick: () => {\r\n self.attach();\r\n }},\r\n \"Attach\"\r\n )\r\n ),\r\n !detached && BDV2.react.createElement(\r\n \"div\",\r\n null,\r\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\r\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\r\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor\", className: \"editor\", ref: \"editor\"}, self.css)\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {id: \"bd-customcss-attach-controls\"},\r\n BDV2.react.createElement(\r\n \"ul\",\r\n {className: \"checkbox-group\"},\r\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: this.onChange, checked: settingsCookie[\"bda-css-0\"]})\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {id: \"bd-customcss-detach-controls-button\"},\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"update\");\r\n }},\r\n \"Update\"\r\n ),\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"save\");\r\n }},\r\n \"Save\"\r\n ),\r\n BDV2.react.createElement(\r\n \"button\",\r\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\r\n self.onClick(\"detach\");\r\n }},\r\n \"Detach\"\r\n ),\r\n BDV2.react.createElement(\r\n \"span\",\r\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\r\n \"Unsaved changes are lost on detach\"\r\n ),\r\n BDV2.react.createElement(\"div\", {className: \"help-text\"},\r\n \"Press \",\r\n BDV2.react.createElement(\"code\", {className: \"inline\"}, \"ctrl\"),\r\n \"+\",\r\n BDV2.react.createElement(\"span\", {className: \"inline\"}, \",\"),\r\n \" with the editor focused to access the editor's settings.\"\r\n )\r\n )\r\n )\r\n )\r\n ]\r\n }\r\n\r\n onClick(arg) {\r\n const self = this;\r\n switch (arg) {\r\n case \"update\":\r\n self.updateCss();\r\n break;\r\n case \"save\":\r\n self.saveCss();\r\n break;\r\n case \"detach\":\r\n self.detach();\r\n break;\r\n }\r\n }\r\n\r\n onChange(id, checked) {\r\n switch (id) {\r\n case \"live-update\":\r\n settingsCookie[\"bda-css-0\"] = checked;\r\n Settings.saveSettings();\r\n break;\r\n }\r\n }\r\n\r\n updateCss() {\r\n DOM.removeStyle(\"customcss\");\r\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\r\n }\r\n\r\n saveCss() {\r\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\r\n }\r\n\r\n detach() {\r\n const self = this;\r\n self.setState({\r\n detached: true\r\n });\r\n const droot = self.detachedRoot;\r\n if (!droot) {\r\n console.log(\"FAILED TO INJECT ROOT: .app\");\r\n return;\r\n }\r\n BDV2.reactDom.render(self.detachedEditor, droot);\r\n }\r\n\r\n get detachedRoot() {\r\n const _root = DOM.query(\"#bd-customcss-detach-container\");\r\n if (!_root) {\r\n if (!this.injectDetachedRoot()) return null;\r\n return this.detachedRoot;\r\n }\r\n return _root;\r\n }\r\n\r\n injectDetachedRoot() {\r\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\r\n if (!app) return false;\r\n DOM.insertAfter(DOM.createElement(`
`), app);\r\n return true;\r\n }\r\n\r\n attach() {\r\n const self = this;\r\n self.setState({\r\n detached: false\r\n });\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class BDErrorBoundary extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {hasError: false};\r\n }\r\n\r\n componentDidCatch() {\r\n this.setState({hasError: true});\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) return BDV2.react.createElement(\"div\", {className: \"react-error\"}, \"Component Error\"); \r\n return this.props.children; \r\n }\r\n}\r\n\r\nconst originalRender = BDErrorBoundary.prototype.render;\r\nObject.defineProperty(BDErrorBoundary.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n}); ","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ContentColumn extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n static get displayName() {return \"ContentColumn\";}\r\n\r\n render() {\r\n //let contentModule = BDModules.get(e => e.contentColumn)[0]\r\n let title = this.props.title ? BDV2.react.createElement(\"h2\", {className: \"ui-form-title h2 margin-reset margin-bottom-20\"}, this.props.title) : null\r\n return [\r\n title,\r\n this.props.children\r\n ]\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: contentModule.contentColumn + \" \"+contentModule.contentColumnDefault+\" content-column default\", style: {padding: \"60px 40px 0px\"}},\r\n title,\r\n this.props.children\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ReloadIcon extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"svg\", {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n viewBox: \"0 0 24 24\",\r\n fill: \"#dcddde\",\r\n className: \"bd-reload \" + this.props.className,\r\n onClick: this.props.onClick,\r\n style: {width: this.props.size || \"24px\", height: this.props.size || \"24px\"}\r\n },\r\n BDV2.react.createElement(\"path\", {d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"}),\r\n BDV2.react.createElement(\"path\", {fill: \"none\", d: \"M0 0h24v24H0z\"})\r\n );\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class Edit extends React.Component {\r\n render() {\r\n const size = this.props.size || \"24px\";\r\n return \r\n \r\n \r\n ;\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class Delete extends React.Component {\r\n render() {\r\n const size = this.props.size || \"24px\";\r\n return \r\n \r\n \r\n ;\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"../modules/v2\";\r\nimport Utils from \"../modules/utils\";\r\nimport DOM from \"../modules/domtools\";\r\n\r\nimport XSvg from \"./xSvg\";\r\nimport ReloadIcon from \"./reloadIcon\";\r\nimport EditIcon from \"./icons/edit\";\r\nimport DeleteIcon from \"./icons/delete\";\r\nimport Switch from \"./components/switch\";\r\nimport TooltipWrap from \"./tooltipWrap\";\r\nimport { processFile } from \"../modules/pluginCertifier\";\r\nimport contentManager from \"../modules/contentManager\";\r\nimport { resolve } from \"path\";\r\n\r\nconst React = BDV2.React;\r\nconst anchorClasses = BDV2.anchorClasses;\r\n\r\nexport default class V2C_PluginCard extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.onChange = this.onChange.bind(this);\r\n this.showSettings = this.showSettings.bind(this);\r\n this.setInitialState();\r\n this.hasSettings = this.props.addon.plugin && typeof(this.props.addon.plugin.getSettingsPanel) === \"function\";\r\n this.settingsPanel = \"\";\r\n\r\n this.edit = this.edit.bind(this);\r\n this.delete = this.delete.bind(this);\r\n this.reload = this.reload.bind(this);\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n checked: this.props.enabled,\r\n settings: false,\r\n reloads: 0,\r\n trusted: false\r\n };\r\n }\r\n\r\n showSettings() {\r\n if (!this.hasSettings) return;\r\n this.setState({settings: true});\r\n }\r\n\r\n closeSettings() {\r\n this.panelRef.current.innerHTML = \"\";\r\n this.setState({settingsOpen: false});\r\n }\r\n\r\n componentDidUpdate() {\r\n if (!this.state.settings) return;\r\n if (typeof this.settingsPanel === \"object\") {\r\n this.refs.settingspanel.appendChild(this.settingsPanel);\r\n }\r\n\r\n if (!settingsCookie[\"fork-ps-3\"]) return;\r\n setImmediate(() => {\r\n const isHidden = (container, element) => {\r\n if(!container){\r\n console.error(new Error(`Container is undefined.`))\r\n return false\r\n }\r\n const cTop = container.scrollTop;\r\n const cBottom = cTop + container.clientHeight;\r\n const eTop = element.offsetTop;\r\n const eBottom = eTop + element.clientHeight;\r\n return (eTop < cTop || eBottom > cBottom);\r\n };\r\n\r\n const thisNode = this.refs.cardNode;\r\n const container = thisNode.closest(\"div[class*=\\\"contentRegionScroller-\\\"]\")\r\n if (!isHidden(container, thisNode)) return;\r\n const thisNodeOffset = DOM.offset(thisNode);\r\n const containerOffset = DOM.offset(container);\r\n const original = container.scrollTop;\r\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\r\n DOM.animate({\r\n duration: 300,\r\n update: function(progress) {\r\n if (endPoint > original) container.scrollTop = original + (progress * (endPoint - original));\r\n else container.scrollTop = original - (progress * (original - endPoint));\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n getString(value) {\r\n if (!value) return \"???\";\r\n return typeof value == \"string\" ? value : value.toString();\r\n }\r\n\r\n get settingsComponent() {\r\n try { this.settingsPanel = this.props.addon.plugin.getSettingsPanel(); }\r\n catch (err) { Utils.err(\"Plugins\", \"Unable to get settings panel for \" + this.name + \".\", err); }\r\n\r\n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-open ui-switch-item\", ref: \"cardNode\"},\r\n BDV2.react.createElement(\"div\", {style: {\"float\": \"right\", \"cursor\": \"pointer\"}, onClick: () => {\r\n this.refs.settingspanel.innerHTML = \"\";\r\n this.setState({settings: false});\r\n }},\r\n BDV2.react.createElement(XSvg, null)\r\n ),\r\n typeof this.settingsPanel === \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\"}),\r\n typeof this.settingsPanel !== \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\", dangerouslySetInnerHTML: {__html: this.settingsPanel}})\r\n );\r\n }\r\n\r\n buildTitle(name, version, author) {\r\n const title = \"{{name}} v{{version}} by {{author}}\".split(/({{[A-Za-z]+}})/);\r\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\r\n if (nameIndex) title[nameIndex] = React.createElement(\"span\", {className: \"name bda-name\"}, name);\r\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\r\n if (nameIndex) title[versionIndex] = React.createElement(\"span\", {className: \"version bda-version\"}, version);\r\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\r\n if (nameIndex) {\r\n const props = {className: \"author bda-author\"};\r\n if (author.link || author.id) {\r\n props.className += ` ${anchorClasses.anchor} ${anchorClasses.anchorUnderlineOnHover}`;\r\n props.target = \"_blank\";\r\n\r\n if (author.link) props.href = author.link;\r\n if (author.id) props.onClick = () => {BDV2.LayerStack.popLayer(); BDV2.openDM(author.id);};\r\n }\r\n title[authorIndex] = React.createElement(author.link || author.id ? \"a\" : \"span\", props, author.name);\r\n }\r\n return title.flat();\r\n }\r\n\r\n makeLink(title, url) {\r\n const props = {className: \"bda-link bda-link-website\", target: \"_blank\"};\r\n if (typeof(url) == \"string\") props.href = url;\r\n if (typeof(url) == \"function\") props.onClick = (event) => {event.preventDefault(); event.stopPropagation(); url();};\r\n return BDV2.react.createElement(\"a\", props, title);\r\n }\r\n\r\n makeButton(title, children, action) {\r\n return \r\n
{children}
\r\n
;\r\n }\r\n\r\n componentWillUnmount(){\r\n this.unmounted = true\r\n }\r\n\r\n get links() {\r\n const links = [];\r\n const addon = this.props.addon;\r\n if (addon.website) links.push(this.makeLink(\"Website\", addon.website));\r\n if (addon.source) links.push(this.makeLink(\"Source\", addon.source));\r\n if (addon.invite) {\r\n links.push(this.makeLink(\"Support Server\", () => {\r\n const tester = /\\.gg\\/(.*)$/;\r\n let code = addon.invite;\r\n if (tester.test(code)) code = code.match(tester)[1];\r\n BDV2.LayerStack.popLayer();\r\n BDV2.InviteActions.acceptInviteAndTransitionToInviteChannel(code);\r\n }));\r\n }\r\n if (addon.donate) links.push(this.makeLink(\"Donate\", addon.donate));\r\n if (addon.patreon) links.push(this.makeLink(\"Patreon\", addon.patreon));\r\n return links;\r\n }\r\n\r\n get footer() {\r\n const links = this.links;\r\n return (links.length || this.hasSettings) && BDV2.react.createElement(\"div\", {className: \"bd-card-footer bda-footer\"},\r\n BDV2.react.createElement(\"span\", {className: \"bd-addon-links bda-links\"},\r\n ...(links.map((element, index) => index < links.length - 1 ? [element, \" | \"] : element).flat())\r\n ),\r\n this.hasSettings && BDV2.react.createElement(\"button\", {onClick: this.showSettings, className: \"bd-button bda-settings-button\", disabled: !this.state.checked}, \"Settings\")\r\n );\r\n }\r\n\r\n onChange() {\r\n this.props.toggle && this.props.toggle(this.name);\r\n this.setState({checked: !this.state.checked});\r\n }\r\n\r\n edit() {this.props.edit(this.name);}\r\n delete() {this.props.remove(this.name);}\r\n reload() {this.props.reload(this.name);}\r\n\r\n get name() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getName() : this.props.addon.name);}\r\n get author() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getAuthor() : this.props.addon.author);}\r\n get description() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getDescription() : this.props.addon.description);}\r\n get version() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getVersion() : this.props.addon.version);}\r\n\r\n render() {\r\n if (this.state.settings) return this.settingsComponent;\r\n const {authorId, authorLink} = this.props.addon;\r\n\r\n const style = {}\r\n if(settingsCookie[\"fork-ps-6\"]){\r\n if(!this.isScanning){\r\n this.isScanning = true\r\n processFile(resolve(this.props.addon.filename.endsWith(\".plugin.js\") ? contentManager.pluginsFolder : contentManager.themesFolder, this.props.addon.filename), (result) => {\r\n if(this.unmounted)return\r\n \r\n this.setState({\r\n isTrusted: result.suspect ? \"suspect\" : true\r\n })\r\n }, () => {})\r\n }else{\r\n if(this.state.isTrusted === true){\r\n style.borderColor = \"#4087ed\"\r\n }\r\n if(this.state.isTrusted === \"suspect\"){\r\n style.borderColor = \"rgb(240, 71, 71)\"\r\n }\r\n }\r\n }\r\n \r\n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-closed ui-switch-item\", style},\r\n BDV2.react.createElement(\"div\", {className: \"bd-addon-header bda-header\"},\r\n BDV2.react.createElement(\"div\", {className: \"bd-card-title bda-header-title\"}, this.buildTitle(this.name, this.version, {name: this.author, id: authorId, link: authorLink})),\r\n BDV2.react.createElement(\"div\", {className: \"bd-addon-controls bda-controls\"},\r\n this.props.edit && this.makeButton(\"Edit\", , this.edit),\r\n this.props.remove && this.makeButton(\"Delete\", , this.delete),\r\n this.props.reload && this.makeButton(\"Reload\", , this.reload),\r\n React.createElement(Switch, {onChange: this.onChange, checked: this.state.checked})\r\n )\r\n ),\r\n BDV2.react.createElement(\"div\", {className: \"bd-scroller-wrap bda-description-wrap scroller-wrap fade\"},\r\n BDV2.react.createElement(\"div\", {className: \"bd-scroller bd-addon-description bda-description scroller\"}, this.description)\r\n ),\r\n this.footer\r\n );\r\n }\r\n}\r\n\r\nconst originalRender = V2C_PluginCard.prototype.render;\r\nObject.defineProperty(V2C_PluginCard.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n});","import BDV2 from \"../../modules/v2\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class DownArrow extends React.Component {\r\n render() {\r\n const size = this.props.size || \"16px\";\r\n return \r\n \r\n ;\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\nimport Arrow from \"../icons/downarrow\";\r\n\r\nconst React = BDV2.React;\r\n\r\n\r\nexport default class Select extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {open: false, value: this.props.value || this.props.options[0].value};\r\n this.dropdown = React.createRef();\r\n this.onChange = this.onChange.bind(this);\r\n this.showMenu = this.showMenu.bind(this);\r\n this.hideMenu = this.hideMenu.bind(this);\r\n }\r\n\r\n showMenu(event) {\r\n event.preventDefault();\r\n this.setState({open: true}, () => {\r\n document.addEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n hideMenu() {\r\n this.setState({open: false}, () => {\r\n document.removeEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n onChange(value) {\r\n this.setState({value});\r\n if (this.props.onChange) this.props.onChange(value);\r\n }\r\n\r\n get selected() {return this.props.options.find(o => o.value == this.state.value);}\r\n\r\n get options() {\r\n const selected = this.selected;\r\n return
\r\n {this.props.options.map(opt => \r\n
{opt.label}
\r\n )}\r\n
;\r\n }\r\n\r\n render() {\r\n const style = this.props.style == \"transparent\" ? \" bd-select-transparent\" : \"\";\r\n const isOpen = this.state.open ? \" menu-open\" : \"\";\r\n return
\r\n
{this.selected.label}
\r\n \r\n {this.state.open && this.options}\r\n
;\r\n }\r\n}\r\n\r\n// return
\r\n// \r\n//
\r\n//
\r\n//
{this.selected.label}
\r\n// \r\n//
\r\n//
\r\n// {this.state.open && this.options}\r\n//
;","import BDV2 from \"../../modules/v2\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class Search extends React.Component {\r\n render() {\r\n const size = this.props.size || \"16px\";\r\n return \r\n \r\n \r\n ;\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\nimport SearchIcon from \"../icons/search\";\r\n\r\nconst React = BDV2.React;\r\n\r\nexport default class Search extends React.Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n focused: false\r\n }\r\n }\r\n render() {\r\n const className = [\"bd-search-wrapper\"]\r\n if(this.state.focused)className.push(\"focused\")\r\n return
\r\n {\r\n this.setState({focused: true})\r\n }} onBlur={() => {\r\n this.setState({focused: false})\r\n }}/>\r\n \r\n
;\r\n }\r\n}","import ErrorBoundary from \"./errorBoundary\";\r\nimport ContentColumn from \"./contentColumn\";\r\nimport ReloadIcon from \"./reloadIcon\";\r\nimport AddonCard from \"./addoncard\";\r\nimport Dropdown from \"./components/dropdown\";\r\nimport Search from \"./components/search\";\r\n\r\nimport {settingsCookie, pluginCookie, themeCookie, bdplugins, bdthemes} from \"../0globals\";\r\nimport ContentManager from \"../modules/contentManager\";\r\nimport BDV2 from \"../modules/v2\";\r\nimport pluginModule from \"../modules/pluginModule\";\r\nimport themeModule from \"../modules/themeModule\";\r\nimport WebpackModules from \"../modules/webpackModules\";\r\nimport BdApi from \"../modules/bdApi\";\r\nimport Utils from \"../modules/utils\";\r\nimport TooltipWrap from \"./tooltipWrap\";\r\nimport bdEvents from \"../modules/bdEvents\";\r\nimport EmulatedTooltip from \"./tooltip\";\r\n\r\nconst Tooltip = WebpackModules.findByDisplayName(\"Tooltip\");\r\n\r\nconst React = BDV2.react;\r\n\r\nexport default class CardList extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {sort: \"name\", ascending: true, query: \"\"};\r\n this.isPlugins = this.props.type == \"plugins\";\r\n this.cookie = this.isPlugins ? pluginCookie : themeCookie;\r\n this.manager = this.isPlugins ? pluginModule : themeModule;\r\n\r\n this.sort = this.sort.bind(this);\r\n this.reverse = this.reverse.bind(this);\r\n this.search = this.search.bind(this);\r\n\r\n this.onAddonChanges = function(){\r\n this.forceUpdate()\r\n }\r\n this.onAddonChanges = this.onAddonChanges.bind(this)\r\n }\r\n\r\n componentDidMount(){\r\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\r\n bdEvents.on(`${type}loaded`, this.onAddonChanges)\r\n bdEvents.on(`${type}unloaded`, this.onAddonChanges)\r\n bdEvents.on(`${type}reloaded`, this.onAddonChanges)\r\n }\r\n\r\n componentWillUnmount(){\r\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\r\n bdEvents.off(`${type}loaded`, this.onAddonChanges)\r\n bdEvents.off(`${type}unloaded`, this.onAddonChanges)\r\n bdEvents.off(`${type}reloaded`, this.onAddonChanges)\r\n }\r\n\r\n openFolder() {\r\n const shell = require(\"electron\").shell;\r\n const open = shell.openPath || shell.openItem;\r\n open(this.isPlugins ? ContentManager.pluginsFolder : ContentManager.themesFolder);\r\n }\r\n\r\n edit(name) {\r\n console.log(name);\r\n this.manager.edit(name);\r\n }\r\n\r\n async delete(name) {\r\n const shouldDelete = await this.confirmDelete(name);\r\n if (!shouldDelete) return;\r\n this.manager.delete(name);\r\n }\r\n\r\n confirmDelete(name) {\r\n return new Promise(resolve => {\r\n BdApi.showConfirmationModal(\"Are You Sure?\", `Are you sure you want to delete ${name}?`, {\r\n danger: true,\r\n confirmText: \"Delete\",\r\n onConfirm: () => {resolve(true);},\r\n onCancel: () => {resolve(false);}\r\n });\r\n });\r\n }\r\n\r\n get sortOptions() {\r\n return [\r\n {label: \"Name\", value: \"name\"},\r\n {label: \"Author\", value: \"author\"},\r\n {label: \"Version\", value: \"version\"},\r\n {label: \"Recently Added\", value: \"added\"},\r\n {label: \"Last Modified\", value: \"modified\"},\r\n {label: \"File Size\", value: \"size\"},\r\n ];\r\n }\r\n\r\n get directions() {\r\n return [\r\n {label: \"Ascending\", value: true},\r\n {label: \"Descending\", value: false}\r\n ];\r\n }\r\n\r\n reverse(value) {\r\n this.setState({ascending: value});\r\n }\r\n\r\n sort(value) {\r\n this.setState({sort: value});\r\n }\r\n\r\n search(event) {\r\n this.setState({query: event.target.value.toLocaleLowerCase()});\r\n }\r\n\r\n getProps(addon) {\r\n return {\r\n key: this.getName(addon),\r\n enabled: this.cookie[this.getName(addon)],\r\n toggle: this.manager.toggle.bind(this.manager),\r\n edit: settingsCookie[\"fork-ps-7\"] ? this.edit.bind(this) : null,\r\n remove: this.delete.bind(this),\r\n addon: addon,\r\n hash: addon.hash\r\n };\r\n }\r\n\r\n getString(value) {\r\n if (!value) return \"???\";\r\n return typeof value == \"string\" ? value : value.toString();\r\n }\r\n\r\n get list(){\r\n return this.props.type === \"plugins\" ? Object.values(bdplugins) : Object.values(bdthemes);\r\n }\r\n\r\n getAddons() {\r\n const sortedAddons = this.list.sort((a, b) => {\r\n const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);\r\n const first = a.plugin && a.plugin[`get${cap}`] ? this.getString(a.plugin[`get${cap}`]()) : this.getString(a[this.state.sort]);\r\n const second = b.plugin && b.plugin[`get${cap}`] ? this.getString(b.plugin[`get${cap}`]()) : this.getString(b[this.state.sort]);\r\n if (typeof(first) == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\r\n if (first > second) return 1;\r\n if (second > first) return -1;\r\n return 0;\r\n });\r\n if (!this.state.ascending) sortedAddons.reverse();\r\n const rendered = [];\r\n for (let a = 0; a < sortedAddons.length; a++) {\r\n const addon = sortedAddons[a];\r\n if (this.state.query) {\r\n let matches = null;\r\n const name = this.getName(addon);\r\n const author = this.getAuthor(addon);\r\n const description = this.getDescription(addon);\r\n const version = this.getVersion(addon);\r\n if (name) matches = name.toLocaleLowerCase().includes(this.state.query);\r\n if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);\r\n if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);\r\n if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);\r\n if (!matches) continue;\r\n }\r\n const props = this.getProps(addon);\r\n rendered.push();\r\n }\r\n return rendered;\r\n }\r\n\r\n getName(addon) {return this.getString(addon.plugin ? addon.plugin.getName() : addon.name);}\r\n getAuthor(addon) {return this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);}\r\n getDescription(addon) {return this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);}\r\n getVersion(addon) {return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);}\r\n\r\n renderCheckUpdates(){\r\n if(!window.ZeresPluginLibrary)return null\r\n if(!window.PluginUpdates)return null\r\n if(typeof window.PluginUpdates.checkAll !== \"function\")return null\r\n if(!this.isPlugins)return null\r\n\r\n let tooltipIsShowing = false\r\n let tooltip\r\n return \r\n {\r\n tooltipIsShowing = false\r\n tooltip.hide()\r\n }}>\r\n {\r\n try{\r\n Utils.showToast(\"Plugin update check in progress.\", {type: \"info\"})\r\n window.PluginUpdates.checkAll()\r\n .then(() => {\r\n Utils.showToast(\"Plugin update check complete.\", {type: \"success\"})\r\n }).catch(err => {\r\n console.error(err)\r\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\r\n })\r\n }catch(e){\r\n console.error(e)\r\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\r\n }\r\n }} wrapper={false} disabled={false} onRightClick={() => {\r\n if(!this.refs.checkUpdateButton)return\r\n if (!window.PluginUpdates || !window.PluginUpdates.plugins) return;\r\n if(tooltipIsShowing)return\r\n tooltip = new EmulatedTooltip(this.refs.checkUpdateButton.refs.original.refs.button, Object.values(window.PluginUpdates.plugins).map(p => p.name).join(\", \"), {\r\n side: \"bottom\",\r\n attachEvents: false\r\n })\r\n tooltip.show()\r\n tooltipIsShowing = true\r\n }}>\r\n Check for Updates\r\n \r\n \r\n \r\n }\r\n\r\n render() {\r\n const refreshIcon = \r\n {(props) => \r\n {\r\n if (this.isPlugins) pluginModule.updatePluginList();\r\n else themeModule.updateThemeList();\r\n this.forceUpdate();\r\n }} />\r\n };\r\n const addonCards = this.getAddons();\r\n\r\n return \r\n \r\n Open {this.isPlugins ? \"Plugin\" : \"Theme\"} Folder\r\n \r\n {this.renderCheckUpdates()}\r\n {!settingsCookie[\"fork-ps-5\"] && refreshIcon}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
{addonCards}
\r\n
\r\n }\r\n}\r\n\r\nconst originalRender = CardList.prototype.render;\r\nObject.defineProperty(CardList.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n});","import {settingsRPC, defaultRPC} from \"../0globals\";\r\n\r\nconst dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default\r\nconst ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes\r\n\r\nconst socketId = \"lightcord-spoof-socket\"\r\nconst pid = process.pid\r\n\r\nexport default new class CustomRichPresence {\r\n constructor(){\r\n this.enabled = false\r\n\r\n this.game = settingsRPC\r\n }\r\n \r\n get formatedGame(){\r\n if(!this.game)return null\r\n if(this.enabled === false)return null\r\n let game = {\r\n name: this.game.name || defaultRPC.name,\r\n application_id: this.game.application_id || defaultRPC.application_id,\r\n details: this.game.details || undefined,\r\n state: this.game.state || undefined,\r\n timestamps: this.game[\"timestamps.start\"] ? {\r\n start: this.game[\"timestamps.start\"]\r\n } : undefined,\r\n assets: this.game[\"assets.large\"] ? {\r\n large_image: this.game[\"assets.large\"],\r\n small_image: this.game[\"assets.small\"] || undefined\r\n } : undefined\r\n }\r\n return game\r\n }\r\n\r\n sendGame(){\r\n dispatcher.dispatch({\r\n type: ActionTypes.LOCAL_ACTIVITY_UPDATE,\r\n socketId,\r\n pid,\r\n activity: this.formatedGame\r\n }) \r\n }\r\n\r\n enable() {\r\n if(this.enabled)return\r\n this.enabled = true\r\n console.log(\"Enabling custom RichPresence\")\r\n\r\n this.set(settingsRPC || Object.create(defaultRPC))\r\n\r\n this.sendGame()\r\n }\r\n\r\n disable() {\r\n if(!this.enabled)return\r\n this.enabled = false\r\n console.log(\"Disabling custom RichPresence\")\r\n\r\n this.sendGame()\r\n }\r\n\r\n async fetchAssets(applicationId){\r\n let assets = await BDModules.get(e => e.getAssets)[0].getAssets(applicationId)\r\n if(assets.undefined && typeof assets.undefined === \"number\"){\r\n throw new Error(\"Unknown Application\")\r\n }\r\n return assets\r\n }\r\n\r\n set(activity){\r\n this.game = activity\r\n\r\n this.sendGame()\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\nimport V2C_SettingsTitle from \"./settingsTitle\";\r\nimport V2C_SettingsGroup from \"./settingsGroup\";\r\nimport dataStore from \"../modules/dataStore\";\r\nimport { defaultRPC, settingsRPC } from \"../0globals\";\r\nimport CustomRichPresence from \"../modules/CustomRichPresence\"\r\nimport { remote } from \"electron\";\r\nimport MarginTop from \"./margintop\";\r\nimport Utils from \"../modules/utils\";\r\n\r\nconst React = BDV2.React;\r\n\r\nlet V2C_PresenceSettingsModules\r\nexport default class V2C_PresenceSettings extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n data: dataStore.getSettingGroup(\"rpc\") || defaultRPC,\r\n assets: []\r\n }\r\n\r\n this.preview = null\r\n this.isfetching = false\r\n if(this.state.data.application_id){\r\n this.fetchAssets()\r\n }\r\n\r\n this.assetComponents = new Set()\r\n }\r\n\r\n updateWhenFetched(comp){\r\n this.assetComponents.add(comp)\r\n }\r\n\r\n /**\r\n * \r\n * @param {InputText} setting \r\n */\r\n onChange(setting, value){\r\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id)\r\n\r\n this.setState({\r\n data: Object.assign(settingsRPC, this.state.data, {\r\n [defaultSetting.id]: !!value ? value : null\r\n }),\r\n assets: this.state.assets\r\n })\r\n if(setting.props.id === \"application_id\"){\r\n this.fetchAssets()\r\n }\r\n\r\n dataStore.setSettingGroup(\"rpc\", settingsRPC);\r\n this.preview.forceUpdate()\r\n CustomRichPresence.set(settingsRPC)\r\n }\r\n\r\n fetchAssets(){\r\n if(this.isfetching === true){\r\n let app = this.state.data.application_id\r\n setTimeout(() => {\r\n if(this.state.data.application_id !== app){\r\n return\r\n }\r\n this.fetchAssets()\r\n }, 5000);\r\n }\r\n if(!this.state.data.application_id){\r\n this.setState({\r\n data: this.state.data,\r\n assets: []\r\n })\r\n this.forceUpdate()\r\n this.assetComponents.forEach(e => e.forceUpdate())\r\n return\r\n }\r\n this.isfetching = true\r\n CustomRichPresence.fetchAssets(this.state.data.application_id)\r\n .then(assets => {\r\n this.isfetching = false\r\n this.setState({\r\n data: this.state.data,\r\n assets: Object.keys(assets).map(k => {\r\n let asset = assets[k]\r\n return {\r\n id: asset.id,\r\n name: asset.name,\r\n type: asset.type\r\n }\r\n })\r\n })\r\n this.forceUpdate()\r\n this.assetComponents.forEach(e => e.forceUpdate())\r\n }).catch(() => {\r\n this.isfetching = false\r\n this.setState({\r\n data: this.state.data,\r\n assets: []\r\n })\r\n this.forceUpdate()\r\n this.assetComponents.forEach(e => e.forceUpdate())\r\n })\r\n }\r\n\r\n updatePreview(data){\r\n this.setState({\r\n data\r\n })\r\n }\r\n\r\n get modules(){\r\n return V2C_PresenceSettingsModules || (V2C_PresenceSettingsModules = [\r\n BDModules.get(e => e.marginBottom20)[0]\r\n ])\r\n }\r\n\r\n render() {\r\n let [\r\n marginModule\r\n ] = this.modules\r\n return [\r\n ,\r\n ,\r\n ,\r\n
\r\n {/** options */}\r\n {this.optionsComponents}\r\n
,\r\n
\r\n \r\n \r\n {/** preview */}\r\n \r\n
,\r\n
,\r\n ,\r\n \r\n ]\r\n }\r\n\r\n get optionsComponents(){\r\n return this._optionsComponents || (this._optionsComponents = RPCProps.map(e => {\r\n if(e.type === \"text\"){\r\n return \r\n }else if(e.type === \"number\"){\r\n let array = []/*\r\n if(e.id === \"timestamps.start\"){\r\n array.unshift( {\r\n DiscordNative.clipboard.copy(Date.now()+\"\")\r\n }} />)\r\n }*/\r\n return array\r\n }else if(e.type === \"choice\"){\r\n if([\"assets.small\", \"assets.large\"].includes(e.id)){\r\n return {\r\n return {\r\n value: \"asset-\"+e.id,\r\n label: e.name\r\n }\r\n }))}/>\r\n }else{\r\n return \"Unknown choice.\"\r\n }\r\n }\r\n }))\r\n }\r\n}\r\nconst RPCProps = [\r\n {\r\n title: \"Application ID\",\r\n id: \"application_id\",\r\n type: \"number\",\r\n placeholder: \"711416957718757418\"\r\n },\r\n {\r\n title: \"Name\",\r\n id: \"name\",\r\n type: \"text\",\r\n placeholder: \"Lightcord\"\r\n },\r\n {\r\n title: \"Details\",\r\n id: \"details\",\r\n type: \"text\",\r\n placeholder: \"Browsing Discord\"\r\n },\r\n {\r\n title: \"State\",\r\n id: \"state\",\r\n type: \"text\",\r\n placeholder: \"Lightcord Client\"\r\n },\r\n {\r\n title: \"Timestamp Start\",\r\n id: \"timestamps.start\",\r\n type: \"number\",\r\n get placeholder(){\r\n return Date.now()\r\n }\r\n },\r\n {\r\n title: \"LargeAsset\",\r\n id: \"assets.large\",\r\n type: \"choice\"\r\n },\r\n {\r\n title: \"SmallAsset\",\r\n id: \"assets.small\",\r\n type: \"choice\"\r\n },\r\n]\r\n\r\nlet inputTextModules\r\nclass InputText extends React.PureComponent {\r\n get modules(){\r\n if(inputTextModules && inputTextModules[0])return inputTextModules\r\n return inputTextModules = [\r\n BDModules.get(e => e.removeKeybind)[0],\r\n BDModules.get(e => e.marginBottom20)[0],\r\n BDModules.get(e => e.defaultMarginh5)[0],\r\n BDModules.get(e => e.colorStandard)[0],\r\n BDModules.get(e => e.size32)[0],\r\n BDModules.get(e => e._horizontal)[0],\r\n BDModules.get(e => e.inputMini)[0],\r\n BDModules.get(e => e.size16 && e.size20)[0],\r\n ]\r\n }\r\n\r\n constructor(props){\r\n super(props)\r\n let setting = this.props.setting\r\n this.state = {\r\n data: this.props.manager.state.data[setting.id]\r\n }\r\n\r\n this.input = {\r\n this.setState({\r\n data: value\r\n })\r\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\r\n this.props.manager.onChange(this, value)\r\n this.lastEdited = Date.now()\r\n }else if(!this.isTiming){\r\n this.isTiming = setTimeout(() => {\r\n this.props.manager.onChange(this, this.state.data)\r\n this.isTiming = null\r\n this.lastEdited = Date.now()\r\n }, 500);\r\n }\r\n }} type=\"text\"/>\r\n }\r\n\r\n render(){\r\n let setting = this.props.setting\r\n\r\n let [\r\n rowModule,\r\n marginModule,\r\n marginModule2,\r\n colorModule,\r\n sizeModule,\r\n flexModule,\r\n inputModule,\r\n sizeModule2,\r\n ] = this.modules\r\n\r\n return (
\r\n
\r\n
\r\n {setting.title}\r\n
\r\n {this.input}\r\n
\r\n \r\n
)\r\n }\r\n}\r\n\r\nlet InputNumberModules\r\nclass InputNumber extends React.PureComponent {\r\n get modules(){\r\n return InputNumberModules || (InputNumberModules = [\r\n BDModules.get(e => e.removeKeybind)[0],\r\n BDModules.get(e => e.marginBottom20)[0],\r\n BDModules.get(e => e.defaultMarginh5)[0],\r\n BDModules.get(e => e.colorStandard)[0],\r\n BDModules.get(e => e.size32)[0],\r\n BDModules.get(e => e._horizontal)[0],\r\n BDModules.get(e => e.inputMini)[0],\r\n BDModules.get(e => e.size16 && e.size20)[0],\r\n BDModules.get(e => e.colorTransparent)[0],\r\n ])\r\n }\r\n\r\n constructor(props){\r\n super(props)\r\n let setting = this.props.setting\r\n this.state = {\r\n data: this.props.manager.state.data[setting.id]\r\n }\r\n\r\n this.input = {\r\n value = value.replace(/[^\\d]+/g, \"\")\r\n if(value == this.state.data){\r\n input.setValue(value)\r\n return\r\n }\r\n\r\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\r\n this.props.manager.onChange(this, value)\r\n this.lastEdited = Date.now()\r\n }else if(!this.isTiming){\r\n this.isTiming = setTimeout(() => {\r\n this.props.manager.onChange(this, this.state.data)\r\n this.isTiming = null\r\n this.lastEdited = Date.now()\r\n }, 500);\r\n }\r\n this.setState({\r\n data: value\r\n })\r\n }} type=\"text\"/>\r\n }\r\n\r\n render(){\r\n let setting = this.props.setting\r\n\r\n let [\r\n rowModule,\r\n marginModule,\r\n marginModule2,\r\n colorModule,\r\n sizeModule,\r\n flexModule,\r\n ] = this.modules\r\n\r\n\r\n return (
\r\n
\r\n
\r\n {setting.title}\r\n
\r\n {this.input}\r\n {setting.id === \"timestamps.start\" ? \r\n {\r\n DiscordNative.clipboard.copy(Date.now()+\"\")\r\n }} color=\"brand\">Copy current timestamp : null}\r\n
\r\n \r\n
)\r\n }\r\n}\r\n\r\nlet InputChoiceModules\r\nclass InputChoice extends React.PureComponent {\r\n constructor(props){\r\n super(props)\r\n let setting = this.props.setting\r\n this.state = {\r\n data: this.props.manager.state.data[setting.id] ? \"asset-\"+this.props.manager.state.data[setting.id] : \"none\"\r\n }\r\n this.props.manager.updateWhenFetched(this)\r\n }\r\n\r\n onChange(data){\r\n let value = data.value\r\n\r\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\r\n this.props.manager.onChange(this, value === \"none\" ? null : value.replace(\"asset-\", \"\"))\r\n this.lastEdited = Date.now()\r\n }else if(!this.isTiming){\r\n this.isTiming = setTimeout(() => {\r\n this.props.manager.onChange(this, this.state.data === \"none\" ? null : this.state.data.replace(\"asset-\", \"\"))\r\n this.isTiming = null\r\n this.lastEdited = Date.now()\r\n }, 500);\r\n }\r\n this.setState({\r\n data: value\r\n })\r\n this.forceUpdate()\r\n }\r\n \r\n get modules(){\r\n return InputChoiceModules || (InputChoiceModules = [\r\n BDModules.get(e => e.removeKeybind)[0],\r\n BDModules.get(e => e.marginBottom20)[0],\r\n BDModules.get(e => e.defaultMarginh5)[0],\r\n BDModules.get(e => e.colorStandard)[0],\r\n BDModules.get(e => e.size32)[0],\r\n BDModules.get(e => e._horizontal)[0]\r\n ])\r\n }\r\n\r\n render(){\r\n let setting = this.props.setting\r\n\r\n let [\r\n rowModule,\r\n marginModule,\r\n marginModule2,\r\n colorModule,\r\n sizeModule,\r\n flexModule\r\n ] = this.modules\r\n \r\n let options = this.props.manager.state.assets.map(e => {\r\n return {\r\n value: \"asset-\"+e.id,\r\n label: e.name\r\n }\r\n })\r\n\r\n options.unshift({\r\n value: \"none\",\r\n label: \"No assets\"\r\n })\r\n\r\n return (
\r\n
\r\n
\r\n {setting.title}\r\n
\r\n \r\n {/*